mirror of
https://github.com/iritmaximus/timetrials.git
synced 2026-10-12 19:13:48 +03:00
feat: added login to project
This commit is contained in:
@@ -11,4 +11,4 @@
|
||||
<input type="submit" name="login">
|
||||
</form>
|
||||
|
||||
<p><a href="/createuser">Create new user</a></p>
|
||||
<p><a href="/signup">Create new user</a></p>
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<title>Sign Up</title>
|
||||
<h1>Sign Up page</h1>
|
||||
|
||||
<form action="/signup" method="POST">
|
||||
<label for="username">Username:</label>
|
||||
<input type="text" name="username">
|
||||
<br>
|
||||
<label for="password">Password:</label>
|
||||
<input type="text" name="password">
|
||||
<br>
|
||||
<input type="submit" name="signup">
|
||||
</form>
|
||||
|
||||
<p><a href="/login">Already have an account?</a></p>
|
||||
+63
-5
@@ -1,10 +1,68 @@
|
||||
# import bcrypt
|
||||
from flask import session
|
||||
from flaskr.database import db
|
||||
|
||||
def generate_token():
|
||||
pass
|
||||
from werkzeug.security import check_password_hash, generate_password_hash
|
||||
|
||||
|
||||
def generate_session(name: str):
|
||||
print("session name", session.get("name"))
|
||||
session["name"] = name
|
||||
|
||||
|
||||
def check_session() -> bool:
|
||||
if session.get("name") is not None and len(session["name"]) > 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
def check_user_login(name: str, password: str) -> bool:
|
||||
# query sql
|
||||
# 1. check if username exists
|
||||
# 2. check if passwords match
|
||||
|
||||
print("checking if username exists")
|
||||
sql = "SELECT password FROM users as u where u.username=:username"
|
||||
result = db.session.execute(sql, {"username": name}).fetchone()
|
||||
print("password:", result)
|
||||
if result is None:
|
||||
return False
|
||||
|
||||
print("found username, checking password")
|
||||
if check_password_hash(result[0], password):
|
||||
print("password matches")
|
||||
return True
|
||||
|
||||
def check_user_exists(name: str, pass_hash: str):
|
||||
return False
|
||||
|
||||
def hash_password(password: str):
|
||||
pass
|
||||
|
||||
def check_username_exists(username: str) -> bool:
|
||||
sql = "SELECT COUNT(*) FROM users as u WHERE u.username=:username"
|
||||
result = db.session.execute(sql, {"username": username}).fetchone()
|
||||
print("result:", result)
|
||||
if result is not None:
|
||||
if result[0] == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def create_new_user(name: str, text_password: str):
|
||||
# insert into sql
|
||||
# 1. username
|
||||
# 2. hashed password
|
||||
|
||||
username = str(name)
|
||||
if check_username_exists(username):
|
||||
raise ValueError("Username exists")
|
||||
password = hash_password(text_password)
|
||||
|
||||
print("inserting to db")
|
||||
sql = "INSERT INTO users (username, password) VALUES (:username, :password)"
|
||||
db.session.execute(sql, {"username": username, "password": password})
|
||||
db.session.commit()
|
||||
print("success")
|
||||
|
||||
|
||||
def hash_password(password: str) -> str:
|
||||
return generate_password_hash(password)
|
||||
|
||||
+47
-16
@@ -1,16 +1,19 @@
|
||||
from flask import render_template, request, redirect, url_for, flash
|
||||
from flask import render_template, request, redirect, url_for
|
||||
|
||||
from flaskr import app
|
||||
from flaskr.database import db, test_db, create_db
|
||||
from flaskr.user import check_user_exists, generate_token
|
||||
from flaskr.database import test_db, create_db, reset_db
|
||||
from flaskr.user import (
|
||||
check_user_login,
|
||||
generate_session,
|
||||
check_session,
|
||||
create_new_user,
|
||||
)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def navigate():
|
||||
sessionid = ""
|
||||
if not sessionid:
|
||||
redirect(url_for("login"))
|
||||
|
||||
if not check_session():
|
||||
return redirect(url_for("login"))
|
||||
return render_template("home.html")
|
||||
|
||||
|
||||
@@ -35,33 +38,61 @@ def get_times():
|
||||
@app.route("/login", methods=["GET", "POST"])
|
||||
def login():
|
||||
if request.method == "GET":
|
||||
if check_session():
|
||||
# already logged in
|
||||
return redirect(url_for("navigate"))
|
||||
return render_template("login.html")
|
||||
|
||||
elif request.method == "POST":
|
||||
username = request.form["username"]
|
||||
password = request.form["password"]
|
||||
if check_user_exists(username, password):
|
||||
generate_token()
|
||||
|
||||
# TODO generate error messsage for incorrect login
|
||||
if check_user_login(username, password):
|
||||
generate_session(username)
|
||||
return redirect(url_for("navigate"))
|
||||
|
||||
else:
|
||||
flash("Incorrect login", "error")
|
||||
print("send notification: incorrect login")
|
||||
print("*** incorrect login ***")
|
||||
return redirect(url_for("login"))
|
||||
|
||||
else:
|
||||
return "Incorrect http method"
|
||||
|
||||
|
||||
@app.route("/signup", methods=["GET", "POST"])
|
||||
def signup():
|
||||
if request.method == "GET":
|
||||
return render_template("signup.html")
|
||||
|
||||
return f"Todo POST request {username} {password}"
|
||||
elif request.method == "POST":
|
||||
username = request.form["username"]
|
||||
password = request.form["password"]
|
||||
print("creating new user...")
|
||||
try:
|
||||
create_new_user(username, password)
|
||||
except ValueError as e:
|
||||
print("Error:", e)
|
||||
return redirect(url_for("signup"))
|
||||
|
||||
@app.route("/createuser")
|
||||
def createuser():
|
||||
return "new user created"
|
||||
return redirect(url_for("navigate"))
|
||||
|
||||
@app.route("/init")
|
||||
else:
|
||||
print("incorrect method")
|
||||
return "Error: Incorrect method"
|
||||
|
||||
|
||||
@app.route("/db/init")
|
||||
def initialize_db():
|
||||
return create_db()
|
||||
|
||||
|
||||
@app.route("/db/reset")
|
||||
def reset_database():
|
||||
reset_db()
|
||||
return "Initialization successful"
|
||||
|
||||
|
||||
@app.route("/db")
|
||||
def test_db_route():
|
||||
return test_db()
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id serial primary key,
|
||||
name varchar(80) not null,
|
||||
password varchar(80) not null
|
||||
username varchar(80) not null,
|
||||
password varchar(150) not null
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS games (
|
||||
|
||||
Reference in New Issue
Block a user