Updated to include mockup of login
This commit is contained in:
parent
96651720fd
commit
21df5e55df
|
@ -1,5 +1,13 @@
|
||||||
[HectaMail]
|
[Signup]
|
||||||
# Secret Key, please change to something custom
|
# Secret Key, please change to something custom
|
||||||
secretkey: secret_key_here
|
secretkey: secret_key_here
|
||||||
# The characters you allow in your CAPTCHA
|
# The characters you allow in your CAPTCHA
|
||||||
captchachars: ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
captchachars: ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||||
|
# The port the server should run on
|
||||||
|
port: 8050
|
||||||
|
|
||||||
|
[Login]
|
||||||
|
# The port the server should run on
|
||||||
|
port: 8040
|
||||||
|
# The location of the maddy database
|
||||||
|
dblocation: /var/lib/maddy/credentials.db
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
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('/login', 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)
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
<title>Login</title>
|
||||||
|
<link rel="stylesheet" href="/static/css/main.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="headerbar">
|
||||||
|
<a href="/">HectaMail</a>
|
||||||
|
<a href="/register">Sign up</a>
|
||||||
|
<a class="main" href="/login">Login</a>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<h1>Login to your Email Account</h1>
|
||||||
|
<p1>Warning! This is only a proof of concept and has no actual use!</p1>
|
||||||
|
<form method="POST" action="/login">
|
||||||
|
<label for="username">Email</label>
|
||||||
|
<div class="spacer">
|
||||||
|
<input type="text" name="email" required="">
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<div class="Password">
|
||||||
|
<label for="password">Password</label>
|
||||||
|
<div class="spacer">
|
||||||
|
<input type="password" name="password" required="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Login">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<style type="text/css"></style></body></html>
|
|
@ -14,8 +14,9 @@ import configparser
|
||||||
|
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read("config.ini")
|
config.read("config.ini")
|
||||||
secretkey = config.get("HectaMail", "secretkey")
|
secretkey = config.get("Signup", "secretkey")
|
||||||
captchachars = config.get("HectaMail", "captchachars")
|
captchachars = config.get("Signup", "captchachars")
|
||||||
|
runport = config.get("Signup", "port")
|
||||||
|
|
||||||
# Status report
|
# Status report
|
||||||
|
|
||||||
|
@ -149,4 +150,4 @@ def register():
|
||||||
|
|
||||||
# Start the web server
|
# Start the web server
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
serve(app, host='0.0.0.0', port=8050)
|
serve(app, host='0.0.0.0', port=runport)
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Error!</h1>
|
<h1>Error!</h1>
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Error!</h1>
|
<h1>Error!</h1>
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Error!</h1>
|
<h1>Error!</h1>
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Register an Email Account</h1>
|
<h1>Register an Email Account</h1>
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Error!</h1>
|
<h1>Error!</h1>
|
|
@ -8,6 +8,7 @@
|
||||||
<div class="headerbar">
|
<div class="headerbar">
|
||||||
<a href="/">HectaMail</a>
|
<a href="/">HectaMail</a>
|
||||||
<a class="main" href="/register">Sign up</a>
|
<a class="main" href="/register">Sign up</a>
|
||||||
|
<a href="/login">Login</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>Done!</h1>
|
<h1>Done!</h1>
|
Loading…
Reference in New Issue