rate limit

This commit is contained in:
ebby 2026-09-25 21:57:03 +02:00
parent 26a16388f2
commit 53993111a4
10 changed files with 35 additions and 11 deletions

View file

@ -0,0 +1,18 @@
from datetime import timedelta
from datetime import datetime
import feedparser
FEED_URL="https://blauwasser-mausis.de/rss.xml"
def get_feed():
feed = feedparser.parse(FEED_URL)
# feed.entries.reverse()
for article in feed.entries:
date_string = str(article["published"])
date_object = datetime.strptime(date_string, '%a, %d %b %Y %H:%M:%S %Z')
if date_object > (datetime.now() - timedelta(days=1)):
print(f"Neu: {article["title"]}")
# TODO: Send Mail to Tim to power on newsletter

View file

@ -1,4 +1,4 @@
from sqlmodel import SQLModel from backend.internal.xml_reader import get_feed
from .routers import users, comments from .routers import users, comments
from backend.internal.database import create_db_and_tables from backend.internal.database import create_db_and_tables
from fastapi import APIRouter from fastapi import APIRouter
@ -18,3 +18,5 @@ router = APIRouter()
app.include_router(users.router) app.include_router(users.router)
app.include_router(comments.router) app.include_router(comments.router)
get_feed()

View file

@ -16,9 +16,3 @@ router = APIRouter(
responses={404: {"description": "Not found"}}, responses={404: {"description": "Not found"}},
) )
@router.post("/")
def register_user(session: Session = Depends(get_session)):
comment = {"test":"test"}
comment1 = Comment.model_validate(comment)
session.add(comment)
session.commit()

View file

@ -1,3 +1,6 @@
from pyrate_limiter import Duration
from pyrate_limiter import Rate
from pyrate_limiter import Limiter
from backend.models.user import UserInfo from backend.models.user import UserInfo
from backend.internal.authentication import get_current_user from backend.internal.authentication import get_current_user
from backend.internal.authentication import create_access_token from backend.internal.authentication import create_access_token
@ -12,6 +15,7 @@ from backend.internal.database import get_session
from fastapi import Depends from fastapi import Depends
from sqlmodel import Session from sqlmodel import Session
from fastapi import APIRouter from fastapi import APIRouter
from fastapi_limiter.depends import RateLimiter
router = APIRouter( router = APIRouter(
prefix="", prefix="",
@ -34,7 +38,11 @@ def register_user(new_user: NewUser, session: Session = Depends(get_session)) ->
raise HTTPException(HTTP_400_BAD_REQUEST) raise HTTPException(HTTP_400_BAD_REQUEST)
return user.user_code return user.user_code
@router.post("/login", status_code=201) # TODO: rate limit @router.post(
"/login",
status_code=201,
dependencies=[Depends(RateLimiter(limiter=Limiter(Rate(3, Duration.SECOND * 30))))]
)
def login(user_code: str = Form(), session: Session = Depends(get_session)) -> str: def login(user_code: str = Form(), session: Session = Depends(get_session)) -> str:
user = session.exec(select(User).where(User.user_code == user_code)).first() user = session.exec(select(User).where(User.user_code == user_code)).first()
@ -42,10 +50,12 @@ def login(user_code: str = Form(), session: Session = Depends(get_session)) -> s
raise HTTPException(HTTP_401_UNAUTHORIZED) raise HTTPException(HTTP_401_UNAUTHORIZED)
return create_access_token({"sub": user.user_code}) return create_access_token({"sub": user.user_code})
@router.post("users/forgot") # TODO: rate limit @router.post(
"users/forgot",
dependencies=[Depends(RateLimiter(limiter=Limiter(Rate(1, Duration.MINUTE))))]
)
def forgot_user_code(email: str = Form(), session: Session = Depends(get_session)): def forgot_user_code(email: str = Form(), session: Session = Depends(get_session)):
user = session.exec(select(User).where(User.email == email)).first() user = session.exec(select(User).where(User.email == email)).first()
if user is not None: if user is not None:
pass # TODO: send Mail pass # TODO: send Mail