mirror of
https://github.com/fscotto/infra.git
synced 2026-05-30 15:39:58 +00:00
61 lines
1.3 KiB
Bash
Executable File
61 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
declare -r CURRENT_DIR
|
|
|
|
# shellcheck source=/dev/null
|
|
source "$CURRENT_DIR/utils.sh"
|
|
|
|
is_authenticated() {
|
|
[[ $(bw status | jq '.status') != "\"unauthenticated\"" ]] && true
|
|
}
|
|
|
|
# Get bitwarden items
|
|
get_bw_items() {
|
|
local session="$1"
|
|
filter='map({ (.name|tostring): .login.password })|add'
|
|
|
|
if [[ -z "$session" ]]; then
|
|
bw list items | jq -r "$filter"
|
|
else
|
|
bw list items --session "$session" | jq -r "$filter"
|
|
fi
|
|
}
|
|
|
|
get_password() {
|
|
local items=$1
|
|
local key=$2
|
|
|
|
password=$(echo "$items" | jq ".\"$key\"")
|
|
echo "${password:1:-1}"
|
|
}
|
|
|
|
main() {
|
|
declare -A TMUX_OPTS=(
|
|
["@bw-session"]=$(get_tmux_option "@bw-session" "$BW_SESSION")
|
|
["@bw-copy-to-clipboard"]=$(get_tmux_option "@bw-copy-to-clipboard" "off")
|
|
)
|
|
|
|
is_authenticated
|
|
if [[ $? -eq 1 ]]; then
|
|
display_tmux_message "You are not logged in."
|
|
return 1
|
|
fi
|
|
|
|
items=$(get_bw_items "${TMUX_OPTS[@bw-session]}")
|
|
|
|
# Choice element
|
|
key=$(echo "$items" | jq --raw-output '.|keys[]' | fzf --no-multi) || return
|
|
|
|
password=$(get_password "$items" "$key")
|
|
|
|
if [[ "${TMUX_OPTS[@bw-copy-to-clipboard]}" == "on" ]]; then
|
|
cp_to_clipboard "$password"
|
|
else
|
|
# Send the password in the last pane.
|
|
tmux send-keys -t ! "$password"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|