from flask import Flask, render_template, request import bcrypt import sqlite3 import configparser from waitress import serve # Load from config.ini config = configparser.ConfigParser() config.read("../config.ini") database = config.get("Login", "database") runport = config.get("Login", "port") # Status report print("HectaMail Login Service is starting up...") print("Your database is located at:", database) app = Flask(__name__) def fetch_hash_from_database(key): conn = sqlite3.connect(database) cursor = conn.cursor() cursor.execute("SELECT value FROM passwords WHERE key = ?", (key,)) result = cursor.fetchone() conn.close() if result: return result[0][7:] # Remove the first 7 characters else: return None def verify_bcrypt(passphrase, hashed_password): return bcrypt.checkpw(passphrase.encode('utf-8'), hashed_password.encode('utf-8')) @app.route('/') def index(): return render_template('index.html') @app.route('/api', methods=['POST']) def login(): key_to_fetch = request.form['email'] password_to_check = request.form['password'] go_script_hash = fetch_hash_from_database(key_to_fetch) if go_script_hash: is_password_valid = verify_bcrypt(password_to_check, go_script_hash) if is_password_valid: return "Logged in successfully" else: return "Incorrect email or password" else: return "Email not found in the database" if __name__ == '__main__': serve(app, host='0.0.0.0', port=runport)