Exemple #1
0
    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')
Exemple #2
0
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.'))
Exemple #3
0
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))
Exemple #4
0
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))
Exemple #5
0
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, )))
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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))
Exemple #9
0
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.")
Exemple #10
0
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.")
Exemple #11
0
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))
Exemple #12
0
def password2_validator(form, field):
    """Validate password2."""
    if field.data != form.password.data:
        raise validators.ValidationError(_("Both passwords must match."))
Exemple #13
0
 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."))
Exemple #14
0
    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()