1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
<?php
class AuthenticationsController extends AppController {
public $uses = array();
function login() {
if (!empty($this->data["login"])) {
$userid = (isset($this->data["login"]["userid"])) ? $this->data["login"]["userid"] : "" ;
$password = (isset($this->data["login"]["passwd"])) ? $this->data["login"]["passwd"] : "" ;
$authType = (isset($this->data["login"]["auth_type"])) ? $this->data["login"]["auth_type"] : "bedita" ;
if(!$this->BeAuth->login($userid, $password, null, array(), $authType)) {
$this->loginEvent('warn', $userid, "login not authorized");
if ($authType=='bedita') {
$this->userErrorMessage(__("Wrong username/password or session expired", true));
}
$this->logged = false;
} else {
$this->eventInfo("logged in");
}
if (isset($this->data["login"]["URLOK"])) {
$this->redirect($this->data["login"]["URLOK"]);
}
return true;
}
}
function logout() {
$this->eventInfo("logged out");
$this->BeAuth->logout() ;
}
public function recoverUserPassword($service_type = 'recover_password', $hash = null) {
$this->setupLocale();
if (!empty($service_type) || !empty($hash)) {
try {
$this->Transaction->begin();
if (!$this->BeHash->handleHash($service_type, $hash)) {
$this->redirect('/');
}
$this->Transaction->commit();
if (empty($hash) || !$this->Session->check('userToChangePwd')) {
$this->redirect('/');
}
} catch (BeditaException $ex) {
$this->Transaction->rollback();
$this->userErrorMessage($ex->getMessage());
$this->eventError($ex->getDetails());
if (empty($hash)) {
$this->redirect('/');
}
}
$this->render(null, null, VIEWS."pages/change_password.tpl");
}
}
protected function forward($action, $result) {
$redirect = array(
'logout' => array(
'OK' => '/',
'ERROR' => '/authentications/logout'
),
'changePasswd' => array(
'OK' => '/',
'ERROR' => '/authentications/logout'
),
'login' => array(
'OK' => '/',
'ERROR' => '/'
)
);
if (isset($redirect[$action][$result])) {
return $redirect[$action][$result];
};
return false;
}
private function loginEvent($level, $user, $msg) {
$event = array('EventLog'=>array("log_level"=>$level,
"userid"=>$user,"msg"=>$msg, "context"=>strtolower($this->name)));
$this->EventLog->save($event);
}
}