requested = str_replace(' ','_',$title);
$this->title = $title;
$this->lang = $config['language'];
$this->language = $languages[$this->lang];
$this->get_theme_css = false;
$_REQUEST['gpreq'] = 'admin';
$this->head .= "\n".'';
@header( 'X-Frame-Options: SAMEORIGIN' );
}
public function RunScript(){}
public function GetGpxContent(){
$this->head_js[] = '/include/js/login.js';
$this->head_js[] = '/include/js/md5_sha.js';
$this->head_js[] = '/include/thirdparty/js/jsSHA.js';
$this->css_admin[] = '/include/css/login.css';
$_POST += array('username'=>'');
$this->admin_js = true;
\gp\tool\Session::HasCookies();
$this->BrowserWarning();
$this->JavascriptWarning();
echo '
';
echo '
';
$cmd = \gp\tool::GetCommand();
switch($cmd){
case 'send_password';
if( $this->SendPassword() ){
$this->LoginForm();
}else{
$this->FogottenPassword();
}
break;
case 'forgotten':
$this->FogottenPassword();
break;
default:
$this->LoginForm();
break;
}
echo ' |
';
echo '
';
}
public function FogottenPassword(){
global $langmessage;
$_POST += array('username'=>'');
$this->css_admin[] = '/include/css/login.css';
echo '';
}
public function LoginForm(){
global $langmessage;
$_REQUEST += array('file'=>'');
echo '';
}
public function BrowserWarning(){
global $langmessage;
echo '';
}
public function JavascriptWarning(){
global $langmessage;
echo '';
echo '
'.$langmessage['JAVASCRIPT_REQ'].'
';
echo '
';
echo $langmessage['INCOMPAT_BROWSER'];
echo ' ';
echo $langmessage['MODERN_BROWSER'];
echo '
';
echo '
';
}
public function Checked($name){
if( strtoupper($_SERVER['REQUEST_METHOD']) !== 'POST' )
return ' checked="checked" ';
if( !isset($_POST[$name]) )
return '';
return ' checked="checked" ';
}
public function SendPassword(){
global $langmessage, $config;
$users = \gp\tool\Files::Get('_site/users');
$username = $_POST['username'];
if( !isset($users[$username]) ){
msg($langmessage['OOPS']);
return false;
}
$userinfo = $users[$username];
if( empty($userinfo['email']) ){
msg($langmessage['no_email_provided']);
return false;
}
$passwordChars = str_repeat('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 3);
$newpass = str_shuffle($passwordChars);
$newpass = substr($newpass, 0, 8);
$pass_hash = \gp\tool\Session::PassAlgo($userinfo);
$former_pass_hash = false;
if( $pass_hash == 'password_hash' && !function_exists('password_hash') ){
// this unlikely but possible case may only occur if a former PHP 5.5+ site was moved to a PHP < 5.5 host
// the password algorithm will then be changed to sha512. the old password will not be usable anymore
$former_pass_hash = $pass_hash;
$pass_hash = 'sha512';
$users[$username]['passhash'] = $pass_hash;
}
$users[$username]['newpass'] = \gp\tool::hash($newpass, $pass_hash);
if( !\gp\tool\Files::SaveData('_site/users', 'users', $users) ){
msg($langmessage['OOPS'] . ' (User data not saved. Check file permissions)');
return false;
}
$server = \gp\tool::ServerName();
$link = \gp\tool::AbsoluteLink('Admin', $langmessage['login']);
$message = sprintf($langmessage['passwordremindertext'], $server, $link, $username, $newpass);
// send email
$mailer = new \gp\tool\Emailer();
if( $mailer->SendEmail($userinfo['email'], $langmessage['new_password'], $message) ){
list($namepart, $sitepart) = explode('@', $userinfo['email']);
$showemail = substr($namepart, 0, 3) . '...@' . $sitepart;
msg(sprintf($langmessage['password_sent'], $username, $showemail));
return true;
}
// sending the new password failed
msg($langmessage['OOPS'].' (Email not sent)');
if( $former_pass_hash ){
// although this will only help in the *very special* case, where the
// PHP version < 5.5 was changed to 5.5+ AFTER the (now failed) new password request
// we will restore the former password hash algorithm, so the old password (if recalled) will work again
$users[$username]['passhash'] = $former_pass_hash;
\gp\tool\Files::SaveData('_site/users', 'users', $users);
}
return false;
}
}