Created
February 6, 2020 13:49
-
-
Save el0911/044c8c737b744abef3fac3e6cdd1e20c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function generateOne($name,$displayname,$has_role){ | |
$user_roles = [] | |
$one = []; | |
$one['name'] = $name; | |
$one['display_name'] = $displayname; | |
$one['can_access'] = $has_role; | |
$one['url'] = "https://client." . ApiUtility::domainByEnvironment() . "reliancehmo.com"; | |
return $one | |
} | |
function checkRole($rolesType, $user){ | |
$has_role = false; | |
foreach ($rolesType as $each) { | |
if (UserToRole::userHasSpecificRole($user->id, $each)) { | |
$has_role = true; | |
break; | |
} | |
} | |
return $has_role | |
} | |
public function login() { | |
$body = @file_get_contents("php://input"); | |
$data = $user_info = $user_roles = [] | |
if ($body == NULL) { | |
return response()->json(['status' => 'error', 'message' => 'No body found in request'], 400, $this->headers); | |
} | |
$validator = Validator::make(json_decode($body,true), [ | |
"username" => "required|string", | |
"password" => "required|string", | |
], [ | |
'username.required' => 'Kindly provide your email address or hmo id.', | |
'password.required' => 'Kindly provide your password.', | |
]); | |
if ($validator->fails()) { | |
return response()->json(['status' => 'error', 'message' => $validator->errors()->first()], 400, $this->headers); | |
} | |
$body = json_decode($body); | |
$envr = App::environment('staging') ? 'testing.' : ''; | |
$username = trim($body->username); | |
$password = $body->password; | |
$use_hmo_id = false; | |
$user = NULL; | |
if (filter_var($username, FILTER_VALIDATE_EMAIL)) { | |
$user = User::getUserByEmail(strtolower($username)); | |
} elseif (ApiUtility::isHmoIdFormat($username)) { | |
$enrolleeProfile = EnrolleeProfile::getEnrolleeProfileByHmoId($username); | |
if (!$enrolleeProfile) { | |
return response()->json(['status' => 'error', 'message' => 'HMO ID doesn\'t exist'], 401, $this->headers); | |
} | |
$user = $enrolleeProfile->user; | |
$use_hmo_id = true; | |
} | |
if (!$user) { | |
return response()->json(['status' => 'error', 'message' => $use_hmo_id ? 'User Profile doesn\'t exist' : 'Email doesn\'t exist'], 401, $this->headers); | |
} | |
if (!User::validatePassword($user->email_address, $password)) { | |
return response()->json(['status' => 'error', 'message' => 'Incorrect Credentials'], 401, $this->headers); | |
} | |
$phone_number = ""; | |
$email_address = $user->email_address; | |
//format phone number | |
if ($user->phone_number){ | |
$phone_number = ApiUtility::phoneNumberFromDBFormat($user->phone_number); | |
} | |
//format email | |
if ($user->duplicate_email_address){ | |
$email_address = $user->duplicate_email_address; | |
} | |
$user_info['id'] = $user->id; | |
$user_info['first_name'] = $user->first_name; | |
$user_info['last_name'] = $user->last_name; | |
$user_info['email_address'] = $email_address; | |
$user_info['phone_number'] = $phone_number; | |
$user_info['referral_code'] = $user->referral_code; | |
$user_info['access_token'] = $user->access_token; | |
//ACCOUNT_OWNER - ACCOUNTS Access | |
$accountManagerRoles = [Role::ACCOUNT_OWNER]; | |
$has_role = checkRole($accountManagerRoles,$user); | |
$one = generateOne("user","Manage Accounts",$has_role) | |
array_push($user_roles, $one); | |
//Enrollee Access | |
$enrolleeRoles = [Role::ENROLLEE, Role::DEPENDANT]; | |
$has_role = checkRole($enrolleeRoles,$user); | |
$one = generateOne("enrollee","RelianceCare",$has_role) | |
array_push($user_roles, $one); | |
if (!$use_hmo_id) { | |
//Client access | |
$clientAdminRoles = [Role::CLIENT_ADMINISTRATOR]; | |
$has_role = checkRole($clientAdminRoles,$user); | |
$one = generateOne("client","Company Dashboard",$has_role) | |
array_push($user_roles, $one); | |
//Provider Access | |
$providerRoles = [Role::PROVIDER_MEDICAL_DIRECTOR, Role::HMO_MANAGER, Role::BILLING_OFFICER, Role::FRONTDESK_OFFICER]; | |
$has_role = checkRole($providerRoles,$user); | |
$one = generateOne("provider","Hospital Dashboard",$has_role) | |
array_push($user_roles, $one); | |
} | |
// affiliate role | |
$has_role = false; | |
if (UserToRole::userHasSpecificRole($user->id, Role::AFFILIATE)) { | |
$has_role = true; | |
} | |
$user_roles[] = [ | |
'name' => 'affiliate', | |
'display_name' => 'Affiliate Dashboard', | |
'can_access' => $has_role, | |
'url' => "https://affiliates." . ($envr == 'testing.' ? 'staging.' : $envr) . "reliancehmo.com", | |
]; | |
// doctor role | |
$has_role = false; | |
if (UserToRole::userHasSpecificRole($user->id, Role::DOCTOR)) { | |
$has_role = true; | |
} | |
// add doctor role if doctor profile exists and is active | |
$doctorProfile = DoctorProfile::getDoctorProfileByUserId($user->id); | |
if ($doctorProfile && $doctorProfile->active_status == ActiveStatus::ACTIVE) { | |
$user_roles[] = [ | |
'name' => 'doctor', | |
'display_name' => 'Doctor Dashboard', | |
'can_access' => $has_role, | |
'url' => "https://telemedicine." . ($envr == 'testing.' ? 'staging.' : $envr) . "reliancehmo.com", | |
]; | |
} | |
// partnership_agent role | |
$has_role = false; | |
if (UserToRole::userHasSpecificRole($user->id, Role::PARTNERSHIP_AGENT)) { | |
$has_role = true; | |
} | |
$user_roles[] = [ | |
'name' => 'partnership_agent', | |
'display_name' => 'Partnership Agent Dashboard', | |
'can_access' => $has_role, | |
'url' => "https://partners." . ($envr == 'testing.' ? 'staging.' : $envr) . "reliancehmo.com", | |
]; | |
//Logs in Login Table | |
$login = new Login(); | |
$login->user_id = $user->id; | |
$login->source_id = Source::WEB_APP; | |
$login->save(); | |
$data = [ | |
'basic_info' => $user_info, | |
'roles' => $user_roles | |
]; | |
return response()->json(['status' => 'success', 'data' => $data], 200, $this->headers); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment