X-Git-Url: http://p2p-next.cs.pub.ro/gitweb/?a=blobdiff_plain;f=application%2Fcontrollers%2Fuser.php;fp=application%2Fcontrollers%2Fuser.php;h=985bf4375ba237ffccc1c4d00411183310408a2a;hb=93de016032e54b45db35f18d8538fd5b11a7c72e;hp=33dd727f05a4c19363fcc4ed23b338cbd563acb2;hpb=adc2c33c37c781444c4234c6fed38e95d084ed8d;p=living-lab-site.git diff --git a/application/controllers/user.php b/application/controllers/user.php index 33dd727..985bf43 100644 --- a/application/controllers/user.php +++ b/application/controllers/user.php @@ -11,6 +11,7 @@ class User extends CI_Controller { private $username = NULL; private $email = NULL; private $user_id = NULL; + private $ldap_user_info = NULL; public function __construct() { @@ -23,40 +24,28 @@ class User extends CI_Controller { { } - public function login() + /** + * Login a user and then redirect it to the last page which must be encoded + * in $redirect. + * + * @param string $redirect contains the last page URI segments encoded + * with helper url_encode_segments. + */ + public function login($redirect = '') { $this->load->library('form_validation'); $this->load->model('users_model'); - - $username = $this->input->post('username'); - $password = $this->input->post('password'); - $form_validation_config = array( - array( - 'field'=>'username', - 'label'=>'lang:user_username_or_email', - 'rules'=>'trim|required|min_length[5]|max_length[32]' - . '|strtolower|callback__valid_username' - . '|callback__do_login[password]' - ), - array( - 'field'=>'password', - 'label'=>'lang:user_password', - 'rules'=>'required|min_length[5]|max_length[32]' - ) - ); - $this->form_validation->set_rules($form_validation_config); $this->form_validation->set_error_delimiters('', ''); - if ($this->form_validation->run() === FALSE) + if ($this->form_validation->run('signin') === FALSE) { - $params = array( 'title' => $this->config->item('site_name'), - 'css' => array( - 'catalog.css' - ), - //'js' => array(), - //'metas' => array('description'=>'') + $params = array( 'title' => + $this->lang->line('ui_nav_menu_login') + .' – ' + . $this->config->item('site_name'), + //'metas' => array('description'=>'') ); $this->load->library('html_head_params', $params); @@ -66,7 +55,9 @@ class User extends CI_Controller { $this->load->view('html_begin', $this->html_head_params); $this->load->view('header', array('selected_menu' => 'login')); - $this->load->view('user/login_view', array()); + $this->load->view('user/login_view', array( + 'redirect'=> $redirect + )); $this->load->view('footer'); $this->load->view('html_end'); @@ -79,21 +70,111 @@ class User extends CI_Controller { 'user_id'=> $this->user_id, 'username'=> $this->username )); + + // Redirect to last page before login. + header('Location: '. site_url(urldecode_segments($redirect))); + } + else + { + $this->session->set_userdata(array( + 'username'=> $this->username + )); + + // Redirect to register page because an user authenticates here + // for the first time with LDAP. + // TODO + header('Location: '. site_url(urldecode_segments($redirect))); } + } + } + + /** + * Logout user and then redirect it to the last page which must be encoded + * in $redirect. + * + * @param string $redirect contains the last page URI segments encoded + * with helper url_encode_segments. + */ + public function logout($redirect = '') + { + $this->session->unset_userdata('user_id'); + $this->session->unset_userdata('username'); + + header('Location: '. site_url(urldecode_segments($redirect))); + } + + public function register($redirect = '') + { + $this->load->library('form_validation'); + $this->load->model('users_model'); + $this->load->helper('localization'); + $this->load->helper('date'); - header('Location: '. site_url()); - return; + $this->form_validation->set_error_delimiters('', + ''); + + if ($this->form_validation->run('register') === FALSE) + { + $params = array('title' => + $this->lang->line('ui_nav_menu_register') + .' – ' + . $this->config->item('site_name'), + //'metas' => array('description'=>'') + ); + $this->load->library('html_head_params', $params); + + // ** + // ** LOADING VIEWS + // ** + $this->load->view('html_begin', $this->html_head_params); + $this->load->view('header', array('selected_menu' => 'register')); + + $this->load->view('user/register_view', array( + 'redirect'=> $redirect + )); + + $this->load->view('footer'); + $this->load->view('html_end'); + } + else + { + if ($this->user_id !== NULL) + { + $this->session->set_userdata(array( + 'user_id'=> $this->user_id, + 'username'=> $this->username + )); + + // Redirect to last page before login. + header('Location: '. site_url(urldecode_segments($redirect))); + } + else + { + $this->session->set_userdata(array( + 'username'=> $this->username + )); + + // Redirect to register page because an user authenticates here + // for the first time with LDAP. + // TODO + header('Location: '. site_url(urldecode_segments($redirect))); + } } } - + public function _valid_username($username) + { + return (preg_match('/^[a-z0-9\._]+$/', $username) == 1); + } + + public function _valid_username_or_email($username) { $this->load->helper('email'); if (valid_email($username)) - return TRUE; + return TRUE; else - return (preg_match('/^[a-z0-9\._]+$/', $username) == 1); + return $this->_valid_username($username); } public function _do_login($username, $field_password) @@ -101,21 +182,27 @@ class User extends CI_Controller { $password = $this->input->post('password'); $this->load->model('users_model'); - $res_login = $this->users_model->login($username, $password); + $user = $this->users_model->login($username, $password); + // Authentication failed + if ($user === FALSE) + return FALSE; + // First authentication of a user with LDAP, i.e. the user does not // have an user_id in `users` DB table yet. - if ($res_login === TRUE) + if ($user['auth_src'] == 'ldap_first_time') + { + $this->ldap_user_info = $user; + $this->username = $user['uid'][0]; + $this->email = $user['mail'][0]; return TRUE; - // Authentication failed - else if ($res_login === FALSE) - return FALSE; + } // Authentication when the user has an user_id in the DB. - $this->username = $res_login['username']; - $this->email = $res_login['email']; - $this->user_id = $res_login['id']; - + $this->username = $user['username']; + $this->email = $user['email']; + $this->user_id = $user['id']; + return TRUE; } }