diff --git a/.gitignore b/.gitignore index 609ea03..fb26512 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ config.yaml -log +log +cert.pem +key.pem # ---> Python # Byte-compiled / optimized / DLL files diff --git a/README.md b/README.md index 4d3f9d5..f891cf5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# sludge: webthing for natalieee.net +# sludge: webthing for ~~natalieee.net~~ puppygirl.systems it rhymes with kludge. ## config diff --git a/src/lib/patchers.py b/src/lib/patchers.py index 4069506..e4b3185 100644 --- a/src/lib/patchers.py +++ b/src/lib/patchers.py @@ -2,119 +2,8 @@ from .response import Response from typing import Callable, List -import re -import random -from bs4 import BeautifulSoup - -type Patcher = Callable[[Response, 'Request'], Response] - -def find_substring_in_lines(s, substring): - for line_index, line in enumerate(s.splitlines()): - position = line.find(substring) - if position != -1: - return line_index - - return 0 - -def extract_words_from_line(line): - clean_line = re.sub(r'<[^>]+>', '', line) - words = clean_line.split() - return words - -def uwuify_text(text): - replacements = [ - (r'r', 'w'), - (r'l', 'w'), - (r'R', 'W'), - (r'L', 'W'), - (r'no', 'nyo'), - (r'No', 'Nyo'), - (r'u', 'uwu'), - (r'U', 'Uwu') - ] - - for pattern, replacement in replacements: - text = re.sub(pattern, replacement, text) - - expressions = [" owo", " UwU", " rawr", " >w<"] - sentences = text.split('. ') - uwuified_sentences = [] - - for sentence in sentences: - sentence = sentence.strip() - if sentence: - uwuified_sentences.append(sentence + (random.choice(expressions) if random.randint(0, 5) > 4 else '')) - - return '. '.join(uwuified_sentences) - -def apply_url_params(body, params: str): - body = body.decode('utf-8') - soup = BeautifulSoup(body, 'html.parser') - - for a_tag in soup.find_all('a', href=True): - original_href = a_tag['href'] - if '?' in original_href: - new_href = f"{original_href}&{params}" - else: - new_href = f"{original_href}?{params}" - a_tag['href'] = new_href - - return str(soup) - -def uwuify(body): - body = body.decode('utf-8') - soup = BeautifulSoup(body, 'html.parser') - - for text in soup.find_all(text=True): - if text.parent.name not in ['script', 'style']: - original_text = text.string - words = extract_words_from_line(original_text) - uwuified_words = [uwuify_text(word) for word in words] - uwuified_text = ' '.join(uwuified_words) - text.replace_with(uwuified_text) - - for a_tag in soup.find_all('a', href=True): - original_href = a_tag['href'] - if '?' in original_href: - new_href = f"{original_href}&uwu=true" - else: - new_href = f"{original_href}?uwu=true" - a_tag['href'] = new_href - - - return str(soup) - -def is_subdict(sub_dict, main_dict): - for key, value in sub_dict.items(): - if key not in main_dict or main_dict[key] != value: - return False - return True +type Patcher = Callable patchers: List[Patcher] = [ - # lambda response, request: Response( - # response.code, - # response.headers, - # "\n".join(line.replace('e', 'a') if index > find_substring_in_lines(response.body.decode('utf-8'), '') else line for index, line in enumerate(response.body.decode('utf-8').splitlines())).encode('utf-8') - # ) if 'text/html' in response.headers.values() else response - lambda response, request: Response( - response.code, - response.headers, - uwuify(response.body).encode('utf-8') - ) if 'text/html' in response.headers.values() and is_subdict({'uwu': 'true'}, request.path.params) else response, - lambda response, request: Response( - response.code, - response.headers, - re.sub(r'sludge', lambda match: 'sludge' + ' (/slʌd͡ʒ/)' if random.randint(0, 5) < 1 else 'sludge', response.body.decode()).encode('utf-8') - ) if 'text/html' in response.headers.values() else response, - lambda response, request: Response( - response.code, - response.headers, - apply_url_params(response.body.replace(b'
', b''), 'swing=true').encode('utf-8') - ) if 'text/html' in response.headers.values() and (random.randint(0, 100) < 1 or is_subdict({'swing': 'true'}, request.path.params)) else response, - # spiin! - lambda response, request: Response( - response.code, - response.headers, - apply_url_params(response.body.replace(b'', b''), 'spiin=true').encode('utf-8') - ) if 'text/html' in response.headers.values() and (random.randint(0, 1000) < 1 or is_subdict({'spiin': 'true'}, request.path.params)) else response + lambda response, request: response ] diff --git a/src/lib/router.py b/src/lib/router.py index 88eba96..60cb878 100644 --- a/src/lib/router.py +++ b/src/lib/router.py @@ -39,141 +39,34 @@ class Route: routes = [ Route( - lambda request: request.path == '/style.css', - [Method.GET], - lambda request, *_: Response( - ResponseCode.OK, - *raw_file_contents('./style.css') - ) - ), - Route( - lambda request: request.path == '/', - [Method.GET, Method.POST], - lambda request, *_: Response( - ResponseCode.OK, - {'Content-Type': 'text/html'}, - ((parse_file('./home.html', dict(prev='\\/')).encode('utf-8') if not 'Nim httpclient' in request.headers.get('user-agent') else error_page(200).body) if request.method == Method.GET else ( - [ - (lambda form_data: ( - (lambda time: ( - f:=open(f'./files/posts-to-homepage/post_{time}.txt', 'w'), - f.write(f"{form_data['name']}@{time}