From f8aa3fc5383dd4c9912c8a01780f0d76ae62212b Mon Sep 17 00:00:00 2001 From: remittor Date: Tue, 7 Apr 2026 10:40:16 +0000 Subject: [PATCH 1/2] Rename nul.md to null.md and update references --- docs/content/docs/cookies/{nul.md => null.md} | 0 docs/static/probe/render.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/content/docs/cookies/{nul.md => null.md} (100%) diff --git a/docs/content/docs/cookies/nul.md b/docs/content/docs/cookies/null.md similarity index 100% rename from docs/content/docs/cookies/nul.md rename to docs/content/docs/cookies/null.md diff --git a/docs/static/probe/render.js b/docs/static/probe/render.js index 0757f4d..02c9b2f 100644 --- a/docs/static/probe/render.js +++ b/docs/static/probe/render.js @@ -480,7 +480,7 @@ window.ProbeRender = (function () { 'COOK-ECHO': '/docs/cookies/echo/', 'COOK-OVERSIZED': '/docs/cookies/oversized/', 'COOK-EMPTY': '/docs/cookies/empty/', - 'COOK-NUL': '/docs/cookies/nul/', + 'COOK-NUL': '/docs/cookies/null/', 'COOK-CONTROL-CHARS': '/docs/cookies/control-chars/', 'COOK-MANY-PAIRS': '/docs/cookies/many-pairs/', 'COOK-MALFORMED': '/docs/cookies/malformed/', From 05e07579f027965a35de150c9028989f4e0e7116 Mon Sep 17 00:00:00 2001 From: remittor Date: Tue, 7 Apr 2026 14:02:37 +0300 Subject: [PATCH 2/2] [python] Add FastPySGI server (WSGI) --- src/Servers/FastPySGI-Server/Dockerfile | 5 +++ src/Servers/FastPySGI-Server/app.py | 51 +++++++++++++++++++++++++ src/Servers/FastPySGI-Server/probe.json | 4 ++ 3 files changed, 60 insertions(+) create mode 100644 src/Servers/FastPySGI-Server/Dockerfile create mode 100644 src/Servers/FastPySGI-Server/app.py create mode 100644 src/Servers/FastPySGI-Server/probe.json diff --git a/src/Servers/FastPySGI-Server/Dockerfile b/src/Servers/FastPySGI-Server/Dockerfile new file mode 100644 index 0000000..b793b27 --- /dev/null +++ b/src/Servers/FastPySGI-Server/Dockerfile @@ -0,0 +1,5 @@ +FROM python:3.12-slim +WORKDIR /app +RUN pip install --no-cache-dir fastpysgi +COPY src/Servers/FastPySGI-Server/app.py . +ENTRYPOINT ["python3", "app.py", "8080"] diff --git a/src/Servers/FastPySGI-Server/app.py b/src/Servers/FastPySGI-Server/app.py new file mode 100644 index 0000000..002b60f --- /dev/null +++ b/src/Servers/FastPySGI-Server/app.py @@ -0,0 +1,51 @@ +import fastpysgi + +def app(environ, start_response): + path = environ["PATH_INFO"] + req_method = environ.get('REQUEST_METHOD', '') + + if path == '/cookie': + cookie_str = environ.get('HTTP_COOKIE', '') + lines = [ ] + for pair in cookie_str.split(';'): + pair = pair.strip() + eq = pair.find('=') + if eq > 0: + lines.append(f"{pair[:eq]}={pair[eq+1:]}") + body = '\n'.join(lines) + '\n' if lines else '' + start_response('200 OK', [ ('Content-Type', 'text/plain') ]) + return [ body.encode() ] + + if path == '/echo': + lines = [ ] + for key, value in environ.items(): + header_name = None + if key.startswith('HTTP_'): + header_name = key[5:] + if key == 'CONTENT_TYPE': + header_name = 'Content-Type' + if key == 'CONTENT_LENGTH': + header_name = 'Content-Length' + if header_name: + header_name = header_name.replace('_', '-').title() + lines.append(f"{header_name}: {value}") + body = '\n'.join(lines) + '\n' + start_response('200 OK', [ ('Content-Type', 'text/plain') ]) + return [ body.encode() ] + + if req_method == 'POST': + try: + length = int(environ.get('CONTENT_LENGTH', 0) or 0) + except ValueError: + length = 0 + body = environ['wsgi.input'].read(length) if length > 0 else b'' + start_response('200 OK', [ ('Content-Type', 'text/plain') ]) + return [ body ] + + start_response('200 OK', [ ('Content-Type', 'text/plain') ]) + return [ b'OK' ] + +if __name__ == "__main__": + import sys + port = int(sys.argv[1]) if len(sys.argv) > 1 else 8080 + fastpysgi.run(app, host="0.0.0.0", port=port, loglevel=0) diff --git a/src/Servers/FastPySGI-Server/probe.json b/src/Servers/FastPySGI-Server/probe.json new file mode 100644 index 0000000..18e7826 --- /dev/null +++ b/src/Servers/FastPySGI-Server/probe.json @@ -0,0 +1,4 @@ +{ + "name": "FastPySGI", + "language": "Python" +}