1. Sơ đồ làm việc
Khi mật khẩu tài khoản Fshare, thí dụ me@yahoo.com, bị thay đổi, Fshare sẽ gởi email xác nhận về địa chỉ trên. Trong email này có ghi mật khẩu mới nhất, chúng ta sẽ dùng mật khẩu này để đăng nhập vào Fshare.
Để không phải định kỳ kiểm tra email, chúng ta sẽ tạo filter chuyển tiếp email của Fshare về mailgun. Ngay khi nhận được email chuyển tiếp, mailgun sẽ chuyển dữ liệu về RPi và RPi sẽ dùng curl để thực hiện việc đổi mật khẩu về mật khẩu cố định.
Tất cả các bước trên đều thực hiện tự động mỗi khi mật khẩu Fshare bị thay đổi.
2. Cài đặt
2A. Tạo email và route trên mailgun để chuyển dữ liệu về RPi
Tạo một địa chỉ email dành cho fshare, thí dụ fshare@pi.ly-le.info
Tiếp theo, tạo route để mailgun chuyển dữ liệu về RPi khi có email gởi đến địa chỉ này
Ở lần đầu cài đặt
Filter Expression: catch_all() Actions: forward (địa chỉ email thường dùng), thí dụ forward('me@pi.ddns.name') Actions: forward (ddns của RPi/trang php xử lý data), thí dụ forward('http://pi.ddns.name/chgpwd.php')
Bấm nút +/- để thêm/bớt actions.
Sau khi hệ thống chạy ổn rồi thì sửa lại
Filter Expression: match_recipient (địa chỉ email dùng chuyển tiếp thư đến mailgun), chính là tài khoản Fshare Actions: forward (ddns của RPi/trang php xử lý data)
2B. Tạo filter chuyển tiếp thư trên Mailserver
Google mail
Trước hết vào Settings – Forwarding and POP/IMAP để thêm địa chỉ chuyển tiếp thư (Add a forwarding address) là fshare@pi.ly-le.info
Tiếp theo vào Settings – Filters – Create a new filter
Yahoo mail
- Bấm lên icon | chọn Settings.
- Bấm Accounts ở cột bên trái.
- Bấm Edit bên cạnh”Yahoo account.”
- Chọn Forward.
- Nhập địa chỉ email để chuyển tiếp và chọn Store and forward
- Bấm Save.
3. Xây dựng dòng lệnh curl đổi mật khẩu
Sau khi đăng nhập, chúng ta có thể vào trang đổi mật khẩu https://www.fshare.vn/change_pass.php
Tương tự như trong bài curl trên RPi, chúng ta tìm được các input sau
<input style="width:200px;" class="field" value="" name="passold" id="passold2" onblur="check_passold();" type="password"> <br> <input style="width:200px;" class="field" name="passnew" id="passnew" onblur="check_passnew();" value="" type="password"> <br> <input style="width:200px;" class="field" name="repeat_passnew" id="repeat_passnew" onblur="check_repeat_passnew();" value="" type="password"> <br> <input class="bt white" name="submit_changepass" value="Gửi" type="submit"> <input class="bt" name="cancel_changepass" value="Hủy" onclick="window.location.href='account.php'" type="button">
Dòng lệnh curl như sau
curl -kL -b cookie.txt -e http://www.fshare.vn/index.php -d "passold=matkhaumoi&passnew=matkhaucodinh&repeat_passnew=matkhaucodinh&submit_changepass=Gửi" https://www.fshare.vn/change_pass.php
4. Tạo trang PHP tiếp nhận dữ liệu từ mailgun và dùng curl gởi yêu cầu thay đổi mật khẩu
Nội dung email xác nhận thay đổi mật khẩu tương tự như sau, trong đó có mật khẩu mới nhất
Tuy nhiên điều chúng ta quan tâm dữ liệu đã được mailgun phân tích và chuyển cho RPi (thí dụ bằng cách gọi trang http://pi.ddns.name/chgpwd.php), trong đó chúng ta cần $_POST[‘sender’] và $_POST[‘body-plain’]
Nội dung file chgpwd.php như sau
<? $fs_acc = 'me@yahoo.com';//tài khoản fshare $fs_pwd = 'khongco';//mật khẩu fshare $fs_support='support@fshare.vn'; //mẫu regular expression tìm mật khẩu $pw_pat = '/Mật khẩu mới của bạn là : (.+) $/im'; $cookie = 'cookie.txt'; $fshare = 'www.fshare.vn'; //chỉ xử lý thư gởi từ fshare if ($_POST['sender'] != $fs_support) exit; if (preg_match($pw_pat, $_POST['body-plain'], $opw)){//tìm thấy mật khẩu mới //mật khẩu mới $opw = $opw[1]; if ($opw == $fs_pwd) exit;//mật khẩu không thay đổi, không làm gì! //dòng lệnh curl đăng nhập vào fshare $curl_login = "curl -kL -c $cookie -b $cookie -e http://$fshare/index.php -d \"login_useremail=$fs_acc&login_password=$opw&url_refe=http://$fshare/index.php&auto_login=1\" https://$fshare/login.php"; //đăng nhập fshare $ret = shell_exec($curl_login); if (strpos($ret, 'VIP.gif')===false){ mail('me@gmail.com', 'Đổi mật khẩu tài khoản FShare', 'Lỗi: Không thể đăng nhập!'); } //dòng lệnh curl đổi mật khẩu $curl_chgpwd = "curl -kL -b cookie.txt -e http://$fshare/index.php -d \"passold=$opw&passnew=$fs_pwd&repeat_passnew=$fs_pwd&submit_changepass=Gửi\" https://$fshare/change_pass.php"; //đổi về mật khẩu cũ $ret = shell_exec($curl_chgpwd); if (strpos($p, "Thay đổi mật khẩu thành công")===false){ mail('me@gmail.com', 'Đổi mật khẩu tài khoản FShare', 'Lỗi: Không thể đổi mật khẩu!'); } } ?>
Các bước đăng nhập và đổi mật khẩu có thể gặp lỗi (do đường truyền internet hay do FShare trục trặc), khi đó chương trình gởi email báo lỗi về địa chỉ thường dùng để có thể đổi mật khẩu thủ công.