reborking how shares are shown in manager

This commit is contained in:
Ville Rantanen
2018-03-02 14:08:40 +02:00
parent 464a5cc9bb
commit 9e4b2892d5
3 changed files with 75 additions and 26 deletions

View File

@@ -19,20 +19,13 @@ def get_root_path(opts):
def list_shares(shares,opts):
table = []
table.append(('Name', 'Path','Public','Password','Tokens','Upload','Overwrite','Direct','Expire','Recipient','Description'))
table.append(('Name', 'Path','Public','Password','APIToken','Upload','Overwrite','Direct','Expire','Recipient','Description'))
for share in shares:
public = get_or_none('public',share, False)
passtoken = '-'
password = 'pass_hash' in share
if opts.show_password:
if 'pass_plain' in share:
password = share['pass_plain']
else:
password = ""
if 'tokens' in share:
passtoken = ",".join(share['tokens'])
else:
passtoken = ""
tokens = 'tokens' in share
if tokens:
tokens = len(share['tokens']) > 0
upload = get_or_none('upload',share, False)
overwrite = get_or_none('overwrite',share, True)
direct = get_or_none('direct_links',share, False) if password else False
@@ -43,7 +36,7 @@ def list_shares(shares,opts):
share['path']+"/",
public,
password,
passtoken,
tokens,
upload,
overwrite,
direct,
@@ -88,8 +81,8 @@ def list_folders(shares,config):
def add_share(shares, config, opts):
# Make name and path safe:
opts.name = opts.name.decode('ascii','replace').replace(u'\uFFFD','_')
opts.path = opts.path.decode('ascii','replace').replace(u'\uFFFD','_')
opts.name = safe_name(opts.name)
opts.path = safe_path(opts.path)
# check for share name exists already
for share in shares:
@@ -124,7 +117,7 @@ def add_share(shares, config, opts):
'expire': opts.expire
})
print(json.dumps(share, indent = 2, sort_keys = True))
print_share(share, config)
if opts.write:
shares.append(share)
shares_file = os.path.join(config['__root_path__'], opts.shares_file)
@@ -143,7 +136,6 @@ def add_share(shares, config, opts):
print("Share not saved anywhere.")
def check_login(share, config):
import requests
print("Login link")
@@ -169,9 +161,6 @@ def check_login(share, config):
def modify_share(shares, config, opts):
# Make name safe:
opts.name = opts.name.decode('ascii','replace').replace(u'\uFFFD','_')
print("Modifying share: %s"%( opts.name, ))
found = False
for i,share in enumerate(shares):
@@ -180,14 +169,14 @@ def modify_share(shares, config, opts):
orig_share = dict(share)
if 'tokens' in share:
orig_share['tokens'] = list(share['tokens'])
print(json.dumps(share, indent = 2, sort_keys = True))
print_share(share, config)
found = True
break
if not found:
print('no such share')
sys.exit(1)
if opts.path != None:
share['path'] = opts.path.decode('ascii','replace').replace(u'\uFFFD','_')
share['path'] = safe_path(opts.path)
for attr in ('public','upload','direct_links','overwrite'):
if getattr(opts,attr) != None:
share[attr] = getattr(opts,attr) == 'true'
@@ -261,7 +250,7 @@ def modify_share(shares, config, opts):
if not key in share:
modified.append(key)
print("Modified values: %s"%(", ".join(modified)))
print(json.dumps(share, indent = 2, sort_keys = True))
print_share(share, config)
if not opts.write:
print("Share not saved anywhere.")
@@ -289,6 +278,30 @@ def remove_share(shares,config,opts):
print("Share was not actually removed. Use -w to rewrite shares file.")
def show_share(shares, config, opts):
found = False
for share in shares:
if share['name'] != opts.name:
continue
found = True
break
if not found:
print('no such share')
sys.exit(1)
if not opts.show_password:
if 'pass_plain' in share:
share['pass_plain'] = "--HIDDEN--"
if 'pass_hash' in share:
share['pass_hash'] = "--HIDDEN--"
if 'tokens' in share:
share['tokens'] = ["--HIDDEN--"]
if not 'expire' in share:
share['expire'] = "--NEVER--"
print_share(share, config)
def print_rest_api(shares, config, opts):
if 'public_url' not in config:
print("Set public_url variable in your config.json")
@@ -453,10 +466,31 @@ def print_rest_api_zip(config, share, token):
))
def print_share(share, config):
share = dict(share)
if 'tokens' in share:
share['tokens'] = list(share['tokens'])
data_folder = os.path.join(config['__root_path__'], config['data_folder'])
share_path = os.path.join(data_folder, share['path'])
share['path'] = share_path
if 'tokens' in share:
for i,token in enumerate(share['tokens']):
share['token%d'%(i+1,)] = token
del share['tokens']
table = [('name',share['name'])]
for key in sorted(share):
if key != 'name':
table.append((key,share[key]))
print(tabulate(table))
#~ print(json.dumps(share, indent = 2, sort_keys = True))
def print_token():
print(random_token())
def parse_options():
config_default = os.path.realpath(
os.path.join(
@@ -478,10 +512,13 @@ def parse_options():
subparsers = parser.add_subparsers(help='sub-command help', dest='subparser_name')
## list shares
parser_list = subparsers.add_parser('list', help = "List shares")
parser_list.add_argument('-P', action="store_true", dest="show_password", default = False,
help = "Display passwords")
## list folders
parser_folders = subparsers.add_parser('folders', help = "List folders and share names")
parser_folders = subparsers.add_parser('folders', help = "List the subfolders in data folder, and their disk usage")
## Show
parser_show = subparsers.add_parser('show', help = "Show share")
parser_show.add_argument('-P', action="store_true", dest="show_password", default = False,
help = "Display passwords")
parser_show.add_argument(dest="name")
## Remove
parser_remove = subparsers.add_parser('remove', help = "Remove a share")
parser_remove.add_argument(dest="name")
@@ -590,6 +627,8 @@ if __name__ == "__main__":
list_shares(shares,opts)
elif opts.subparser_name == 'folders':
list_folders(shares,config)
elif opts.subparser_name == 'show':
show_share(shares,config,opts)
elif opts.subparser_name == 'remove':
remove_share(shares,config,opts)
elif opts.subparser_name == 'add':