add ID based delete and listing
This commit is contained in:
16
code/app.py
16
code/app.py
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user