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
|
import argparse
import crypto
import database
import process
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Manage your username and passwords via a convenient CLI vault.')
# Top-level arguments
group_one = parser.add_mutually_exclusive_group()
group_one.add_argument(
'-n', '--new', help='Create a new account', action='store_true')
group_one.add_argument(
'-l', '--list', help='List all saved accounts', action='store_true')
group_one.add_argument(
'-e', '--edit', help='Edit a saved account', action='store_true')
group_one.add_argument(
'-d', '--delete', help='Delete a saved account', action='store_true')
group_one.add_argument(
'--purge', help='Purge all accounts and delete the vault',
action='store_true')
group_one.add_argument(
'--encrypt', help='Encrypt the vault', action='store_true')
group_one.add_argument(
'--decrypt', help='Decrypt the vault', action='store_true')
# Encryption flags
group_two = parser.add_mutually_exclusive_group()
group_two.add_argument(
'-g', '--generate',
help='When using the --encrypt option, generate a new encryption key',
action='store_true')
group_two.add_argument(
'-k', '--keyfile',
help='When using the --encrypt or --decrypt options, specify an existing key file path',
action='store', nargs=1, type=str)
# Edit flags
group_three = parser.add_argument_group()
group_three.add_argument(
'-u', '--uuid',
help='When using the --edit or --delete options, provide the account UUID',
action='store', nargs=1, type=str)
group_three.add_argument(
'-f', '--field',
help='When using the --edit option, provide the field to edit',
action='store', nargs=1, type=int)
args = parser.parse_args()
if args.decrypt:
if args.keyfile:
key = crypto.load_key(args.keyfile[0])
else:
key = input('Please enter your decryption key: ')
crypto.decrypt(key)
elif args.encrypt:
if args.generate:
key = crypto.generate_key()
print(
'WRITE THIS KEY DOWN SOMEWHERE SAFE. YOU WILL NOT BE ABLE TO DECRYPT YOUR DATA WITHOUT IT!')
print(key.decode())
print('\n')
else:
if args.keyfile:
key = crypto.load_key(args.keyfile[0])
else:
key = input('Please enter your encryption key: ')
crypto.encrypt(key)
elif database.table_check():
if args.new:
process.create_account()
elif args.list:
process.list_accounts()
elif args.edit:
process.edit_account(args.uuid[0], args.field[0])
elif args.delete:
process.delete_account(args.uuid[0])
elif args.purge:
process.purge_accounts()
else:
raise TypeError(
'Please specify a command or use the --help flag for more information.')
|