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/frontend/app.py b/frontend/app.py
new file mode 100644
index 0000000..31a73c2
--- /dev/null
+++ b/frontend/app.py
@@ -0,0 +1,79 @@
+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'
+
+@app.route('/')
+def home():
+ return redirect(url_for('login'))
+
+@app.route('/register', methods=['GET', 'POST'])
+def register():
+ import standard.getter as st_getter
+ import sqlLite.set as setter
+
+ if request.method == 'POST':
+ 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')
+ return redirect(url_for('register'))
+
+ if password != pwd_confirm:
+ flash('Passwords do not match', 'error')
+ return redirect(url_for('register'))
+
+ try:
+ 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':
+ enter_email = request.form.get('email')
+ 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
+
+ if stored_hash is None:
+ flash("User not found!")
+ return redirect(url_for("login"))
+
+ hash_entered = st_getter.get_password_hash(enter_password)
+
+ 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')
+
+@app.route('/dashboard')
+def dashboard():
+ #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/login.html b/frontend/templates/login.html
new file mode 100644
index 0000000..82d8a0c
--- /dev/null
+++ b/frontend/templates/login.html
@@ -0,0 +1,141 @@
+
+
+
+
+
+ Login
+
+
+
+
+
Login to Your Account
+ {% with messages = get_flashed_messages(with_categories=true) %}
+ {% if messages %}
+
+ {% for category, message in messages %}
+ {{ message }}
+ {% endfor %}
+
+ {% endif %}
+ {% endwith %}
+
+
+
+
diff --git a/frontend/templates/register.html b/frontend/templates/register.html
new file mode 100644
index 0000000..8563531
--- /dev/null
+++ b/frontend/templates/register.html
@@ -0,0 +1,152 @@
+
+
+
+
+
+ Register
+
+
+
+
+
Create an Account
+ {% with messages = get_flashed_messages(with_categories=true) %}
+ {% if messages %}
+
+ {% for category, message in messages %}
+ {{ message }}
+ {% endfor %}
+
+ {% endif %}
+ {% endwith %}
+
+
+
+
diff --git a/main.py b/main.py
index 4cd5283..430e84f 100644
--- a/main.py
+++ b/main.py
@@ -1,5 +1,12 @@
-import sqlite3
+import sqlLite
-DB_CON = sqlite3.connect("database.db")
-DB_CUR = DB_CON.cursor()
+from frontend.app import app
+sqlLite.set_db_name("databases/test.db")
+
+import sqlLite.create as create
+
+create.create_table_t_user()
+
+if __name__ == '__main__':
+ app.run(debug=True, host='0.0.0.0', port=8080)
diff --git a/sqlLite/__init__.py b/sqlLite/__init__.py
new file mode 100644
index 0000000..8c2255d
--- /dev/null
+++ b/sqlLite/__init__.py
@@ -0,0 +1,3 @@
+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/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..3407f72
--- /dev/null
+++ b/sqlLite/get.py
@@ -0,0 +1,40 @@
+import sqlite3
+from . import db_name
+
+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)
+
+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
new file mode 100644
index 0000000..3ebe9a2
--- /dev/null
+++ b/sqlLite/set.py
@@ -0,0 +1,17 @@
+from hashlib import sha512
+import sqlite3
+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 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")
+ except sqlite3.IntegrityError:
+ print("Username or Email entered is not unique")
+ db_con.close()
\ No newline at end of file
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