add /admin/delete_media
parent
5e68334ff5
commit
288fcde832
|
@ -482,15 +482,17 @@ PERMS = { # Minimum admin_level to perform action.
|
||||||
|
|
||||||
'PROGSTACK': 5,
|
'PROGSTACK': 5,
|
||||||
|
|
||||||
'USER_BLACKLIST': 6,
|
'DELETE_MEDIA': 6,
|
||||||
'POST_EDITING': 6,
|
|
||||||
'VIEW_PATRONS': 6,
|
'USER_BLACKLIST': 7,
|
||||||
'BLACKJACK_NOTIFICATIONS': 6,
|
'POST_EDITING': 7,
|
||||||
'IGNORE_BADGE_BLACKLIST': 6,
|
'VIEW_PATRONS': 7,
|
||||||
'UNDO_AWARD_PINS': 6,
|
'BLACKJACK_NOTIFICATIONS': 7,
|
||||||
'SEE_GHOST_VOTES': 6,
|
'IGNORE_BADGE_BLACKLIST': 7,
|
||||||
'MODS_EVERY_HOLE': 6,
|
'UNDO_AWARD_PINS': 7,
|
||||||
'VIEW_DM_IMAGES': 6,
|
'SEE_GHOST_VOTES': 7,
|
||||||
|
'MODS_EVERY_HOLE': 7,
|
||||||
|
'VIEW_DM_IMAGES': 7,
|
||||||
}
|
}
|
||||||
|
|
||||||
FEATURES = {
|
FEATURES = {
|
||||||
|
|
|
@ -46,6 +46,11 @@ MODACTION_TYPES = {
|
||||||
"icon": 'fa-lock',
|
"icon": 'fa-lock',
|
||||||
"color": 'bg-danger'
|
"color": 'bg-danger'
|
||||||
},
|
},
|
||||||
|
'delete_media': {
|
||||||
|
"str": 'deleted media',
|
||||||
|
"icon": 'fa-trash-alt',
|
||||||
|
"color": 'bg-danger'
|
||||||
|
},
|
||||||
'delete_report': {
|
'delete_report': {
|
||||||
"str": 'deleted report on {self.target_link}',
|
"str": 'deleted report on {self.target_link}',
|
||||||
"icon": 'fa-flag',
|
"icon": 'fa-flag',
|
||||||
|
|
|
@ -196,3 +196,5 @@ discord_username_regex = re.compile("(\s|^|>).{2,32}#[0-9]{4}(?=[^0-9]|$)", flag
|
||||||
numbered_list_regex = re.compile('((\s|^)[0-9]+)\. ', flags=re.A)
|
numbered_list_regex = re.compile('((\s|^)[0-9]+)\. ', flags=re.A)
|
||||||
|
|
||||||
comment_link_regex = re.compile("/[0-9]+$", flags=re.A)
|
comment_link_regex = re.compile("/[0-9]+$", flags=re.A)
|
||||||
|
|
||||||
|
media_deletion_regex = re.compile(f"{SITE_FULL}\/(chat_)?(images|videos)\/[0-9]{{11,17}}\.(webp|{video_regex_extensions})", flags=re.A)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import time
|
import time
|
||||||
from urllib.parse import quote, urlencode
|
from urllib.parse import quote, urlencode
|
||||||
from math import floor
|
from math import floor
|
||||||
|
import os
|
||||||
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from psycopg2.errors import UniqueViolation
|
from psycopg2.errors import UniqueViolation
|
||||||
|
@ -1649,3 +1650,39 @@ def unblacklist_user(user_id, v):
|
||||||
g.db.add(ma)
|
g.db.add(ma)
|
||||||
|
|
||||||
return {"message": f"@{user.username} has been unblacklisted from restricted holes!"}
|
return {"message": f"@{user.username} has been unblacklisted from restricted holes!"}
|
||||||
|
|
||||||
|
@app.get('/admin/delete_media')
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
|
||||||
|
@admin_level_required(PERMS['DELETE_MEDIA'])
|
||||||
|
def delete_media_get(v):
|
||||||
|
return render_template("admin/delete_media.html", v=v)
|
||||||
|
|
||||||
|
@app.post("/admin/delete_media")
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT_SLOWER)
|
||||||
|
@limiter.limit(DEFAULT_RATELIMIT_SLOWER, key_func=get_ID)
|
||||||
|
@admin_level_required(PERMS['DELETE_MEDIA'])
|
||||||
|
def delete_media_post(v):
|
||||||
|
|
||||||
|
url = request.values.get("url")
|
||||||
|
if not url:
|
||||||
|
return render_template("admin/delete_media.html", v=v, url=url, error="No url provided!")
|
||||||
|
|
||||||
|
if not media_deletion_regex.fullmatch(url):
|
||||||
|
return render_template("admin/delete_media.html", v=v, url=url, error="Invalid url!")
|
||||||
|
|
||||||
|
path = url.split(SITE_FULL)[1]
|
||||||
|
|
||||||
|
if not os.path.isfile(path):
|
||||||
|
return render_template("admin/delete_media.html", v=v, url=url, error="File not found on the server!")
|
||||||
|
|
||||||
|
os.remove(path)
|
||||||
|
|
||||||
|
ma=ModAction(
|
||||||
|
kind="delete_media",
|
||||||
|
user_id=v.id,
|
||||||
|
_note=url,
|
||||||
|
)
|
||||||
|
g.db.add(ma)
|
||||||
|
|
||||||
|
purge_files_in_cache(url)
|
||||||
|
return render_template("admin/delete_media.html", v=v, msg="Media deleted successfully!")
|
||||||
|
|
|
@ -68,6 +68,9 @@
|
||||||
|
|
||||||
<h4>Safety</h4>
|
<h4>Safety</h4>
|
||||||
<ul>
|
<ul>
|
||||||
|
{% if v.admin_level >= PERMS['DELETE_MEDIA'] %}
|
||||||
|
<li><a href="/admin/delete_media">Delete Media</a></li>
|
||||||
|
{% endif %}
|
||||||
{% if v.admin_level >= PERMS['DOMAINS_BAN'] %}
|
{% if v.admin_level >= PERMS['DOMAINS_BAN'] %}
|
||||||
<li><a href="/admin/banned_domains">Banned Domains</a></li>
|
<li><a href="/admin/banned_domains">Banned Domains</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
{% extends "default.html" %}
|
||||||
|
|
||||||
|
{% block pagetitle %}Delete Media{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
{% if error %}{{macros.alert(error, true)}}{% endif %}
|
||||||
|
{% if msg %}{{macros.alert(msg, false)}}{% endif %}
|
||||||
|
<form class="mt-3" action="/admin/delete_media" method="post">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center mb-4 pb-6">
|
||||||
|
<div class="col col-md-6 p-3 py-md-0">
|
||||||
|
<h1 class="d-mob-none">Delete Media</h1>
|
||||||
|
<h3 class=" d-md-none">Delete Media</h3>
|
||||||
|
<div class="body">
|
||||||
|
<input hidden name="formkey" value="{{v|formkey}}">
|
||||||
|
<label>URL</label>
|
||||||
|
<input class="form-control" type="url" name="url" required {% if url %}value="{{url}}"{% endif %}>
|
||||||
|
<div class="footer">
|
||||||
|
<div class="d-flex">
|
||||||
|
<button type="submit" class="btn btn-primary ml-auto">Delete</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue