mirror of
https://github.com/aronwk-aaron/MSState-Library-ETD.git
synced 2026-01-24 14:28:25 -06:00
54 lines
1.5 KiB
Python
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
|