# -*- encoding: utf-8 -*-
"""
Modified for GRID, 2021
Copyright (c) 2019 - present AppSeed.us
Gère les routines des connnexions et inscription
"""
from flask import jsonify, render_template, redirect, request, url_for
from flask_login import (
current_user,
login_required,
login_user,
logout_user
)
import pandas
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
import plotly
import plotly.graph_objs as go
import pandas as pd
import numpy as np
import json
import run
from agri_data import data_draw
[docs]@blueprint.route('/')
def route_default():
return redirect(url_for('base_blueprint.login'))
## Login & Registration
[docs]@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)
data_draw.RandomDraw().main()
render = run.index()
return render
# 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)
render = run.index()
return render
[docs]@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(**request.form)
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)
[docs]@blueprint.route('/logout')
def logout():
logout_user()
return redirect(url_for('base_blueprint.login'))
[docs]@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
[docs]@login_manager.unauthorized_handler
def unauthorized_handler():
return render_template('page-403.html'), 403
[docs]@blueprint.errorhandler(403)
def access_forbidden(error):
return render_template('page-403.html'), 403
[docs]@blueprint.errorhandler(404)
def not_found_error(error):
return render_template('page-404.html'), 404
[docs]@blueprint.errorhandler(500)
def internal_error(error):
return render_template('page-500.html'), 500