From 8c270bd24bdbdc50aa956f78f2ef551113dafcae Mon Sep 17 00:00:00 2001 From: nyx Date: Thu, 13 Mar 2025 00:18:06 -0500 Subject: [PATCH] finyally get the DB done just wannya go home --- app/app.py | 59 +++++++++++++++++++++++++++++++++------ app/templates/login.j2 | 18 ++++-------- app/templates/register.j2 | 50 +++------------------------------ 3 files changed, 60 insertions(+), 67 deletions(-) diff --git a/app/app.py b/app/app.py index 09df521..ab07d62 100644 --- a/app/app.py +++ b/app/app.py @@ -1,14 +1,14 @@ -from urllib import request - -from flask import * +from flask import request, redirect, session, render_template, send_from_directory, Flask from os import path, walk import hashlib import configparser -from sqlalchemy import create_engine +from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import scoped_session,sessionmaker +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.sql import text config = configparser.ConfigParser() config.read('config.ini') @@ -20,8 +20,18 @@ databaseUsername = str(config['DATABASE']['username']) databasePassword = str(config['DATABASE']['password']) databaseName = str(config['DATABASE']['name']) -engine=create_engine("postgresql://" + databaseUsername + ":" + databasePassword + "@localhost/" + databaseName) -db=scoped_session(sessionmaker(bind=engine)) +engine = create_engine(f"postgresql://{databaseUsername}:{databasePassword}@localhost/{databaseName}") +db = scoped_session(sessionmaker(bind=engine)) + +Base = declarative_base() + +class User(Base): + __tablename__ = 'users' + id = Column(Integer, primary_key=True) + username = Column(String, unique=True, nullable=False) + password = Column(String, nullable=False) + +Base.metadata.create_all(engine) app = Flask(__name__) @@ -40,14 +50,47 @@ def home(): return render_template('index.j2', instanceLocation=instanceLocation, instanceBranding=instanceBranding) -@app.route('/auth/login/') +@app.route('/auth/login/', methods=['GET', 'POST']) def login(): + if request.method == 'POST': + username = request.form['username'] + password = encrypt(request.form['password']) + + user = db.execute(text("SELECT * FROM users WHERE username = :username AND password = :password"), + {"username": username, "password": password}).fetchone() + + if user: + session['user_id'] = user.id + return redirect('/') + else: + return "Invalid credentials!" return render_template('login.j2', instanceLocation=instanceLocation, instanceBranding=instanceBranding) -@app.route('/auth/register/') +@app.route('/auth/register/', methods=['GET', 'POST']) def register(): + if request.method == 'POST': + username = request.form['username'] + password = encrypt(request.form['password']) + print(username) + + # check if username exists + existing_user = db.execute(text("SELECT * FROM users WHERE username = :username"), + {"username": username}).fetchone() + if existing_user: + return "User already exists!" + + # insert new user + db.execute(text("INSERT INTO users (username, password) VALUES (:username, :password)"), + {"username": username, "password": password}) + db.commit() + return redirect('/auth/login/') # redirect to login page after successful registration return render_template('register.j2', instanceLocation=instanceLocation, instanceBranding=instanceBranding) +@app.route('/auth/logout/') +def logout(): + session.pop('user_id', None) + return redirect('/') + @app.route('/assets/css/index.css') def index_css(): return send_from_directory('static/assets/css', 'index.css') diff --git a/app/templates/login.j2 b/app/templates/login.j2 index 3205e90..1edde56 100644 --- a/app/templates/login.j2 +++ b/app/templates/login.j2 @@ -11,19 +11,11 @@

Login to {{ instanceLocation }}'s Nyxask!

- - -
- - +
+ + + +
\ No newline at end of file diff --git a/app/templates/register.j2 b/app/templates/register.j2 index cfacb9d..3b0b26f 100644 --- a/app/templates/register.j2 +++ b/app/templates/register.j2 @@ -11,52 +11,10 @@

Register at {{ instanceLocation }}

-
- -
-
- - -
-
- -
-
- + + + +