[FreePBX] Fixed – Please enable DTLS for Media Encryption field first before enabling DTLS parameters –

Khi mình setting nâng cao cho Extension chan_sip, chọn yes DTLS nhưng hiện thông báo “Please enable DTLS for Media Encryption field first before enabling DTLS parameters“, kiểm tra lại thì không thấy Media Encryption trên giao diện.

Search thử trên mạng thì có vài bài viết nhưng cũng chưa được giải quyết. Lỗi này do update cert manager.

Chỉ chan_pjsip có Media Ecryption

Đi sâu hơn của vấn đề thì update này cho cài đặt chan_pjsip nhưng bản update bị degraded đến setting chan_sip vì vậy khi setting chan_sip sẽ bị lỗi mà không thể tìm thấy Media Ecryption

Nếu không thể setting được yes DTLS sẽ không thể thực hiện được cuộc gọi qua webrtc.

Vì vậy, có 2 solutions mình giải quyết tình huống này:

  1. Inspect browser, edit no to yes, enter, submit :)), hơi thủ công nhưng hiệu quả=)))

2. Edit module cert manager.

Vì mình chỉ cần chan_sip nên mình không care chan_pjsip vì vậy mình comment out toàn bộ javascript xử lý đoạn đó.

SSH server với path:

/var/www/html/admin/modules/certman/assets/js/views

Comment out all file extensionsHook.js

Comment toàn bộ đoạn code trong file.

Ngon rồi, bạn tự test đi nha. ❤

p/s: nếu bạn muốn xịn hơn thì post bug cho freebpx hoặc nghiên cứu đoạn js extensionsHook.js và edit đúng với advanced setting của chan_pjsip. Vì mình không cần tới chan_pjsip nên mình không để thời gian nghĩ vào việc đó =)))

[Java] Đổi Unix Time sang ngày giờ phút giây LocalDateTime

Chuyển unix time sang ngày giờ phút giây

Đoạn code dưới đây sẽ giúp bạn, ngày giờ được đổi sang dạng LocalDateTime với TimeZone là TimeZone của máy chủ đó.

 /**
     * Input: 1609079295.435156
     * Output: 2020-12-27T21:28:15
     * @param dateUnix
     */
    public LocalDateTime convertUnixToDate(String dateUnix) {
        
        Double d = Double.parseDouble(dateUnix);
        long unixSeconds = d.longValue();
        // convert seconds to milliseconds
        Date date = new java.util.Date(unixSeconds*1000L);

        LocalDateTime localDateTime =  date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();

        System.out.println(localDateTime);
        return localDateTime;
    }

[Java] Đổi ngày-tháng-năm giờ:phút:giây sang giờ của UNIX

Đoạn code phía dưới sẽ giúp bạn làm việc đó 😀

/**
     * Data sample input: 2020-10-06 11:16:21
     * Output:1601957781
     * Check:https://www.epochconverter.com/
     * @param time
     * @return
     */
    public long timeConversion(String time) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH); //Specify your locale
        long unixTime = 0;
        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+7:00")); //Specify your timezone
        try {
            unixTime = dateFormat.parse(time).getTime();
            unixTime = unixTime / 1000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return unixTime;
    }

[Git] Xoá tận gốc rễ một file đã từng push lên github

Chào các bạn,

Blog chắc bị mốc meo mất rồi. Mình lười viết quá ý, hôm nay rảnh thứ 7 nên ngó qua blog xem tình hình mọi người vào blog có nhiều không 😀

Đều đều 100 views/ngày là vui rồi =)). Lại thấy chủ đề Git là mọi người xem nhiều nhất nên tự dưng lại nghĩ ra một vấn đề mà hôm trước đồng nghiệp cũ hỏi là làm thế nào để xoá tận gốc file mà nó đã từng commitpush lên github/gitlab/… file đó lại ở nhiều nhánh nữa.

Thấy đồng nghiệp hỏi câu này cũng hay nên bắt đầu mò tìm, thực ra thì cũng có người trong cộng đồng họ cũng gặp phải vấn đề này rồi. Mình thì cũng đọc lại của họ rồi giờ chia sẻ lại với mọi người đây.

Tình huống là mình có 1 project demo “Hello World” như hình:

Project demo delete file in git

3 branch: master, dev1, dev2. Cả 3 branchs này đều đang chứa 1 file ActivationTool.zip. File này vô tình mình đã tải lên github và giờ muốn xoá tận gốc (xoá hết ở các commit, các branch) file này.

File ActivationTool.zip lỡ tay push lên cả 3 branch.

Đầu tiên mình nghĩ là click chuột phải rồi xoá file đó đi rồi push lên github thêm 1 commit nữa là được (2 năm trước sẽ nghĩ vậy =))) ).

Xoá file và push thêm 1 commit nữa ở master

Ơ, nào đâu có dễ cưng. Git nó tạo commit là nó đã lưu lại rồi. Ông nào muốn lấy file này chỉ cần reset lùi commit là lấy lại được file thôi, còn chưa nói tới các branchs khác cũng đang có file này nữa. Không làm thế này được. Vậy làm thế nào để trị trường hợp này.

Đây đây, các bạn sử dụng đoạn code sau:

Bước 1: Xoá file ở local

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
  --prune-empty --tag-name-filter cat -- --all

PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA: đường dẫn của file cần xoá tận gốc
Có những file nằm các thư mục khác nhau, nên cần trỏ rõ path chính xác, ví dụ: 
src/main/resources/application-dev.properties

Áp dụng:

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch ActivationTool.zip" \
  --prune-empty --tag-name-filter cat -- --all

Sau khi thực hiện câu lệnh trên thì git nó sẽ xoá toàn bộ các file ở local trong các branch và các commit rồi.

Bước 2: Xoá ở remote (hay hiểu là trên github, gitlab, …)

Để xoá được trên remote thì cần push force. Force là ép remote theo cái mới mất mà client gửi lên. Khi dùng cờ force để push này các bạn phải quan sát, kiểm tra lại xem có đúng file các bạn muốn xoá không nhé. Không là toang đấy. =))) Sao lại toang hả? Nó force trên github thì nó xoá hết file ở các commit, branchs. Nhầm sang file quan trọng thì sẽ ra sao? =)))

  1. Lệnh push lên remote:
git push origin --force --all

2. Đối với các phiên bản mà đã release thì cần force cho các tags ở các file phiên bản nữa nhé.

git push origin --force --tags

Vậy là ngon rồi nhé :3

Github: https://github.com/khiemnd5/demo_delete_file_in_git

Tham khảo:

https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/removing-sensitive-data-from-a-repository

[JS] Cách kiểm tra microphone cho phép hoặc từ chối trên trình duyệt.

Đoạn code sau giúp bạn kiểm tra xem browser cho phép hay từ chối trên trình duyệt của bạn.

function checkMicrophone() {
    navigator.getUserMedia = navigator.getUserMedia ||
        navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia;

    if (navigator.getUserMedia) {
        navigator.getUserMedia({ audio: true, video: false },
            function(stream) {
                console.log("Đã được phép truy cập Microphone");
            },
            function(err) {
                alert("Microphone cần được cho phép thì mới có thể gọi được " + err.name);
            }
        );
    } else {
        alert("Trình duyệt không hỗ trợ getUserMedia. Vui lòng update trình duyệt mới nhất.");
    }
}

Đoạn code trên các bạn copy vào file js và gọi trong phần ready nhé.

[apache-httpd] Cấu hình trỏ domain vào localhost port và redirect http sang https trên vps

Chào các bạn, mình sẽ hướng dẫn các bạn cấu hình như sau:

Môi trường: Centos 7

Bước 1: Truy cập nơi chứa config của httpd

cd /etc/httpd/conf.d

Bước 2: Tạo file cấu hình của domain hoặc thêm vào file cấu hình có sẵn đoạn code sau:

<VirtualHost *:80>
ServerName xxxabc.com
Redirect / https://xxxabc.com/
</VirtualHost>

<VirtualHost *:443>
ServerName xxxabc.com:443
ProxyPreserveHost On
ProxyRequests Off
LogLevel warn
SSLEngine on
SetEnvIf User-Agent ‘.*MSIE.*’nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
ServerAlias xxxabc.com
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/xxxabc.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxxabc.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/xxxabc.com/chain.pem

ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>

  1. Bạn thay xxxabc.com thành domain của bạn. Lưu ý để có được https thì trước đó các bạn cần có được ssl đã nhé. Không có ssl thì không lên https được đâu :D. Mình đang dùng free của letsencrypt.
  2. localhost:8081 là đích mà domain mình sẽ trỏ tới.

Bước 3: Lưu lại file cấu hình và restart lại httpd thôi.

sudo systemctl restart httpd

Ngon rồi 😀

Cách xoá bỏ thông báo trên cửa sổ windows

k013qmmbsy6dwal3alo8lw

Các bạn thấy thông báo nó hiện lên góc màn hình khó chịu lắm đúng ko?

Chưa biết phải tắt như nào?

Việc của bạn là vào đường dẫn chrome://settings/content/notifications  (mở tab mới, copy link, paste và enter) sau để xoá nó đi.

Tìm website private-show.live ở trong ảnh trên, nhấn nút “3 chấm” và chọn xoá nó đi

Chúc các bạn thành công!

 

Nguồn: J2Team

 

Cách sửa báo sạc chập chờn khi cắm cáp iphone vào macbook

Trước khi tìm được cách fix thì mình có mua cable usb xịn các kiểu nhưng vẫn bị.

Buồn lắm, định đi thay chân usb mới cơ =)))))

Rất đơn giản.

  1. Rút cable ra khỏi macbook
  2. Bạn mở terminal trên macbook và paste dòng lệnh sau:

sudo killall -STOP -c usbd

Rồi điền password của macbook(nếu có) là được.

https://prnt.sc/rcirx6

Cảm ơn các bạn đã quan tâm.

Nếu được thì các bạn comment nha 😀

 

 

Fixed FreePbx Asterisk: Sox needs to be installed File:/var/www/html/admin/libraries/media/Media/Media.php:278

Reason: Miss lib

Os: Centos 7.6

FreePBX: 15

Asterisk: 16

Fixed:

yum -y install lynx tftp-server \
ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel \
audiofile-devel gtk2-devel subversion kernel-devel git crontabs cronie \
cronie-anacron wget vim uuid-devel net-tools gnutls-devel \
texinfo gstreamer-python-devel.x86_64

[Java] Fix java.io.IOException: Server returned HTTP response code: 403 for URL … on production

Mình bị lỗi này khi download 1 ảnh trên môi trường production sử dụng url.openStream()

Mặc dù khi mở từ browser thì link ảnh đó vẫn hoạt động bình thường.

Nguyên nhân là không có User-Agent.

Sau đó mình thay đổi cách lấy ảnh, sử dụng HttpURLConnection để set thuộc tính User-Agent ở đó.

URL urlImage = new URL(strUrlImage);// strUrlImage là link ảnh của bạn
// fix : java.io.IOException: Server returned HTTP response code: 403 for URL
HttpURLConnection httpURLConnection = (HttpURLConnection) urlImage.openConnection();
httpURLConnection.addRequestProperty("User-Agent", "Mozilla/4.0");

BufferedImage bodyAnimalImage = ImageIO.read(httpURLConnection.getInputStream());

Vậy là hết lỗi 403 rồi. Bạn thử xem được không nhé 😉