From 5afecf4d11c6015aef2f6619a0c1bd8e41c0d2e3 Mon Sep 17 00:00:00 2001 From: Henrik Jess Nielsen Date: Wed, 11 Dec 2024 20:37:45 +0100 Subject: [PATCH] Lets test --- app.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/app.py b/app.py index e6f448e..34ad408 100644 --- a/app.py +++ b/app.py @@ -3,12 +3,32 @@ from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import json import os -from fastapi import FastAPI from fastapi.responses import HTMLResponse from contextlib import asynccontextmanager from markdown_render import render_markdown_with_jinja - from starlette.middleware.httpsredirect import HTTPSRedirectMiddleware +from fastapi import FastAPI, Request +from fastapi.responses import RedirectResponse +from starlette.middleware.base import BaseHTTPMiddleware + +class ConditionalHTTPSRedirectMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request: Request, call_next): + # Extract the host or remote address + host = request.headers.get("host", "") + client_ip = request.client.host # Get the client's IP address + + # Log for debugging + print(f"Client IP: {client_ip}, Host: {host}") + + # Check condition: Redirect only if not on 127.0.0.1 + if client_ip != "127.0.0.1" and request.url.scheme == "http": + https_url = request.url.replace(scheme="https") + return RedirectResponse(url=https_url) + + # Continue processing other requests + response = await call_next(request) + return response + # Context manager for app lifespan @asynccontextmanager @@ -25,7 +45,8 @@ app.mount("/data", StaticFiles(directory="data"), name="data") # Mount static files app.mount("/static", StaticFiles(directory="static"), name="static") -app.add_middleware( HTTPSRedirectMiddleware ) +#app.add_middleware( HTTPSRedirectMiddleware ) +app.add_middleware(ConditionalHTTPSRedirectMiddleware) # Templates directory templates = Jinja2Templates(directory="templates")