From 1a35e2ec6a68cda95689be8a0482aa1acb290ef1 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 28 Oct 2022 00:37:24 +0200 Subject: [PATCH] refactor banned domains --- files/helpers/get.py | 19 ------------------- files/helpers/sanitize.py | 21 ++++++--------------- files/routes/posts.py | 6 ++++++ files/templates/submit.html | 2 +- 4 files changed, 13 insertions(+), 35 deletions(-) diff --git a/files/helpers/get.py b/files/helpers/get.py index 43240a0e84..2b987a7534 100644 --- a/files/helpers/get.py +++ b/files/helpers/get.py @@ -299,22 +299,3 @@ def get_sub_by_name(sub, v=None, graceful=False) -> Optional[Sub]: if graceful: return None else: abort(404) return sub - -def get_domain(s) -> Optional[BannedDomain]: - parts = s.split(".") - domain_list = set() - for i in range(len(parts)): - new_domain = parts[i] - for j in range(i + 1, len(parts)): - new_domain += "." + parts[j] - - domain_list.add(new_domain) - - doms = g.db.query(BannedDomain).filter(BannedDomain.domain.in_(domain_list)).all() - - if not doms: - return None - - doms = sorted(doms, key=lambda x: len(x.domain), reverse=True) - - return doms[0] diff --git a/files/helpers/sanitize.py b/files/helpers/sanitize.py index 4577f6325c..4a82cfcf9c 100644 --- a/files/helpers/sanitize.py +++ b/files/helpers/sanitize.py @@ -363,25 +363,16 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys domain_list = set() for link in links: - href = link.get("href") if not href: continue - url = urlparse(href) - domain = url.netloc - url_path = url.path - domain_list.add(domain+url_path) + domain_list.add(url.netloc + url.path) - parts = domain.split(".") - for i in range(len(parts)): - new_domain = parts[i] - for j in range(i + 1, len(parts)): - new_domain += "." + parts[j] - domain_list.add(new_domain) - - bans = g.db.query(BannedDomain.domain).filter(BannedDomain.domain.in_(list(domain_list))).all() - - if bans: abort(403, description=f"Remove the banned domains {bans} and try again!") + banned_domains = g.db.query(BannedDomain).all() + for x in banned_domains: + for y in domain_list: + if y.startswith(x.domain): + abort(403, description=f'Remove the banned link "{x.domain}" and try again!\nReason for link ban: "{x.reason}"') if '
' not in sanitized:
 		sanitized = sanitized.replace('\n','')
diff --git a/files/routes/posts.py b/files/routes/posts.py
index 82a8a91a87..668a4418fe 100644
--- a/files/routes/posts.py
+++ b/files/routes/posts.py
@@ -784,6 +784,12 @@ def submit_post(v, sub=None):
 		if repost and FEATURES['REPOST_DETECTION'] and not v.admin_level >= PERMS['POST_BYPASS_REPOST_CHECKING']:
 			return redirect(repost.permalink)
 
+		y = domain + parsed_url.path
+		banned_domains = g.db.query(BannedDomain).all()
+		for x in banned_domains:
+			if y.startswith(x.domain):
+				return error(f'Remove the banned link "{x.domain}" and try again!
Reason for link ban: "{x.reason}"') + domain_obj = get_domain(domain) if not domain_obj: domain_obj = get_domain(domain+parsed_url.path) diff --git a/files/templates/submit.html b/files/templates/submit.html index ddc7dca5ba..dd5f4fdc27 100644 --- a/files/templates/submit.html +++ b/files/templates/submit.html @@ -154,7 +154,7 @@ Cancel
- {% if error %}{{error}}{% endif %} + {% if error %}{{error | safe}}{% endif %}