def validate_email(self, field): """Validate email.""" field.data = field.data.lower() if validate_email(field.data.lower()) != 1: raise validators.ValidationError( _("Supplied email address %(email)s is invalid.", email=field.data)) # is email already taken? try: User.query.filter(User.email == field.data).one() raise validators.ValidationError( _( "Supplied email address %(email)s already exists " "in the database.", email=field.data)) except SQLAlchemyError: pass # if the email is changed we reset the password to a random one, such # that the user is forced to confirm the new email import random from webuser import updatePasswordUser updatePasswordUser(current_user['id'], int(random.random() * 1000000)) from flask import flash, url_for flash( _("Note that if you have changed your email address, you \ will have to <a href=%(link)s>reset</a> your password anew.", link=url_for('webaccount.lost')), 'warning')
def current_user_password_validator(form, field): """Validate password field if is the password of the user.""" id_user = current_user.get_id() if not id_user: raise validators.ValidationError(_("Nobody is currently logged-in.")) user = User.query.filter_by(id=id_user).one() if not user.verify_password(field.data): raise validators.ValidationError( _('The password inserted is not valid.'))
def password_validator(form, field): """Validate password.""" min_length = cfg['CFG_ACCOUNT_MIN_PASSWORD_LENGTH'] if len(field.data) < min_length: raise validators.ValidationError( _("Password must be at least %(x_pass)d characters long.", x_pass=min_length))
def validate_email(email): """Check whether wanted EMAIL address supplied by the user is valid. At the moment we just check whether it contains '@' and whether it doesn't contain blanks. We also check the email domain if CFG_ACCESS_CONTROL_LIMIT_REGISTRATION_TO_DOMAIN is set. """ CFG_ACCESS_CONTROL_LIMIT_REGISTRATION_TO_DOMAIN = current_app.config.get( 'CFG_ACCESS_CONTROL_LIMIT_REGISTRATION_TO_DOMAIN') if (email.find("@") <= 0) or (email.find(" ") > 0): raise validators.ValidationError( _("Supplied email address %(x_addr)s is invalid.", x_addr=email)) elif CFG_ACCESS_CONTROL_LIMIT_REGISTRATION_TO_DOMAIN: if not email.endswith(CFG_ACCESS_CONTROL_LIMIT_REGISTRATION_TO_DOMAIN): raise validators.ValidationError( _("Supplied email address %(x_addr)s is invalid.", x_addr=email))
def validate_nickname_or_email(form, field): try: User.query.filter(User.nickname == field.data).one() except SQLAlchemyError: try: User.query.filter(User.email == field.data).one() except SQLAlchemyError: raise validators.ValidationError( _('Not valid nickname or email: %(x_data)s', x_data=(field.data, )))
def nickname_validator(form, field): """Validate nickname.""" validate_nickname(field.data) # is nickname already taken? try: User.query.filter(User.nickname == field.data).one() raise validators.ValidationError( _("Desired nickname %(nick)s already exists in the database.", nick=field.data)) except SQLAlchemyError: pass
def user_email_validator(form, field): """Validate email and check it is not known.""" email_validator(form, field) # is email already taken? try: User.query.filter(User.email == field.data).one() raise validators.ValidationError( _("Supplied email address %(email)s already exists.", email=field.data)) except SQLAlchemyError: pass
def validate_nickname(nickname): """Check whether wanted NICKNAME supplied by the user is valid. At the moment we just check whether it is not empty, does not contain blanks or @, is not equal to `guest', etc. This check relies on re_invalid_nickname regexp (see above) Return 1 if nickname is okay, return 0 if it is not. """ if not User.check_nickname(nickname): raise validators.ValidationError( _("Desired nickname %(x_name)s is invalid.", x_name=nickname))
def nickname_validator(form, field): """Validate nickname.""" validate_nickname(field.data) # is nickname already taken? try: User.query.filter(User.nickname == field.data).one() raise validators.ValidationError( _("Desired nickname %(nick)s already exists in the database.", nick=field.data)) except (NoResultFound, MultipleResultsFound): pass except SQLAlchemyError: current_app.logger.exception("User nickname query problem.")
def user_email_validator(form, field): """Validate email and check it is not known.""" email_validator(form, field) # is email already taken? try: User.query.filter(User.email == field.data).one() raise validators.ValidationError( _("Supplied email address %(email)s already exists.", email=field.data)) except (NoResultFound, MultipleResultsFound): pass except SQLAlchemyError: current_app.logger.exception("User email query problem.")
def validate_nickname(nickname): """Check whether wanted NICKNAME supplied by the user is valid. At the moment we just check whether it is not empty, does not contain blanks or @, is not equal to `guest', etc. This check relies on re_invalid_nickname regexp (see above) Return 1 if nickname is okay, return 0 if it is not. """ if nickname and \ not(nickname.startswith(' ') or nickname.endswith(' ')) and \ nickname.lower() != 'guest': if re_invalid_nickname.match(nickname) is not None: raise validators.ValidationError( _("Desired nickname %(x_name)s is invalid.", x_name=nickname))
def password2_validator(form, field): """Validate password2.""" if field.data != form.password.data: raise validators.ValidationError(_("Both passwords must match."))
def validate_current_password(self, field): """Validate current password.""" from invenio.ext.login import authenticate if not authenticate(current_user['nickname'], field.data): raise validators.ValidationError(_("Password mismatch."))
def validate_password(self, field): user = self.get_user() if user is None or not user.check_password(self.password.data): flash('Invalid user or password') raise validators.ValidationError()