Browse Source

Export passwords to keepass

Bob Mottram 8 years ago
parent
commit
11fcfafb3b
1 changed files with 46 additions and 0 deletions
  1. 46
    0
      src/freedombone-pass

+ 46
- 0
src/freedombone-pass View File

@@ -49,6 +49,7 @@ CURR_APP=
49 49
 REMOVE_APP=
50 50
 CURR_PASSWORD=""
51 51
 TESTS=
52
+EXPORT_FILENAME=
52 53
 
53 54
 # If this file is present then don't store passwords
54 55
 NO_PASSWORD_STORE_FILE=~/.nostore
@@ -73,6 +74,7 @@ function pass_show_help {
73 74
     echo $'  -u --user [name]                 Username'
74 75
     echo $'  -a --app [name]                  Name of the application'
75 76
     echo $'  -p --pass [password]             The password to store'
77
+    echo $'     --export [filename]           Export to KeepassX XML'
76 78
     echo ''
77 79
     echo $'To encrypt a password:'
78 80
     echo ''
@@ -145,6 +147,41 @@ function clear_passwords {
145 147
     exit 0
146 148
 }
147 149
 
150
+function export_to_keepass {
151
+    filename = "$1"
152
+
153
+    echo '<database>' > $filename
154
+    echo '  <group>' >> $filename
155
+    echo "    <title>${PROJECT_NAME}</title>" >> $filename
156
+    echo '    <icon>48</icon>' >> $filename
157
+
158
+    for d in /root/.passwords/*/ ; do
159
+        USERNAME=$(echo "$d" | awk -F '/' '{print $4}')
160
+        echo '    <group>' >> $filename
161
+        echo "      <title>$USERNAME</title>" >> $filename
162
+        echo '      <icon>0</icon>' >> $filename
163
+        for a in /root/.passwords/$USERNAME/*/ ; do
164
+            APP_NAME=$(echo "$a" | awk -F '/' '{print $5}')
165
+            app_password=$(${PROJECT_NAME}-pass -u $USERNAME -a $APP_NAME)
166
+            echo '      <entry>' >> $filename
167
+            echo "        <title>$APP_NAME</title>" >> $filename
168
+            echo "        <username>$USERNAME</username>" >> $filename
169
+            echo "        <password>$app_password</password>" >> $filename
170
+            echo '        <url/>' >> $filename
171
+            echo '        <comment/>' >> $filename
172
+            echo '        <icon>0</icon>' >> $filename
173
+            echo '        <expire>Never</expire>' >> $filename
174
+            echo '      </entry>' >> $filename
175
+        done
176
+        echo '    </group>' >> $filename
177
+    done
178
+
179
+    echo '  </group>' >> $filename
180
+    echo '</database>' >> $filename
181
+
182
+    echo $"Exported $filename"
183
+}
184
+
148 185
 while [[ $# > 1 ]]
149 186
 do
150 187
     key="$1"
@@ -183,6 +220,10 @@ do
183 220
             shift
184 221
             CURR_APP="${1}"
185 222
             ;;
223
+        --export)
224
+            shift
225
+            EXPORT_FILENAME="${1}"
226
+            ;;
186 227
         -p|--pass|--password|--passphrase)
187 228
             shift
188 229
             CURR_PASSWORD="${1}"
@@ -211,6 +252,11 @@ if [ $TESTS ]; then
211 252
     exit 0
212 253
 fi
213 254
 
255
+if [ $EXPORT_FILENAME ]; then
256
+    export_to_keepass $EXPORT_FILENAME
257
+    exit 0
258
+fi
259
+
214 260
 if [ ! $CURR_USERNAME ]; then
215 261
     echo $'Error: No username given'
216 262
     exit 1