diff --git a/.vscode/settings.json b/.vscode/settings.json index 65271fe..31aa94b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "cSpell.words": [ "Chiara", "Hobbithöhle", + "mailtrap", "Masala", "Pomorie", "Reinke" diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index 1fffd0c..980e683 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__/mail_util.cpython-314.pyc b/backend/src/backend/internal/__pycache__/mail_util.cpython-314.pyc index c2fbe88..5b23524 100644 Binary files a/backend/src/backend/internal/__pycache__/mail_util.cpython-314.pyc and b/backend/src/backend/internal/__pycache__/mail_util.cpython-314.pyc differ diff --git a/backend/src/backend/internal/__pycache__/rss_reader.cpython-314.pyc b/backend/src/backend/internal/__pycache__/rss_reader.cpython-314.pyc index d240d6c..6d5cb1e 100644 Binary files a/backend/src/backend/internal/__pycache__/rss_reader.cpython-314.pyc and b/backend/src/backend/internal/__pycache__/rss_reader.cpython-314.pyc differ diff --git a/backend/src/backend/internal/jinja_templates/output.html b/backend/src/backend/internal/jinja_templates/newsletter.jinja similarity index 58% rename from backend/src/backend/internal/jinja_templates/output.html rename to backend/src/backend/internal/jinja_templates/newsletter.jinja index 35c14e4..a7bdbc8 100644 --- a/backend/src/backend/internal/jinja_templates/output.html +++ b/backend/src/backend/internal/jinja_templates/newsletter.jinja @@ -8,15 +8,17 @@

Neuer Artikel:

-

England

-

It's gettin' british, my dear!

-

Auf geht's nach Milano! Aber Moment mal...der Artikel heißt England?! Da kann irgendwas nicht stimmen. Ich frage mal in der Redaktion nach. Ihr lest währenddessen einfach schonmal weiter.

+

{{data.title}}

+

{{data.subtitle}}

+

{{data.description}}

- + - Approve + + Abbestellen +
@@ -51,9 +53,4 @@ border-radius: 3px; border: none; } - - #admin { - margin-top: 64px; - color: red; - } \ No newline at end of file diff --git a/backend/src/backend/internal/jinja_templates/welcome.jinja b/backend/src/backend/internal/jinja_templates/welcome.jinja new file mode 100644 index 0000000..b7a0285 --- /dev/null +++ b/backend/src/backend/internal/jinja_templates/welcome.jinja @@ -0,0 +1,38 @@ + + + + + Newsletter + + + +
+

Willkommen, {{user.name}}

+

Du hast dich bei Blauwasser-Mausis.de angemeldet. Solltest du das nicht gewesen sein, dann lösche die Daten einfach über den untenstehenden Link.

+ + + Daten löschen + +
+ + + + \ No newline at end of file diff --git a/backend/src/backend/internal/mail_util.py b/backend/src/backend/internal/mail_util.py index bbfca9f..d8695b1 100644 --- a/backend/src/backend/internal/mail_util.py +++ b/backend/src/backend/internal/mail_util.py @@ -1,10 +1,9 @@ from mailtrap import Mail -import mailtrap as mt -import os +import mailtrap as mt from jinja2 import Environment, FileSystemLoader -class Newsletter(): +class ArticleData(): def __init__(self, title, subtitle, description, link): self.title=title self.subtitle=subtitle @@ -16,23 +15,28 @@ class Newsletter(): description: str link: str -def send_newsletter_admin_approval(data: Newsletter ): +class AdminApprovalData(ArticleData): + def __init__(self,title, subtitle, description, link, secret): + ArticleData.__init__(self, title, subtitle, description, link) + self.secret = secret + + secret: str + +def send_newsletter_admin_approval(data: ArticleData ): env = Environment(loader = FileSystemLoader('src/backend/internal/jinja_templates')) template = env.get_template('approval.jinja') output = template.render(data=data) - - - with open("src/backend/internal/jinja_templates/output.html", "w") as f: - f.write(output) + # with open("src/backend/internal/jinja_templates/output.html", "w") as f: + # f.write(output) mail = mt.Mail( sender=mt.Address(email="newsletter@blauwasser-mausis.de", name="Flaschenpost"), to=[mt.Address(email="blauwasser-mausis@proton.me")], subject=f"[Approval] {data.title}", - text="Jinja2 Template", + text=output, ) - + send_mail(mail) def send_mail(mail: Mail): diff --git a/backend/src/backend/internal/rss_reader.py b/backend/src/backend/internal/rss_reader.py index 7ae806f..c493567 100644 --- a/backend/src/backend/internal/rss_reader.py +++ b/backend/src/backend/internal/rss_reader.py @@ -1,5 +1,6 @@ -from backend.internal.mail_util import Newsletter +from backend.internal.authentication import create_access_token +from backend.internal.mail_util import AdminApprovalData from backend.internal.mail_util import send_newsletter_admin_approval from datetime import timedelta from datetime import datetime @@ -13,13 +14,15 @@ def check_blog_rss_and_send_admin_mail(): 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=15)): + if date_object > (datetime.now() - timedelta(days=1)): title = str(article["title"]) description = str(article["summary"]) subtitle = str(article["subtitle"]) link = str(article["link"]) - data = Newsletter(title, subtitle, description, link) + secret = create_access_token({"sub": title}) + + data = AdminApprovalData(title, subtitle, description, link, secret) send_newsletter_admin_approval(data) diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index 662bb37..29f49af 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -26,8 +26,4 @@ def on_startup(): router = APIRouter() app.include_router(users.router) -app.include_router(comments.router) - -check_blog_rss_and_send_admin_mail() - - +app.include_router(comments.router) \ No newline at end of file diff --git a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc index a0105bf..1501f2e 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/newsletter.py b/backend/src/backend/routers/newsletter.py new file mode 100644 index 0000000..a1702e1 --- /dev/null +++ b/backend/src/backend/routers/newsletter.py @@ -0,0 +1,17 @@ +from fastapi import Form +from fastapi import Depends +from fastapi import APIRouter + +router = APIRouter( + prefix="newsletter", + tags=[""], + dependencies=[], + responses={404: {"description": "Not found"}}, +) + +@router.post( + "/approve", + status_code=201 +) +def approve_newsletter(secret: str = Form()): + pass \ No newline at end of file diff --git a/backend/src/backend/routers/users.py b/backend/src/backend/routers/users.py index 2bf0f6d..668dbd4 100644 --- a/backend/src/backend/routers/users.py +++ b/backend/src/backend/routers/users.py @@ -24,7 +24,11 @@ router = APIRouter( responses={404: {"description": "Not found"}}, ) -@router.post("/users", status_code=201) +@router.post( + "/users", + status_code=201, + dependencies=[Depends(RateLimiter(limiter=Limiter(Rate(1, Duration.MINUTE))))] +) def register_user(new_user: NewUser, session: Session = Depends(get_session)) -> str: user = User.model_validate(new_user) @@ -69,6 +73,14 @@ def delete(current_user: User = Depends(get_current_user), session: Session = De session.delete(current_user) session.commit() +@router.delete("/me", status_code=201) +def delete(user_code: str = Form(), session: Session = Depends(get_session)) : + user = session.exec(select(User).where(User.user_code == user_code)).first() + + if user is not None: + session.delete(user) + session.commit() + @router.put("me/subscribe", status_code=201) def change_subscription(subscription: bool = Form(), current_user: User = Depends(get_current_user), session: Session = Depends(get_session)): current_user.subscription = subscription @@ -77,5 +89,6 @@ def change_subscription(subscription: bool = Form(), current_user: User = Depend # TODO: +# Template für Willkommen mit delete link # change mail <- token, new mail # delete all deactivated users after 48h \ No newline at end of file