summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorStas Medvedev <medvedevsa97@gmail.com>2024-06-11 02:13:28 +0300
committerStas Medvedev <medvedevsa97@gmail.com>2024-06-11 02:13:28 +0300
commitfc29744db8eba827802bdb5c5932f91ae79ea152 (patch)
tree0ccdc40f0e88ab5a316d2c3dab2063b52220e2f1 /app
parent7edfec3a65aababa40bc165b248defe944f1206a (diff)
реальный ip из под прокси хедера
Diffstat (limited to 'app')
-rw-r--r--app/logging.py4
-rw-r--r--app/main.py20
-rw-r--r--app/utils.py27
3 files changed, 26 insertions, 25 deletions
diff --git a/app/logging.py b/app/logging.py
index e24328d..de5fb56 100644
--- a/app/logging.py
+++ b/app/logging.py
@@ -3,7 +3,7 @@ import logging
class RequestFileHandler(logging.FileHandler):
def __init__(self) -> None:
- super().__init__('./static/request.log')
+ super().__init__("./static/request.log")
-logger = logging.getLogger('app.request')
+logger = logging.getLogger("app.request")
diff --git a/app/main.py b/app/main.py
index d643447..7cf756c 100644
--- a/app/main.py
+++ b/app/main.py
@@ -1,9 +1,11 @@
-from fastapi import FastAPI, Request
+from typing import Annotated
+
+from fastapi import FastAPI, Request, Depends
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from starlette.templating import Jinja2Templates
-from app.utils import get_avatar_urls, get_client_geo, get_client_host
+from app.utils import get_avatar_urls, get_client_geo
from app.logging import logger
templates = Jinja2Templates(directory="templates")
@@ -13,17 +15,15 @@ app.mount("/static", StaticFiles(directory="static"), name="static")
@app.get("/", response_class=HTMLResponse)
-async def index(request: Request):
+async def index(
+ request: Request,
+ client_geo: Annotated[dict, Depends(get_client_geo)],
+ avatar_urls: Annotated[list[str], Depends(get_avatar_urls)],
+):
logger.info(str(dict(request.headers)))
return templates.TemplateResponse(
"index.html",
- {
- "request": request,
- "client_geo": await get_client_geo(
- get_client_host(request)
- ),
- "avatar_urls": get_avatar_urls()
- }
+ {"request": request, "client_geo": client_geo, "avatar_urls": avatar_urls},
)
diff --git a/app/utils.py b/app/utils.py
index 08373e0..22d7058 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -1,31 +1,32 @@
from pathlib import Path
-from fastapi import Request
+from typing import Annotated
+
+from fastapi import Request, Header, Depends
import httpx
-def get_avatar_urls():
- path = Path('./static') / 'avatars'
+def get_avatar_urls() -> list[str]:
+ path = Path("./static") / "avatars"
if not path.exists():
path.mkdir()
- return sorted([
- str(jpg_avatar)
- for jpg_avatar
- in path.glob('*.jpg')
- ])
+ return sorted([str(jpg_avatar) for jpg_avatar in path.glob("*.jpg")])
-def get_client_host(request: Request):
+def get_client_host(
+ request: Request, x_real_ip: Annotated[str | None, Header()] = None
+) -> str:
+ if x_real_ip:
+ return x_real_ip
return request.client.host
-async def get_client_geo(client_host: str):
+async def get_client_geo(client_host: Annotated[str, Depends(get_client_host)]) -> dict:
async with httpx.AsyncClient() as client:
response = await client.get(
# использование https платная опция сервиса, инфо тут https://members.ip-api.com/
- url='http://ip-api.com/json/{}'.format(client_host),
- params={"lang": "ru"}
+ url="http://ip-api.com/json/{}".format(client_host),
+ params={"lang": "ru"},
)
data = response.json()
return data
-