my_parent_controller('auth'); $this->load->model('event_model', '', TRUE); $this->load->model('user_model', '', TRUE); $this->load->model('user_login_history_model', '', TRUE); $this->load->model('user_forgot_password_model', '', TRUE); } public function index() { $this->login(); } public function get_system_locale(){ $_lang_ = array(); $utype_active = 'lemonde-user'; if ($this->data["logged_in"]) { $app_locale = $this->lang->line('js'); $app_locale['msg']['full_name'] = $this->data["logged_in"]['fullname']; $app_locale['msg']['first_name'] = ucwords(strtolower($this->data["logged_in"]['first_name'])) ?? 'Prenom'; $app_locale['msg']['last_name'] = $this->data["logged_in"]['last_name'] ?? 'Nom'; $app_locale['msg']['last_name_2'] = $this->data["logged_in"]['last_name'] ?? 'Nom2'; $app_locale['msg']['login_as_subscriber'] = UserAuth::isLoggedInAsSubscriber(); switch ($this->data["logged_in"]['role_id']) { case 1: $utype_active = 'superadmin'; break; case 2: $utype_active = 'lemonde-user'; break; case 4: $utype_active = 'adminrc'; break; default: $utype_active = 'lemonde-user'; break; } $app_locale['msg']['role'] = $utype_active; $_lang_["_app"] = $app_locale; } else { $_lang_["_app"] = $this->lang->line('js'); } if($this->input->get()) { if ($this->input->get("data")){ $which_dir = ($this->input->get("reqtype") == 1) ? "backoffice" : "frontoffice"; foreach ($this->input->get("data") as $key => $value) { $try_expl = explode("|", $value); $this->lang->load($which_dir . '/' . $try_expl[0], 'fr'); if (sizeof($try_expl) > 1) { foreach ($try_expl as $key => $val) { if ($key > 0) { /*Implement for multiple lang*/ //$_lang_[$try_expl[0]][$val]=array(); //$_lang_[$try_expl[0]][$val] = $this->lang->line($val); $_lang_[$try_expl[0]] = $this->lang->line($val); } } } else { $_lang_[$value] = $this->lang->line($value); } } } } output_to_json($this, $_lang_); } public function auth() { if(UserAuth::isAuth()) Response::backToHomepage(); $this->data['content'] = 'backoffice/login/login_view'; $this->data['page_title'] = $this->lang->line("login")["bo_login_page_title"]; $this->data['remember_me'] = Rememberme::get(1); $this->data['load_scripts'] = array ( "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } public function login() { if(UserAuth::isAuth()) Response::backToHomepage(); $this->data['content'] = "frontoffice/login/login_view"; $this->data['page_title'] = $this->lang->line("login")["fo_login_page_title"]; $this->data['remember_me'] = Rememberme::get(0); $this->load_extra_files(array( "ga" => true )); array_push($this->data['load_scripts'], ""); array_push($this->data['load_scripts'], ""); $this->data = add_csrf_token($this->data); $this->load->view('layouts/authentication_fo_view', $this->data); } public function user_info () { $this->data['page_title'] = $this->lang->line("login")["fo_login_page_title"]; $this->data = add_csrf_token($this->data); $this->load->view('frontoffice/login/sign_in_view', $this->data); } public function authenticate() { // Check SSO signin $sso = $this->attempt_sso_signin(); $loggedIn = $this->attempt_login(0, $sso); /* * Redirect to homepage by default * if no redirect link is set from cookie */ // if ($loggedIn && UserAuth::isFirstLogin()) // redirect(base_url('mon-compte')); $cookie_data = json_decode(get_cookie($this->config->item('sess_cookie_name')."_eventpage")); $redirect = $cookie_data ? $cookie_data->event_link : base_url(); if ($loggedIn && countVal($sso)) redirect($redirect); output_to_json($this, array ( "mtype" => $loggedIn ? "success" : "error", "message" => $this->lang->line("login")[$loggedIn ? "login_successful" : "login_unsuccessful"], "mdata" => array("redirect" => (int) $loggedIn, "path" => $redirect) )); } public function verify_login() { $loggedIn = $this->attempt_login(1); output_to_json($this, array ( "mtype" => $loggedIn ? "success" : "error", "message" => $this->lang->line("login")[$loggedIn ? "login_successful" : "login_unsuccessful"], "mdata" => array("redirect" => (int) $loggedIn) )); } public function attempt_login(int $isBOUser = 0, $sso = []) { $match = false; $isRememberMeTurnedON = false; $isFirstLogin = false; $_SESSION["telephone"] = $sso['telephone']; $_SESSION['iban'] = $sso['iban']; $_SESSION["password"] = $sso['password']; if (countVal($sso)) { $match = $this->user_model->get_subscriber_profile($sso['telephone']); // Non existing user (not in masterclass db) is required to complete his account details if (!$match->user_id){ redirect('signup'); } } else { $user = $this->input->post($isBOUser ? 'username' : 'email'); $password = $this->input->post('password'); $isRememberMeTurnedON = ($this->input->post("remember_me") === "true") ? true : false; $match = $this->user_model->authenticate($user, $password, Rememberme::isRemembered($isBOUser), $isBOUser); } if (!$match->user_id && !$match->last_name) { output_to_json($this, array( "mtype" => "error", "message" => $this->lang->line("login")[$isBOUser ? "invalid_account_bo" : "invalid_account_fo"], "mdata" => array("redirect" => 0) )); } if ((int) $match->status !== 1) { output_to_json($this, array( "mtype" => "error", "message" => $this->lang->line("login")["account_deactivated"], "mdata" => array("redirect" => 0) )); } if (!$isBOUser) $isFirstLogin = $this->user_login_history_model->isFirstLogin($match->user_id); // Create session return UserAuth::login( [ "user_id" => $match->user_id, "first_name" => $match->first_name, "last_name" => $match->last_name, "fullname" => $match->first_name." ".$match->last_name, "email_address" => $match->email_address, "role_id" => $match->role_id, /** * Make sure were not adding sso expiration for local testing * SSO Expiration should be for real login only, * which means the user logs in from Lemonde.fr */ "sso" => Sso::setSSORefreshTime($sso), "premium" => Sso::isPremium($sso), "remember_me" => (bool) $isRememberMeTurnedON, "isFirstLogin" => $isFirstLogin, "isBOUser" => (bool) $match->isBOUser ]); } private function attempt_sso_signin() { /** * $this->getActiveUserFromWebService() : Get log in info from main site, if not logged in redirect to our lemonde log in * $this->session->userdata('sso') : This is only for local testing of account */ $testSSO = Sso::getTestSSO(); $sso = countVal($testSSO) ? $testSSO : $this->getActiveUserFromWebService('auth'); /** * Unset SSO from Session as it is just temporary * Ref: applicatio/Background_service/bypass_coockie_creation() */ Unregister::unset(); return $sso ?? []; } public function register_as_unknown_user() { // Sso::ssoHasUserData($sso); // Create new sso user // $this->add_csrf_token($this->data); $_SESSION['last_name'] = $this->input->post('last_name'); $_SESSION['first_name'] = $this->input->post('first_name'); $_SESSION['username'] = $this->input->post('username'); $_SESSION['email'] = $this->input->post('email'); $this->load->model('user_subscriber_model'); try { $userId = $this->user_model->add_new_user([ 'first_name' => $_SESSION['last_name'], 'last_name' => $_SESSION['first_name'], 'email_address' => $_SESSION['email'] , 'username' => $_SESSION['username'] , 'user_role' => 3, 'telephone' => $_SESSION['telephone'], 'iban' => $_SESSION['iban'], 'password' => $_SESSION['password'] ]); if (!$userId) { Sso::unsetUserCookies(); // redirect('home'); } $subcriberId = $this->user_subscriber_model->add_subscriber_data(['subscriber' => $userId]); redirect('authenticate'); // return $this->user_model->user_details($userId); } catch(\Exception $e) { Sso::unsetUserCookies(); redirect('home'); } } public function auth_token($subscriber_id = null, $login_by = null) { if( !$this->user_model->token_user_id_exist($subscriber_id) && !isset($login_by) ) { return redirect(base_url('/')); } $loggedIn = UserAuth::auth(); $data = array_merge( Request::metaData($this), [ 'session_id' => $loggedIn['session_id'], 'role_id' => $loggedIna['role_id'], 'user_id' => $loggedIn['user_id'] ] ); // Save logout to history $this->user_login_history_model->client_checkdb($data, "LOGOUT"); // Logoff user session $this->session->unset_userdata('logged_in'); // Delete any remember me cookie Rememberme::forget(); // Get and store user subscriber information $match = $this->user_model->authenticate_token($subscriber_id, BO_USER_ROLES); // Create new access token id $access_token = sha1(generate_random_keys(6)); // Add token credentials to db as "ACTIVE login state(is_active = 1)" $access_token_id = $this->user_model->insert_access_token(array( "subscriber" => $subscriber_id, "access_token" => $access_token, "login_by" => $login_by )); // Create session $login = UserAuth::login([ "token_id" => $access_token_id, "user_id" => $match->user_id, "first_name" => $match->first_name, "last_name" => $match->last_name, "fullname" => $match->first_name." ".$match->last_name, "email_address" => $match->email_address, "role_id" => $match->role_id, "remember_me" => false, "isBOUser" => false ]); //token has been created redirect(base_url('/')); } // BO Admin is trying to access susbcriber's account via the Backoffice public function subscriber_login_check(){ if ($this->input->post('subcriber')) { $result = $this->user_login_history_model->subscriber_login_status($this->input->post('subcriber')); //logout current user output_to_json($this, $result); } output_to_json($this, false); } // Logout public function logout() { // Unset sso-related cookies Sso::unsetUserCookies(); // Unset unknown user Unregister::unset(); // Signout user UserAuth::logout(); } // Forgot Password ----------------- public function forgot_password_bo() { $this->data['content'] = "backoffice/login/forgotpass_view"; $this->data['page_title'] = $this->lang->line("login")["bo_login_page_title"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } public function forgotpass_page() { $this->data['content'] = "frontoffice/login/forgotpass_view"; $this->data['page_title'] = $this->lang->line("login")["fo_login_page_title"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } public function check_email() { $email = $this->input->post('email'); $user_role = NULL; //[USER_ROLES['subscriber']]; if($this->input->post("type")){ $user_role = BO_USER_ROLES; } $found = $this->user_model->identify_email($email, $user_role); if($found) { $this->send_email($email, $found); $result = array( "mtype" => "success", //error or success or warning or info "message" => $this->lang->line("login")["email_registered"], "mdata" => array("r" => $found) ); output_to_json($this, $result); } else { $result = array( "mtype" => "error", //error or success or warning or info "message" => $this->lang->line("login")["email_not_registered"], "mdata" => array() ); output_to_json($this, $result); } } private function send_email($to_email, $role_id) { $this->load->library("mailjet_libr"); $token = generate_random_keys(20); $code = substr($token, 0, 10); $route_page = ($role_id != USER_ROLES['superadmin'] && $role_id != USER_ROLES['lemonde_user'] && $role_id != USER_ROLES['admin_rc'])?"enter_code_page":"enter_code"; $message = ""; $mail_content = array(); $message .= "
Si vous avez oublié votre mot de passe, veuillez cliquer sur le lien suivant et entrer le code ci-dessous :

"; $message .= "> Changer mon mot de passe <
"; $message .= "Code : " . $code; $mail_content["logo"] = "http://s1.lemde.fr/mmpub/img/espace-client/logo-lemonde.png"; $mail_content["description"] = $message; $mail_content["reset_code"] = $code; $mail_content["open_in_a_newtab"] = false; $mail_content["subscriber"] = $this->user_model->get_my_email_forgot_pass($to_email); $email_tpl = $this->load->view("backoffice/email/forgot_password_tpl", $mail_content, true); $email_data = array( 'recipient' => $to_email, 'subject' => "LeMonde - ".$this->lang->line("login")["pwd_reset_notif"], 'message' => $email_tpl ); //send token code $mailjet_response = $this->mailjet_libr->fo_send_default_email($email_data); if( $mailjet_response ){ //insert code $this->user_forgot_password_model->send_email($to_email, $code, $role_id); } } //for backoffice public function enter_code() { $this->data['content'] = "backoffice/login/resetcode_view"; $this->data['page_title'] = $this->lang->line("login")["enter_code"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } //for frontoffice public function enter_code_page() { $this->data['content'] = "frontoffice/login/resetcode_view"; $this->data['page_title'] = $this->lang->line("login")["enter_code"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } public function check_code() { $email = $this->input->post('email'); $code = $this->input->post('code'); $match = $this->user_forgot_password_model->check_code($email, $code); if($match == 0){ $result = array( "mtype" => "error", //error or success or warning or info "message" => $this->lang->line("login")["code_expired"], "mdata" => $match ); output_to_json($this, $result); }else if($match == 1){ $result = array( "mtype" => "success", //error or success or warning or info "message" => $this->lang->line("login")["code_valid"], "mdata" => $match ); output_to_json($this, $result); }else if ($match == 2){ $result = array( "mtype" => "error", //error or success or warning or info "message" => $this->lang->line("login")["code_invalid"], "mdata" => $match ); output_to_json($this, $result); }else if($match == 3){ $result = array( "mtype" => "error", //error or success or warning or info "message" => $this->lang->line("login")["invalid_email"], "mdata" => $match ); output_to_json($this, $result); }else{ $result = array( "mtype" => "error", //error or success or warning or info "message" => $this->lang->line("unknown_error"), "mdata" => "NaN" ); output_to_json($this, $result); } } //for frontoffice public function reset_password_page() { $this->data['content'] = "frontoffice/login/resetpassword_view"; $this->data['page_title'] = $this->lang->line("login")["enter_reset_code"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } //for backoffice public function reset_password() { $this->data['content'] = "backoffice/login/resetpassword_view"; $this->data['page_title'] = $this->lang->line("login")["enter_reset_code"]; $this->data['load_scripts'] = array ( "", "" ); $this->data = add_csrf_token($this->data); $this->load->view('authentication_view', $this->data); } public function new_password() { $email = $this->input->post('email'); $password = $this->input->post('password'); $user_role = [USER_ROLES['subscriber']]; if($this->input->post("type")){ $user_role = BO_USER_ROLES; } $this->user_model->new_password($email, $password, $user_role); } } /* End of file authentication.php */ /* Location: ./application/controllers/authentication.php */