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_delete_file,
db_get_file,
db_get_name,
db_maintenance,
db_store_file,
file_details,
@@ -45,7 +46,7 @@ logging.basicConfig(
format=f"[%(asctime)s] [%(levelname)s] %(message)s",
)
__VERSION__ = "20250123.0"
__VERSION__ = "20250128.0"
app = Flask(__name__)
app.config.from_object(__name__)
app.config.from_prefixed_env()
@@ -195,9 +196,9 @@ def upload_token():
token = new_upload_token(expires)
return token, 200
@app.route("/details/<token>", 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.
@@ -209,6 +210,8 @@ def details(token, name):
secret = request.headers.get("Secret", "")
if secret != app.config["ACCESS_TOKEN"]:
return "Error", 401
if name is None:
name = db_get_name(token)[0]
details = file_details(token, name)
if details["allowed_ip"] is not None:
if not is_ip_allowed(
@@ -218,17 +221,20 @@ def details(token, name):
return jsonify(details), 200
@app.route("/delete/<token>", 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
"""
secret = request.headers.get("Secret", "")
if secret != app.config["ACCESS_TOKEN"]:
return "Error", 401
if name is None:
name = db_get_name(token)[0]
try:
os.remove(os.path.join(app.config["DATAFOLDER"], token, name))
os.rmdir(os.path.join(app.config["DATAFOLDER"], token))
except Exception:
pass
db_delete_file(token, name)

View File

@@ -35,11 +35,23 @@ def db_get_file(token, name):
"""
SELECT added,expires,downloads,max_downloads,passhash,hidden,allowed_ip
FROM files WHERE token = ? AND name = ?
""",
""",
(token, name),
).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():
db, c = get_db()
return db.execute(
@@ -212,7 +224,7 @@ def file_full_url(token, name):
def file_list():
details = []
details.append(" Added/Expiry DL/MaxDL URL")
details.append(" Added/Expiry DL/MaxDL ID URL")
details.append("=" * 75)
for file in db_get_files():
url = file_full_url(file[0], file[1])
@@ -221,7 +233,7 @@ def file_list():
pw = " (PW)" if file[6] 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