52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
import random
|
|
|
|
from spiderweb import ConfigError
|
|
from spiderweb.exceptions import UnusedMiddleware
|
|
from spiderweb.middleware import SpiderwebMiddleware
|
|
from spiderweb.request import Request
|
|
from spiderweb.response import HttpResponse, RedirectResponse
|
|
|
|
|
|
class TestMiddleware(SpiderwebMiddleware):
|
|
def process_request(self, request: Request) -> None:
|
|
# example of a middleware that sets a flag on the request
|
|
request.spiderweb = True
|
|
|
|
def process_response(self, request: Request, response: HttpResponse) -> None:
|
|
# example of a middleware that sets a header on the resp
|
|
if hasattr(request, "spiderweb"):
|
|
response.headers["X-Spiderweb"] = "true"
|
|
|
|
|
|
class RedirectMiddleware(SpiderwebMiddleware):
|
|
def process_request(self, request: Request) -> HttpResponse:
|
|
if request.path == "/middleware":
|
|
return RedirectResponse("/")
|
|
|
|
|
|
class ExplodingMiddleware(SpiderwebMiddleware):
|
|
def process_request(self, request: Request) -> HttpResponse | None:
|
|
raise UnusedMiddleware("Unfinished!")
|
|
|
|
|
|
class CaseTransformMiddleware(SpiderwebMiddleware):
|
|
# this breaks everything, but it's hilarious so it's worth it.
|
|
# Blame Sam.
|
|
def post_process(self, request: Request, rendered_response: str) -> str:
|
|
valid_options = ["spongebob", "random"]
|
|
method = self.server.extra_data.get("case_transform_middleware_type", "spongebob")
|
|
if method not in valid_options:
|
|
raise ConfigError(
|
|
f"Invalid method '{method}' for CaseTransformMiddleware."
|
|
f" Valid options are {', '.join(valid_options)}"
|
|
)
|
|
|
|
if method == "spongebob":
|
|
return "".join(
|
|
char.upper() if i % 2 == 0 else char.lower() for i, char in enumerate(rendered_response)
|
|
)
|
|
else:
|
|
return "".join(
|
|
char.upper() if random.random() > 0.5 else char for char in rendered_response
|
|
)
|