diff --git a/misc/userscripts/password_fill b/misc/userscripts/password_fill index 15114044d..7ce989902 100755 --- a/misc/userscripts/password_fill +++ b/misc/userscripts/password_fill @@ -62,9 +62,41 @@ simplify_url() { simple_url="${1##*://}" # remove protocoll specification simple_url="${simple_url%%\?*}" # remove GET parameters simple_url="${simple_url%%/*}" # remove directory path + simple_url="${simple_url%:*}" # remove port simple_url="${simple_url##www.}" # remove www. subdomain } +# no_entries_found() is called if the first query_entries() call did not find +# any matching entries. Multiple implementations are possible: +# The easiest behaviour is to quit: +#no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +#} +# But you could also fill the files array with all entries from your pass db +# if the first db query did not find anything +# no_entries_found() { +# if [ 0 -eq "${#files[@]}" ] ; then +# query_entries "" +# if [ 0 -eq "${#files[@]}" ] ; then +# die "No entry found for »$simple_url«" +# fi +# fi +# } + +# Another beahviour is to drop another level of subdomains until search hits +# are found: +no_entries_found() { + while [ 0 -eq "${#files[@]}" ] && [ -n "$simple_url" ]; do + simple_url=$(sed 's,^[^.]*\.,,' <<< "$simple_url") + query_entries "$simple_url" + #die "No entry found for »$simple_url«" + done + if [ 0 -eq "${#files[@]}" ] ; then + die "No entry found for »$simple_url«" + fi +} # Backend implementations tell, how the actual password store is accessed. # Right now, there is only one fully functional password backend, namely for @@ -87,7 +119,7 @@ reset_backend() { # choose_entry() is expected to choose one entry from the array $files and # write it to the variable $file. choose_entry() { - choose_entry_random + choose_entry_zenity } # The default implementation chooses a random entry from the array. So if there @@ -147,7 +179,8 @@ choose_entry_zenity_radio() { # configuration options: match_filename=1 # whether allowing entry match by filepath -match_line=1 # whether allowing entry match by URL-Pattern in file +match_line=0 # whether allowing entry match by URL-Pattern in file + # Note: match_line=1 gets very slow, even for small password stores! match_line_pattern='^url: .*' # applied using grep -iE user_pattern='^(user|username): ' @@ -213,17 +246,17 @@ reset_backend pass_backend # load configuration QUTE_CONFIG_DIR=${QUTE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/qutebrowser/} -PWFILL_CONFIG=${PFILL_CONFIG:-${QUTE_CONFIG_DIR}/password_fill_rc} -if [ -f "$CONFIG_FILE" ] ; then - source "$CONFIG_FILE" +PWFILL_CONFIG=${PWFILL_CONFIG:-${QUTE_CONFIG_DIR}/password_fill_rc} +if [ -f "$PWFILL_CONFIG" ] ; then + source "$PWFILL_CONFIG" fi init simplify_url "$QUTE_URL" query_entries "${simple_url}" -if [ 0 -eq "${#files[@]}" ] ; then - die "No entry found for »$simple_url«" -fi +no_entries_found +# remove duplicates +mapfile -t files < <(printf "%s\n" "${files[@]}" | sort | uniq ) choose_entry if [ -z "$file" ] ; then # choose_entry didn't want any of these entries @@ -232,6 +265,7 @@ fi open_entry "$file" #username="$(date)" #password="XYZ" +#msg "$username, ${#password}" [ -n "$username" ] || die "Username not set in entry $file" [ -n "$password" ] || die "Password not set in entry $file"