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}}
-
+
Zum Artikel
-
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