sistema_web/login-mecanics/content/forms.py

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>')