diff --git a/code/app.py b/code/app.py index 5c590b0..bcf3968 100644 --- a/code/app.py +++ b/code/app.py @@ -13,7 +13,7 @@ from revprox import ReverseProxied from utils import * -__FLEES_VERSION__ = "20190203.0" +__FLEES_VERSION__ = "20190830.0" app = Flask(__name__) app.config.from_object(__name__) config_values = read_config(app) @@ -321,7 +321,7 @@ def file_details(name, token): return share files = [] for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']): - status = file_stat(share['path'],file) + status = file_stat(share,file) files.append(status) return jsonify(files), 200 @@ -382,8 +382,9 @@ def file_ls(name, token): maxlen = max(maxlen, len(file)) details = [] details.append( - "%%16s %%8s %%-%ds %%s"%( maxlen, )%( + "%%16s %%4s %%8s %%-%ds %%s"%( maxlen, )%( 'Modified', + 'ToRm', 'Size', 'Name', 'Type', @@ -391,10 +392,11 @@ def file_ls(name, token): ) details.append("="*80) for file in files: - status = file_stat(share['path'],file) + status = file_stat(share,file) details.append( - "%%16s %%8s %%-%ds %%s"%( maxlen, )%( + "%%16s %%4s %%8s %%-%ds %%s"%( maxlen, )%( status['mtime'], + status['to_remove'], status['hsize'], status['name'], status['mime'], @@ -438,7 +440,7 @@ def list_view(name, token = None): for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']): if file_autoremove(file, share, notify): continue - status = file_stat(share['path'],file) + status = file_stat(share,file) status.update({ 'token': get_direct_token(share, file), }) @@ -465,7 +467,8 @@ def list_view(name, token = None): direct = allow_direct, expire = get_or_none('expire', share), description = get_or_none('description', share, ""), - script_api = script_api + script_api = script_api, + autoremove = get_or_none('autoremove', share, 0) ) @@ -605,7 +608,7 @@ def script_download(name = None, token = None): return share commands = [] for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']): - status = file_stat(share['path'], file) + status = file_stat(share, file) commands.append('get_file "%s"'%( status['url'], )) @@ -625,7 +628,7 @@ def script_direct(name = None, token = None): return share commands = [] for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']): - status = file_stat(share['path'], file) + status = file_stat(share, file) commands.append('get_file "%s" "%s"'%( status['url'], get_direct_token(share, file) diff --git a/code/static/css/styles.css b/code/static/css/styles.css index 4ca224c..7ab721d 100644 --- a/code/static/css/styles.css +++ b/code/static/css/styles.css @@ -63,7 +63,7 @@ h1 { margin-bottom: 1em; } td,th { - min-width: 10em; + min-width: 5em; padding-right: 2em; padding-top: 0.2em; padding-bottom: 0.2em; diff --git a/code/templates/flip b/code/templates/flip index 9aa98bf..609718e 100755 --- a/code/templates/flip +++ b/code/templates/flip @@ -62,12 +62,12 @@ _update_client() { } _list() { - curl -s "$FLEES_ROOTURL/file/ls/$FLEES_SHARE/$FLEES_TOKEN" + curl -L -s "$FLEES_ROOTURL/file/ls/$FLEES_SHARE/$FLEES_TOKEN" printf "\n" } _simple_list() { - curl -s "$FLEES_ROOTURL/file/list/$FLEES_SHARE/$FLEES_TOKEN" + curl -L -s "$FLEES_ROOTURL/file/list/$FLEES_SHARE/$FLEES_TOKEN" printf "\n" } @@ -101,13 +101,13 @@ _write() { } _write_folder() { # name, file - tar c "$2" | curl -F "file=@-;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - + tar c "$2" | curl -L -F "file=@-;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - } _write_file() { # name, file - curl -F "file=@$2;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - + curl -L -F "file=@$2;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" | cat - } _write_stdin() { # name - cat - | curl -F "file=@-;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" + cat - | curl -L -F "file=@-;filename=$1" "${FLEES_ROOTURL}upload/${FLEES_SHARE}/${FLEES_TOKEN}" } _read() { @@ -131,27 +131,27 @@ _read() { } _read_file() { # name, file - curl "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" -o "$2" + curl -L "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" -o "$2" } _read_stdout() { # name - curl -s "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" + curl -L -s "$FLEES_ROOTURL/download/$FLEES_SHARE/$FLEES_TOKEN/$1" } _delete() { # name read -p "Sure to delete: $1 ? Break to exit " foo - exitcode=$( curl -s "$FLEES_ROOTURL/file/delete/$FLEES_SHARE/$FLEES_TOKEN/$1" ) + exitcode=$( curl -L -s "$FLEES_ROOTURL/file/delete/$FLEES_SHARE/$FLEES_TOKEN/$1" ) if [[ ! "$exitcode" = "OK" ]]; then echo "Failed deletion" fi } _url() { # name - curl -s "$FLEES_ROOTURL/file/direct/$FLEES_SHARE/$FLEES_TOKEN/$1" + curl -L -s "$FLEES_ROOTURL/file/direct/$FLEES_SHARE/$FLEES_TOKEN/$1" echo '' } _upload_url() { echo "This information is a security risk, watch where it's shared" - echo "# python2 <( curl -s $FLEES_ROOTURL/script/upload_split/$FLEES_SHARE/$FLEES_TOKEN ) file_to_upload.ext" + echo "# python2 <( curl -L -s $FLEES_ROOTURL/script/upload_split/$FLEES_SHARE/$FLEES_TOKEN ) file_to_upload.ext" exit } _self_url() { diff --git a/code/templates/list.html b/code/templates/list.html index de41454..44d87eb 100644 --- a/code/templates/list.html +++ b/code/templates/list.html @@ -68,6 +68,9 @@ Name Size(MB) Mod.Time + {% if autoremove > 0 %} + Remove in + {% endif %} @@ -89,6 +92,9 @@ {% endif %} {{ entry.size|safe }} {{ entry.mtime|safe }} + {% if autoremove > 0 %} + {{ entry.to_remove | safe }} + {% endif %} {% endfor %} diff --git a/code/utils/files.py b/code/utils/files.py index 6fb5fdc..b20f4bf 100644 --- a/code/utils/files.py +++ b/code/utils/files.py @@ -154,9 +154,18 @@ def file_mime(filename): # magic not imported return "NA" -def file_stat(path, filename): - full_path = os.path.join(path, filename) +def file_stat(share, filename): + + full_path = os.path.join(share['path'], filename) s = os.stat(full_path) + autoremove = get_or_none('autoremove', share, 0) + if autoremove == 0: + to_remove = "NA" + else: + now = datetime.now() + then = datetime.fromtimestamp(s.st_mtime) + diff = now - then + to_remove = "%d d"%( autoremove - diff.days, ) return { 'size': file_size_MB(s.st_size), 'hsize': file_size_human(s.st_size, HTML = False), @@ -164,7 +173,8 @@ def file_stat(path, filename): 'name': filename, 'url': path2url(filename), 'editable': (s.st_size < 65536 and filename.endswith(".txt")), - 'mime': file_mime(full_path) + 'mime': file_mime(full_path), + 'to_remove': to_remove }