add ID based delete and listing

This commit is contained in:
q
2025-01-28 11:51:19 +02:00
parent 3da6a0f3c1
commit 7fcf30a68a
2 changed files with 26 additions and 8 deletions

View File

@@ -20,6 +20,7 @@ from utils.files import (
db_add_download, db_add_download,
db_delete_file, db_delete_file,
db_get_file, db_get_file,
db_get_name,
db_maintenance, db_maintenance,
db_store_file, db_store_file,
file_details, file_details,
@@ -45,7 +46,7 @@ logging.basicConfig(
format=f"[%(asctime)s] [%(levelname)s] %(message)s", format=f"[%(asctime)s] [%(levelname)s] %(message)s",
) )
__VERSION__ = "20250123.0" __VERSION__ = "20250128.0"
app = Flask(__name__) app = Flask(__name__)
app.config.from_object(__name__) app.config.from_object(__name__)
app.config.from_prefixed_env() app.config.from_prefixed_env()
@@ -195,9 +196,9 @@ def upload_token():
token = new_upload_token(expires) token = new_upload_token(expires)
return token, 200 return token, 200
@app.route("/details/<token>", methods=["GET"])
@app.route("/details/<token>/<name>", methods=["GET"]) @app.route("/details/<token>/<name>", methods=["GET"])
def details(token, name): def details(token, name=None):
""" """
Get JSON of file details. Size, added date, download times, etc. Get JSON of file details. Size, added date, download times, etc.
@@ -209,6 +210,8 @@ def details(token, name):
secret = request.headers.get("Secret", "") secret = request.headers.get("Secret", "")
if secret != app.config["ACCESS_TOKEN"]: if secret != app.config["ACCESS_TOKEN"]:
return "Error", 401 return "Error", 401
if name is None:
name = db_get_name(token)[0]
details = file_details(token, name) details = file_details(token, name)
if details["allowed_ip"] is not None: if details["allowed_ip"] is not None:
if not is_ip_allowed( if not is_ip_allowed(
@@ -218,17 +221,20 @@ def details(token, name):
return jsonify(details), 200 return jsonify(details), 200
@app.route("/delete/<token>", methods=["GET"])
@app.route("/delete/<token>/<name>", methods=["GET"]) @app.route("/delete/<token>/<name>", methods=["GET"])
def delete_file(name, token): def delete_file(token,name=None):
""" """
Delete a file from the system Delete a file from the system
""" """
secret = request.headers.get("Secret", "") secret = request.headers.get("Secret", "")
if secret != app.config["ACCESS_TOKEN"]: if secret != app.config["ACCESS_TOKEN"]:
return "Error", 401 return "Error", 401
if name is None:
name = db_get_name(token)[0]
try: try:
os.remove(os.path.join(app.config["DATAFOLDER"], token, name)) os.remove(os.path.join(app.config["DATAFOLDER"], token, name))
os.rmdir(os.path.join(app.config["DATAFOLDER"], token))
except Exception: except Exception:
pass pass
db_delete_file(token, name) db_delete_file(token, name)

View File

@@ -40,6 +40,18 @@ def db_get_file(token, name):
).fetchone() ).fetchone()
def db_get_name(token):
db, c = get_db()
return db.execute(
"""
SELECT name
FROM files WHERE token = ?
""",
(token,),
).fetchone()
def db_get_files(): def db_get_files():
db, c = get_db() db, c = get_db()
return db.execute( return db.execute(
@@ -212,7 +224,7 @@ def file_full_url(token, name):
def file_list(): def file_list():
details = [] details = []
details.append(" Added/Expiry DL/MaxDL URL") details.append(" Added/Expiry DL/MaxDL ID URL")
details.append("=" * 75) details.append("=" * 75)
for file in db_get_files(): for file in db_get_files():
url = file_full_url(file[0], file[1]) url = file_full_url(file[0], file[1])
@@ -221,7 +233,7 @@ def file_list():
pw = " (PW)" if file[6] else "" pw = " (PW)" if file[6] else ""
ips = f" [{file[7]}]" if file[7] else "" ips = f" [{file[7]}]" if file[7] else ""
details.append(f"{added}/{expiry} {file[4]:4d}/{file[5]:4d} {url}{pw}{ips}") details.append(f"{added}/{expiry} {file[4]:4d}/{file[5]:4d} {file[0]} {url}{pw}{ips}")
return details return details