I am creating an authentication system and i want to send reset request using MailerSend API, the code has no errors. The entry point for the application is in app.py file. The structure of the data is correct also. The project folder includes login.html and login.js which holds both the login and the forgot password pages. Entry point for the application is on app.py
The code doesn’t even log the console out with print() used to
authentication.py
import secrets
import bcrypt
import sqlite3
import datetime
from flask import Blueprint, jsonify, request,session
from mailersend import MailerSendClient, EmailBuilder
import secrets
auth_bp = Blueprint('auth', __name__, url_prefix='/api/auth')
# creatin mail sender client
mailer = MailerSendClient(api_key='mlsn.cc7po0a13bghjgjg061960a92b85e0676e762384ba8097993cc02ac8783052849baba75d')
def get_db_connection():
# Get database connection to the cyber-shield-linkguard database
conn = sqlite3.connect('cyber-shield-linkguard.db')
# return dictionary data structure from the columns of the database
# e.g instead of column id data[2] use data['password']
conn.row_factory = sqlite3.Row
return conn
@auth_bp.route('/forgot-password', methods=['POST'])
def forgot_password():
try:
data = request.get_json()
email = data.get('email', '').strip().lower()
if not email:
print('No email provided')
return jsonify({'error': 'Email is required'}), 400
try:
conn = get_db_connection()
cursor = conn.cursor()
# Check if user exists
cursor.execute('SELECT id FROM users WHERE email = ?', (email,))
user = cursor.fetchone()
print(f'Entries found: {user}')
if not user:
conn.close()
print('Email not found in database')
return jsonify({'error': 'Email not found'}), 404
#generate token
token = secrets.token_urlsafe(32)
print(f'Generated token: {token}')
cursor.execute('''INSERT INTO password_reset_tokens (email, token, is_used) VALUES (?, ?, 0)''', (email, token))
conn.commit()
conn.close()
reset_link = f'http://localhost:5000/reset-password?token={token}'
print(f'Reset link: {reset_link}')
mail_msg = EmailBuilder().from_email("[email protected]","theArchive").to_many([{"email":email}]).subject("Password Reset Request").html(f"<p>Click <a href='{reset_link}'>here</a> to reset your password.</p>").text(f"Use the following link to reset your password: {reset_link}").build()
try:
response = mailer.emails.send(mail_msg)
print(f'Email sent successsfully: {response.json()}')
print(f'Password reset link sent to {email}: {reset_link}')
return jsonify({'message': 'Password reset link sent'}), 200
except Exception as e:
print(f'Error sending email: {e}')
return jsonify({'error': str(e)}), 500
except sqlite3.Error as e:
print(f"Database error: {e}")
return jsonify({'error': 'Database error occurred'}), 500
except Exception as e:
print(f"Forgot password error: {e}")
return jsonify({'error': 'Failed to process request'}), 500


