Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 74 |
| SingleSignonService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
650.00 | |
0.00% |
0 / 74 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| __clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 6 |
|||
| getUserDetailsForAdminLogin | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
| getUserDetailsForStaffLogin | |
0.00% |
0 / 1 |
110.00 | |
0.00% |
0 / 30 |
|||
| getUserDetailsForStudentLogin | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 27 |
|||
| <?php | |
| namespace com\linways\core\ams\professional\service; | |
| use com\linways\core\ams\professional\exception\ProfessionalException; | |
| use com\linways\nucleus\core\constants\SingleSignonConstant; | |
| /** | |
| * service for handling signing in from a different service to AMS. | |
| */ | |
| class SingleSignonService extends BaseService | |
| { | |
| // /Condition 1 - Presence of a static member variable | |
| private static $_instance = null; | |
| // private $mapper = []; | |
| // /Condition 2 - Locked down the constructor | |
| private function __construct() { | |
| } | |
| // Prevent any oustide instantiation of this class | |
| // /Condition 3 - Prevent any object or instance of that class to be cloned | |
| private function __clone() { | |
| } | |
| // Prevent any copy of this object | |
| // /Condition 4 - Have a single globally accessible static method | |
| public static function getInstance() { | |
| if (!is_object(self::$_instance))// or if( is_null(self::$_instance) ) or if( self::$_instance == null ) | |
| { | |
| self::$_instance = new self(); | |
| } | |
| return self::$_instance; | |
| } | |
| public function getUserDetailsForAdminLogin($email){ | |
| $response = NULL; | |
| $sql = "SELECT adminID, adminAccount, adminPassword, adminName, adminEmail, admintypeID FROM adminaccount WHERE adminEmail = '$email'"; | |
| try { | |
| $response = $this->executeQueryForObject($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| return $response; | |
| } | |
| /** | |
| * returns id, username and hashed password of the staff with $fieldName=$fieldValue. | |
| * Used for single signon functionality. | |
| * @param $fieldName | |
| * @param $fieldValue | |
| * @return mixed | |
| * @throws ProfessionalException | |
| */ | |
| public function getUserDetailsForStaffLogin($fieldName, $fieldValue){ | |
| $response = NULL; | |
| $dbFieldName = NULL; | |
| switch ($fieldName){ | |
| case SingleSignonConstant::STAFF_ID: | |
| $dbFieldName ='staffID'; break; | |
| case SingleSignonConstant::STAFF_LOGIN: | |
| $dbFieldName ='staffAccount'; break; | |
| case SingleSignonConstant::STAFF_EMAIL: | |
| $dbFieldName ='staffEmail'; break; | |
| default: | |
| throw new ProfessionalException(ProfessionalException::INVALID_LID_VALUE, "INVALID LID VALUE" ); | |
| } | |
| $sql = "SELECT staffID as id, staffAccount as username, staffPassword as hashedPassword, staffLock, isResigned FROM staffaccounts WHERE $dbFieldName='$fieldValue'"; | |
| try { | |
| $response = $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| if(count($response)> 1) | |
| throw new ProfessionalException(ProfessionalException::MULTIPLE_MATCHES, "Multiple Matches found. Please contact institution admin"); | |
| if(count($response) === 1 && $response[0]->id){ | |
| //This is to check that the selected user is blocked or not | |
| if($response[0]->staffLock){ | |
| throw new ProfessionalException(ProfessionalException::BLOCKED_USER, "You are currently blocked by administrator"); | |
| } | |
| //This is to check that the selected user is resigned or not | |
| if($response[0]->isResigned){ | |
| throw new ProfessionalException(ProfessionalException::RESIGNED_USER, "You are not allowed to login!"); | |
| } | |
| } | |
| return $response[0]; | |
| } | |
| /** | |
| * returns id, username and hashed password of the student with $fieldName=$fieldValue. | |
| * Used for single signon functionality. | |
| * @param $fieldName | |
| * @param $fieldValue | |
| * @return mixed | |
| * @throws ProfessionalException | |
| */ | |
| public function getUserDetailsForStudentLogin($fieldName, $fieldValue){ | |
| $response = NULL; | |
| $dbFieldName = NULL; | |
| switch ($fieldName){ | |
| case SingleSignonConstant::STUDENT_ID: | |
| $dbFieldName ='studentID'; break; | |
| case SingleSignonConstant::STUDENT_LOGIN: | |
| $dbFieldName ='studentAccount'; break; | |
| case SingleSignonConstant::STUDENT_EMAIL: | |
| $dbFieldName ='studentEmail'; break; | |
| default: | |
| throw new ProfessionalException(ProfessionalException::INVALID_LID_VALUE, "INVALID LID VALUE" ); | |
| } | |
| $sql = "SELECT studentID as id, studentAccount as username, studentPassword as hashedPassword,student_lock FROM studentaccount WHERE $dbFieldName='$fieldValue'"; | |
| try { | |
| $response = $this->executeQueryForList($sql); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| //This is to prevent multiple matches | |
| if(count($response)> 1) | |
| throw new ProfessionalException(ProfessionalException::MULTIPLE_MATCHES, "Multiple Matches found. Please contact institution admin"); | |
| if(count($response) === 1 && $response[0]->id){ | |
| //This is to check that the selected user is blocked or not | |
| if($response[0]->student_lock){ | |
| throw new ProfessionalException(ProfessionalException::BLOCKED_USER, "You are currently blocked by administrator"); | |
| } | |
| } | |
| return $response[0]; | |
| } | |
| } |