diff --git a/rofi-pass b/rofi-pass
index 71fb116..681a024 100755
--- a/rofi-pass
+++ b/rofi-pass
@@ -17,89 +17,154 @@ list_passwords() {
}
doClip () {
- if [[ $clip == "primary" ]]; then
- xclip
- elif [[ $clip == "clipboard" ]]; then
- xclip -selection clipboard
- elif [[ $clip == "both" ]]; then
- xclip
- xclip -o | xclip -selection clipboard
+ if [[ $clip == "primary" ]]; then xclip;
+ elif [[ $clip == "clipboard" ]]; then xclip -selection clipboard;
+ elif [[ $clip == "both" ]]; then xclip; xclip -o | xclip -selection clipboard;
fi
}
checkIfPass () {
- if [[ $selected_password == "[ Add Entry ]>" ]]; then
- mainMenu
- elif [[ $selected_password == "[ Manage Database ]>" ]]; then
- mainMenu
- elif [[ $selected_password == "---" ]]; then
- mainMenu
+ if [[ $selected_password == "[ Add Entry ]>" ]]; then mainMenu;
+ elif [[ $selected_password == "---" ]]; then mainMenu;
+ else
+ rm -f "$HOME/.config/rofi-pass/last_used"
+ echo "${root}: $selected_password" > "$HOME/.config/rofi-pass/last_used"
+ fi
+}
+
+
+autopass () {
+ checkIfPass
+ if [[ ${selected_password} == "[ Add Entry ]>" ]]; then insertPass;
+ elif [[ ${selected_password} == "---" ]]; then mainMenu;
+ else
+ if [[ -z "${stuff["$AUTOTYPE_field"]}" ]]; then
+ echo -n "${stuff["${USERNAME_field}"]}" | xdotool type --clearmodifiers --file -
+ xdotool key Tab
+ echo -n "${password}" | xdotool type --clearmodifiers --file -
+ sleep 1
+ if [[ ${auto_enter} == "true" ]]; then xdotool key Return; fi
+ else
+ echo "${stuff["$AUTOTYPE_field"]}"
+ for word in ${stuff["$AUTOTYPE_field"]}; do
+ if [[ $word == ":tab" ]]; then xdotool key Tab;
+ elif [[ $word == ":space" ]]; then xdotool key space;
+ elif [[ $word == ":delay" ]]; then sleep ${delay};
+ elif [[ $word == ":enter" ]]; then xdotool key Return;
+ elif [[ $word == "pass" ]]; then echo -n "${password}" | xdotool type --clearmodifiers --file -;
+ else echo -n "${stuff[${word}]}" | xdotool type --clearmodifiers --file -
+ fi
+ done
+ if [[ ${auto_enter} == "true" ]]; then xdotool key Return; fi
+ fi
+ fi
+}
+
+openURL () {
+ checkIfPass
+ $BROWSER "$(pass "$selected_password" | grep "${URL_field}: " | awk '{sub(/:/,"")}{print $2}1' | head -1)"; exit;
+}
+
+typeUser () {
+ checkIfPass
+ echo -n "${stuff[${USERNAME_field}]}" | xdotool type --clearmodifiers --file -
+}
+
+typePass () {
+ checkIfPass
+ echo -n "${password}" | xdotool type --clearmodifiers --file -
+ if [[ $notify == "true" ]]; then
+ if [[ "${stuff[notify]}" == "false" ]]; then
+ :
+ else notify-send "rofi-pass" "finished typing password";
+ fi
+ elif [[ $notify == "false" ]]; then
+ if [[ "${stuff[notify]}" == "true" ]]; then notify-send "rofi-pass" "finished typing password";
+ else
+ :
+ fi
+ fi
+}
+
+typeField () {
+ checkIfPass
+ echo -n "${stuff[${typefield}]}" | xdotool type --clearmodifiers --file -
+}
+
+copyUser () {
+ checkIfPass
+ echo -n "${stuff[${USERNAME_field}]}" | doClip
+}
+
+copyField () {
+ checkIfPass
+ echo -n "${stuff[${copyfield}]}" | doClip
+}
+
+copyURL () {
+ checkIfPass
+ echo -n "${stuff[${URL_field}]}" | doClip
+}
+
+copyPass () {
+ checkIfPass
+ echo -n "$password" | doClip
+ notify-send "rofi-pass" "Copied Password\nClearing in 45 seconds"
+ $(sleep 45; echo -n "" | xclip; echo "" | xclip -selection clipboard | notify-send "rofi-pass" "Clipboard cleared") &
+}
+
+viewEntry () {
+ checkIfPass
+ showEntry "${selected_password}"
+}
+
+generatePass () {
+ checkIfPass
+ symbols=$(echo -e "0 Cancel\n---\n1 Yes\n2 No" | rofi -dmenu -p "Use Symbols? > ")
+ if [[ $symbols == "0 Cancel" ]]; then mainMenu;
+ elif [[ $symbols == "1 Yes" ]]; then symbols="";
+ elif [[ $symbols == "2 No" ]]; then symbols="-n";
+ fi
+ HELP="Enter Number or hit Enter to use default length"
+ length=$(echo -e "" | rofi -dmenu -mesg "${HELP}" -p "Password length? (Default: ${passlength}) > ")
+ if [[ $length == "" ]]; then pass generate ${symbols} -i "$selected_password" "${passlength}" > /dev/null;
+ else pass generate ${symbols} -i "$selected_password" "${length}" > /dev/null;
fi
}
# main Menu
mainMenu () {
- help_text=$(echo -e "${autotype}: Autotype - ${copy_name}: Copy User - ${edit}: Edit - ${show}: Show Entry\n${type_user}: Type User - ${copy_pass}: Copy Pass - ${move}: Move - ${generate}: Generate Pass\n${type_pass}: Type Pass - ${copy_url}: Copy URL - ${delete}: Delete" | column -s '-' -t)
+ help_text=$(echo -e "${autotype}: Autotype - ${copy_menu}: Copy Field - ${show}: View\n${type_menu}: Type Field - ${action_menu}: Actions - ${help}: Help" | column -s '-' -t)
line1=$(echo "${help_text}" | head -1)
- line2=$(echo "${help_text}" | tail -2 | head -1)
+ line2=$(echo "${help_text}" | head -2 | tail -1)
line3=$(echo "${help_text}" | tail -1)
HELP="${line1}
-${line2}
${line3}"
- selected_password="$(echo -e "[ Add Entry ]>\n---\n$(list_passwords 2>/dev/null)" \
- | _rofi -mesg "${HELP}" \
- -dmenu -kb-custom-1 "${autotype}" \
- -kb-custom-2 "${type_user}" \
- -kb-custom-3 "${type_pass}" \
- -kb-custom-4 "${open_url}" \
- -kb-custom-5 "${copy_name}" \
- -kb-custom-6 "${copy_pass}" \
- -kb-custom-7 "${show}" \
- -kb-custom-8 "${copy_url}" \
- -kb-custom-9 "${edit}" \
- -kb-custom-10 "${move}" \
- -kb-custom-11 "${delete}" \
- -kb-custom-12 "${generate}" \
- -dmenu \
- -select "$entry" \
- -p "rofi-pass > ")"
-
- rofi_exit=$?
-
- if [[ -n $selected_password ]]; then
- if [[ $selected_password == "[ Add Entry ]>" ]]; then
- :
- elif [[ $selected_password == "[ Manage Database ]>" ]]; then
- :
- elif [[ $selected_password == "---" ]]; then
- :
- else
- rm -f "$HOME/.config/rofi-pass/last_used"
- echo "${root}: $selected_password" > "$HOME/.config/rofi-pass/last_used"
- fi
- fi
-
- if [[ "${rofi_exit}" -eq 0 ]]; then
- if [[ ${selected_password} == "[ Add Entry ]>" ]]; then
- insertPass
- elif [[ ${selected_password} == "---" ]]; then
- mainMenu
- else
- true
- fi
- elif [[ "${rofi_exit}" -eq 13 ]]; then
- checkIfPass
- $BROWSER "$(pass "$selected_password" | grep "${URL_field}: " | awk '{sub(/:/,"")}{print $2}1' | head -1)"; exit;
- elif [[ "${rofi_exit}" -eq 1 ]]; then exit ${rofi_exit};
- elif [[ "${rofi_exit}" -eq 10 ]]; then
- checkIfPass
- fi
+ selected_password="$(echo -e "[ Add Entry ]>\n---\n$(list_passwords 2>/dev/null)" \
+ | _rofi -mesg "${HELP}" \
+ -dmenu -kb-custom-1 "${autotype}" \
+ -kb-custom-2 "${type_user}" \
+ -kb-custom-3 "${type_pass}" \
+ -kb-custom-4 "${open_url}" \
+ -kb-custom-5 "${copy_name}" \
+ -kb-custom-6 "${copy_pass}" \
+ -kb-custom-7 "${show}" \
+ -kb-custom-8 "${copy_url}" \
+ -kb-custom-9 "${edit}" \
+ -kb-custom-13 "${type_menu}" \
+ -kb-custom-14 "${action_menu}" \
+ -kb-custom-15 "${copy_menu}" \
+ -kb-custom-16 "${help}" \
+ -dmenu \
+ -select "$entry" \
+ -p "rofi-pass > ")"
+ rofi_exit=$?
+ # generate Array of fields
password_temp=$(PASSWORD_STORE_DIR="${root}" pass "$selected_password")
password=$(echo "${password_temp}" | head -1)
declare -A stuff
-
while read LINE; do
_id=$(echo -e "${LINE}" | awk -F ':[[:space:]]*' '{print $1}')
_val=$(echo -e "${LINE}" | awk '{sub(/:/,"")}{for (i=2; i"
done < <(PASSWORD_STORE_DIR="${root}" pass "${selected_password}" | tail -n+2 | grep -P '(: |:\t)' )
stuff["pass"]=${password}
- if [[ $rofi_exit -eq 11 ]]; then
- checkIfPass
- echo -n "${stuff[${USERNAME_field}]}" | xdotool type --clearmodifiers --file -
- exit
-
- elif [[ "${rofi_exit}" -eq 18 ]]; then
- manageEntry edit;
-
- elif [[ "${rofi_exit}" -eq 19 ]]; then
- manageEntry move;
-
- elif [[ "${rofi_exit}" -eq 20 ]]; then
- manageEntry delete;
-
- elif [[ "${rofi_exit}" -eq 21 ]]; then
- checkIfPass
- symbols=$(echo -e "0 Cancel\n---\n1 Yes\n2 No" | rofi -dmenu -p "Use Symbols? > ")
- if [[ $symbols == "0 Cancel" ]]; then
- mainMenu
- elif [[ $symbols == "1 Yes" ]]; then
- symbols=""
- elif [[ $symbols == "2 No" ]]; then
- symbols="-n"
- fi
- HELP="Enter Number or hit Enter to use default length"
- length=$(echo -e "" | rofi -dmenu -mesg "${HELP}" -p "Password length? (Default: ${passlength}) > ")
- if [[ $length == "" ]]; then
- pass generate ${symbols} -i "$selected_password" "${passlength}" > /dev/null
- else
- pass generate ${symbols} -i "$selected_password" "${length}" > /dev/null
- fi
- exit
-
- elif [[ $rofi_exit -eq 12 ]]; then
- checkIfPass
- echo -n "${password}" | xdotool type --clearmodifiers --file -
- if [[ $notify == "true" ]]; then
- if [[ "${stuff[notify]}" == "false" ]]; then
- :
- else
- notify-send "rofi-pass" "finished typing password"
- fi
- elif [[ $notify == "false" ]]; then
- if [[ "${stuff[notify]}" == "true" ]]; then
- notify-send "rofi-pass" "finished typing password"
- else
- :
- fi
- fi
- exit
-
- elif [[ $rofi_exit -eq 14 ]]; then
- checkIfPass
- echo -n "${stuff[${USERNAME_field}]}" | doClip
- exit
-
- elif [[ $rofi_exit -eq 17 ]]; then
- checkIfPass
- echo -n "${stuff[${URL_field}]}" | doClip
- exit
-
- elif [[ $rofi_exit -eq 16 ]]; then
- checkIfPass
- showEntry "${selected_password}"
-
- elif [[ $rofi_exit -eq 15 ]]; then
- checkIfPass
- echo -n "$password" | doClip
- notify-send "rofi-pass" "Copied Password\nClearing in 45 seconds"
- $(sleep 45; echo -n "" | xclip; echo "" | xclip -selection clipboard | notify-send "rofi-pass" "Clipboard cleared") &
- exit
+ # actions based on keypresses
+ if [[ "${rofi_exit}" -eq 0 ]]; then autopass;
+ elif [[ "${rofi_exit}" -eq 13 ]]; then openURL;
+ elif [[ "${rofi_exit}" -eq 1 ]]; then exit ${rofi_exit};
+ elif [[ "${rofi_exit}" -eq 10 ]]; then autopass;
+ elif [[ "${rofi_exit}" -eq 11 ]]; then typeUser;
+ elif [[ "${rofi_exit}" -eq 12 ]]; then typePass;
+ elif [[ "${rofi_exit}" -eq 14 ]]; then copyUser;
+ elif [[ "${rofi_exit}" -eq 17 ]]; then copyURL;
+ elif [[ "${rofi_exit}" -eq 16 ]]; then viewEntry;
+ elif [[ "${rofi_exit}" -eq 15 ]]; then copyPass;
+ elif [[ "${rofi_exit}" -eq 22 ]]; then typeMenu;
+ elif [[ "${rofi_exit}" -eq 23 ]]; then actionMenu;
+ elif [[ "${rofi_exit}" -eq 25 ]]; then helpMenu;
+ elif [[ "${rofi_exit}" -eq 24 ]]; then copyMenu;
fi
-
- if [[ -z "${stuff["$AUTOTYPE_field"]}" ]]; then
- echo -n "${stuff[${USERNAME_field}]}" | xdotool type --clearmodifiers --file -
-
- xdotool key Tab
- echo -n "${password}" | xdotool type --clearmodifiers --file -
- sleep 1
- if [[ ${auto_enter} == "true" ]]; then
- xdotool key Return
- fi
- else
- echo "${stuff["$AUTOTYPE_field"]}"
- for word in ${stuff["$AUTOTYPE_field"]}; do
- if [[ $word == ":tab" ]]; then
- xdotool key Tab
- elif [[ $word == ":space" ]]; then
- xdotool key space
- elif [[ $word == ":delay" ]]; then
- sleep ${delay}
- elif [[ $word == ":enter" ]]; then
- xdotool key Return
- elif [[ $word == "pass" ]]; then
- echo -n "${password}" | xdotool type --clearmodifiers --file -
- else
- echo -n "${stuff[${word}]}" | xdotool type --clearmodifiers --file -
-
- fi
- #xdotool key Tab
- done
- if [[ ${auto_enter} == "true" ]]; then
- xdotool key Return
- fi
- fi
-
password=''
selected_password=''
unset stuff
@@ -222,6 +197,39 @@ ${line3}"
unset stuff
}
+helpMenu () {
+ help=$(echo -e "${type_user}: Type User
+${type_pass}: Type Password
+${type_menu}: Type Custom Field
+${autotype}: Autotype
+---
+${copy_name}: Copy Username
+${copy_pass}: Copy Password
+${copy_url}: Copy URL
+${copy_menu}: Copy Custom Field
+---
+${action_menu}: Edit, Move, Delete, Re-generate Submenu
+${show}: Show Password File" | rofi -dmenu -p "Help > ")
+}
+
+typeMenu () {
+ typefield=$(pass "${selected_password}" | awk -F ':' '{ print $1 }' | grep -Ev '\-\-\-' | tail -n +2 | rofi -dmenu -p "Choose Field to type > ")
+ typeField
+}
+
+copyMenu () {
+ copyfield=$(pass "${selected_password}" | awk -F ':' '{ print $1 }' | grep -Ev '\-\-\-' | tail -n +2 | rofi -dmenu -p "Choose Field to type > ")
+ copyField
+}
+
+actionMenu () {
+ action=$(echo -e "1 Move Password File\n2 Delete Password File\n3 Generate New Password" | rofi -dmenu -p "Choose Action > ")
+ if [[ ${action} == "1 Move Password File" ]]; then manageEntry move;
+ elif [[ ${action} == "2 Delete Password File" ]]; then manageEntry delete;
+ elif [[ ${action} == "3 Generate New Password" ]]; then generatePass;
+ fi
+}
+
showEntry () {
HELP="${type_entry}: Type Entry | ${copy_entry}: Copy Entry"
bla=$(echo -e "0 Return\n---\n$(PASSWORD_STORE_DIR="${root}" pass "$selected_password")" | _rofi -dmenu -mesg "${HELP}" -p "> ")
@@ -298,6 +306,7 @@ manageEntry () {
cd "${root}"
selected_password2=$(basename "$selected_password" .gpg)
group=$(find -type d -not -iwholename '*.git*' -printf '%d\t%P\n' | sort -r -nk1 | cut -f2- | _rofi -dmenu -p "Choose Group > ")
+ if [[ $group == "" ]]; then exit; fi
PASSWORD_STORE_DIR="${root}" pass mv "$selected_password" "${group}"
mainMenu