forked from rDrama/rDrama
refactor banned domains
parent
be7be28182
commit
1a35e2ec6a
|
@ -299,22 +299,3 @@ def get_sub_by_name(sub, v=None, graceful=False) -> Optional[Sub]:
|
||||||
if graceful: return None
|
if graceful: return None
|
||||||
else: abort(404)
|
else: abort(404)
|
||||||
return sub
|
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]
|
|
||||||
|
|
|
@ -363,25 +363,16 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
|
||||||
domain_list = set()
|
domain_list = set()
|
||||||
|
|
||||||
for link in links:
|
for link in links:
|
||||||
|
|
||||||
href = link.get("href")
|
href = link.get("href")
|
||||||
if not href: continue
|
if not href: continue
|
||||||
|
|
||||||
url = urlparse(href)
|
url = urlparse(href)
|
||||||
domain = url.netloc
|
domain_list.add(url.netloc + url.path)
|
||||||
url_path = url.path
|
|
||||||
domain_list.add(domain+url_path)
|
|
||||||
|
|
||||||
parts = domain.split(".")
|
banned_domains = g.db.query(BannedDomain).all()
|
||||||
for i in range(len(parts)):
|
for x in banned_domains:
|
||||||
new_domain = parts[i]
|
for y in domain_list:
|
||||||
for j in range(i + 1, len(parts)):
|
if y.startswith(x.domain):
|
||||||
new_domain += "." + parts[j]
|
abort(403, description=f'Remove the banned link "{x.domain}" and try again!\nReason for link ban: "{x.reason}"')
|
||||||
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!")
|
|
||||||
|
|
||||||
if '<pre>' not in sanitized:
|
if '<pre>' not in sanitized:
|
||||||
sanitized = sanitized.replace('\n','')
|
sanitized = sanitized.replace('\n','')
|
||||||
|
|
|
@ -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']:
|
if repost and FEATURES['REPOST_DETECTION'] and not v.admin_level >= PERMS['POST_BYPASS_REPOST_CHECKING']:
|
||||||
return redirect(repost.permalink)
|
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)
|
domain_obj = get_domain(domain)
|
||||||
if not domain_obj: domain_obj = get_domain(domain+parsed_url.path)
|
if not domain_obj: domain_obj = get_domain(domain+parsed_url.path)
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
<a href="/" class="btn btn-secondary">Cancel</a>
|
<a href="/" class="btn btn-secondary">Cancel</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col text-right">
|
<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>
|
<button class="btn btn-primary" id="create_button" type="submit" onclick="disable(this)" disabled>Post</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue