refactor banned domains

remotes/1693176582716663532/tmp_refs/heads/watchparty
Aevann1 2022-10-28 00:37:24 +02:00
parent be7be28182
commit 1a35e2ec6a
4 changed files with 13 additions and 35 deletions

View File

@ -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]

View File

@ -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 '<pre>' not in sanitized:
sanitized = sanitized.replace('\n','')

View File

@ -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!<br>Reason for link ban: "{x.reason}"')
domain_obj = get_domain(domain)
if not domain_obj: domain_obj = get_domain(domain+parsed_url.path)

View File

@ -154,7 +154,7 @@
<a href="/" class="btn btn-secondary">Cancel</a>
</div>
<div class="col text-right">
{% if error %}<span class="text-danger text-large mr-2">{{error}}</span>{% endif %}
{% if error %}<span class="text-danger text-large mr-2">{{error | safe}}</span>{% endif %}
<button class="btn btn-primary" id="create_button" type="submit" onclick="disable(this)" disabled>Post</button>
</div>
</div>