Issues (1797)

public/main/auth/reset.php (1 issue)

Severity
1
<?php
2
/* For license terms, see /license.txt */
3
4
require_once __DIR__.'/../inc/global.inc.php';
5
6
$token = $_GET['token'] ?? '';
7
8
if (!ctype_alnum($token)) {
9
    $token = '';
10
}
11
12
// Build the form
13
$form = new FormValidator('reset', 'POST', api_get_self().'?token='.$token);
14
$form->addElement('header', get_lang('Reset password'));
15
$form->addHidden('token', $token);
16
$form->addElement(
17
    'password',
18
    'pass1',
19
    get_lang('Password'),
20
    [
21
        'show_hide' => true,
22
    ]
23
);
24
$form->addElement(
25
    'password',
26
    'pass2',
27
    get_lang('Confirm password'),
28
    ['id' => 'pass2', 'size' => 20, 'autocomplete' => 'off']
29
);
30
$form->addRule('pass1', get_lang('Required field'), 'required');
31
$form->addRule('pass2', get_lang('Required field'), 'required');
32
$form->addRule(['pass1', 'pass2'], get_lang('You have typed two different passwords'), 'compare');
33
$form->addButtonSave(get_lang('Update'));
34
35
$ttl = api_get_setting('user_reset_password_token_limit');
36
if (empty($ttl)) {
37
    $ttl = 3600;
38
}
39
40
if ($form->validate()) {
41
    $values = $form->exportValues();
42
    $password = $values['pass1'];
43
    $token = $values['token'];
44
45
    /** @var \Chamilo\CoreBundle\Entity\User $user */
46
    $user = UserManager::getRepository()->findUserByConfirmationToken($token);
47
    if ($user) {
0 ignored issues
show
$user is of type Chamilo\CoreBundle\Entity\User, thus it always evaluated to true.
Loading history...
48
        if (!$user->isPasswordRequestNonExpired($ttl)) {
49
            Display::addFlash(Display::return_message(get_lang('Link expired, please try again.')), 'warning');
50
            header('Location: '.api_get_path(WEB_CODE_PATH).'auth/lostPassword.php');
51
            exit;
52
        }
53
54
        $user->setPlainPassword($password);
55
        $userManager = UserManager::getRepository();
56
        $userManager->updateUser($user, true);
57
58
        $user->setConfirmationToken(null);
59
        $user->setPasswordRequestedAt(null);
60
61
        Database::getManager()->persist($user);
62
        Database::getManager()->flush();
63
64
        if ('true' === api_get_setting('platform.force_renew_password_at_first_login')) {
65
            $extraFieldValue = new ExtraFieldValue('user');
66
            $value = $extraFieldValue->get_values_by_handler_and_field_variable($user->getId(), 'ask_new_password');
67
            if (!empty($value) && isset($value['value']) && 1 === (int) $value['value']) {
68
                $extraFieldValue->delete($value['id']);
69
            }
70
        }
71
72
        Display::addFlash(Display::return_message(get_lang('Update successful')));
73
        header('Location: '.api_get_path(WEB_PATH));
74
        exit;
75
    } else {
76
        Display::addFlash(
77
            Display::return_message(get_lang('Link expired, please try again.'))
78
        );
79
    }
80
}
81
82
$tpl = new Template(null);
83
$tpl->assign('content', $form->toHtml());
84
$tpl->display_one_col_template();
85