source: trunk/services/password.php @ 763

Last change on this file since 763 was 763, checked in by anonymous, 2 years ago

Include boomerang in hidden input on login form so the user will be redirected if the revisit the login form after session is garbage collected. Add escape values used in html attributes.

File size: 3.9 KB
Line 
1<?php
2/**
3 * The Strangecode Codebase - a general application development framework for PHP
4 * For details visit the project site: <http://trac.strangecode.com/codebase/>
5 * Copyright 2001-2012 Strangecode, LLC
6 *
7 * This file is part of The Strangecode Codebase.
8 *
9 * The Strangecode Codebase is free software: you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as published by the
11 * Free Software Foundation, either version 3 of the License, or (at your option)
12 * any later version.
13 *
14 * The Strangecode Codebase is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU General Public License along with
20 * The Strangecode Codebase. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23/**
24 * password.php
25 */
26
27// Redefine include_path including the codebase/services but allow local templates override global ones.
28ini_set('include_path', join(PATH_SEPARATOR, array(
29    get_include_path(),
30    dirname(__FILE__) . '/templates'
31)));
32
33$auth->requireLogin();
34
35require_once 'codebase/lib/FormValidator.inc.php';
36require_once 'codebase/lib/HTML.inc.php';
37
38/******************************************************************************
39 * CODE CONFIG
40 *****************************************************************************/
41
42// Titles and navigation header.
43$nav->add(sprintf(_("Change password for <em>%s</em>"), oTxt($auth->get('username'))));
44$nav->set('id', 'password');
45
46// The object to validate form input from the user.
47$fv = new FormValidator();
48
49/********************************************************************
50* MAIN
51********************************************************************/
52
53if (getFormData('boomerang', false) && isset($_SERVER['HTTP_REFERER'])) {
54    // We remember which page we came from so we can go back there.
55    $app->setBoomerangURL($_SERVER['HTTP_REFERER'], 'admin_password');
56}
57
58switch (getFormData('op')) {
59case 'update_password' :
60
61    // Get the form variables.
62    $frm = getFormData();
63
64    // Validate the posted data.
65    if ($fv->notEmpty('oldpassword', _("You did not specify the <strong>old password</strong>."))) {
66        $fv->checkRegex('oldpassword', '/^\S{0,128}$/i', true, _("The <strong>old password</strong> specified is not valid."));
67    }
68    if ($fv->notEmpty('newpassword', _("You did not specify the <strong>new password</strong>."))) {
69        if ($fv->checkRegex('newpassword', '/^\S{8,128}$/i', true, _("The <strong>new password</strong> specified is not valid. A password must be eight or more characters."))) {
70            if ($fv->notEmpty('newpassword2', _("You need to type the <strong>new password</strong> twice.")) && $frm['newpassword'] != $frm['newpassword2']) {
71                $fv->addError('newpassword', _("The <strong>new passwords</strong> do not match."));
72                $fv->addError('newpassword2');
73            }
74        }
75    }
76
77    if (!$fv->anyErrors() && false === $auth->authenticate($auth->get('username'), $frm['oldpassword'])) {
78        $fv->addError('oldpassword', _("Your <strong>old password</strong> failed authentication."));
79        $app->logMsg(sprintf('Password change failed for %s, using (md5ed) password: %s', $auth->get('username'), md5($frm['oldpassword'])), LOG_NOTICE, __FILE__, __LINE__);
80    }
81
82    if (!$fv->anyErrors()) {
83        $auth->setPassword(null, $frm['newpassword']);
84        $app->logMsg(sprintf('Password change successful for %s', $auth->get('username')), LOG_INFO, __FILE__, __LINE__);
85        $app->raiseMsg(sprintf(_("Password change successful for %s"), $auth->get('username')), MSG_SUCCESS, __FILE__, __LINE__);
86        $app->dieBoomerangURL('admin_password');
87    }
88    break;
89}
90
91// Templates.
92include 'header.ihtml';
93include 'password.ihtml';
94include 'footer.ihtml';
95
Note: See TracBrowser for help on using the repository browser.