Hallo zusammen,
ich nutze als Passwortmanager ein dmenu-Skript, welches lpcli aufruft (Kommandozeilenversion von Lesspass) und die nötigen Daten (Nutzername und Passwort) mittels xdotool in die Felder reinschreibt.
Super Sache! Brauche kein Plugin, geht in jedem Programm, …
Bei Lesspass kann man auswählen, was das Passwort beinhalten soll: Kleinbuchstaben, Großbuchstaben, Zahlen, Sonderzeichen. Und es gibt einen Zähler, den man raufsetzen kann, wodurch bei gleichem Eingang (Hauptpasswort, Nutzername und Internetadresse) ein komplett neues Passwort generiert wird.
Nun gibt es aber eben so Seiten, die Sonderzeichen zwar verlangen, aber eben nur eine begrenzte Auswahl. Daher ist mein Gedanke, dass ich ein Skript schreibe, welches ein generiertes Passwort anschaut, prüft, ob ausschließlich die erlaubten Zeichen enthält und den Zähler so lange hochsetzt, bis ein passendes Passwort herausgekommen ist.
Wie könnte / sollte dafür in Bash die if-Abfrage aussehen? Ich bin kein großartiger Programmierer, muss mir so etwas immer zusammensuchen. Aktuell sieht sie so aus und es tut nicht, was es soll.
#!/bin/sh
counter=1
passwordlength=35
options="-luds"
DMENU_PASS="dmenu -P"
config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/dmenu-lesspass"
items_cache="$config_dir/items"
mkdir -p "$config_dir"
touch "$items_cache"
item=$(echo -e "$(cat "$items_cache")" | dmenu -p "Item: ") || exit
master=$(echo | $DMENU_PASS -p "Master Password: ") || exit
while true
do
password="$(echo "$master" | lpcli $(echo "$item") $options -n $passwordlength -c $counter -p | sed '$!d')"
if [[ $password =~ ^['@''$''!''%''*''?''§''#'',''.''-''_'';'0-9A-Za-z]+$ ]]
then
echo "$counter"
echo "$password"
break
fi
counter=$((counter+1))
done
Das spuckt mir dann den Zähler aus, den ich in mein Skript für die spezielle Webseite übernehme (über Switch-Cases) und das Passwort.
Problem ist, dass das letztlich ausgespuckte Passwort neben den angegeben noch viele weitere Sonderzeichen enthält. Die erlaubt die Webseite dann aber nicht.
Bitte also um Hilfe, ich scheitere hier… Danke!
edit: Warum wird der Code denn nicht gescheit angezeigt?