Prototype functionality for login, logout, and sign up.

This commit is contained in:
Alexander Huddleston 2020-03-07 00:40:55 -06:00
parent 6869ff0cc1
commit 2e41f7da53
9 changed files with 151 additions and 42 deletions

View file

@ -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.

View file

@ -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

View file

View file

View file

@ -3,7 +3,7 @@
UwU Me!
</h1>
<h5 class="grey-text text-lighten-1 center">
Hello, {{ user }}
Hello, {{ current_user.id }}
</h5>
{% endblock %} {% block content %}
<div class="card-panel grey darken-3">
@ -13,4 +13,11 @@
</p>
{% endfor %}
</div>
<div class="card-panel grey darken-3">
<div class="center">
<a class="waves-effect waves-light btn blue darken-2" href="/logout">
Logout
</a>
</div>
</div>
{% endblock %}

View file

@ -1,22 +1,29 @@
{% extends 'index.html' %}
{% block header %}
{% extends 'index.html' %} {% block header %}
<h1 class="blue-grey-text text-lighten-5 center">
UwU Me!
</h1>
{% endblock %}
{% block content %}
<div class="card-panel grey darken-3">
<div class="center">
<a class="waves-effect waves-light btn blue darken-2" href="/login">
Login
</a>
{% endblock %} {% block content %}
<div class="card-panel grey darken-3">
<div class="row">
<div class="col s12">
<div class="row">
<div class="center col s6">
<a class="waves-effect waves-light btn blue darken-2" href="/login">
Login
</a>
</div>
{% for item in content_text %}
<p class="blue-grey-text text-lighten-5">
{{ item }}
</p>
{% endfor %}
<div class="center col s6">
<a class="waves-effect waves-light btn blue darken-2" href="/signup">
Sign Up
</a>
</div>
</div>
</div>
</div>
{% for item in content_text %}
<p class="blue-grey-text text-lighten-5">
{{ item }}
</p>
{% endfor %}
</div>
{% endblock %}

View file

@ -17,6 +17,7 @@
name="username"
value="{{
request.form.username }}"
id="username"
/>
</div>
<div class="input-field col s6">
@ -26,6 +27,7 @@
name="password"
value="{{
request.form.password }}"
id="password"
/>
</div>
</div>

View file

@ -0,0 +1,59 @@
{% extends 'index.html' %} {% block header %}
<h1 class="blue-grey-text text-lighten-5 center">
UwU Me!
</h1>
<h5 class="grey-text text-lighten-1 center">
Sign Up Page
</h5>
{% endblock %} {% block content %}
{% for message in get_flashed_messages() %}
<div class="card-panel red accent-1">
<p>
{{ message }}
</p>
</div>
{% endfor %}
<div class="card-panel grey darken-3">
<div class="row">
<form class="col s12" action="" method="post">
<div class="row">
<div class="input-field col s6">
<input
type="text"
placeholder="Username"
name="username"
value="{{
request.form.username }}"
id="username"
/>
</div>
<div class="input-field col s6">
<input
type="password"
placeholder="Password"
name="password"
value="{{
request.form.password }}"
id="password"
/>
</div>
</div>
<div class="center">
<button
class="waves-effect waves-light btn blue darken-2"
type="submit"
>
Create Account
</button>
</div>
</form>
</div>
</div>
<div class="card-panel grey darken-3">
{% for item in content_text %}
<p class="blue-grey-text text-lighten-5">
{{ item }}
</p>
{% endfor %}
</div>
{% endblock %}

View file

@ -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)
'''