mirror of https://gitlab.com/bashrc2/epicyon
Merge branch 'main' of gitlab.com:bashrc2/epicyon
commit
c5cc5528ce
|
@ -1,23 +1,28 @@
|
|||
# Caddy configuration file for running epicyon on example.com
|
||||
# Example configuration file for running Caddy2 in front of Epicyon
|
||||
|
||||
example.com {
|
||||
tls {
|
||||
# Valid values are rsa2048, rsa4096, rsa8192, p256, and p384.
|
||||
# Default is currently p256.
|
||||
key_type p384
|
||||
}
|
||||
header / Strict-Transport-Security "max-age=31556925"
|
||||
header / X-Content-Type-Options "nosniff"
|
||||
header / X-Download-Options "noopen"
|
||||
header / X-Frame-Options "DENY"
|
||||
header / X-Permitted-Cross-Domain-Policies "none"
|
||||
header / X-Robots-Tag "noindex"
|
||||
header / X-XSS-Protection "1; mode=block"
|
||||
YOUR_DOMAIN {
|
||||
tls USER@YOUR_DOMAIN
|
||||
|
||||
proxy / http://localhost:7156 {
|
||||
transparent
|
||||
timeout 10800s
|
||||
header {
|
||||
Strict-Transport-Security "max-age=31556925"
|
||||
Content-Security-Policy "default-src https:; script-src https: 'unsafe-inline'; style-src https: 'unsafe-inline'"
|
||||
X-Content-Type-Options "nosniff"
|
||||
X-Download-Options "noopen"
|
||||
X-Frame-Options "DENY"
|
||||
X-Permitted-Cross-Domain-Policies "none"
|
||||
X-XSS-Protection "1; mode=block"
|
||||
}
|
||||
|
||||
route /newsmirror/* {
|
||||
root * /var/www/YOUR_DOMAIN
|
||||
file_server
|
||||
}
|
||||
|
||||
route /* {
|
||||
reverse_proxy http://127.0.0.1:7156
|
||||
}
|
||||
|
||||
encode zstd gzip
|
||||
}
|
||||
|
||||
# eof
|
||||
# eof
|
32
content.py
32
content.py
|
@ -529,9 +529,41 @@ def _add_music_tag(content: str, tag: str) -> str:
|
|||
return ':music: ' + content + ' ' + tag + ' '
|
||||
|
||||
|
||||
def _shorten_linked_urls(content: str) -> str:
|
||||
"""If content comes with a web link included then make sure
|
||||
that it is short enough
|
||||
"""
|
||||
if 'href=' not in content:
|
||||
return content
|
||||
if '>' not in content:
|
||||
return content
|
||||
if '<' not in content:
|
||||
return content
|
||||
sections = content.split('>')
|
||||
ctr = 0
|
||||
for section_text in sections:
|
||||
if ctr == 0:
|
||||
ctr += 1
|
||||
continue
|
||||
if '<' not in section_text:
|
||||
ctr += 1
|
||||
continue
|
||||
section_text = section_text.split('<')[0]
|
||||
if ' ' in section_text:
|
||||
continue
|
||||
if len(section_text) > MAX_LINK_LENGTH:
|
||||
content = content.replace('>' + section_text + '<',
|
||||
'>' +
|
||||
section_text[:MAX_LINK_LENGTH-1] + '<')
|
||||
ctr += 1
|
||||
return content
|
||||
|
||||
|
||||
def add_web_links(content: str) -> str:
|
||||
"""Adds markup for web links
|
||||
"""
|
||||
content = _shorten_linked_urls(content)
|
||||
|
||||
if ':' not in content:
|
||||
return content
|
||||
|
||||
|
|
12
tests.py
12
tests.py
|
@ -3523,6 +3523,18 @@ def _test_actor_parsing():
|
|||
def _test_web_links():
|
||||
print('test_web_links')
|
||||
|
||||
example_text = \
|
||||
'<p>Some text!</p><p><a href=\"https://videosite.whatever/video' + \
|
||||
'/A3JpZMovL25kci1kZS32MGE0NCg4YB1lMLQwLTRkMGEtYkYxMS5kNmQ1MjJqY' + \
|
||||
'WZjKzd\">https://videosite.whatever/video/A3JpZMovL25kci1kZS32' + \
|
||||
'MGE0NCg4YB1lMLQwLTRkMGEtYkYxMS5kNmQ1MjJqYWZjKzd</a></p>'
|
||||
linked_text = add_web_links(example_text)
|
||||
expected_text = \
|
||||
'<p>Some text!</p><p><a href="https://videosite.whatever/video/' + \
|
||||
'A3JpZMovL25kci1kZS32MGE0NCg4YB1lMLQwLTRkMGEtYkYxMS5kNmQ1MjJqYW' + \
|
||||
'ZjKzd">https://videosite.whatever/video/A3JpZM</a></p>'
|
||||
assert linked_text == expected_text
|
||||
|
||||
example_text = \
|
||||
"<p>Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + \
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + \
|
||||
|
|
Loading…
Reference in New Issue