master
Aevann1 2022-04-18 18:01:03 +02:00
parent 743215e2d0
commit d7fa942d85
4 changed files with 19 additions and 18 deletions

View File

@ -473,12 +473,12 @@ class Submission(Base):
@property @property
@lazy @lazy
def is_video(self): def is_video(self):
return self.url and any((self.url.lower().endswith(x) for x in ('.mp4','.webm','.mov'))) and video_regex.fullmatch(self.url) return self.url and any((self.url.lower().endswith(x) for x in ('.mp4','.webm','.mov'))) and embed_fullmatch_regex.fullmatch(self.url)
@property @property
@lazy @lazy
def is_image(self): def is_image(self):
if self.url and (self.url.lower().endswith('.webp') or self.url.lower().endswith('.jpg') or self.url.lower().endswith('.png') or self.url.lower().endswith('.gif') or self.url.lower().endswith('.jpeg') or self.url.lower().endswith('?maxwidth=9999') or self.url.lower().endswith('&fidelity=high')) and (self.url.startswith('/') or self.url.startswith(f'{SITE_FULL}/') or embed_check_regex.fullmatch(self.url)): if self.url and (self.url.lower().endswith('.webp') or self.url.lower().endswith('.jpg') or self.url.lower().endswith('.png') or self.url.lower().endswith('.gif') or self.url.lower().endswith('.jpeg') or self.url.lower().endswith('?maxwidth=9999') or self.url.lower().endswith('&fidelity=high')) and (self.url.startswith('/') or self.url.startswith(f'{SITE_FULL}/') or embed_fullmatch_regex.fullmatch(self.url)):
return True return True
return False return False

View File

@ -702,10 +702,6 @@ spoiler_regex = re.compile('''\|\|(.+)\|\|''', flags=re.A)
reddit_regex = re.compile('(^|\s|<p>)\/?((r|u)\/(\w|-){3,25})', flags=re.A) reddit_regex = re.compile('(^|\s|<p>)\/?((r|u)\/(\w|-){3,25})', flags=re.A)
sub_regex = re.compile('(^|\s|<p>)\/?(h\/(\w|-){3,25})', flags=re.A) sub_regex = re.compile('(^|\s|<p>)\/?(h\/(\w|-){3,25})', flags=re.A)
imgur_regex = re.compile('(https://i\.imgur\.com/([a-z0-9]+))\.(jpg|png|jpeg|webp)(?!<\/(code|pre|a)>)', flags=re.I|re.A)
youtube_regex = regex.compile('(?<!<(code|pre|a)>)https:\/\/youtube\.com\/watch\?v\=([a-z0-9-_]{5,20})[\w\-.#&/=\?@%+]*', flags=regex.I|regex.A)
yt_id_regex = re.compile('[a-z0-9-_]{5,20}', flags=re.I|re.A)
strikethrough_regex = re.compile('''~{1,2}([^~]+)~{1,2}''', flags=re.A) strikethrough_regex = re.compile('''~{1,2}([^~]+)~{1,2}''', flags=re.A)
mute_regex = re.compile("/mute @([a-z0-9_\-]{3,25}) ([0-9])+", flags=re.A) mute_regex = re.compile("/mute @([a-z0-9_\-]{3,25}) ([0-9])+", flags=re.A)
@ -811,6 +807,12 @@ hosts = "|".join(approved_embed_hosts).replace('.','\.')
image_check_regex = re.compile(f'!\[\]\(((?!(https:\/\/([a-z0-9-]+\.)*({hosts})\/|\/images\/)).*?)\)', flags=re.A) image_check_regex = re.compile(f'!\[\]\(((?!(https:\/\/([a-z0-9-]+\.)*({hosts})\/|\/images\/)).*?)\)', flags=re.A)
embed_check_regex = regex.compile(f'(?<!<(code|pre|a)>)https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*', flags=regex.A) embed_fullmatch_regex = re.compile(f'https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*', flags=re.A)
video_regex = regex.compile(f'((?<!<(code|pre|a)>)https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*?\.(mp4|webm|mov))', flags=regex.A) video_sub_regex = re.compile(f'(<p>[^<]*)(https:\/\/([a-z0-9-]+\.)*({hosts})\/[\w:~,()\-.#&\/=?@%;+]*?\.(mp4|webm|mov))', flags=re.A)
imgur_regex = re.compile('(https://i\.imgur\.com/([a-z0-9]+))\.(jpg|png|jpeg|webp)(?!<\/(code|pre|a)>)', flags=re.I|re.A)
youtube_regex = re.compile('(<p>[^<]*)(https:\/\/youtube\.com\/watch\?v\=([a-z0-9-_]{5,20})[\w\-.#&/=\?@%+]*)', flags=re.I|re.A)
yt_id_regex = re.compile('[a-z0-9-_]{5,20}', flags=re.I|re.A)

View File

@ -37,7 +37,7 @@ def allowed_attributes(tag, name, value):
if tag == 'img': if tag == 'img':
if name in ['src','data-src']: if name in ['src','data-src']:
if value.startswith('/') or value.startswith(f'{SITE_FULL}/') or embed_check_regex.fullmatch(value): return True if value.startswith('/') or value.startswith(f'{SITE_FULL}/') or embed_fullmatch_regex.fullmatch(value): return True
else: return False else: return False
if name == 'loading' and value == 'lazy': return True if name == 'loading' and value == 'lazy': return True
@ -57,7 +57,7 @@ def allowed_attributes(tag, name, value):
return False return False
if tag == 'source': if tag == 'source':
return True if name == 'src' and embed_fullmatch_regex.fullmatch(value): return True
return False return False
if tag == 'p': if tag == 'p':
@ -215,21 +215,20 @@ def sanitize(sanitized, alert=False, comment=False, edit=False):
captured = [] captured = []
for i in youtube_regex.finditer(sanitized): for i in youtube_regex.finditer(sanitized):
url = i.group(0) if i.group(0) in captured: continue
if url in captured: continue captured.append(i.group(0))
captured.append(url)
params = parse_qs(urlparse(url.replace('&amp;','&')).query) params = parse_qs(urlparse(i.group(2).replace('&amp;','&')).query)
t = params.get('t', params.get('start', [0]))[0] t = params.get('t', params.get('start', [0]))[0]
if isinstance(t, str): t = t.replace('s','') if isinstance(t, str): t = t.replace('s','')
htmlsource = f'<lite-youtube videoid="{i.group(2)}" params="autoplay=1&modestbranding=1' htmlsource = f'{i.group(1)}<lite-youtube videoid="{i.group(3)}" params="autoplay=1&modestbranding=1'
if t: htmlsource += f'&start={t}' if t: htmlsource += f'&start={t}'
htmlsource += '"></lite-youtube>' htmlsource += '"></lite-youtube>'
sanitized = sanitized.replace(url, htmlsource) sanitized = sanitized.replace(i.group(0), htmlsource)
sanitized = video_regex.sub(r'<video controls preload="none"><source src="\1"></video>', sanitized) sanitized = video_sub_regex.sub(r'\1<video controls preload="none"><source src="\2"></video>', sanitized)
if comment: if comment:
for marsey in g.db.query(Marsey).filter(Marsey.name.in_(marseys_used)).all(): for marsey in g.db.query(Marsey).filter(Marsey.name.in_(marseys_used)).all():

View File

@ -41,7 +41,7 @@
<a href="/h/{{sub.name}}" class="font-weight-bold ml-2 flex-grow-1 mt-1" style="font-size:max(14px,1.2vw)">/h/{{sub.name}}</a> <a href="/h/{{sub.name}}" class="font-weight-bold ml-2 flex-grow-1 mt-1" style="font-size:max(14px,1.2vw)">/h/{{sub.name}}</a>
{% elif SITE_NAME == 'rDrama' %} {% elif SITE_NAME == 'rDrama' %}
<a href="/" class="flex-grow-1"> <a href="/" class="flex-grow-1">
<img alt="logo" src="/assets/images/{{SITE_NAME}}/logo.webp?v=1011" height=20 width=97> <img alt="logo" src="/assets/images/{{SITE_NAME}}/logo.webp?v=1011" height=15 width=73>
</a> </a>
{% endif %} {% endif %}