hectamail-website/login/login.py

70 lines
2.0 KiB
Python
Raw Normal View History

2023-11-19 21:54:36 +00:00
from flask import Flask, render_template, request, redirect, url_for, make_response
2023-11-19 13:48:33 +00:00
import bcrypt
import sqlite3
import configparser
from waitress import serve
# Load from config.ini
config = configparser.ConfigParser()
2023-11-19 13:51:30 +00:00
config.read("../config.ini")
2023-11-19 21:54:36 +00:00
secretkey = config.get("Login", "secretkey")
2023-11-19 13:48:33 +00:00
database = config.get("Login", "database")
runport = config.get("Login", "port")
# Status report
print("HectaMail Login Service is starting up...")
2023-11-19 21:54:36 +00:00
print("Your secret key is:", secretkey)
2023-11-19 13:48:33 +00:00
print("Your database is located at:", database)
app = Flask(__name__)
2023-11-19 21:54:36 +00:00
app.secret_key = secretkey
2023-11-19 13:48:33 +00:00
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')
2023-11-19 14:09:10 +00:00
@app.route('/api', methods=['POST'])
2023-11-19 13:48:33 +00:00
def login():
key_to_fetch = request.form['email']
password_to_check = request.form['password']
2023-11-19 21:54:36 +00:00
passwordhash = fetch_hash_from_database(key_to_fetch)
2023-11-19 13:48:33 +00:00
2023-11-19 21:54:36 +00:00
if passwordhash:
is_password_valid = verify_bcrypt(password_to_check, passwordhash)
2023-11-19 13:48:33 +00:00
if is_password_valid:
2023-11-19 21:54:36 +00:00
response = make_response("Logged in!")
response.set_cookie('passwordhash', passwordhash)
return response
2023-11-19 13:48:33 +00:00
else:
return "Incorrect email or password"
else:
return "Email not found in the database"
2023-11-19 21:54:36 +00:00
@app.route('/dashboard')
def dashboard():
if 'passwordhash' in request.cookies and request.cookies.get('passwordhash'):
return render_template('dashboard.html')
else:
return redirect(url_for('index'))
2023-11-19 13:48:33 +00:00
if __name__ == '__main__':
serve(app, host='0.0.0.0', port=runport)