diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index efb4ef8..8a16993 100644 Binary files a/backend/src/backend/__pycache__/main.cpython-314.pyc and b/backend/src/backend/__pycache__/main.cpython-314.pyc differ diff --git a/backend/src/backend/internal/__pycache__/xml_reader.cpython-314.pyc b/backend/src/backend/internal/__pycache__/xml_reader.cpython-314.pyc new file mode 100644 index 0000000..8c0ad4a Binary files /dev/null and b/backend/src/backend/internal/__pycache__/xml_reader.cpython-314.pyc differ diff --git a/backend/src/backend/internal/xml_reader.py b/backend/src/backend/internal/xml_reader.py new file mode 100644 index 0000000..466fd6c --- /dev/null +++ b/backend/src/backend/internal/xml_reader.py @@ -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 \ No newline at end of file diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index 9a5062d..454352b 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -1,4 +1,4 @@ -from sqlmodel import SQLModel +from backend.internal.xml_reader import get_feed from .routers import users, comments from backend.internal.database import create_db_and_tables from fastapi import APIRouter @@ -17,4 +17,6 @@ def on_startup(): router = APIRouter() app.include_router(users.router) -app.include_router(comments.router) \ No newline at end of file +app.include_router(comments.router) + +get_feed() \ No newline at end of file diff --git a/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc index 9f08751..70e9e42 100644 Binary files a/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc and b/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc differ diff --git a/backend/src/backend/models/__pycache__/article.cpython-314.pyc b/backend/src/backend/models/__pycache__/article.cpython-314.pyc new file mode 100644 index 0000000..af09444 Binary files /dev/null and b/backend/src/backend/models/__pycache__/article.cpython-314.pyc differ diff --git a/backend/src/backend/routers/__pycache__/comments.cpython-314.pyc b/backend/src/backend/routers/__pycache__/comments.cpython-314.pyc index 9d07c29..24e7708 100644 Binary files a/backend/src/backend/routers/__pycache__/comments.cpython-314.pyc and b/backend/src/backend/routers/__pycache__/comments.cpython-314.pyc differ diff --git a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc index 88e427c..6a26c93 100644 Binary files a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc and b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc differ diff --git a/backend/src/backend/routers/comments.py b/backend/src/backend/routers/comments.py index 6393035..0ba527a 100644 --- a/backend/src/backend/routers/comments.py +++ b/backend/src/backend/routers/comments.py @@ -16,9 +16,3 @@ router = APIRouter( 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() diff --git a/backend/src/backend/routers/users.py b/backend/src/backend/routers/users.py index 594646a..2bf0f6d 100644 --- a/backend/src/backend/routers/users.py +++ b/backend/src/backend/routers/users.py @@ -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.internal.authentication import get_current_user from backend.internal.authentication import create_access_token @@ -12,6 +15,7 @@ from backend.internal.database import get_session from fastapi import Depends from sqlmodel import Session from fastapi import APIRouter +from fastapi_limiter.depends import RateLimiter router = APIRouter( prefix="", @@ -34,7 +38,11 @@ def register_user(new_user: NewUser, session: Session = Depends(get_session)) -> raise HTTPException(HTTP_400_BAD_REQUEST) 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: 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) 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)): user = session.exec(select(User).where(User.email == email)).first() - if user is not None: pass # TODO: send Mail