From 4f663eb8a5a4aecf6611878992e2cae3aebfc744 Mon Sep 17 00:00:00 2001 From: florianuhlig Date: Thu, 2 Oct 2025 23:36:57 +0200 Subject: [PATCH 1/5] First look --- .gitignore | 4 ++++ main.py | 15 ++++++++++++--- sqlLite/__init__.py | 5 +++++ sqlLite/create.py | 15 +++++++++++++++ sqlLite/get.py | 10 ++++++++++ sqlLite/set.py | 19 +++++++++++++++++++ useful/check.py | 10 ++++++++++ useful/hash.py | 0 8 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100644 sqlLite/__init__.py create mode 100644 sqlLite/create.py create mode 100644 sqlLite/get.py create mode 100644 sqlLite/set.py create mode 100644 useful/check.py create mode 100644 useful/hash.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b0ee44 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.gitignore +/.idea/ +testing.py +/databases/ diff --git a/main.py b/main.py index 4cd5283..2f20172 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,14 @@ -import sqlite3 +db_type = "sqlite" +import sqlLite +sqlLite.set_db_name("databases/test.db") -DB_CON = sqlite3.connect("database.db") -DB_CUR = DB_CON.cursor() +if db_type == "sqlite": + import sqlLite.get as getter + import sqlLite.create as create + import sqlLite.set as setter + import testing as testing + create.create_table_t_user() + setter.set_login("test@test.test", "password") + getter.get_user() + #testing.sqllite_reset(sqlitename) diff --git a/sqlLite/__init__.py b/sqlLite/__init__.py new file mode 100644 index 0000000..83dee19 --- /dev/null +++ b/sqlLite/__init__.py @@ -0,0 +1,5 @@ +db_name = "databases/test.db" + +def set_db_name(name): + global db_name + db_name = name \ No newline at end of file diff --git a/sqlLite/create.py b/sqlLite/create.py new file mode 100644 index 0000000..d9d1503 --- /dev/null +++ b/sqlLite/create.py @@ -0,0 +1,15 @@ +import sqlite3 +from . import db_name + +## Create Tables +def create_table_t_user(): + db_con = sqlite3.connect(db_name) + db_cur = db_con.cursor() + db_cur.execute(""" + CREATE TABLE IF NOT EXISTS T_USERS ( + ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + USERNAME TEXT NOT NULL UNIQUE, + EMAIL TEXT NOT NULL UNIQUE, + PASSWORD TEXT NOT NULL + );""") + db_con.commit() \ No newline at end of file diff --git a/sqlLite/get.py b/sqlLite/get.py new file mode 100644 index 0000000..95a4771 --- /dev/null +++ b/sqlLite/get.py @@ -0,0 +1,10 @@ +import sqlite3 +from . import db_name + +def get_user(): + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + cursor.execute('select * from T_USERS') + rows = cursor.fetchall() + for row in rows: + print(row) \ No newline at end of file diff --git a/sqlLite/set.py b/sqlLite/set.py new file mode 100644 index 0000000..b11adab --- /dev/null +++ b/sqlLite/set.py @@ -0,0 +1,19 @@ +from hashlib import sha512 +import sqlite3 +import useful.check as check +from . import db_name + +def set_password_hash(password): + return sha512(password.encode('utf-8')).hexdigest() + +def set_login(email, password): + db_con = sqlite3.connect(db_name) + db_cur = db_con.cursor() + try: + if check.check_email(email): + db_cur.execute("INSERT INTO T_USERS (USERNAME, EMAIL, PASSWORD) VALUES (?,?,?)", ('test',email, set_password_hash(password))) + db_con.commit() + else: + print("Email entered is not valid") + except sqlite3.IntegrityError: + print("Username or Email entered is not unique") \ No newline at end of file diff --git a/useful/check.py b/useful/check.py new file mode 100644 index 0000000..ff57fb2 --- /dev/null +++ b/useful/check.py @@ -0,0 +1,10 @@ +import re + +def check_email(email): + # Click on Edit and place your email ID to validate + #email = "my.ownsite@our-earth.de" + valid = re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email) + if valid: + return True + else: + return False \ No newline at end of file diff --git a/useful/hash.py b/useful/hash.py new file mode 100644 index 0000000..e69de29 From 981cd94d6fe025752951cae32a43d2b246d4faf9 Mon Sep 17 00:00:00 2001 From: florianuhlig Date: Fri, 3 Oct 2025 00:13:44 +0200 Subject: [PATCH 2/5] With first webui --- frontend/app.py | 37 ++++++++++++ main.py | 16 +++-- sqlLite/get.py | 34 ++++++++++- sqlLite/set.py | 11 ++-- templates/login.html | 141 +++++++++++++++++++++++++++++++++++++++++++ useful/hash.py | 4 ++ 6 files changed, 231 insertions(+), 12 deletions(-) create mode 100644 frontend/app.py create mode 100644 templates/login.html diff --git a/frontend/app.py b/frontend/app.py new file mode 100644 index 0000000..31f3120 --- /dev/null +++ b/frontend/app.py @@ -0,0 +1,37 @@ +from flask import Flask, render_template, request, redirect, url_for, flash + +app = Flask(__name__) +app.secret_key = 'your_secret_key' + +@app.route('/') +def home(): + return redirect(url_for('login')) + +@app.route('/login', methods=['GET', 'POST']) +def login(): + if request.method == 'POST': + enter_email = request.form.get('email') + enter_password = request.form.get('password') + # TODO: Add your user verification logic here, e.g. check database + import sqlLite.get as getter + import useful.hash as hasher + pwd = getter.get_password_by_email(enter_email) + password = hasher.get_password_hash(enter_password) + print(pwd) + print(password) + if password == pwd: + return redirect(url_for('dashboard')) + elif password == None: + flash("User not found!") + return redirect(url_for("login")) + elif pwd == None: + flash("Password not found!") + return redirect(url_for("login")) + else: + flash('Invalid email or password', 'error') + + return render_template('login.html') + +@app.route('/dashboard') +def dashboard(): + return "Welcome to the dashboard! Login successful." diff --git a/main.py b/main.py index 2f20172..53dd185 100644 --- a/main.py +++ b/main.py @@ -1,14 +1,20 @@ db_type = "sqlite" import sqlLite + +from frontend.app import app + sqlLite.set_db_name("databases/test.db") if db_type == "sqlite": - import sqlLite.get as getter import sqlLite.create as create import sqlLite.set as setter - import testing as testing + import sqlLite.get as getter + #import testing as testing + #testing.sqllite_reset() create.create_table_t_user() - setter.set_login("test@test.test", "password") - getter.get_user() - #testing.sqllite_reset(sqlitename) + setter.set_login("test", "test@test.test", "password") + setter.set_login("admin","admin@test.test", "admin") + getter.get_password_by_email("admin@fuhlig.de") +if __name__ == '__main__': + app.run(debug=True, host='0.0.0.0', port=8080) diff --git a/sqlLite/get.py b/sqlLite/get.py index 95a4771..3407f72 100644 --- a/sqlLite/get.py +++ b/sqlLite/get.py @@ -1,10 +1,40 @@ import sqlite3 from . import db_name -def get_user(): +def get_all_users(): conn = sqlite3.connect(db_name) cursor = conn.cursor() cursor.execute('select * from T_USERS') rows = cursor.fetchall() for row in rows: - print(row) \ No newline at end of file + print(row) + +def get_userinfo_by_username(username): + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + cursor.execute('select * from T_USERS where username = ?', (username,)) + rows = cursor.fetchall() + for row in rows: + print(row) + +def get_password_by_username(username): + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + cursor.execute('SELECT PASSWORD FROM T_USERS WHERE username = ?', (username,)) + row = cursor.fetchone() + cursor.close() + conn.close() + if row is None: + return None + return row[0] # password string + +def get_password_by_email(email): + conn = sqlite3.connect(db_name) + cursor = conn.cursor() + cursor.execute('SELECT PASSWORD FROM T_USERS WHERE EMAIL = ?', (email,)) + row = cursor.fetchone() + cursor.close() + conn.close() + if row is None: + return None + return row[0] # password string \ No newline at end of file diff --git a/sqlLite/set.py b/sqlLite/set.py index b11adab..df70439 100644 --- a/sqlLite/set.py +++ b/sqlLite/set.py @@ -1,19 +1,20 @@ from hashlib import sha512 import sqlite3 import useful.check as check +import useful.hash as hash from . import db_name -def set_password_hash(password): - return sha512(password.encode('utf-8')).hexdigest() -def set_login(email, password): + +def set_login(username, email, password): db_con = sqlite3.connect(db_name) db_cur = db_con.cursor() try: if check.check_email(email): - db_cur.execute("INSERT INTO T_USERS (USERNAME, EMAIL, PASSWORD) VALUES (?,?,?)", ('test',email, set_password_hash(password))) + db_cur.execute("INSERT INTO T_USERS (USERNAME, EMAIL, PASSWORD) VALUES (?,?,?)", (username ,email , hash.get_password_hash(password))) db_con.commit() else: print("Email entered is not valid") except sqlite3.IntegrityError: - print("Username or Email entered is not unique") \ No newline at end of file + print("Username or Email entered is not unique") + db_con.close() \ No newline at end of file diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..82d8a0c --- /dev/null +++ b/templates/login.html @@ -0,0 +1,141 @@ + + + + + + Login + + + + + + diff --git a/useful/hash.py b/useful/hash.py index e69de29..a2f4a7d 100644 --- a/useful/hash.py +++ b/useful/hash.py @@ -0,0 +1,4 @@ +from hashlib import sha512 + +def get_password_hash(password): + return sha512(password.encode('utf-8')).hexdigest() \ No newline at end of file From 740fe629b31a6f609465a50e99ee2283e33826dd Mon Sep 17 00:00:00 2001 From: florianuhlig Date: Fri, 3 Oct 2025 00:14:11 +0200 Subject: [PATCH 3/5] With first webui --- frontend/app.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/frontend/app.py b/frontend/app.py index 31f3120..af342a6 100644 --- a/frontend/app.py +++ b/frontend/app.py @@ -12,13 +12,10 @@ def login(): if request.method == 'POST': enter_email = request.form.get('email') enter_password = request.form.get('password') - # TODO: Add your user verification logic here, e.g. check database import sqlLite.get as getter import useful.hash as hasher pwd = getter.get_password_by_email(enter_email) password = hasher.get_password_hash(enter_password) - print(pwd) - print(password) if password == pwd: return redirect(url_for('dashboard')) elif password == None: From 823ea8cfc476125fcf266a73f7c3f1bfe89543cf Mon Sep 17 00:00:00 2001 From: florianuhlig Date: Fri, 3 Oct 2025 00:52:43 +0200 Subject: [PATCH 4/5] TO_DO: FIX ISSUE WITH REGISTERING --- frontend/app.py | 57 +++++-- {templates => frontend/templates}/login.html | 0 frontend/templates/register.html | 151 +++++++++++++++++++ main.py | 21 ++- useful/hash.py | 1 + 5 files changed, 210 insertions(+), 20 deletions(-) rename {templates => frontend/templates}/login.html (100%) create mode 100644 frontend/templates/register.html diff --git a/frontend/app.py b/frontend/app.py index af342a6..1bd7b5e 100644 --- a/frontend/app.py +++ b/frontend/app.py @@ -1,5 +1,10 @@ from flask import Flask, render_template, request, redirect, url_for, flash +import hashlib + +def hash_password(password): + return hashlib.sha512(password.strip().encode('utf-8')).hexdigest() + app = Flask(__name__) app.secret_key = 'your_secret_key' @@ -7,25 +12,59 @@ app.secret_key = 'your_secret_key' def home(): return redirect(url_for('login')) +@app.route('/register', methods=['GET', 'POST']) +def register(): + import sqlLite.get as getter + import sqlLite.set as setter + import useful.hash as hasher + if request.method == 'POST': + username = request.form['username'].strip() + email = request.form.get('email').strip() + password = request.form.get('password').strip() + pwd_confirm = request.form.get('confirm_password').strip() + + if not email or not password or not pwd_confirm or not username: + flash('Please fill out all fields', 'error') + return redirect(url_for('register')) + + if password != pwd_confirm: + flash('Passwords do not match', 'error') + return redirect(url_for('register')) + # Hash the password + hashed_password = hasher.sha512(password.encode('utf-8')).hexdigest() + try: + # Call your setter function to add user to DB + setter.set_login(username, email, hashed_password) + flash('Registration successful! Please log in.', 'success') + return redirect(url_for('login')) + except Exception as e: + flash(f'Error: {str(e)}', 'error') + return redirect(url_for('register')) + + return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': enter_email = request.form.get('email') enter_password = request.form.get('password') + import hashlib import sqlLite.get as getter - import useful.hash as hasher - pwd = getter.get_password_by_email(enter_email) - password = hasher.get_password_hash(enter_password) - if password == pwd: - return redirect(url_for('dashboard')) - elif password == None: + + stored_hash = getter.get_password_by_email(enter_email) # use email here + + if stored_hash is None: flash("User not found!") return redirect(url_for("login")) - elif pwd == None: - flash("Password not found!") - return redirect(url_for("login")) + + hash_entered = hashlib.sha512(enter_password.encode('utf-8')).hexdigest() + + if hash_entered == stored_hash: + return redirect(url_for('dashboard')) else: flash('Invalid email or password', 'error') + print("Stored hash:", stored_hash) + print("Entered hash:", hash_entered) + return redirect(url_for('login')) return render_template('login.html') diff --git a/templates/login.html b/frontend/templates/login.html similarity index 100% rename from templates/login.html rename to frontend/templates/login.html diff --git a/frontend/templates/register.html b/frontend/templates/register.html new file mode 100644 index 0000000..e735073 --- /dev/null +++ b/frontend/templates/register.html @@ -0,0 +1,151 @@ + + + + + + Register + + + + + + diff --git a/main.py b/main.py index 53dd185..f947c04 100644 --- a/main.py +++ b/main.py @@ -1,20 +1,19 @@ -db_type = "sqlite" import sqlLite from frontend.app import app sqlLite.set_db_name("databases/test.db") -if db_type == "sqlite": - import sqlLite.create as create - import sqlLite.set as setter - import sqlLite.get as getter - #import testing as testing - #testing.sqllite_reset() - create.create_table_t_user() - setter.set_login("test", "test@test.test", "password") - setter.set_login("admin","admin@test.test", "admin") - getter.get_password_by_email("admin@fuhlig.de") +import sqlLite.create as create +import sqlLite.set as setter +import sqlLite.get as getter +#import testing as testing + +#testing.sqllite_reset() +create.create_table_t_user() +setter.set_login("test", "test@test.test", "password") +#setter.set_login("admin", "admin@test.test", "admin") +#getter.get_password_by_email("admin@fuhlig.de") if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080) diff --git a/useful/hash.py b/useful/hash.py index a2f4a7d..9682ad9 100644 --- a/useful/hash.py +++ b/useful/hash.py @@ -1,4 +1,5 @@ from hashlib import sha512 def get_password_hash(password): + password = password.strip() return sha512(password.encode('utf-8')).hexdigest() \ No newline at end of file From 70c85cb8be7163e0b89a092d2b8a866427c785a6 Mon Sep 17 00:00:00 2001 From: florianuhlig Date: Fri, 3 Oct 2025 01:23:18 +0200 Subject: [PATCH 5/5] Registering works fine now --- frontend/app.py | 36 +++++---- frontend/templates/dashboard.html | 119 ++++++++++++++++++++++++++++++ frontend/templates/register.html | 1 + main.py | 7 -- sqlLite/__init__.py | 2 - sqlLite/auth.py | 17 +++++ sqlLite/set.py | 9 +-- standard/getter.py | 12 +++ useful/check.py | 10 --- useful/hash.py | 5 -- 10 files changed, 173 insertions(+), 45 deletions(-) create mode 100644 frontend/templates/dashboard.html create mode 100644 sqlLite/auth.py create mode 100644 standard/getter.py delete mode 100644 useful/check.py delete mode 100644 useful/hash.py diff --git a/frontend/app.py b/frontend/app.py index 1bd7b5e..31a73c2 100644 --- a/frontend/app.py +++ b/frontend/app.py @@ -14,14 +14,14 @@ def home(): @app.route('/register', methods=['GET', 'POST']) def register(): - import sqlLite.get as getter + import standard.getter as st_getter import sqlLite.set as setter - import useful.hash as hasher + if request.method == 'POST': - username = request.form['username'].strip() - email = request.form.get('email').strip() - password = request.form.get('password').strip() - pwd_confirm = request.form.get('confirm_password').strip() + username = request.form['username'] + email = request.form.get('email') + password = request.form.get('password') + pwd_confirm = request.form.get('confirm_password') if not email or not password or not pwd_confirm or not username: flash('Please fill out all fields', 'error') @@ -30,18 +30,22 @@ def register(): if password != pwd_confirm: flash('Passwords do not match', 'error') return redirect(url_for('register')) - # Hash the password - hashed_password = hasher.sha512(password.encode('utf-8')).hexdigest() + try: - # Call your setter function to add user to DB - setter.set_login(username, email, hashed_password) - flash('Registration successful! Please log in.', 'success') - return redirect(url_for('login')) + if st_getter.get_validate_email(email): + setter.set_login(username, email, password) + flash('Registration successful! Please log in.', 'success') + return redirect(url_for('login')) + else: + flash('Invalid email format', 'error') + return redirect(url_for('register')) except Exception as e: flash(f'Error: {str(e)}', 'error') return redirect(url_for('register')) - + # For GET-requests: return render_template('register.html') + + @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': @@ -49,6 +53,7 @@ def login(): enter_password = request.form.get('password') import hashlib import sqlLite.get as getter + import standard.getter as st_getter stored_hash = getter.get_password_by_email(enter_email) # use email here @@ -56,7 +61,7 @@ def login(): flash("User not found!") return redirect(url_for("login")) - hash_entered = hashlib.sha512(enter_password.encode('utf-8')).hexdigest() + hash_entered = st_getter.get_password_hash(enter_password) if hash_entered == stored_hash: return redirect(url_for('dashboard')) @@ -70,4 +75,5 @@ def login(): @app.route('/dashboard') def dashboard(): - return "Welcome to the dashboard! Login successful." + #return "Welcome to the dashboard! Login successful." + return render_template('dashboard.html') diff --git a/frontend/templates/dashboard.html b/frontend/templates/dashboard.html new file mode 100644 index 0000000..5244e39 --- /dev/null +++ b/frontend/templates/dashboard.html @@ -0,0 +1,119 @@ + + + + + + Register + + + + + diff --git a/frontend/templates/register.html b/frontend/templates/register.html index e735073..8563531 100644 --- a/frontend/templates/register.html +++ b/frontend/templates/register.html @@ -72,6 +72,7 @@ box-shadow: 0 2px 5px rgba(0,0,0,0.05); } + input[type="username"]:focus, input[type="email"]:focus, input[type="password"]:focus { border-color: #2575fc; diff --git a/main.py b/main.py index f947c04..430e84f 100644 --- a/main.py +++ b/main.py @@ -5,15 +5,8 @@ from frontend.app import app sqlLite.set_db_name("databases/test.db") import sqlLite.create as create -import sqlLite.set as setter -import sqlLite.get as getter -#import testing as testing -#testing.sqllite_reset() create.create_table_t_user() -setter.set_login("test", "test@test.test", "password") -#setter.set_login("admin", "admin@test.test", "admin") -#getter.get_password_by_email("admin@fuhlig.de") if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080) diff --git a/sqlLite/__init__.py b/sqlLite/__init__.py index 83dee19..8c2255d 100644 --- a/sqlLite/__init__.py +++ b/sqlLite/__init__.py @@ -1,5 +1,3 @@ -db_name = "databases/test.db" - def set_db_name(name): global db_name db_name = name \ No newline at end of file diff --git a/sqlLite/auth.py b/sqlLite/auth.py new file mode 100644 index 0000000..eb862b5 --- /dev/null +++ b/sqlLite/auth.py @@ -0,0 +1,17 @@ + +def login(name_email, password): + import get as getter + password_stored = getter.get_password_by_email(name_email) + if password_stored is None: + return None + elif password_stored != password: + return None + else: + return True + +def register(username, email, password): + import standard.getter as st_getter + if st_getter.get_validate_email(email): + hashed_password = st_getter.get_password_hash(password) + import sqlLite.set as sq_setter + sq_setter.set_login(username, email,hashed_password) \ No newline at end of file diff --git a/sqlLite/set.py b/sqlLite/set.py index df70439..3ebe9a2 100644 --- a/sqlLite/set.py +++ b/sqlLite/set.py @@ -1,17 +1,14 @@ from hashlib import sha512 import sqlite3 -import useful.check as check -import useful.hash as hash +import standard.getter as st_getter from . import db_name - - def set_login(username, email, password): db_con = sqlite3.connect(db_name) db_cur = db_con.cursor() try: - if check.check_email(email): - db_cur.execute("INSERT INTO T_USERS (USERNAME, EMAIL, PASSWORD) VALUES (?,?,?)", (username ,email , hash.get_password_hash(password))) + if st_getter.get_validate_email(email): + db_cur.execute("INSERT INTO T_USERS (USERNAME, EMAIL, PASSWORD) VALUES (?,?,?)", (username ,email , st_getter.get_password_hash(password))) db_con.commit() else: print("Email entered is not valid") diff --git a/standard/getter.py b/standard/getter.py new file mode 100644 index 0000000..4564e4e --- /dev/null +++ b/standard/getter.py @@ -0,0 +1,12 @@ +def get_password_hash(password): + from hashlib import sha512 + password = password.strip() + return sha512(password.encode('utf-8')).hexdigest() + +def get_validate_email(email): + import re + valid = re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email) + if valid: + return True + else: + return False \ No newline at end of file diff --git a/useful/check.py b/useful/check.py deleted file mode 100644 index ff57fb2..0000000 --- a/useful/check.py +++ /dev/null @@ -1,10 +0,0 @@ -import re - -def check_email(email): - # Click on Edit and place your email ID to validate - #email = "my.ownsite@our-earth.de" - valid = re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$', email) - if valid: - return True - else: - return False \ No newline at end of file diff --git a/useful/hash.py b/useful/hash.py deleted file mode 100644 index 9682ad9..0000000 --- a/useful/hash.py +++ /dev/null @@ -1,5 +0,0 @@ -from hashlib import sha512 - -def get_password_hash(password): - password = password.strip() - return sha512(password.encode('utf-8')).hexdigest() \ No newline at end of file