cfone/app/base/routes.py

128 lines
3.8 KiB
Python
Raw Normal View History

2021-09-23 03:46:35 +00:00
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""
from app.base.util import hash_pass
from flask import jsonify, render_template, redirect, request, url_for
from flask_login import (
current_user,
login_required,
login_user,
logout_user
)
from app import db, login_manager
from app.base import blueprint
from app.base.forms import LoginForm, CreateAccountForm
from app.base.models import User
from app.base.util import verify_pass
@blueprint.route('/')
def route_default():
return redirect(url_for('base_blueprint.login'))
## Login & Registration
@blueprint.route('/login', methods=['GET', 'POST'])
def login():
login_form = LoginForm(request.form)
if 'login' in request.form:
# read form data
username = request.form['username']
password = request.form['password']
# Locate user
user = User.query.filter_by(username=username).first()
# Check the password
if user and verify_pass( password, user.password):
login_user(user)
return redirect(url_for('base_blueprint.route_default'))
# Something (user or pass) is not ok
return render_template( 'accounts/login.html', msg='Wrong user or password', form=login_form)
if not current_user.is_authenticated:
return render_template( 'accounts/login.html',
form=login_form)
return redirect(url_for('home_blueprint.index'))
@blueprint.route('/register', methods=['GET', 'POST'])
def register():
login_form = LoginForm(request.form)
create_account_form = CreateAccountForm(request.form)
if 'register' in request.form:
username = request.form['username']
email = request.form['email' ]
# Check usename exists
user = User.query.filter_by(username=username).first()
if user:
return render_template( 'accounts/register.html',
msg='Username already registered',
success=False,
form=create_account_form)
# Check email exists
user = User.query.filter_by(email=email).first()
if user:
return render_template( 'accounts/register.html',
msg='Email already registered',
success=False,
form=create_account_form)
# else we can create the user
user = User(
username = request.form.get('username'),
email=request.form.get('email'),
password=hash_pass(request.form.get('password'))
)
db.session.add(user)
db.session.commit()
return render_template( 'accounts/register.html',
msg='User created please <a href="/login">login</a>',
success=True,
form=create_account_form)
else:
return render_template( 'accounts/register.html', form=create_account_form)
@blueprint.route('/logout')
def logout():
logout_user()
return redirect(url_for('base_blueprint.login'))
@blueprint.route('/shutdown')
def shutdown():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
return 'Server shutting down...'
## Errors
@login_manager.unauthorized_handler
def unauthorized_handler():
return render_template('page-403.html'), 403
@blueprint.errorhandler(403)
def access_forbidden(error):
return render_template('page-403.html'), 403
@blueprint.errorhandler(404)
def not_found_error(error):
return render_template('page-404.html'), 404
@blueprint.errorhandler(500)
def internal_error(error):
return render_template('page-500.html'), 500