Issues (2089)

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

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