Explorar el Código

password store command

Bob Mottram hace 8 años
padre
commit
b17813f7e5
Se han modificado 1 ficheros con 137 adiciones y 0 borrados
  1. 137
    0
      src/freedombone-pass

+ 137
- 0
src/freedombone-pass Ver fichero

@@ -0,0 +1,137 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Simple multi-user password store using symmetric encryption
12
+# and the backup gpg key
13
+#
14
+# License
15
+# =======
16
+#
17
+# Copyright (C) 2016 Bob Mottram <bob@freedombone.net>
18
+#
19
+# This program is free software: you can redistribute it and/or modify
20
+# it under the terms of the GNU Affero General Public License as published by
21
+# the Free Software Foundation, either version 3 of the License, or
22
+# (at your option) any later version.
23
+#
24
+# This program is distributed in the hope that it will be useful,
25
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
26
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27
+# GNU Affero General Public License for more details.
28
+#
29
+# You should have received a copy of the GNU Affero General Public License
30
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
31
+
32
+PROJECT_NAME='freedombone'
33
+
34
+export TEXTDOMAIN=${PROJECT_NAME}-pass
35
+export TEXTDOMAINDIR="/usr/share/locale"
36
+
37
+MY_BACKUP_KEY_ID=
38
+CURR_USERNAME=
39
+CURR_APP=
40
+CURR_PASSWORD=
41
+
42
+function get_backup_key_id {
43
+    MY_BACKUP_KEY_ID=$(gpg --list-keys "(backup key)" | \
44
+                           grep 'pub ' | awk -F ' ' '{print $2}' | \
45
+                           awk -F '/' '{print $2}')
46
+    if [ ${#MY_BACKUP_KEY_ID} -lt 4 ]; then
47
+        echo $"gpg backup key was not found"
48
+        return 58213
49
+    fi
50
+}
51
+
52
+function show_help {
53
+    echo ''
54
+    echo $"${PROJECT_NAME}-pass"
55
+    echo ''
56
+    echo $'Password store using gpg'
57
+    echo ''
58
+    echo $'     --help                        Show help'
59
+    echo $'  -u --user                        Username'
60
+    echo $'  -a --app [name]                  Name of the application'
61
+    echo $'  -p --pass [password]             The password to store'
62
+    echo ''
63
+    echo $'To encrypt a password:'
64
+    echo ''
65
+    echo $"  ${PROJECT_NAME}-pass -u [username] -a [app] -p [password]"
66
+    echo ''
67
+    echo $'To retrieve a password:'
68
+    echo $''
69
+    echo $"  ${PROJECT_NAME}-pass -u [username] -a [app]"
70
+    echo ''
71
+    exit 0
72
+}
73
+
74
+while [[ $# > 1 ]]
75
+do
76
+    key="$1"
77
+
78
+    case $key in
79
+        --help)
80
+            show_help
81
+            ;;
82
+        -u|--user|--username)
83
+            shift
84
+            CURR_USERNAME="${1}"
85
+            ;;
86
+        -a|--app|--application)
87
+            shift
88
+            CURR_APP="${1}"
89
+            ;;
90
+        -p|--pass|--password|--passphrase)
91
+            shift
92
+            CURR_PASSWORD="${1}"
93
+            ;;
94
+        *)
95
+            # unknown option
96
+            ;;
97
+    esac
98
+    shift
99
+done
100
+
101
+MASTER_PASSWORD=$(gpg -q --armor --export-secret-key 'backup key')
102
+
103
+if [ ! $CURR_USERNAME ]; then
104
+    echo $'No username given'
105
+    exit 1
106
+fi
107
+
108
+if [ ! -d /home/$CURR_USERNAME ]; then
109
+    echo $"User $CURR_USERNAME does not exist"
110
+    exit 2
111
+fi
112
+
113
+if [ ! $CURR_APP ]; then
114
+    echo $'No app name given'
115
+    exit 3
116
+fi
117
+
118
+if [ ! $CURR_PASSWORD ]; then
119
+    # retrieve password
120
+    if [ ! -f ~/.passwords/$CURR_USER/$CURR_APP ]; then
121
+        echo ""
122
+        exit 4
123
+    else
124
+        gpg -dq --passphrase "$MASTER_PASSWORD" ~/.passwords/$CURR_USER/$CURR_APP
125
+    fi
126
+else
127
+    # store password
128
+    if [ ! -d ~/.passwords/$CURR_USER ]; then
129
+        mkdir -p ~/.passwords/$CURR_USER
130
+    fi
131
+    echo “$CURR_PASSWORD” | gpg -ca --cipher-algo AES256 --passphrase "$MASTER_PASSWORD" > ~/.passwords/$CURR_USER/$CURR_APP
132
+    if [ ! -f ~/.passwords/$CURR_USER/$CURR_APP ]; then
133
+        exit 5
134
+    fi
135
+fi
136
+
137
+exit 0