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 *
|
from utils import *
|
||||||
|
|
||||||
|
|
||||||
__FLEES_VERSION__ = "20190203.0"
|
__FLEES_VERSION__ = "20190830.0"
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_object(__name__)
|
app.config.from_object(__name__)
|
||||||
config_values = read_config(app)
|
config_values = read_config(app)
|
||||||
@@ -321,7 +321,7 @@ def file_details(name, token):
|
|||||||
return share
|
return share
|
||||||
files = []
|
files = []
|
||||||
for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']):
|
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)
|
files.append(status)
|
||||||
return jsonify(files), 200
|
return jsonify(files), 200
|
||||||
|
|
||||||
@@ -382,8 +382,9 @@ def file_ls(name, token):
|
|||||||
maxlen = max(maxlen, len(file))
|
maxlen = max(maxlen, len(file))
|
||||||
details = []
|
details = []
|
||||||
details.append(
|
details.append(
|
||||||
"%%16s %%8s %%-%ds %%s"%( maxlen, )%(
|
"%%16s %%4s %%8s %%-%ds %%s"%( maxlen, )%(
|
||||||
'Modified',
|
'Modified',
|
||||||
|
'ToRm',
|
||||||
'Size',
|
'Size',
|
||||||
'Name',
|
'Name',
|
||||||
'Type',
|
'Type',
|
||||||
@@ -391,10 +392,11 @@ def file_ls(name, token):
|
|||||||
)
|
)
|
||||||
details.append("="*80)
|
details.append("="*80)
|
||||||
for file in files:
|
for file in files:
|
||||||
status = file_stat(share['path'],file)
|
status = file_stat(share,file)
|
||||||
details.append(
|
details.append(
|
||||||
"%%16s %%8s %%-%ds %%s"%( maxlen, )%(
|
"%%16s %%4s %%8s %%-%ds %%s"%( maxlen, )%(
|
||||||
status['mtime'],
|
status['mtime'],
|
||||||
|
status['to_remove'],
|
||||||
status['hsize'],
|
status['hsize'],
|
||||||
status['name'],
|
status['name'],
|
||||||
status['mime'],
|
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']):
|
for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']):
|
||||||
if file_autoremove(file, share, notify):
|
if file_autoremove(file, share, notify):
|
||||||
continue
|
continue
|
||||||
status = file_stat(share['path'],file)
|
status = file_stat(share,file)
|
||||||
status.update({
|
status.update({
|
||||||
'token': get_direct_token(share, file),
|
'token': get_direct_token(share, file),
|
||||||
})
|
})
|
||||||
@@ -465,7 +467,8 @@ def list_view(name, token = None):
|
|||||||
direct = allow_direct,
|
direct = allow_direct,
|
||||||
expire = get_or_none('expire', share),
|
expire = get_or_none('expire', share),
|
||||||
description = get_or_none('description', 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
|
return share
|
||||||
commands = []
|
commands = []
|
||||||
for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']):
|
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"'%(
|
commands.append('get_file "%s"'%(
|
||||||
status['url'],
|
status['url'],
|
||||||
))
|
))
|
||||||
@@ -625,7 +628,7 @@ def script_direct(name = None, token = None):
|
|||||||
return share
|
return share
|
||||||
commands = []
|
commands = []
|
||||||
for file in iter_folder_files(share['path'], version_folder = app.config['VERSION_FOLDER']):
|
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"'%(
|
commands.append('get_file "%s" "%s"'%(
|
||||||
status['url'],
|
status['url'],
|
||||||
get_direct_token(share, file)
|
get_direct_token(share, file)
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ h1 {
|
|||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
}
|
}
|
||||||
td,th {
|
td,th {
|
||||||
min-width: 10em;
|
min-width: 5em;
|
||||||
padding-right: 2em;
|
padding-right: 2em;
|
||||||
padding-top: 0.2em;
|
padding-top: 0.2em;
|
||||||
padding-bottom: 0.2em;
|
padding-bottom: 0.2em;
|
||||||
|
|||||||
@@ -62,12 +62,12 @@ _update_client() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_list() {
|
_list() {
|
||||||
curl -s "$FLEES_ROOTURL/file/ls/$FLEES_SHARE/$FLEES_TOKEN"
|
curl -L -s "$FLEES_ROOTURL/file/ls/$FLEES_SHARE/$FLEES_TOKEN"
|
||||||
printf "\n"
|
printf "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
_simple_list() {
|
_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"
|
printf "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,13 +101,13 @@ _write() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_write_folder() { # name, file
|
_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
|
_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
|
_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() {
|
_read() {
|
||||||
@@ -131,27 +131,27 @@ _read() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_read_file() { # name, file
|
_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
|
_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
|
_delete() { # name
|
||||||
read -p "Sure to delete: $1 ? Break to exit " foo
|
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
|
if [[ ! "$exitcode" = "OK" ]]; then
|
||||||
echo "Failed deletion"
|
echo "Failed deletion"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_url() { # name
|
_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 ''
|
echo ''
|
||||||
}
|
}
|
||||||
_upload_url() {
|
_upload_url() {
|
||||||
echo "This information is a security risk, watch where it's shared"
|
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
|
exit
|
||||||
}
|
}
|
||||||
_self_url() {
|
_self_url() {
|
||||||
|
|||||||
@@ -68,6 +68,9 @@
|
|||||||
<th>Name
|
<th>Name
|
||||||
<th class=td_right>Size(MB)
|
<th class=td_right>Size(MB)
|
||||||
<th>Mod.Time
|
<th>Mod.Time
|
||||||
|
{% if autoremove > 0 %}
|
||||||
|
<th>Remove in
|
||||||
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -89,6 +92,9 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<td class=td_right>{{ entry.size|safe }}
|
<td class=td_right>{{ entry.size|safe }}
|
||||||
<td>{{ entry.mtime|safe }}
|
<td>{{ entry.mtime|safe }}
|
||||||
|
{% if autoremove > 0 %}
|
||||||
|
<td class="td_right">{{ entry.to_remove | safe }}
|
||||||
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@@ -154,9 +154,18 @@ def file_mime(filename):
|
|||||||
# magic not imported
|
# magic not imported
|
||||||
return "NA"
|
return "NA"
|
||||||
|
|
||||||
def file_stat(path, filename):
|
def file_stat(share, filename):
|
||||||
full_path = os.path.join(path, filename)
|
|
||||||
|
full_path = os.path.join(share['path'], filename)
|
||||||
s = os.stat(full_path)
|
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 {
|
return {
|
||||||
'size': file_size_MB(s.st_size),
|
'size': file_size_MB(s.st_size),
|
||||||
'hsize': file_size_human(s.st_size, HTML = False),
|
'hsize': file_size_human(s.st_size, HTML = False),
|
||||||
@@ -164,7 +173,8 @@ def file_stat(path, filename):
|
|||||||
'name': filename,
|
'name': filename,
|
||||||
'url': path2url(filename),
|
'url': path2url(filename),
|
||||||
'editable': (s.st_size < 65536 and filename.endswith(".txt")),
|
'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