Bash script for copying and autotyping data from password-store, gopass or prs.

add prs support #2

merged opened by jcg.re targeting main from push-vwswylplsrxo
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:cposd2qe5gzl2nvkbxqiupy5/sh.tangled.repo.pull/3m47eqaojvy22
+25 -15
Diff #1
+9 -8
README.md
··· 2 2 3 3 [![tangled](https://img.shields.io/badge/repository-tangled-blue)](https://tangled.org/@jcg.re/tessen) 4 4 5 - `tessen` is a bash script that can autotype and copy data from [password-store][1] and [gopass][2] 6 - files. A wayland native dmenu is required to use tessen and the following dmenu backends are 7 - recognized 5 + `tessen` is a bash script that can autotype and copy data from [password-store][1], [gopass][2] 6 + and [prs][36]. A wayland native dmenu is required to use tessen and the following dmenu backends 7 + are recognized 8 8 9 9 - [fuzzel][4] 10 10 - [tofi][15] ··· 24 24 25 25 ### Why use `tessen`? 26 26 27 - - `tessen` can autotype or copy (or do both at the same time!) your password store and gopass data 28 - including all of your key-value pair data 27 + - `tessen` can autotype or copy (or do both at the same time!) your password store, gopass and prs 28 + data including all of your key-value pair data 29 29 30 30 From what I've observed, most scripts out there do not autotype and copy all of your key-value 31 31 pair data. They also do not offer choices about autotyping or copying data with the same ··· 51 51 52 52 - [bash][16] 53 53 54 - - at least one pass backend is needed - either [password-store][1] or [gopass][2] 54 + - at least one pass backend is needed - either [password-store][1], [gopass][2] or [prs][36] 55 55 56 56 - at least one Wayland native dmenu backend, preferably [fuzzel][4], or [tofi][15], [bemenu][5], 57 57 [yofi][32], [wofi][6], [rofi][3] ··· 130 130 131 131 ## Features 132 132 133 - - autotype or copy (or both at the same time!) data, including all valid key-value pairs, in pass 134 - and gopass 133 + - autotype or copy (or both at the same time!) data, including all valid key-value pairs, in pass, 134 + gopass and prs 135 135 - generate TOTP/HOTP 136 136 - open URLs 137 137 - use custom values for `user`, `password`, `url`, `autotype` keys ··· 226 226 [33]: https://social.treehouse.systems/@psykose/109967460650885493 227 227 [34]: https://pkgs.alpinelinux.org/packages?name=tessen 228 228 [35]: https://search.nixos.org/packages?query=tessen 229 + [36]: https://timvisee.com/projects/prs/
+1 -1
config
··· 4 4 # configuration file for tessen 5 5 # place this file in $XDG_CONFIG_HOME/tessen/config 6 6 7 - # the default pass program to use - pass or gopass 7 + # the default pass program to use - pass, gopass or prs 8 8 # pass_backend="pass" 9 9 10 10 # the default dmenu backend program to use - rofi, fuzzel, bemenu, rofi, or dmenu
+15 -6
tessen
··· 100 100 if [[ ${#passdata[@]} -eq 0 ]]; then 101 101 _die "the selected file is empty" 102 102 fi 103 + elif [[ $_PASS_BACKEND == "prs" ]]; then 104 + mapfile -t passdata < <(prs show --quiet "$_TSN_PASSFILE") 105 + if [[ ${#passdata[@]} -eq 0 ]]; then 106 + _die "the selected file is empty" 107 + fi 103 108 elif [[ $_PASS_BACKEND == "gopass" ]]; then 104 109 # the output from gopass show -n -f that prints the first line and the 105 110 # newline before EOF doesn't use file descriptors but is printed only when ··· 314 319 315 320 if [[ $_PASS_BACKEND == "pass" ]]; then 316 321 tmp_otp="$(pass otp "$_TSN_PASSFILE")" 322 + elif [[ $_PASS_BACKEND == "prs" ]]; then 323 + tmp_otp="$(prs otp show --quiet "$_TSN_PASSFILE")" 317 324 elif [[ $_PASS_BACKEND == "gopass" ]]; then 318 325 tmp_otp="$(gopass otp -o "$_TSN_PASSFILE")" 319 326 fi ··· 394 401 printf "%s\n" "invalid clipboard timeout value in PASSWORD_STORE_CLIP_TIME" >&2 395 402 return 1 396 403 fi 404 + elif [[ $_PASS_BACKEND == "prs" ]]; then 405 + tsn_cliptime="20" 397 406 elif [[ $_PASS_BACKEND == "gopass" ]]; then 398 407 tsn_cliptime="$(gopass config core.cliptimeout)" 399 408 tsn_cliptime="${tsn_cliptime##*: }" ··· 430 439 431 440 validate_pass_backend() { 432 441 if ! is_installed "$1"; then 433 - _die "please install a valid password store backend: pass | gopass" 442 + _die "please install a valid password store backend: pass | gopass | prs" 434 443 fi 435 - if [[ $1 == "pass" ]] || [[ $1 == "gopass" ]]; then 444 + if [[ $1 == "pass" ]] || [[ $1 == "gopass" ]] || [[ $1 == "prs" ]]; then 436 445 _PASS_BACKEND="$1" 437 446 else 438 - _die "please specify a valid password store backend: pass | gopass" 447 + _die "please specify a valid password store backend: pass | gopass | prs" 439 448 fi 440 449 } 441 450 ··· 526 535 } 527 536 528 537 find_pass_backend() { 529 - local -a tmp_pass_arr=('pass' 'gopass') 538 + local -a tmp_pass_arr=('pass' 'gopass' 'prs') 530 539 local idx 531 540 532 541 for idx in "${tmp_pass_arr[@]}"; do ··· 536 545 fi 537 546 done 538 547 if [[ -z $_PASS_BACKEND ]]; then 539 - _die "please install a valid password store backend: pass | gopass" 548 + _die "please install a valid password store backend: pass | gopass | prs" 540 549 fi 541 550 542 551 unset -v idx tmp_pass_arr ··· 811 820 fi 812 821 813 822 trap '_clear' EXIT TERM INT 814 - if [[ $_PASS_BACKEND == "pass" ]]; then 823 + if [[ $_PASS_BACKEND == "pass" ]] || [[ $_PASS_BACKEND == "prs" ]]; then 815 824 get_pass_files 816 825 elif [[ $_PASS_BACKEND == "gopass" ]]; then 817 826 get_gopass_files

History

9 rounds 0 comments
sign up or login to add to the discussion
1 commit
expand
feat: add prs support
expand 0 comments
pull request successfully merged
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
1 commit
expand
feat: add prs support
expand 0 comments
jcg.re submitted #0
1 commit
expand
add prs support
expand 0 comments