diff --git a/slopserver/email.py b/slopserver/email.py index cd83045..b6a9e74 100644 --- a/slopserver/email.py +++ b/slopserver/email.py @@ -1,2 +1,22 @@ """Send emails for account verification through Resend API""" -import resend \ No newline at end of file +from slopserver.settings import settings +import resend + +resend.api_key = settings.resend_token + +def send_email(to: str, subject, content): + params: resend.Emails.SendParams = { + "from": "slopfarmer@jack-case.pro", + "to": to, + "subject": subject, + "html": content + } + + email: resend.Emails.SendResponse = resend.Emails.send(params) + + return email + +def generate_verification_email(verification_url: str): + return f""" +

click here to verify your Slop Farmer account: {verification_url}

+ """ \ No newline at end of file diff --git a/slopserver/server.py b/slopserver/server.py index bdeaaeb..1b78fa5 100644 --- a/slopserver/server.py +++ b/slopserver/server.py @@ -87,6 +87,17 @@ def generate_auth_token(username): encoded_jwt = jwt.encode(bearer_token, TOKEN_SECRET, ALGO) return encoded_jwt +def generate_verification_token(username): + expiration = datetime.now() + timedelta(days=2) + verification_token = { + "iss": "slopserver", + "exp": int(expiration.timestamp()), + "sub": username + } + + encoded_jwt = jwt.encode(verification_token, TOKEN_SECRET, ALGO) + return encoded_jwt + def get_token_user(decoded_token): user = get_user(decoded_token["sub"], DB_ENGINE) return user @@ -128,6 +139,14 @@ def signup_form(form_data: Annotated[SignupForm, Form()]): # create user create_user(form_data.email, get_password_hash(form_data.password.get_secret_value()), DB_ENGINE) + # send verification email + # create a jwt encoding the username and a time limit to be the verification URL + +@app.get("/verify") +def verify_email(token: str): + get_user() + + @app.get("/altcha-challenge") def altcha_challenge(): options = ChallengeOptions( diff --git a/slopserver/settings.py b/slopserver/settings.py index 7b2a0bd..2bd8c31 100644 --- a/slopserver/settings.py +++ b/slopserver/settings.py @@ -7,4 +7,6 @@ class ServerSettings(BaseSettings): altcha_secret: str = "0460de065912d0292df1e7422a5ed2dc362ed56d6bab64fe50b89957463061f3" resend_token: str = "re_NXpjzbqR_KgAbu72PKjYHcquX24WvnN3i" + sender_email: str = "slopfarmer@jack-case.pro" + settings = ServerSettings()