From 2e41f7da53db4401d348e4e86ba7a46bd14b8164 Mon Sep 17 00:00:00 2001 From: Alexander Huddleston Date: Sat, 7 Mar 2020 00:40:55 -0600 Subject: [PATCH] Prototype functionality for login, logout, and sign up. --- uwume/assets/signup/content.txt | 3 ++ uwume/lib/classUser.py | 3 +- uwume/static/css/signup/index.css | 0 uwume/static/js/signup/index.js | 0 uwume/templates/home/index.html | 9 +++- uwume/templates/homepage.html | 41 ++++++++++------- uwume/templates/login/index.html | 2 + uwume/templates/signup/index.html | 59 ++++++++++++++++++++++++ uwume/views.py | 76 +++++++++++++++++++++---------- 9 files changed, 151 insertions(+), 42 deletions(-) create mode 100644 uwume/assets/signup/content.txt create mode 100644 uwume/static/css/signup/index.css create mode 100644 uwume/static/js/signup/index.js create mode 100644 uwume/templates/signup/index.html diff --git a/uwume/assets/signup/content.txt b/uwume/assets/signup/content.txt new file mode 100644 index 0000000..7fb37a5 --- /dev/null +++ b/uwume/assets/signup/content.txt @@ -0,0 +1,3 @@ +This is a personal project meant to allow users to sign up and receive an "UwU" from guests and other users! + +Credit for the original concept for this was PleasePet. \ No newline at end of file diff --git a/uwume/lib/classUser.py b/uwume/lib/classUser.py index bbf4830..0e5bef0 100644 --- a/uwume/lib/classUser.py +++ b/uwume/lib/classUser.py @@ -5,7 +5,8 @@ from flask_login import LoginManager, UserMixin, login_required class User(UserMixin): # proxy for a database of users user_database = {"JohnDoe": ("JohnDoe", "John"), - "JaneDoe": ("JaneDoe", "Jane")} + "JaneDoe": ("JaneDoe", "Jane"), + "admin": ("admin", "admin")} def __init__(self, username, password): self.id = username diff --git a/uwume/static/css/signup/index.css b/uwume/static/css/signup/index.css new file mode 100644 index 0000000..e69de29 diff --git a/uwume/static/js/signup/index.js b/uwume/static/js/signup/index.js new file mode 100644 index 0000000..e69de29 diff --git a/uwume/templates/home/index.html b/uwume/templates/home/index.html index 1867b0f..da53915 100644 --- a/uwume/templates/home/index.html +++ b/uwume/templates/home/index.html @@ -3,7 +3,7 @@ UwU Me!
- Hello, {{ user }} + Hello, {{ current_user.id }}
{% endblock %} {% block content %}
@@ -13,4 +13,11 @@

{% endfor %}
+
+ +
{% endblock %} diff --git a/uwume/templates/homepage.html b/uwume/templates/homepage.html index da64a1d..d7e16ac 100644 --- a/uwume/templates/homepage.html +++ b/uwume/templates/homepage.html @@ -1,22 +1,29 @@ -{% extends 'index.html' %} - -{% block header %} +{% extends 'index.html' %} {% block header %}

UwU Me!

-{% endblock %} - -{% block content %} -
-
- - Login - +{% endblock %} {% block content %} +
+
+
+
+ - {% for item in content_text %} -

- {{ item }} -

- {% endfor %} + +
-{% endblock %} \ No newline at end of file +
+ {% for item in content_text %} +

+ {{ item }} +

+ {% endfor %} +
+{% endblock %} diff --git a/uwume/templates/login/index.html b/uwume/templates/login/index.html index b12b9a7..f5897c3 100644 --- a/uwume/templates/login/index.html +++ b/uwume/templates/login/index.html @@ -17,6 +17,7 @@ name="username" value="{{ request.form.username }}" + id="username" />
@@ -26,6 +27,7 @@ name="password" value="{{ request.form.password }}" + id="password" />
diff --git a/uwume/templates/signup/index.html b/uwume/templates/signup/index.html new file mode 100644 index 0000000..87c2c50 --- /dev/null +++ b/uwume/templates/signup/index.html @@ -0,0 +1,59 @@ +{% extends 'index.html' %} {% block header %} +

+ UwU Me! +

+
+ Sign Up Page +
+{% endblock %} {% block content %} +{% for message in get_flashed_messages() %} +
+

+ {{ message }} +

+
+{% endfor %} +
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+ {% for item in content_text %} +

+ {{ item }} +

+ {% endfor %} +
+{% endblock %} diff --git a/uwume/views.py b/uwume/views.py index ceac974..98915aa 100644 --- a/uwume/views.py +++ b/uwume/views.py @@ -5,13 +5,15 @@ except: from lib.classUser import User from lib.helpers import get_static_paths, get_content_text from . import app -from flask import Flask, render_template, redirect, url_for, request -from flask_login import LoginManager, UserMixin, login_required +from flask import Flask, render_template, redirect, url_for, request, flash +from flask_login import LoginManager, UserMixin, login_required, login_user, current_user, logout_user login_manager = LoginManager() login_manager.init_app(app) +login_manager.login_view = "login" +''' @login_manager.user_loader def load_user(request): token = request.headers.get('Authorization') @@ -27,43 +29,71 @@ def load_user(request): return user return None +''' + + +@login_manager.user_loader +def load_user(request): + return User(request, User.user_database[request][1]) -@login_required @app.route('/home', methods=['GET']) +@login_required def home(): - return render_template('home/index.html', user='admin', static_paths=get_static_paths(), content_text=get_content_text()) + return render_template('home/index.html', static_paths=get_static_paths(), content_text=get_content_text()) + + +@app.route('/signup', methods=['GET', 'POST']) +def signup(): + error = 'Invalid method.' + if(request.method == 'POST'): + username = request.form['username'] + password = request.form['password'] + if(not username in User.user_database.keys()): + userClass = User(username, password) + User.user_database[username] = (username, password) + return redirect('/') + else: + flash('It looks like a user already exists with that name.') + return redirect('/signup') + elif(request.method == 'GET'): + return render_template('signup/index.html', static_paths=get_static_paths(), content_text=get_content_text()) + return f'ERROR: {error}' @app.route('/login', methods=['GET', 'POST']) def login(): + error = 'Invalid method.' if(request.method == 'POST'): - if request.form['username'] != 'admin' or request.form['password'] != 'admin': - error = 'Invalid Credentials. Please try again.' + username = request.form['username'] + password = request.form['password'] + if(username in User.user_database.keys()): + userClass = User(username, password) + login_user(userClass) + return redirect('home') else: - return redirect(url_for('home')) + error = 'Invalid credentials.' elif(request.method == 'GET'): return render_template('login/index.html', static_paths=get_static_paths(), content_text=get_content_text()) - return 'ERROR: Invalid method.' + return f'ERROR: {error}' -@app.route("/", methods=['GET']) +@app.route('/logout', methods=['GET', 'POST']) +def logout(): + error = 'Invalid method.' + if(request.method == 'GET'): + logout_user() + return redirect('/') + return f'ERROR: {error}' + + +@app.route('/', methods=['GET']) def hello(): - return render_template('homepage.html', static_paths=get_static_paths(), content_text=get_content_text()) + if(not current_user.is_active): + return render_template('homepage.html', static_paths=get_static_paths(), content_text=get_content_text()) + else: + return redirect('home') def main(): app.run(host='0.0.0.0', debug=True) - - -''' -@app.route("/", methods=["GET"]) -def index(): - return Response(response="Hello World!", status=200) - - -@app.route("/protected/", methods=["GET"]) -@login_required -def protected(): - return Response(response="Hello Protected World!", status=200) -'''