diff --git a/dotfiles/lib/functions/passgen b/dotfiles/lib/functions/passgen deleted file mode 100644 index d706c748..00000000 --- a/dotfiles/lib/functions/passgen +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env sh - -function passgen { - if [ -z "$1" ]; then - echo "Usage: passgen " >&2 - return 1 - fi - - local base_pass upper symbol password - base_pass="$(xkcdpass -n 3 | tr -d ' ')" - upper="$(echo {A..Z} | tr ' ' '\n' | shuf -n1)" - symbol="$(echo '!@#$%^&*' | fold -w1 | shuf -n1)" - password="${base_pass}${upper}${symbol}" - - echo "$password" | pass insert -e "$1" -} - -passgen diff --git a/dotfiles/lib/functions/xkcdpassgen b/dotfiles/lib/functions/xkcdpassgen new file mode 100644 index 00000000..39dbe422 --- /dev/null +++ b/dotfiles/lib/functions/xkcdpassgen @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +function xkcdpassgen { + local use_upper=true use_number=true use_symbol=true + local OPTIND opt + + while getopts "UNS" opt; do + case "$opt" in + U) use_upper=false ;; + N) use_number=false ;; + S) use_symbol=false ;; + esac + done + shift $((OPTIND - 1)) + + if [ -z "$1" ]; then + echo "Usage: xkcdpassgen [-U] [-N] [-S] " >&2 + echo " -U omit uppercase letter" >&2 + echo " -N omit number" >&2 + echo " -S omit symbol" >&2 + return 1 + fi + + local base_pass suffix="" password + base_pass="$(xkcdpass -n 3 | tr -d ' ')" + + if $use_upper; then + suffix+="$(echo {A..Z} | tr ' ' '\n' | shuf -n1)" + fi + if $use_number; then + suffix+="$(shuf -i 0-9 -n1)" + fi + if $use_symbol; then + suffix+="$(echo '!@#$%^&*' | fold -w1 | shuf -n1)" + fi + + password="${base_pass}${suffix}" + + echo "$password" | pass insert -e "$1" +} + +xkcdpassgen "$@"