m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/contrib/dmenu
diff options
context:
space:
mode:
authorMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2020-05-31 12:17:41 +0200
committerMarcin Chrzanowski <marcin.j.chrzanowski@gmail.com>2020-05-31 12:17:41 +0200
commitf2ed316ed00b4cd19c63f5c8af1130810eac18f0 (patch)
treefd07c9a9a639c9ae9c223e8f3088d61b3564092a /contrib/dmenu
parent07b169ec32ad6961ed8625a0b932a663abcb01d2 (diff)
Add support for pass-otp in passmenu
Diffstat (limited to 'contrib/dmenu')
-rwxr-xr-xcontrib/dmenu/passmenu38
1 files changed, 32 insertions, 6 deletions
diff --git a/contrib/dmenu/passmenu b/contrib/dmenu/passmenu
index 83268bc..0bb9d2b 100755
--- a/contrib/dmenu/passmenu
+++ b/contrib/dmenu/passmenu
@@ -3,23 +3,49 @@
shopt -s nullglob globstar
typeit=0
-if [[ $1 == "--type" ]]; then
- typeit=1
- shift
-fi
+otp=0
+infer_otp=0
+otp_pattern=""
+while [[ $# -gt 0 ]]; do
+ argument="$1"
+ shift
+ case $argument in
+ --type) typeit=1 ;;
+ --otp) otp=1 ;;
+ --infer-otp) infer_otp=1 ;;
+ --otp-pattern) otp_pattern="$1"; shift ;;
+ esac
+done
prefix=${PASSWORD_STORE_DIR-~/.password-store}
password_files=( "$prefix"/**/*.gpg )
password_files=( "${password_files[@]#"$prefix"/}" )
password_files=( "${password_files[@]%.gpg}" )
+if [[ $otp -eq 1 ]]; then
+ filtered_files=()
+ for file in "${password_files[@]}"; do
+ [[ "$file" =~ $otp_pattern ]] && filtered_files+=("$file")
+ done
+ password_files=(${filtered_files[@]})
+fi
+
password=$(printf '%s\n' "${password_files[@]}" | dmenu "$@")
[[ -n $password ]] || exit
+if [[ $infer_otp -eq 1 ]]; then
+ [[ "$password" =~ $otp_pattern ]] && otp=1
+fi
+
+otp_arg=''
+if [[ $otp -eq 1 ]]; then
+ otp_arg='otp'
+fi
+
if [[ $typeit -eq 0 ]]; then
- pass show -c "$password" 2>/dev/null
+ pass $otp_arg show -c "$password" 2>/dev/null
else
- pass show "$password" | { IFS= read -r pass; printf %s "$pass"; } |
+ pass $otp_arg show "$password" | { IFS= read -r pass; printf %s "$pass"; } |
xdotool type --clearmodifiers --file -
fi