1
0
forked from nat/sludge

seperate sludge from site repository

This commit is contained in:
gnat
2024-08-09 18:33:30 -07:00
parent dcb3bc4b27
commit e39b59853f
15 changed files with 624 additions and 2 deletions

90
src/lib/patchers.py Normal file
View File

@ -0,0 +1,90 @@
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 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
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'), '</head>') 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
]