modify shares
This commit is contained in:
@@ -3,6 +3,7 @@ import argparse,json,sys,os
|
|||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from tabulate import tabulate
|
from tabulate import tabulate
|
||||||
import hashlib
|
import hashlib
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
def get_folder_size(path):
|
def get_folder_size(path):
|
||||||
|
|
||||||
@@ -128,6 +129,7 @@ def add_share(shares, config, opts):
|
|||||||
date_object = datetime.strptime(opts.expire,"%Y-%m-%d %H:%M")
|
date_object = datetime.strptime(opts.expire,"%Y-%m-%d %H:%M")
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
print("Date format error")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
share.update({
|
share.update({
|
||||||
'expire': opts.expire
|
'expire': opts.expire
|
||||||
@@ -151,6 +153,64 @@ def add_share(shares, config, opts):
|
|||||||
print(json.dumps(share, indent = 2, sort_keys = True))
|
print(json.dumps(share, indent = 2, sort_keys = True))
|
||||||
|
|
||||||
|
|
||||||
|
def modify_share(shares, config, opts):
|
||||||
|
|
||||||
|
print("Modifying share: %s"%( opts.name, ))
|
||||||
|
found = False
|
||||||
|
for i,share in enumerate(shares):
|
||||||
|
if share['name'] != opts.name:
|
||||||
|
continue
|
||||||
|
orig_share = share.copy()
|
||||||
|
print(json.dumps(share, indent = 2, sort_keys = True))
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
print('no such share')
|
||||||
|
sys.exit(1)
|
||||||
|
if opts.path != None:
|
||||||
|
share['path'] = opts.path
|
||||||
|
for attr in ('public','upload','direct_links','overwrite'):
|
||||||
|
if getattr(opts,attr) != None:
|
||||||
|
share[attr] = getattr(opts,attr) == 'true'
|
||||||
|
if opts.plain:
|
||||||
|
share['pass_plain'] = opts.plain
|
||||||
|
if opts.hashed:
|
||||||
|
share['pass_hash'] = hashlib.sha1(opts.hashed).hexdigest()
|
||||||
|
if opts.expire:
|
||||||
|
try:
|
||||||
|
date_object = datetime.strptime(opts.expire,"%Y-%m-%d %H:%M")
|
||||||
|
except ValueError as e:
|
||||||
|
print(e)
|
||||||
|
print("Date format error")
|
||||||
|
sys.exit(1)
|
||||||
|
share['expire'] = opts.expire
|
||||||
|
|
||||||
|
if opts.insert:
|
||||||
|
shares[i] = share
|
||||||
|
shares_file = os.path.join(config['__root_path__'], opts.shares_file)
|
||||||
|
if os.path.exists(shares_file):
|
||||||
|
print("creating backup %s"%(shares_file+".bkp",))
|
||||||
|
copyfile(
|
||||||
|
shares_file,
|
||||||
|
shares_file+".bkp"
|
||||||
|
)
|
||||||
|
with open(shares_file,'wt') as fp:
|
||||||
|
json.dump(shares, fp, indent = 2, sort_keys = True)
|
||||||
|
print("Wrote file %s"%(shares_file,))
|
||||||
|
else:
|
||||||
|
print("Share not saved anywhere. Save with -i")
|
||||||
|
modified = []
|
||||||
|
for key in share:
|
||||||
|
if not key in orig_share:
|
||||||
|
modified.append(key)
|
||||||
|
continue
|
||||||
|
if orig_share[key] != share[key]:
|
||||||
|
modified.append(key)
|
||||||
|
continue
|
||||||
|
print("Modified values: %s"%(", ".join(modified)))
|
||||||
|
print(json.dumps(share, indent = 2, sort_keys = True))
|
||||||
|
|
||||||
|
|
||||||
def remove_share(shares,config,opts):
|
def remove_share(shares,config,opts):
|
||||||
name = opts.name
|
name = opts.name
|
||||||
share = [share for share in shares if share['name'] == name]
|
share = [share for share in shares if share['name'] == name]
|
||||||
@@ -301,7 +361,28 @@ def parse_options():
|
|||||||
help = "Allow direct file sharing (password hash included in URL)")
|
help = "Allow direct file sharing (password hash included in URL)")
|
||||||
parser_add.add_argument('--pass-plain', action="store", dest="plain", default = False)
|
parser_add.add_argument('--pass-plain', action="store", dest="plain", default = False)
|
||||||
parser_add.add_argument('--pass-hash', action="store", dest="hashed", default = False,
|
parser_add.add_argument('--pass-hash', action="store", dest="hashed", default = False,
|
||||||
help = "Hashed password allows use of login links and direct downloads")
|
help = "Hashed password enables use of login links and direct downloads")
|
||||||
|
parser_add.add_argument('-e','--expire', action="store", dest="expire", default = False,
|
||||||
|
help = "expire date in format '%%Y-%%m-%%d %%H:%%M' ex. '2018-12-24 21:00'"
|
||||||
|
)
|
||||||
|
parser_add.add_argument('-i','--insert', action="store_true", dest="insert", default = False,
|
||||||
|
help = "Insert new share directly in the shares.json file"
|
||||||
|
)
|
||||||
|
## Modify
|
||||||
|
parser_add = subparsers.add_parser('modify', help = "Modify share")
|
||||||
|
parser_add.add_argument('-n','--name', action="store", dest="name", required = True)
|
||||||
|
parser_add.add_argument('-p','--path', action="store", dest="path", default = None,
|
||||||
|
help= "path relative to data folder"
|
||||||
|
)
|
||||||
|
parser_add.add_argument('-P','--public', action="store", dest="public", default = None, choices = ['true','false'])
|
||||||
|
parser_add.add_argument('-u','--upload', action="store", dest="upload", default = None, choices = ['true','false'])
|
||||||
|
parser_add.add_argument('-o','--overwrite', action="store", dest="overwrite", default = None, choices = ['true','false'],
|
||||||
|
help = "Disable file overwrites")
|
||||||
|
parser_add.add_argument('-d','--direct', action="store", dest="direct_links", default = None, choices = ['true','false'],
|
||||||
|
help = "Allow direct file sharing (password hash included in URL)")
|
||||||
|
parser_add.add_argument('--pass-plain', action="store", dest="plain", default = False)
|
||||||
|
parser_add.add_argument('--pass-hash', action="store", dest="hashed", default = False,
|
||||||
|
help = "Hashed password enables use of login links and direct downloads")
|
||||||
parser_add.add_argument('-e','--expire', action="store", dest="expire", default = False,
|
parser_add.add_argument('-e','--expire', action="store", dest="expire", default = False,
|
||||||
help = "expire date in format '%%Y-%%m-%%d %%H:%%M' ex. '2018-12-24 21:00'"
|
help = "expire date in format '%%Y-%%m-%%d %%H:%%M' ex. '2018-12-24 21:00'"
|
||||||
)
|
)
|
||||||
@@ -347,6 +428,8 @@ if __name__ == "__main__":
|
|||||||
remove_share(shares,config,opts)
|
remove_share(shares,config,opts)
|
||||||
elif opts.subparser_name == 'add':
|
elif opts.subparser_name == 'add':
|
||||||
add_share(shares,config,opts)
|
add_share(shares,config,opts)
|
||||||
|
elif opts.subparser_name == 'modify':
|
||||||
|
modify_share(shares,config,opts)
|
||||||
elif opts.subparser_name == 'rest':
|
elif opts.subparser_name == 'rest':
|
||||||
print_rest_api(shares,config,opts)
|
print_rest_api(shares,config,opts)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user