From a6bbf696f460916fb877c8d640fd908eb000e88f Mon Sep 17 00:00:00 2001 From: white <122345776@umail.ucc.ie> Date: Wed, 5 Feb 2025 10:41:52 +0000 Subject: [PATCH] FEAT: Added automated email bot after authentication --- web_server/blueprints/authentication.py | 3 ++ web_server/blueprints/email.py | 41 +++++++++++++++++++++---- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/web_server/blueprints/authentication.py b/web_server/blueprints/authentication.py index b95574f..36e4a80 100644 --- a/web_server/blueprints/authentication.py +++ b/web_server/blueprints/authentication.py @@ -3,6 +3,7 @@ from werkzeug.security import generate_password_hash, check_password_hash from flask_cors import cross_origin from database.database import Database from blueprints.utils import login_required, sanitizer +from blueprints.email import send_email from utils.user_utils import get_user_id from secrets import token_hex @@ -99,6 +100,7 @@ def signup(): session["username"] = username session["user_id"] = get_user_id(username) print(f"Logged in as {username}. session: {session.get('username')}. user_id: {session.get('user_id')}", flush=True) + # send_email(username) return jsonify({ "account_created": True, @@ -114,6 +116,7 @@ def signup(): finally: db.close_connection() + @auth_bp.route("/login", methods=["POST"]) diff --git a/web_server/blueprints/email.py b/web_server/blueprints/email.py index f18a12e..8ce9373 100644 --- a/web_server/blueprints/email.py +++ b/web_server/blueprints/email.py @@ -1,33 +1,46 @@ -from flask import Blueprint +from flask import Blueprint, session +from database.database import Database + import smtplib from email.mime.text import MIMEText + from os import getenv from random import randrange from dotenv import load_dotenv + load_dotenv() email_bp = Blueprint("email", __name__) -def send_email(user_email) -> None: +def send_email(username) -> None: """ Send a verification email to the user. """ + # Setup the sender email details SMTP_SERVER = "smtp.gmail.com" SMTP_PORT = 587 SMTP_EMAIL = getenv("EMAIL") SMTP_PASSWORD = getenv("EMAIL_PASSWORD") + user_email = get_user_email(username) # Setup up the receiver details login_code = randrange(100000, 1000000) - body = f"Here is your login code: {login_code}" # Make this better - msg = MIMEText(body) + body = f""" + + + + Thank you for choosing Gander +

Your Gander login code is: {login_code}

+ + + """ + msg = MIMEText(body, "html") msg["Subject"] = "Reset Gander Login" msg["From"] = SMTP_EMAIL msg["To"] = user_email - # Send the email using smtplib with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as smtp: try: @@ -40,4 +53,20 @@ def send_email(user_email) -> None: print("Server timed out") except Exception as e: - print("Error: ", e) \ No newline at end of file + print("Error: ", e) + +def get_user_email(username): + """ + Get the users email address. + """ + + db = Database() + db.create_connection() + + user_email = db.fetchone("""SELECT email + FROM users + WHERE username = ?;""", + (username,)) + email = user_email["email"] + db.close_connection() + return email \ No newline at end of file