Ejemplo n.º 1
0
def post_password_reset():
    try:
        email = request.form['email']
        json_resp, status = api_post('/api/authentication/token',
                                     json={"email": email})

        form = FormValidator('An error has occurred')
        form.add_validator('email',
                           email, [email_validator, is_not_empty],
                           empty_msg='Enter your email address')

        if status != 200 or not form.is_valid():
            raise ValueError

        token = json_resp['token']
        decoded_jwt, status = api_get('/api/authentication/token/' + token +
                                      '?validation-type=reset-password')

        if status != 200:
            current_app.logger.error('Token has failed validation:' +
                                     decoded_jwt['error'])
            raise ValueError

        first_name = decoded_jwt['principle']['first_name']
        url = current_app.config.get(
            "SITE_URL") + "/password/change?t=" + token
        current_app.logger.info(url)

        template_id = current_app.config.get("RESET_PASSWORD_TEMPLATE")
        _, email_status = api_post('/api/notifications',
                                   json={
                                       "email_address": email,
                                       "template_id": template_id,
                                       "personalisation": {
                                           "first_name":
                                           first_name,
                                           "last_name":
                                           decoded_jwt['principle']['surname'],
                                           "change_password_link":
                                           url
                                       },
                                       "reference": "password-reset"
                                   },
                                   headers={'Accept': 'application/json'})
        if email_status != 201:
            raise ValueError

        return render_template('app/password/email_sent.html', email=email)

    except ValueError:
        form = FormValidator('An error has occurred')
        form.add_validator('email',
                           email, [is_not_empty, email_validator],
                           empty_msg='Enter your email address')
        return render_template(
            'app/password/reset.html',
            error_title="There was a problem",
            fields=form.validate(),
        )
Ejemplo n.º 2
0
def _validate_and_save_password(user_id, password, confirm_password):
    try:
        form = FormValidator('Enter a valid password')
        form.add_validator('passwords',
                           password,
                           fvs=[
                               password_length, password_letters,
                               password_number, password_symbol
                           ])
        form.add_validator('confirm_password', [password, confirm_password],
                           fvs=confirm_passwords_match)

        if not form.is_valid():
            current_app.logger.error('New password has failed validation')
            raise ValueError

        _, status = api_patch(
            '/api/account/users/' + user_id,
            json={
                'password': password,
                'disabled': None
            },
            headers={'Content-Type': 'application/merge-patch+json'})

        if status != 204:
            current_app.logger.error('Account-api has failed the validation')
            raise ValueError

        return True, {}

    except ValueError as e:
        current_app.logger.error(e)
        result = form.validate()
        if (not result['passwords'].error) and (
                not result['confirm_password'].error):
            result = {
                'passwords': ValidationResult(0, None,
                                              ['Enter a valid password'])
            }
        return False, result
def fail_signin():
    email = request.form['email']
    password = request.form['password']

    current_app.logger.info(
        'Calling account-api to check lock status for {}'.format(email))
    api_url = '/api/account/users/{}/check_lock'.format(email)
    resp, code = api_get(api_url, headers={'Content-Type': 'application/json'})

    if 'locked' in resp and resp['locked'] is not None:
        current_app.logger.info('Users account is locked')
        breadcrumb_links = [{
            "label": "Home",
            "href": "/"
        }, {
            "label": "Sign in to your account",
            "href": None
        }]
        flash('Your account is locked. Check your email.')
        return render_template("app/auth/signin.html",
                               error_title="There was a problem",
                               breadcrumb_links=breadcrumb_links)

    form = FormValidator('Email or password not recognised')
    form.add_validator('email', email, [email_validator, is_not_empty])
    form.add_validator('password', password, is_not_empty)
    breadcrumb_links = [{
        "label": "Home",
        "href": "/"
    }, {
        "label": "Sign in to your account",
        "href": None
    }]

    return render_template("app/auth/signin.html",
                           error_title="There was a problem",
                           fields=form.validate(),
                           breadcrumb_links=breadcrumb_links)