From f92e32d8f0cab955c7e0c162b0803b624f30d265 Mon Sep 17 00:00:00 2001 From: Paolo Date: Thu, 21 Mar 2019 17:00:08 +0100 Subject: [PATCH] - Added new public method getLandingPage to AuthLib.php - AuthLib->redirectToLandingPage now calls getLandingPage - Added new controller system/Login.php to perform login operations - Added new view system/login/usernamePassword.php to login with username and password - Added css/Login.css, images/logo-300x160.png and js/Login.js to be used by usernamePassword.php --- application/controllers/system/Login.php | 102 ++++++++++++++++++ application/libraries/AuthLib.php | 10 +- .../views/system/login/usernamePassword.php | 45 ++++++++ public/css/Login.css | 25 +++++ public/images/logo-300x160.png | Bin 0 -> 7074 bytes public/js/Login.js | 55 ++++++++++ 6 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 application/controllers/system/Login.php create mode 100644 application/views/system/login/usernamePassword.php create mode 100644 public/css/Login.css create mode 100644 public/images/logo-300x160.png create mode 100644 public/js/Login.js diff --git a/application/controllers/system/Login.php b/application/controllers/system/Login.php new file mode 100644 index 000000000..8593a766a --- /dev/null +++ b/application/controllers/system/Login.php @@ -0,0 +1,102 @@ +load->view('system/login/usernamePassword'); + } + + /** + * Called with HTTP POST via ajax to login using the LDAP authentication + */ + public function loginLDAP() + { + $username = $this->input->post('username'); + $password = $this->input->post('password'); + + $this->load->library('AuthLib', array(false)); // without authentication otherwise loooooop! + + $login = $this->authlib->loginLDAP($username, $password); + if (isSuccess($login)) + { + $this->outputJsonSuccess($this->authlib->getLandingPage()); // if login is success then retrieves the desired page + } + else + { + $this->outputJsonError(getCode($login)); // returns the error code + } + } + + /** + * Called with HTTP POST via ajax to login as another user specified by uid + */ + public function loginASByUid() + { + $uid = $this->input->get('uid'); + + // With authentication -> you must be already logged to gain another identity + $this->load->library('AuthLib'); + + $loginAS = $this->authlib->loginASByUID($uid); + if (isSuccess($loginAS)) + { + $this->outputJsonSuccess(true); // obtained! + } + else + { + $this->outputJsonSuccess(getCode($loginAS)); // returns the error code + } + } + + /** + * Called with HTTP POST via ajax to login as another user specified by person id + */ + public function loginASByPersonId() + { + $person_id = $this->input->get('person_id'); + + // With authentication -> you must be already logged to gain another identity + $this->load->library('AuthLib'); + + $loginAS = $this->authlib->loginASByPersonId($person_id); + if (isSuccess($loginAS)) + { + $this->outputJsonSuccess(true); // obtained! + } + else + { + $this->outputJsonSuccess(getCode($loginAS)); // returns the error code + }; + } + + /** + * To login into the system with email and code as credentials + */ + public function emailCode() + { + } + + /** + * To login into the system using SSO + */ + public function sso() + { + } +} diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php index c59933613..d9480f6db 100644 --- a/application/libraries/AuthLib.php +++ b/application/libraries/AuthLib.php @@ -181,6 +181,14 @@ class AuthLib * Redirect to the previously stored landing page */ public function redirectToLandingPage($altLandingPage = null) + { + $this->_redirectTemporarily($this->getLandingPage($altLandingPage)); // redirect to landing page + } + + /** + * Returns the landing page + */ + public function getLandingPage($altLandingPage = null) { // Tries to get the previously stored landing page $landingPage = getSessionElement(self::SESSION_NAME, self::SESSION_LANDING_PAGE); @@ -200,7 +208,7 @@ class AuthLib // Clean the previously stored landing page cleanSessionElement(self::SESSION_NAME, self::SESSION_LANDING_PAGE); - $this->_redirectTemporarily($landingPage); // redirect to landing page + return $landingPage; } /** diff --git a/application/views/system/login/usernamePassword.php b/application/views/system/login/usernamePassword.php new file mode 100644 index 000000000..944212b49 --- /dev/null +++ b/application/views/system/login/usernamePassword.php @@ -0,0 +1,45 @@ +load->view( + 'templates/FHC-Header', + array( + 'title' => 'Login', + 'jquery' => true, + 'jqueryui' => true, + 'bootstrap' => true, + 'fontawesome' => true, + 'sbadmintemplate' => true, + 'ajaxlib' => true, + 'dialoglib' => true, + 'customCSSs' => 'public/css/Login.css', + 'customJSs' => 'public/js/Login.js' + ) + ); +?> + + +
+ +

+ +

+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +

Forgot Password?

+ +
+ + +load->view('templates/FHC-Footer'); ?> diff --git a/public/css/Login.css b/public/css/Login.css new file mode 100644 index 000000000..c6c1bfae0 --- /dev/null +++ b/public/css/Login.css @@ -0,0 +1,25 @@ +.login-form { + width: 340px; + margin: 50px auto; +} + +.login-form form { + margin-bottom: 15px; + background: #f7f7f7; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + padding: 30px; +} + +.login-form h2 { + margin: 0 0 15px; +} + +.form-control, .btn { + min-height: 38px; + border-radius: 2px; +} + +.btn { + font-size: 15px; + font-weight: bold; +} diff --git a/public/images/logo-300x160.png b/public/images/logo-300x160.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c48180b37716bc0184ae618e6284db67362e0 GIT binary patch literal 7074 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 M07*qoM6N<$f*9oV;{X5v literal 0 HcmV?d00001 diff --git a/public/js/Login.js b/public/js/Login.js new file mode 100644 index 000000000..0cc7faf8d --- /dev/null +++ b/public/js/Login.js @@ -0,0 +1,55 @@ + +/** + * To login via LDAP + */ +function loginLDAP() +{ + // Ajax call to login with LDAP + FHC_AjaxClient.ajaxCallPost( + "system/Login/loginLDAP", + { + username: $("#username").val(), + password: $("#password").val() + }, + { + successCallback: function(data, textStatus, jqXHR) { + + if (FHC_AjaxClient.isError(data)) + { + if (FHC_AjaxClient.getError(data) == 10) + { + FHC_DialogLib.alertError("Username not foud"); + } + if (FHC_AjaxClient.getError(data) == 2) + { + FHC_DialogLib.alertError("Wrong password"); + } + } + else + { + $(location).attr("href", FHC_AjaxClient.getData(data)); + } + }, + errorCallback: function(jqXHR, textStatus, errorThrown) { + FHC_DialogLib.alertError(textStatus); + } + } + ); +} + +/** + * When JQuery is up + */ +$(document).ready(function() { + + $("#btnLogin").click(loginLDAP); + + $("#username").keydown(function(e) { + if (e.keyCode == 13) loginLDAP(); + }) + + $("#password").keydown(function(e) { + if (e.keyCode == 13) loginLDAP(); + }) + +});