1 import os
2 import sys
3 from .api import BootLegger
4 from ConfigParser import SafeConfigParser as ConfigParser
5 import json
6 import getpass
7 from .cryptfile import encrypt_file, decrypt_file
8 from Crypto import Random
9 from argparse import ArgumentParser
10
11 DEFAULT_HOST = 'localhost'
12
87
89 conf = ConfigParser()
90 conf.read([os.path.expanduser('~/.bootlegger/bootlegger.conf')])
91
92 if len(sys.argv) < 2:
93 print "Usage: " + sys.argv[0] + " subcommand [args ... ]"
94 exit(1)
95
96 host = conf.get('speakeasy', 'host') or DEFAULT_HOST
97 username = conf.get('speakeasy', 'username') or getpass.getuser()
98
99 parser = ArgumentParser(description='interact with speakeasy')
100 parser.add_argument('subcommand', help='one of list, upload, download, share, addkey, versions')
101 parser.add_argument('subargs', nargs='*', help='arguments for subcommand')
102 parser.add_argument('--host', dest='host',
103 help='the host on which speakeasy is running')
104 parser.add_argument('--username', dest='username',
105 help='username to use when authenticating')
106 parser.add_argument('-p', '--prefix', dest='prefix',
107 help='the prefix you wish to use for all uploaded files')
108 parser.add_argument('-d', '--directory', dest='directory',
109 help='the directory to which files should be downloaded')
110
111 args = parser.parse_args()
112
113 if args.username: username = args.username
114 if args.host: host = args.host
115
116 pubkeyfname = '~/.bootlegger/' + username + '_public.pem'
117 privkeyfname = '~/.bootlegger/' + username + '_private.pem'
118
119 pubkey = open(os.path.expanduser(pubkeyfname)).read()
120 privkey = open(os.path.expanduser(privkeyfname)).read()
121
122 if 'ENCRYPTED' in privkey:
123 password = getpass.getpass('Password: ')
124 else:
125 password = ''
126
127 errmsg = perform_action(host, username, password, pubkey, privkey, args)
128
129 if errmsg:
130 print(errmsg)
131 sys.exit(1)
132
133
135 if len(sys.argv) < 3:
136 print 'Usage: ' + sys.argv[0] + ' infile keyfile'
137 exit(1)
138
139 infname = sys.argv[1]
140 outfname = sys.argv[1] + '.bootleg'
141
142 with open(sys.argv[2], 'rb') as f:
143 key = f.read()
144
145 encrypt_file(infname, outfname, key)
146
148 if len(sys.argv) < 3:
149 print 'Usage: ' + sys.argv[0] + ' infile keyfile'
150 exit(1)
151
152 infname = sys.argv[1]
153 outfname, suffix = os.path.splitext(infname)
154
155 if suffix != '.bootleg':
156 print 'Input must be a .bootleg file'
157 exit(1)
158
159 with open(sys.argv[2], 'rb') as f:
160 key = f.read()
161
162 decrypt_file(infname, outfname, key)
163
165 if len(sys.argv) < 2:
166 f = sys.stdout
167 else:
168 f = open(sys.argv[1], 'wb')
169
170 key = Random.new().read(32)
171 f.write(key)
172
173 f.close()
174