Files
MSState-Library-ETD/app/forms.py
2019-03-22 10:28:11 -05:00

54 lines
1.5 KiB
Python

from flask import current_app, flash
from flask_user import UserManager
from flask_user.forms import RegisterForm
from flask_wtf import FlaskForm
from wtforms import StringField, HiddenField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired
from app import models
class CustomUserManager(UserManager):
# noinspection PyAttributeOutsideInit
def customize(self, app):
self.LoginFormClass = CustomLoginForm
class CustomLoginForm(FlaskForm):
"""Login form"""
next = HiddenField()
reg_next = HiddenField()
netid = StringField('NetID', validators=[
DataRequired('NetID is required'),
])
password = PasswordField('Password', validators=[
DataRequired('Password is required'),
])
remember_me = BooleanField('Remember me')
submit = SubmitField('Sign in')
def __init__(self, *args, **kwargs):
super(CustomLoginForm, self).__init__(*args, **kwargs)
def validate(self):
# grab the user manager
user_manager = current_app.user_manager
# handle invalid fields
if not super(CustomLoginForm, self).validate():
return False
# find user by netid
user = user_manager.db_manager.db_adapter.ifind_first_object(models.User, netid=self.netid.data)
# handle successful authentication
if user and user_manager.verify_password(self.password.data, user.password):
return True
# unsuccessful authentication
flash('Invalid NetID or Password', 'error')
return False