Trotz aller Kontroversen bin ich nach wie vor ein sehr großer Fan des Passwortmanagers 1Password.
Vor etwas mehr als zwei Jahren hatte ich auf die verfügbaren Tastaturkürzel der App aufmerksam gemacht und gezeigt, wie man sich über 1Password mini relativ einfach in Webseiten und Apps einloggen kann.
Während das Einloggen auf Webseiten (meistens) mit einem nur einem Klick oder Sprachbefehl erledigt ist, sind zum Einloggen in eine App schon mehrere Schritte notwendig.
Um diesen Workflow abzukürzen, hatte unser geschätzter Kollege Alexander vor gut zwei Wochen ein erstes Video-Tutorial erstellt, in dem er erklärt, wie man sich mit Hilfe von Keyboard Maestro und nur einem Mausklick, einem Shortcut oder auch nur durch das Starten einer App in Accounts einloggen kann.
Damit dieses erste Tutorial problemlos funktioniert, muss 1Password mini allerdings ständig entsperrt sein. Ist es das nicht, was bei vielen Nutzern der Standardfall sein sollte, funktioniert das Makro nicht und man muss sich etwas Neues einfallen lassen. Das hat Alexander auch getan und mit Hilfe des Keyboard Maestro Forums eine Lösung gefunden, die auf nur einem einzigen AppleScript basiert 😲
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
on run
set searchTerm to "icloud"
tell application "System Events"
set preClip to (the clipboard) as text
set elements to every UI element whose creator type is "1Ph*"
if elements is {} then
log "1Password Mini is not running"
return false
end if
set mini to (first item of elements)
set miniName to short name of mini
log miniName & " is running as " & name of mini
set isLocked to my isOPMiniLocked(miniName)
open location "x-onepassword-helper://search/" & searchTerm
if isLocked then
if not (my waitForUnlock(miniName, 10)) then
return false
end if
end if
tell its UI element (name of mini)
set frontmost to true
set i to 0
repeat
try
if (focused of text field 1 of window 1) is true then
tell text field 1 of window 1
set value to searchTerm
perform action "AXConfirm"
end tell
delay 1.0
keystroke "c" using {command down, shift down}
delay 0.5
set thePass to (the clipboard) as text
exit repeat
end if
end try
delay 0.1
set i to i + 1
if i > 100 then
return false
end if
end repeat
tell application "App Store" to activate
delay 0.5
keystroke thePass
key code 36
set the clipboard to preClip
end tell
end tell
end run
on isOPMiniLocked(miniName)
tell application "System Events"
tell application process miniName
perform action "AXPress" of menu bar item 1 of menu bar 1
set isLocked to (subrole of text field 1 of window 1 is "AXSecureTextField")
delay 0.1
key code 53 -- Escape key to close 1PMini window
if isLocked then
log "1Password Mini is locked"
return true
end if
log "1Password Mini is unlocked"
return false
end tell
end tell
end isOPMiniLocked
on waitForUnlock(pProcessName, pMaxTimeSec)
local startTime, elapTime, errMsg
set startTime to current application's NSDate's |date|()
log startTime
tell application "System Events"
repeat
set elapTime to (-(round ((startTime's timeIntervalSinceNow()) * 100)) / 100.0)
if (elapTime > pMaxTimeSec) then
set errMsg to "Max Time of " & pMaxTimeSec & " seconds exceeded waiting for " & pProcessName
log errMsg
return false
end if
try
set roleMode to (subrole of text field 1 of window 1) of (application process pProcessName)
if roleMode is "AXSearchField" then
return true
end if
end try
delay 0.1
end repeat
end tell
end waitForUnlock
Ohne jetzt in die Tiefen des Codes einzusteigen, muss gesagt werden, dass dieses Skript nur bedingt universell verwendbar ist. Je nachdem in welche App man sich einloggen möchte, muss das AppleScript an zwei Stellen angepasst werden.
Zum einen direkt am Anfang bei der Suche nach dem in 1Password hinterlegten Login. Zum anderen bei der App, für die ein Login benötigt wird.
Ist nun alles gut?! Mitnichten, denn für Leute wie mich, die eines dieser neumodischen MacBook Pro mit Touch ID verwenden, funktioniert das AppleScript nicht; zumindest wenn man Touch ID zum Entsperren von 1Password verwendet.
Aber auch hier kamen Alexander und ich nach einigen Überlegungen zum Ziel: Keyboard Maestro hat nämlich den Vorteil, dass man Bedingungen an am Bildschirm angezeigte Fenster bzw. Grafiken knüpfen kann.
Somit ist das vorherige AppleScript jetzt in zwei Teile zerhackt, funktioniert aber auch mit Touch ID 😎
Auch hier gilt wieder: das Makro ist nicht universell verwendbar, sondern muss für jeden App-Login an drei Stellen angepasst werden. Zu den aus dem ersten AppleScript bekannten Stellen kommt jetzt noch eine Grafik hinzu, die den gefundenen Login in 1Password mini identifiziert.
Zum finalen Anzeigen bzw. Nutzen der verschiedenen Logins empfiehlt es sich auf die von Keyboard Maestro zur Verfügung gestellten globalen Makro Paletten zu setzen. Hier genügt dann im Endeffekt ein Mausklick und man ist in App X oder App Y eingeloggt.
Um jetzt das ganze Prozedere besser nachverfolgen und auch live in Aktion sehen zu können, hatte Alexander vor ein paar Tagen ein zweites Video erstellt, das das erste Tutorial ergänzt bzw. aktualisiert.
Viel Spaß beim Anschauen 📼
youtube/watch?v=_WVz_Oq4sAE
Die beiden hier vorgestellten Makros können übrigens hier heruntergeladen werden.