Added session-management with a map!

This commit is contained in:
Mawoka
2022-04-15 16:10:56 +02:00
parent e76c0a0043
commit 49ff503898
11 changed files with 606 additions and 14 deletions
+6
View File
@@ -252,3 +252,9 @@ async def delete_session(session_id: str, user: User = Depends(get_current_user)
raise HTTPException(status_code=400, detail="Invalid session id")
await UserSession.objects.filter(user=user, id=session_id).delete()
return {"message": "Session deleted"}
@router.get("/session", response_model=UserSession, response_model_exclude={"user", "session_key"})
async def get_session(user: User = Depends(get_current_user)):
session = await UserSession.objects.filter(user=user).first()
return session
+35 -1
View File
@@ -2,10 +2,16 @@ import io
import qrcode
import qrcode.image.svg
from fastapi import APIRouter
from fastapi import APIRouter, Depends
from fastapi.responses import Response
from pydantic import BaseModel, Field, ValidationError
from fastapi.responses import JSONResponse
from classquiz.auth import get_current_user
from classquiz.config import settings
from aiohttp import ClientSession
from classquiz.db.models import User
settings = settings()
@@ -23,3 +29,31 @@ async def get_qr(quiz_pin: str):
qr.make(fit=True)
qr.make_image(fill_color="black", back_color="white").save(buf, "SVG")
return Response(content=buf.getvalue(), media_type="image/svg+xml")
class IpResponse(BaseModel):
status: str
country: str
countryCode: str
region: str
regionName: str
city: str
zip: str
lat: float
lon: float
timezone: str
isp: str
org: str
as_attr: str = Field(alias="as")
query: str
@router.get("/ip-lookup/{ip}", response_model=IpResponse)
async def get_ip_data(ip: str, _: User = Depends(get_current_user)):
async with ClientSession() as session:
async with session.get(f"http://ip-api.com/json/{ip}") as response:
data = await response.json()
try:
return IpResponse(**data)
except ValidationError:
return JSONResponse(status_code=response.status, content=data)