2007-06-02 03:53:54 +02:00
< ? php
2012-09-02 09:27:06 +02:00
/* Copyright ( C ) 2007 - 2011 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:11:07 +01:00
* Copyright ( C ) 2008 - 2012 Regis Houssin < regis . houssin @ capnetworks . com >
2012-09-02 09:27:06 +02:00
* Copyright ( C ) 2008 - 2011 Juanjo Menent < jmenent @ 2 byte . es >
2015-12-21 03:01:37 +01:00
* Copyright ( C ) 2014 Teddy Andreotti < 125155 @ supinfo . com >
2007-06-02 03:53:54 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2007-06-02 03:53:54 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2011-08-01 01:19:04 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2007-06-02 03:53:54 +02:00
*/
2009-03-13 14:12:43 +01:00
/**
* \file htdocs / user / passwordforgotten . php
2011-07-08 17:50:28 +02:00
* \brief Page to ask a new password
2009-03-13 14:12:43 +01:00
*/
2007-06-02 03:53:54 +02:00
2009-12-29 19:10:48 +01:00
define ( " NOLOGIN " , 1 ); // This means this output page does not require to be logged.
2008-01-20 22:53:43 +01:00
2012-08-22 23:24:21 +02:00
require '../main.inc.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/usergroups.lib.php' ;
2014-10-11 23:44:50 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
if ( ! empty ( $conf -> ldap -> enabled )) require_once DOL_DOCUMENT_ROOT . '/core/class/ldap.class.php' ;
2007-12-29 18:06:53 +01:00
2018-05-26 16:24:54 +02:00
// Load translation files required by page
$langs -> loadLangs ( array ( 'errors' , 'users' , 'companies' , 'ldap' , 'other' ));
2007-06-02 03:53:54 +02:00
2009-12-29 19:10:48 +01:00
// Security check
2012-09-15 10:01:35 +02:00
if ( ! empty ( $conf -> global -> MAIN_SECURITY_DISABLEFORGETPASSLINK ))
2010-10-22 21:42:04 +02:00
{
2011-07-08 20:49:16 +02:00
header ( " Location: " . DOL_URL_ROOT . '/' );
exit ;
2010-10-22 21:42:04 +02:00
}
2009-12-29 12:30:41 +01:00
2012-09-02 09:27:06 +02:00
$action = GETPOST ( 'action' , 'alpha' );
2007-06-02 03:53:54 +02:00
$mode = $dolibarr_main_authentication ;
if ( ! $mode ) $mode = 'http' ;
2017-09-15 10:45:41 +02:00
$username = GETPOST ( 'username' , 'alpha' );
$passwordhash = GETPOST ( 'passwordhash' , 'alpha' );
$conf -> entity = ( GETPOST ( 'entity' , 'int' ) ? GETPOST ( 'entity' , 'int' ) : 1 );
2007-06-02 03:53:54 +02:00
2012-09-07 17:23:16 +02:00
// Instantiate hooks of thirdparty module only if not already define
2012-09-02 09:27:06 +02:00
$hookmanager -> initHooks ( array ( 'passwordforgottenpage' ));
2013-04-05 18:09:05 +02:00
2017-09-15 10:45:41 +02:00
if ( GETPOST ( 'dol_hide_leftmenu' , 'alpha' ) || ! empty ( $_SESSION [ 'dol_hide_leftmenu' ])) $conf -> dol_hide_leftmenu = 1 ;
if ( GETPOST ( 'dol_hide_topmenu' , 'alpha' ) || ! empty ( $_SESSION [ 'dol_hide_topmenu' ])) $conf -> dol_hide_topmenu = 1 ;
if ( GETPOST ( 'dol_optimize_smallscreen' , 'alpha' ) || ! empty ( $_SESSION [ 'dol_optimize_smallscreen' ])) $conf -> dol_optimize_smallscreen = 1 ;
if ( GETPOST ( 'dol_no_mouse_hover' , 'alpha' ) || ! empty ( $_SESSION [ 'dol_no_mouse_hover' ])) $conf -> dol_no_mouse_hover = 1 ;
if ( GETPOST ( 'dol_use_jmobile' , 'alpha' ) || ! empty ( $_SESSION [ 'dol_use_jmobile' ])) $conf -> dol_use_jmobile = 1 ;
2013-04-05 18:09:05 +02:00
2007-10-21 22:40:24 +02:00
2007-06-02 03:53:54 +02:00
/**
* Actions
*/
2011-07-08 17:50:28 +02:00
// Validate new password
2014-10-18 16:08:15 +02:00
if ( $action == 'validatenewpassword' && $username && $passwordhash )
2007-06-02 03:53:54 +02:00
{
$edituser = new User ( $db );
2010-04-28 09:31:34 +02:00
$result = $edituser -> fetch ( '' , $_GET [ " username " ]);
2011-07-08 20:49:16 +02:00
if ( $result < 0 )
{
2011-04-26 22:11:18 +02:00
$message = '<div class="error">' . $langs -> trans ( " ErrorLoginDoesNotExists " , $username ) . '</div>' ;
2011-07-08 20:49:16 +02:00
}
else
{
2018-01-15 00:33:25 +01:00
if ( dol_verifyHash ( $edituser -> pass_temp , $passwordhash ))
2011-07-08 20:49:16 +02:00
{
$newpassword = $edituser -> setPassword ( $user , $edituser -> pass_temp , 0 );
dol_syslog ( " passwordforgotten.php new password for user->id= " . $edituser -> id . " validated in database " );
header ( " Location: " . DOL_URL_ROOT . '/' );
exit ;
}
else
{
2012-12-17 15:47:01 +01:00
$langs -> load ( " errors " );
$message = '<div class="error">' . $langs -> trans ( " ErrorFailedToValidatePasswordReset " ) . '</div>' ;
2011-07-08 20:49:16 +02:00
}
}
2007-06-02 03:53:54 +02:00
}
// Action modif mot de passe
2011-04-26 22:11:18 +02:00
if ( $action == 'buildnewpassword' && $username )
2007-06-02 03:53:54 +02:00
{
2012-01-07 23:31:25 +01:00
$sessionkey = 'dol_antispam_value' ;
2018-04-16 13:51:16 +02:00
$ok = ( array_key_exists ( $sessionkey , $_SESSION ) === true && ( strtolower ( $_SESSION [ $sessionkey ]) == strtolower ( $_POST [ 'code' ])));
2011-07-08 20:49:16 +02:00
// Verify code
2012-01-07 21:32:35 +01:00
if ( ! $ok )
2011-07-08 20:49:16 +02:00
{
$message = '<div class="error">' . $langs -> trans ( " ErrorBadValueForCode " ) . '</div>' ;
}
else
{
$edituser = new User ( $db );
$result = $edituser -> fetch ( '' , $username , '' , 1 );
if ( $result <= 0 && $edituser -> error == 'USERNOTFOUND' )
{
$message = '<div class="error">' . $langs -> trans ( " ErrorLoginDoesNotExists " , $username ) . '</div>' ;
$username = '' ;
}
else
{
if ( ! $edituser -> email )
{
$message = '<div class="error">' . $langs -> trans ( " ErrorLoginHasNoEmail " ) . '</div>' ;
}
else
{
$newpassword = $edituser -> setPassword ( $user , '' , 1 );
if ( $newpassword < 0 )
{
// Failed
$message = '<div class="error">' . $langs -> trans ( " ErrorFailedToChangePassword " ) . '</div>' ;
}
else
{
// Success
if ( $edituser -> send_password ( $user , $newpassword , 1 ) > 0 )
{
2014-10-10 14:57:07 +02:00
2014-10-11 23:44:50 +02:00
$message = '<div class="ok">' . $langs -> trans ( " PasswordChangeRequestSent " , $edituser -> login , dolObfuscateEmail ( $edituser -> email )) . '</div>' ;
2011-07-08 20:49:16 +02:00
$username = '' ;
}
else
{
$message .= '<div class="error">' . $edituser -> error . '</div>' ;
}
}
}
}
}
2007-06-02 03:53:54 +02:00
}
2011-07-08 17:50:28 +02:00
/**
* View
2007-06-02 03:53:54 +02:00
*/
2011-07-08 17:50:28 +02:00
2010-04-12 20:56:53 +02:00
$dol_url_root = DOL_URL_ROOT ;
2010-01-04 20:39:16 +01:00
2010-09-22 10:52:48 +02:00
// Title
$title = 'Dolibarr ' . DOL_VERSION ;
if ( ! empty ( $conf -> global -> MAIN_APPLICATION_TITLE )) $title = $conf -> global -> MAIN_APPLICATION_TITLE ;
2010-04-12 20:56:53 +02:00
// Select templates
2013-04-03 15:20:56 +02:00
if ( file_exists ( DOL_DOCUMENT_ROOT . " /theme/ " . $conf -> theme . " /tpl/passwordforgotten.tpl.php " ))
2010-04-12 20:56:53 +02:00
{
2013-04-03 15:20:56 +02:00
$template_dir = DOL_DOCUMENT_ROOT . " /theme/ " . $conf -> theme . " /tpl/ " ;
2010-04-12 20:56:53 +02:00
}
else
{
2013-04-03 15:20:56 +02:00
$template_dir = DOL_DOCUMENT_ROOT . " /core/tpl/ " ;
2010-04-12 20:56:53 +02:00
}
2010-01-04 20:39:16 +01:00
2011-04-26 22:11:18 +02:00
if ( ! $username ) $focus_element = 'username' ;
2010-04-12 20:56:53 +02:00
else $focus_element = 'password' ;
2010-01-04 20:39:16 +01:00
2010-04-12 20:56:53 +02:00
// Send password button enabled ?
$disabled = 'disabled' ;
2011-03-30 09:55:22 +02:00
if ( preg_match ( '/dolibarr/i' , $mode )) $disabled = '' ;
2012-09-15 10:01:35 +02:00
if ( ! empty ( $conf -> global -> MAIN_SECURITY_ENABLE_SENDPASSWORD )) $disabled = '' ; // To force button enabled
2010-01-04 20:39:16 +01:00
2010-04-12 20:56:53 +02:00
// Show logo (search in order: small company logo, large company logo, theme logo, common logo)
$width = 0 ;
$rowspan = 2 ;
$urllogo = DOL_URL_ROOT . '/theme/login_logo.png' ;
if ( ! empty ( $mysoc -> logo_small ) && is_readable ( $conf -> mycompany -> dir_output . '/logos/thumbs/' . $mysoc -> logo_small ))
{
2017-03-31 11:39:12 +02:00
$urllogo = DOL_URL_ROOT . '/viewimage.php?cache=1&modulepart=mycompany&file=' . urlencode ( 'thumbs/' . $mysoc -> logo_small );
2010-04-12 20:56:53 +02:00
}
elseif ( ! empty ( $mysoc -> logo_small ) && is_readable ( $conf -> mycompany -> dir_output . '/logos/' . $mysoc -> logo ))
{
2017-03-31 11:39:12 +02:00
$urllogo = DOL_URL_ROOT . '/viewimage.php?cache=1&modulepart=mycompany&file=' . urlencode ( $mysoc -> logo );
2012-09-02 11:36:42 +02:00
$width = 128 ;
}
elseif ( is_readable ( DOL_DOCUMENT_ROOT . '/theme/' . $conf -> theme . '/img/dolibarr_logo.png' ))
{
$urllogo = DOL_URL_ROOT . '/theme/' . $conf -> theme . '/img/dolibarr_logo.png' ;
}
elseif ( is_readable ( DOL_DOCUMENT_ROOT . '/theme/dolibarr_logo.png' ))
{
$urllogo = DOL_URL_ROOT . '/theme/dolibarr_logo.png' ;
2010-04-12 20:56:53 +02:00
}
2010-01-04 20:39:16 +01:00
2010-04-12 20:56:53 +02:00
// Security graphical code
if ( function_exists ( " imagecreatefrompng " ) && ! $disabled )
{
2012-09-02 11:36:42 +02:00
$captcha = 1 ;
$captcha_refresh = img_picto ( $langs -> trans ( " Refresh " ), 'refresh' , 'id="captcha_refresh_img"' );
2010-04-12 20:56:53 +02:00
}
2017-08-28 09:14:50 +02:00
// Execute hook getPasswordForgottenPageOptions (for table)
2012-09-07 17:23:16 +02:00
$parameters = array ( 'entity' => GETPOST ( 'entity' , 'int' ));
2012-09-02 09:27:06 +02:00
$hookmanager -> executeHooks ( 'getPasswordForgottenPageOptions' , $parameters ); // Note that $action and $object may have been modified by some hooks
2017-08-28 09:14:50 +02:00
if ( is_array ( $hookmanager -> resArray ) && ! empty ( $hookmanager -> resArray )) {
$morelogincontent = $hookmanager -> resArray ; // (deprecated) For compatibility
} else {
$morelogincontent = $hookmanager -> resPrint ;
}
// Execute hook getPasswordForgottenPageExtraOptions (eg for js)
$parameters = array ( 'entity' => GETPOST ( 'entity' , 'int' ));
$reshook = $hookmanager -> executeHooks ( 'getPasswordForgottenPageExtraOptions' , $parameters ); // Note that $action and $object may have been modified by some hooks.
$moreloginextracontent = $hookmanager -> resPrint ;
2012-09-02 09:27:06 +02:00
2012-08-23 02:04:35 +02:00
include $template_dir . 'passwordforgotten.tpl.php' ; // To use native PHP