blob: f578b048b4e76fe11682f46248c7ab6d804e5569 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/bin/sh
set -e -o pipefail
KP="$HOME/.local/bin/KeePassXC-2.5.1-x86_64.AppImage"
[ -e "$KP" ] || {
echo "$KP not found" >&2; exit 1
}
DB="${KP_DB:-$HOME/Dropbox/keepass-box.kdbx}"
[ -e "$DB" ] || {
echo "$DB not found" >&2; exit 1
}
keepass()
{
"$KP" $@
}
wofi()
{
wofi -k /dev/null --dmenu --prompt 'Select an entry'
}
unset passwd
passwd="$(ASKPASS_PROMPT='Enter KeePassXC password' askpass)"
[ -n "$passwd" ] || {
echo "No password" >&2; exit 1
}
_kp_command=show
_kp_opts='-q -a Password'
_kp_extra_args=
case $1 in
clip)
_kp_command='clip'
_kp_opts='-q'
_kp_extra_args='15' # timeout
shift
;;
dump)
echo "$passwd" | keepass cli export -f csv "$DB"
exit 0
;;
esac
entry="$1"
[ -n "$entry" ] || {
entry=$(echo "$passwd" \
| keepass cli ls -q -R "$DB" \
| awk '
{
if ($0~/\/$/) {
sub(/^\s+/, "")
if ($0!~/^\s+/) {
grp = $0
} else {
print substr($0, match($0, /^\s+/))
grp = grp $0
}
next
} else {
sub(/^\s+/, "")
print "/" grp $0
}
}' \
| grep -v '^/Recycle Bin' \
| sort -t/ -k2n \
| wofi)
[ -n "$entry" ] || {
echo "No entry" >&2; exit 1
}
}
echo "$passwd" | keepass cli "$_kp_command" "$_kp_opts" "$DB" "$entry" "$_kp_extra_args"
|