SMSowe kody autoryzacyjne a 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.

safari-service

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:

automator

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*