-
Notifications
You must be signed in to change notification settings - Fork 3
/
file.bash
executable file
·98 lines (83 loc) · 3.08 KB
/
file.bash
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/usr/bin/env bash
# pass file - Password Store Extension (https://www.passwordstore.org/)
# Copyright (C) 2017 Dimitrij Vogt <[email protected]>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
readonly VERSION="1.0"
cmd_file_version() {
cat <<-_EOF
$PROGRAM $COMMAND $VERSION - A pass extension that apply to add a file to passwordstore
_EOF
}
cmd_file_usage() {
cmd_file_version
echo
cat <<-_EOF
Usage:
$PROGRAM $COMMAND [a <file> <pass item>] [g <pass-name>] [-V] [-h]
Provide a command to add files to passwordstore and
get files back from passwordstore to the current location.
Options:
a, add Add file to passwordstore
g, get Get file from passwordstore
-v, --version Show version information.
-h, --help Print this help message and exit.
More information may be found in the pass-file(1) man page.
_EOF
}
# Insert data to the password store
# $1: Path in the password store
# $2: Filename
_insert() {
local path="${1%/}"
local FILE="$2"
local FILENAME=$(basename "$2")
local passfile="$PREFIX/$path/$FILENAME.gpg"
set_git "$passfile"
mkdir -p -v "$PREFIX/$path"
set_gpg_recipients "$path/$FILE"
$GPG -e "${GPG_RECIPIENT_ARGS[@]}" -o "$passfile" "${GPG_OPTS[@]}" "$FILE" || \
die "Error: File could not be stored."
git_add_file "$passfile" "Insert file $path to store."
}
cmd_file_add() {
# Sanity checks
[[ -z "${*}" ]] && die "Usage: $PROGRAM $COMMAND [-a <file> <pass item>] [-g <pass-name>] [-V] [-h]"
[[ ! -f $1 ]] && die "Error: File $1 must exist."
[[ -z "$2" ]] && die "Usage: $PROGRAM $COMMAND [-a <file> <pass item>] [-g <pass-name>] [-V] [-h]"
local path="${2%/}"
local FILENAME="$1"
printf "\e[1m\e[37mAdd file $FILENAME to \e[4m%s\e[0m\n" "$path"
_insert "$path" "$FILENAME"
exit 0;
}
# Create file from pass
cmd_file_get() {
# Sanity checks
[[ -z "${*}" ]] && die "Usage: $PROGRAM $COMMAND [-a <file> <pass item>] [-g <pass-name>] [-V] [-h]"
[[ ! -f $PREFIX/$1.gpg ]] && die "Error: File $1 must be exist."
local path="$1"
local passfile="$PREFIX/$path.gpg"
local filename="$(basename "$path")"
[[ -f $passfile ]] && { $GPG -d "${GPG_OPTS[@]}" "$passfile" > "$filename" || exit $?; }
exit 0;
}
# Getopt options
while true; do case $1 in
a|add) shift; cmd_file_add "$@" ;;
g|get) shift; cmd_file_get "$@" ;;
-h|--help) shift; cmd_file_usage; exit 0 ;;
-v|--version) shift; cmd_file_version; exit 0 ;;
*) shift; cmd_file_usage; exit 0 ;;
esac done