curls follow redirects. file listings have days to removal
This commit is contained in:
21
code/app.py
21
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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -68,6 +68,9 @@
|
||||
<th>Name
|
||||
<th class=td_right>Size(MB)
|
||||
<th>Mod.Time
|
||||
{% if autoremove > 0 %}
|
||||
<th>Remove in
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -89,6 +92,9 @@
|
||||
{% endif %}
|
||||
<td class=td_right>{{ entry.size|safe }}
|
||||
<td>{{ entry.mtime|safe }}
|
||||
{% if autoremove > 0 %}
|
||||
<td class="td_right">{{ entry.to_remove | safe }}
|
||||
{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user