aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAyush Agarwal <ayush@fastmail.in>2021-11-08 21:08:39 +0530
committerAyush Agarwal <ayush@fastmail.in>2021-11-08 21:30:37 +0530
commit0e1e98487e99914b15f253c5a8c9df6bb3adf4a2 (patch)
tree2aaa855217026747adafde40b7cd3848188a747b
parent5ca7bc53074cb32915fa807c06aa520f22f4889a (diff)
refactor: don't use upper case global variables
Global variables shouldn't be written in upper case unless the variable is meant to be exported or is an environment variable. The style of defining local variables was also changed.
-rwxr-xr-xtessen153
1 files changed, 78 insertions, 75 deletions
diff --git a/tessen b/tessen
index 53e6d2b..d04a5cc 100755
--- a/tessen
+++ b/tessen
@@ -9,48 +9,49 @@
set +x
# initialize the global variables
-readonly VERSION="1.1.2"
-readonly PREFIX="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
-readonly CLIP_TIME="${PASSWORD_STORE_CLIP_TIME:-15}"
-BACKEND="${TESSEN_BACKEND:-bemenu}" # uses the value of TESSEN_BACKEND if set by user
-BACKEND_OPTS=""
-ACTION="$TESSEN_ACTION" # uses the value of TESSEN_ACTION if set by user
-PASSFILE=""
-declare -A PASSDATA_ARR
-USERNAME=""
-PASSWORD=""
+readonly tsn_version="1.1.2"
+readonly tsn_prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
+readonly tsn_cliptime="${PASSWORD_STORE_CLIP_TIME:-15}"
+tsn_backend="${TESSEN_BACKEND:-bemenu}" # uses the value of TESSEN_BACKEND if set by user
+tsn_backend_opts=""
+tsn_action="${TESSEN_ACTION-}" # uses the value of TESSEN_ACTION if set by user
+tsn_passfile=""
+declare -A tsn_passdata
+tsn_username=""
+tsn_password=""
# display and get the shortened path of the password file
get_pass_file() {
- local tmp_pass_1 tmp_pass_2 tmp_pass_3
+ local -a tmp_list
# temporarily enable globbing to get the list of gpg files
shopt -s nullglob globstar
- tmp_pass_1=("$PREFIX"/**/*.gpg)
- tmp_pass_2=("${tmp_pass_1[@]#"$PREFIX"/}")
- tmp_pass_3=("${tmp_pass_2[@]%.gpg}")
+ tmp_list=("$tsn_prefix"/**/*.gpg)
+ tmp_list=("${tmp_list[@]#"$tsn_prefix"/}")
+ tmp_list=("${tmp_list[@]%.gpg}")
shopt -u nullglob globstar
- PASSFILE="$(printf '%s\n' "${tmp_pass_3[@]}" | "$BACKEND" "$BACKEND_OPTS")"
+ tsn_passfile="$(printf '%s\n' "${tmp_list[@]}" | "$tsn_backend" "$tsn_backend_opts")"
- if ! [[ -e "$PREFIX/$PASSFILE".gpg ]]; then
+ if ! [[ -e "$tsn_prefix/$tsn_passfile".gpg ]]; then
exit 1
fi
}
# get the password data including every key-value pair inside the encrypted file
get_pass_data() {
- local passdata passdata_regex idx key val
+ local -a passdata
+ local passdata_regex idx key val
- mapfile -t passdata < <(pass "$PASSFILE")
+ mapfile -t passdata < <(pass "$tsn_passfile")
# ASSUMPTION: the key can contain alphanumerics, spaces, hyphen, underscore
# the value can contain anything but it has to follow after a space
passdata_regex="^[[:alnum:][:blank:]_-]+:[[:blank:]].+$"
# ASSUMPTION: the basename of the gpg file is the username although one can still
# select a username field inside the file, if it exists
- USERNAME="${PASSFILE##*/}"
- # ASSUMPTION: the first line of $PASSFILE will contain the password
- PASSWORD="${passdata[0]}"
+ tsn_username="${tsn_passfile##*/}"
+ # ASSUMPTION: the first line of $tsn_passfile will contain the password
+ tsn_password="${passdata[0]}"
# skip the password, validate each entry against $passdata_regex, store valid results
# ASSUMPTION: each key is unique otherwise, the value of the last non-unique key will be used
@@ -58,7 +59,7 @@ get_pass_data() {
if [[ "${idx%%:*}" != "username" && "${idx%%:*}" != "password" && "$idx" =~ $passdata_regex ]]; then
key="${idx%%:*}"
val="${idx#*: }"
- PASSDATA_ARR["$key"]="$val"
+ tsn_passdata["$key"]="$val"
else
continue
fi
@@ -67,10 +68,11 @@ get_pass_data() {
# get the key that the user will choose to autotype or copy
get_key() {
- local ch="" flag=false key_arr=()
+ local -a key_arr
+ local ch flag=false
if [[ "$1" == "pass_key_list" ]]; then
- key_arr=("autotype username and password" "username" "password" "${!PASSDATA_ARR[@]}")
+ key_arr=("autotype username and password" "username" "password" "${!tsn_passdata[@]}")
shift
elif [[ "$1" == "opt_key_list" ]]; then
key_arr=("autotype" "copy")
@@ -79,11 +81,12 @@ get_key() {
exit 1
fi
- _KEY="$(printf '%s\n' "${key_arr[@]}" | "$BACKEND" "$BACKEND_OPTS")"
+ # a dynamically scoped variable to hold the key selection for key_menu
+ chosen_key="$(printf '%s\n' "${key_arr[@]}" | "$tsn_backend" "$tsn_backend_opts")"
# validate the chosen key name
for ch in "${key_arr[@]}"; do
- if [[ "$_KEY" == "$ch" ]]; then
+ if [[ "$chosen_key" == "$ch" ]]; then
flag=true
break
fi
@@ -99,26 +102,26 @@ key_menu() {
get_key pass_key_list
- if [[ "$_KEY" == "autotype username and password" ]]; then
+ if [[ "$chosen_key" == "autotype username and password" ]]; then
auto_type username_password
exit 0
fi
- if [[ "$ACTION" == "autotype" ]]; then
- auto_type "$_KEY"
+ if [[ "$tsn_action" == "autotype" ]]; then
+ auto_type "$chosen_key"
exit 0
- elif [[ "$ACTION" == "copy" ]]; then
- wld_copy "$_KEY"
- elif [[ "$ACTION" == "both" ]]; then
- auto_type "$_KEY"
- wld_copy "$_KEY"
- elif [[ -z "$ACTION" ]]; then
- tmp_key="$_KEY"
+ elif [[ "$tsn_action" == "copy" ]]; then
+ wld_copy "$chosen_key"
+ elif [[ "$tsn_action" == "both" ]]; then
+ auto_type "$chosen_key"
+ wld_copy "$chosen_key"
+ elif [[ -z "$tsn_action" ]]; then
+ tmp_key="$chosen_key"
get_key opt_key_list
- if [[ "$_KEY" == "autotype" ]]; then
+ if [[ "$chosen_key" == "autotype" ]]; then
auto_type "$tmp_key"
exit 0
- elif [[ "$_KEY" == "copy" ]]; then
+ elif [[ "$chosen_key" == "copy" ]]; then
wld_copy "$tmp_key"
else
exit 1
@@ -131,18 +134,18 @@ key_menu() {
auto_type() {
if [[ "$1" == "username_password" ]]; then
- printf '%s' "$USERNAME" | wtype -s 100 -
+ printf '%s' "$tsn_username" | wtype -s 100 -
wtype -s 100 -k Tab --
- printf '%s' "$PASSWORD" | wtype -s 100 -
+ printf '%s' "$tsn_password" | wtype -s 100 -
shift
elif [[ "$1" == "username" ]]; then
- printf '%s' "$USERNAME" | wtype -s 100 -
+ printf '%s' "$tsn_username" | wtype -s 100 -
shift
elif [[ "$1" == "password" ]]; then
- printf '%s' "$PASSWORD" | wtype -s 100 -
+ printf '%s' "$tsn_password" | wtype -s 100 -
shift
- elif [[ -n "${PASSDATA_ARR[$1]}" ]]; then
- printf '%s' "${PASSDATA_ARR[$1]}" | wtype -s 100 -
+ elif [[ -n "${tsn_passdata[$1]}" ]]; then
+ printf '%s' "${tsn_passdata[$1]}" | wtype -s 100 -
shift
else
exit 1
@@ -151,18 +154,18 @@ auto_type() {
wld_copy() {
if [[ "$1" == "username" ]]; then
- printf '%s' "$USERNAME" | wl-copy
- notify-send -t $((CLIP_TIME * 1000)) "Copied username to clipboard. Will clear in $CLIP_TIME seconds." || true
+ printf '%s' "$tsn_username" | wl-copy
+ notify-send -t $((tsn_cliptime * 1000)) "Copied username to clipboard. Will clear in $tsn_cliptime seconds." || true
shift
clean
elif [[ "$1" == "password" ]]; then
- printf '%s' "$PASSWORD" | wl-copy
- notify-send -t $((CLIP_TIME * 1000)) "Copied password to clipboard. Will clear in $CLIP_TIME seconds." || true
+ printf '%s' "$tsn_password" | wl-copy
+ notify-send -t $((tsn_cliptime * 1000)) "Copied password to clipboard. Will clear in $tsn_cliptime seconds." || true
shift
clean
- elif [[ -n "${PASSDATA_ARR[$1]}" ]]; then
- printf '%s' "${PASSDATA_ARR[$1]}" | wl-copy
- notify-send -t $((CLIP_TIME * 1000)) "Copied $1 to clipboard. Will clear in $CLIP_TIME seconds." || true
+ elif [[ -n "${tsn_passdata[$1]}" ]]; then
+ printf '%s' "${tsn_passdata[$1]}" | wl-copy
+ notify-send -t $((tsn_cliptime * 1000)) "Copied $1 to clipboard. Will clear in $tsn_cliptime seconds." || true
shift
clean
else
@@ -186,31 +189,31 @@ print_help() {
}
validate_backend() {
- local bmn_opt=()
+ local -a bmn_opt
- if [[ "$BACKEND" == "bemenu" ]]; then
+ if [[ "$tsn_backend" == "bemenu" ]]; then
bmn_opt=("-i -l 10 -w --scrollbar=autohide -n")
export BEMENU_OPTS="${BEMENU_OPTS:-${bmn_opt[*]}}"
- readonly BACKEND="bemenu"
- readonly BACKEND_OPTS=""
- elif [[ "$BACKEND" == "rofi" ]]; then
- readonly BACKEND="rofi"
- readonly BACKEND_OPTS="-dmenu"
- elif [[ "$BACKEND" == "wofi" ]]; then
- readonly BACKEND="wofi"
- readonly BACKEND_OPTS="-d"
+ readonly tsn_backend="bemenu"
+ readonly tsn_backend_opts=""
+ elif [[ "$tsn_backend" == "rofi" ]]; then
+ readonly tsn_backend="rofi"
+ readonly tsn_backend_opts="-dmenu"
+ elif [[ "$tsn_backend" == "wofi" ]]; then
+ readonly tsn_backend="wofi"
+ readonly tsn_backend_opts="-d"
else
printf '%s\n' "Please specify a backend: bemenu|rofi|wofi" >&2
exit 1
fi
}
-validate_clip_time() {
+validate_cliptime() {
local clip_regex
clip_regex="^[[:digit:]]+$"
- if [[ "$CLIP_TIME" =~ $clip_regex ]]; then
+ if [[ "$tsn_cliptime" =~ $clip_regex ]]; then
return 0
else
printf '%s\n' "invalid clipboard time provided" >&2
@@ -220,23 +223,23 @@ validate_clip_time() {
clean() {
{
- sleep "$CLIP_TIME" || exit 1
+ sleep "$tsn_cliptime" || exit 1
wl-copy --clear
} > /dev/null 2>&1 &
disown
- unset -v PASSFILE USERNAME PASSWORD PASSDATA_ARR
+ unset -v tsn_passfile tsn_username tsn_password tsn_passdata
}
die() {
wl-copy --clear
- unset -v PASSFILE USERNAME PASSWORD PASSDATA_ARR
+ unset -v tsn_passfile tsn_username tsn_password tsn_passdata
}
main() {
local _opt
# exit if the password store directory doesn't exist
- if ! [[ -d "$PREFIX" ]]; then
+ if ! [[ -d "$tsn_prefix" ]]; then
printf '%s\n' "password store not found" >&2
exit 1
fi
@@ -250,12 +253,12 @@ main() {
printf '%s\n' "Please specify a backend: bemenu|rofi|wofi" >&2
exit 1
}
- BACKEND="$2"
+ tsn_backend="$2"
validate_backend
shift
;;
--backend=*)
- BACKEND="${_opt##--backend=}"
+ tsn_backend="${_opt##--backend=}"
validate_backend
;;
-a | --action)
@@ -263,18 +266,18 @@ main() {
printf '%s\n' "Please specify a valid option: autotype|copy|both" >&2
exit 1
}
- ACTION="$2"
+ tsn_action="$2"
shift
;;
--action=*)
- ACTION="${_opt##--action=}"
+ tsn_action="${_opt##--action=}"
;;
-h | --help)
print_help
exit 0
;;
-v | --version)
- printf '%s\n' "${0##*/} version $VERSION"
+ printf '%s\n' "${0##*/} version $tsn_version"
exit 0
;;
--)
@@ -290,12 +293,12 @@ main() {
done
unset -v _opt
- if unset -v BACKEND_OPTS 2> /dev/null; then
+ if unset -v tsn_backend_opts 2> /dev/null; then
validate_backend
fi
- validate_clip_time
+ validate_cliptime
- readonly ACTION
+ readonly tsn_action
trap 'die' EXIT TERM
get_pass_file