SMSowe kody autoryzacyjne a Safari
10 grudnia 2016
Posted in mac
Tagged as Automator, mac, Messages, Safari
Na dniach mBank zapowiedział zastąpienie kodów SMSowych autoryzacją w aplikacji mobilnej. Osobiście nie uważam, aby to było dobre rozwiązanie. Obecnie moje Wiadomości synchronizują się między wszystkimi urządzeniami. Otrzymane kody SMSowe mogę odbierać na iPhone, iPadzie, MacBooku a także Apple Watchu.
W momencie, gdy wykonuję jakikolwiek przelew to nie sięgam po telefon, a jedynie otwieram wiadomość przychodzącą i kopiuje z niej do schowka kod. Uważam, że jest to o wiele wygodniejsze niż odrywanie się od aktualnie używanego urządzenia i szukanie iPhone’a w celu potwierdzenia. Ponadto ma jeszcze jedną zaletę, gdy zapomnimy zabrać ze sobą iPhone’a to wciąż będziemy mogli wykonać przelewy nawet za pomocą samego Apple Watcha, jeśli tylko znajdziemy się w zasięgu znanego Wi-Fi.
Postanowiłem sobie uprościć całą procedurę. W pierwszym założeniu było, aby kody autoryzacyjne automatycznie trafiały do schowka w momencie odbioru. Jednak aplikacja Wiadomości jest trochę upośledzona – z poziomu AppleScript nie ma możliwości obsłużenia akcji dotyczących SMSów. Apple Events obsługuje jedynie przetwarzanie iMessages. Znalazłem jednak na to pewne obejście.
Poprzez prosty skrypt shellowy można połączyć się bezpośrednio z bazą programu Messages i wydobyć z niej potrzebne dane. Baza ta znajduje się w katalogu użytkownika w pliku: ~/Library/Messages/chat.db
. Jest to baza danych w formacie SQLite. Możemy podłączyć się do niej klientem i wysyłać kwerendy w języku SQL.
Zrobiłem dwie usługi jedną dla mBanku, a drugą dla konta w Inteligo. Są one dostępne jedynie w Safari i działają na takiej zasadzie, że wyszukują we wspomnianej bazie ostatniego SMSa z kodem, następnie wycinają z niego kod i przekazują go do AppleScriptu, którego zadaniem jest wklejenie go w aktywne pole.
Usługę wyzwala się górnego paska klikając w Safari -> Usługi -> Nazwa usługi.
Utworzenie usługi
Uruchamiamy Automatora i tworzymy nową Usługę. Należy wybrać, że usługa nie będzie miała danych wejściowych, a jako aplikacja w której ma być dostępna to Safari. Oczywiście można wybrać wszystkie aplikacje jeśli chcemy korzystać z niej także w innych przeglądarkach. Następnie do usługi należy dodać dwie akcje. Uruchomienie skryptu shellowego oraz uruchomienie skryptu AppleScript.
Pierwsza część posłuży do odczytania SMSa z bazy programu Wiadomości.
Skrypt dla mBanku:
#!/bin/zsh LAST_MBANK_CODE=$(sqlite3 ~/Library/Messages/chat.db "select text from message where handle_id in (select rowid from handle where id = '3388') and text like '%haslo:%' order by date desc limit 1;"|sed -e 's/^\(.*\) haslo: \(.*\) mBank.$/\2/'); echo $LAST_MBANK_CODE
Skrypt dla Inteligo:
#!/bin/zsh LAST_INTELIGO_CODE=$(sqlite3 ~/Library/Messages/chat.db "select text from message where handle_id in (select rowid from handle where id = 'inteligo') and text like '%Kod SMS nr%' order by date desc limit 1;"|sed -e 's/^\(.*\) Kod SMS nr \([0-9]*\): \(.*\)$/\3/'); echo $LAST_INTELIGO_CODE
Natomiast AppleScript wpisujący odczytany kod w pole tekstowe to:
on run {input, parameters} tell application "System Events" set my_string to input keystroke my_string end tell end run
Całość w Automatorze powinna wyglądać tak:
UPDATE
Skrypt dla Banku Millenium:
#!/bin/zsh LAST_MILLENIUM_CODE=$(sqlite3 ~/Library/Messages/chat.db "select text from message where handle_id in (select rowid from handle where id = 'haslosms') and text like '%HasloSMS:%' order by date desc limit 1;"|grep '^HasloSMS'|sed -e 's/^HasloSMS: \([0-9]*\)$/\1/'); echo $LAST_MILLENIUM_CODE