85 lines
3.7 KiB
Python
85 lines
3.7 KiB
Python
# coding: utf-8
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import StringField, PasswordField, SubmitField, BooleanField, HiddenField
|
|
from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError
|
|
from flask_login import current_user
|
|
from webinterface.models.system import Persona, Correo
|
|
import pwnedpasswords
|
|
|
|
class LoginForm(FlaskForm):
|
|
login = StringField('Rut', validators=[DataRequired()])
|
|
clave = PasswordField('Clave', validators=[DataRequired()])
|
|
remember = BooleanField('Recordarme')
|
|
submit = SubmitField('Ingresar')
|
|
|
|
|
|
class RequestResetForm(FlaskForm):
|
|
correo = StringField('Correo',
|
|
validators=[DataRequired(), Email()])
|
|
submit = SubmitField(u'Solicitud de recuperación de clave')
|
|
|
|
|
|
class ResetPasswordForm(FlaskForm):
|
|
password = PasswordField('Ingresa una Clave de Acceso', validators=[DataRequired()])
|
|
confirm_password = PasswordField(u'Confirma tu Clave',
|
|
validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField(u'Actualizar Contraseña')
|
|
|
|
def validate_password(self, clave):
|
|
if pwnedpasswords.check(clave.data):
|
|
raise ValidationError(u'La Clave ingresada es insegura. Verifíquelo en <a href="https://haveibeenpwned.com/Passwords">\';--have i been pwned?</a>')
|
|
|
|
|
|
class RegistrationForm(FlaskForm):
|
|
login = StringField('Usuario',
|
|
validators=[DataRequired(), Length(min=2, max=20)])
|
|
email = StringField('Correo',
|
|
validators=[DataRequired(), Email()])
|
|
password = PasswordField('Clave', validators=[DataRequired()])
|
|
confirm_password = PasswordField('Confirma clave',
|
|
validators=[DataRequired(), EqualTo('password')])
|
|
submit = SubmitField('Registrar')
|
|
|
|
def validate_login(self, login):
|
|
user = Persona.query.filter_by(login=login.data).first()
|
|
if user:
|
|
raise ValidationError(u'El nombre de usuario ya existe, elige otro por favor.')
|
|
|
|
def validate_email(self, email):
|
|
correo = Correo.query.filter_by(correo=email.data).first()
|
|
if correo:
|
|
raise ValidationError(u'El correo electrónico ya exite. ¿Olvidaste tu clave?')
|
|
|
|
def validate_password(self, clave):
|
|
if pwnedpasswords.check(clave.data):
|
|
raise ValidationError(u'La clave ingresada es insegura. Verifíquelo en <a href="https://haveibeenpwned.com/Passwords">\';--have i been pwned?</a>')
|
|
|
|
|
|
class mMiCuenta(FlaskForm):
|
|
id = HiddenField()
|
|
login = StringField('Usuario', render_kw={'readonly': True})
|
|
nombrecompleto = StringField('Nombre', render_kw={'readonly': True})
|
|
|
|
|
|
correo = StringField('Correo Principal', validators=[DataRequired(), Email()])
|
|
clave = PasswordField('Clave')
|
|
fono = StringField('Telefono', render_kw={"placeholder": "+569 8765 4321"})
|
|
|
|
submit = SubmitField('Modificar')
|
|
|
|
def validate_fono(self, field):
|
|
parsed = field.data.replace(" ", "")
|
|
|
|
if not parsed:
|
|
raise ValidationError(u'Debe ingresar un número de teléfono.')
|
|
if not parsed.startswith('+'):
|
|
raise ValidationError(u'Ingrese el número completo "+569XYZWABCD".')
|
|
if len(parsed) < 11:
|
|
raise ValidationError(u'Ingrese el número completo "+569XYZWABCD".')
|
|
if not parsed[1:].isdigit():
|
|
raise ValidationError(u'El número ingresado no es válido, contiene caracteres no-numéricos.')
|
|
|
|
def validate_clave(self, field):
|
|
if field.data and pwnedpasswords.check(field.data):
|
|
raise ValidationError(u'La clave ingresada es insegura. Verifíque la seguridad de su clave en <a href="https://haveibeenpwned.com/Passwords" target="_blank">\';--have i been pwned?</a>')
|