diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index df3961f..ad4d6ae 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -1075,6 +1075,7 @@ class EmployeeRestController extends AdminController return $this->respond(['status' => 'failed', 'code' => 404, 'message' => "Client id and Client Policy id is Not Match!" ], 404); } } catch (\Exception $e) { + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine())); return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()], 500); } diff --git a/app/Controllers/RestAuthenticationController.php b/app/Controllers/RestAuthenticationController.php index 172caad..87bc638 100755 --- a/app/Controllers/RestAuthenticationController.php +++ b/app/Controllers/RestAuthenticationController.php @@ -9,6 +9,7 @@ use App\Controllers\LoginController; use App\Helpers\DepositHelper; use App\Helpers\JWTToken; use App\Helpers\HttpRequestHelper; +use App\Helpers\RestAuthHelper; use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\RequestInterface; @@ -96,6 +97,12 @@ class RestAuthenticationController extends AdminController try { $mobile_number = $this->request->getJSON()->mobile_number; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['mobile_number' => $mobile_number]); + + if(empty($empdata)){ + $result = ['user_verification' => false , 'message' => "User not found"]; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200); + } $employeeData = $this->employeeModel->select('employees.relationship,EP.employee_id') ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner') @@ -106,8 +113,14 @@ class RestAuthenticationController extends AdminController ->where('EP.is_active', 1) ->whereIn('EP.status', ['draft', 'enrolled', 'expired']) ->first(); - - + + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } elseif (isset($empdata['post']) && !empty($empdata['post'])) { + $employeeData = $empdata['post']; + } + if (isset($employeeData['employee_id'])) { @@ -116,7 +129,6 @@ class RestAuthenticationController extends AdminController } else { // Call the third-party API function return $this->callThirdPartyAPI($this->request->getJSON(),'verifyEmployeeNumber'); - } } catch (\Throwable $th) { return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); @@ -128,9 +140,16 @@ class RestAuthenticationController extends AdminController try { $data = $this->request->getJSON(); - $email = $data->email; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email]); + // print_r($empdata); die; + + if(empty($empdata)){ + $result = ['user_verification' => false , 'message' => "User not found"]; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200); + } + $employeeData = $this->employeeModel->select(' employees.relationship, EP.employee_id, @@ -146,7 +165,13 @@ class RestAuthenticationController extends AdminController ->where('employees.email_corporate', $email) ->where('EP.is_active', 1) ->whereIn('EP.status', ['draft', 'enrolled', 'expired']) - ->first(); + ->first(); + + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + if (isset($employeeData['employee_id'])) { @@ -160,7 +185,7 @@ class RestAuthenticationController extends AdminController UPDATE employees INNER JOIN employee_polices ON employee_polices.employee_id = employees.id SET employees.otp = ? - WHERE employees.email_corporate = ? + WHERE employees.id = ? AND employees.relationship = 'self' AND employees.is_active = 1 AND employee_polices.is_active = 1 @@ -168,12 +193,17 @@ class RestAuthenticationController extends AdminController "; $db = db_connect(); - $update = $db->query($sql, [$otp, $email]); + // $update = $db->query($sql, [$otp, $email]); + $update = $db->query($sql, [$otp, $employeeData['employee_id']]); if($update) { $data->otp = $otp; + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $data->client_id = $empdata['post']['client_id']; + $data->employee_id = $empdata['post']['employee_id']; + } $this->callThirdPartyAPI($data, 'updateEmpOTP'); @@ -203,10 +233,17 @@ class RestAuthenticationController extends AdminController return $this->respond(['status' => 'failed', 'code' => 404, 'data' => $result], 200); } } else { + + $apiParams = $this->request->getJSON(); + if (!empty($empdata['post']['client_id'])) { + $apiParams->client_id = $empdata['post']['client_id']; + } + // print_r($apiParams); die; // Call the third-party API function - return $this->callThirdPartyAPI($this->request->getJSON(), 'verifyEmployeeEmailId'); + return $this->callThirdPartyAPI($apiParams, 'verifyEmployeeEmailId'); } } catch (\Throwable $th) { + $this->myLogger->logme("error", ($th->getMessage().' --- '.$th->getLine())); return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $th], 500); } } @@ -225,6 +262,14 @@ class RestAuthenticationController extends AdminController { $employeeData = $this->employeeModel->where('id', $this->request->getJSON()->employee_id)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first(); }else{ + + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'otp' => $otp ]); + // print_r($empdata); die; + + if(empty($empdata)){ + return $this->respond(['status' => 'failed','code' => 404,'data' => "Invalid OTP"],200); + } + if (isset($mobile_number)) { // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->where('emp_status !=', 'truncated')->where('is_active', 1)->first(); @@ -254,9 +299,22 @@ class RestAuthenticationController extends AdminController ->orderBy('id', 'desc') ->first(); } + + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + } - + $requestData = $this->request->getJSON(); + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $requestData->client_id = $empdata['post']['client_id']; + $requestData->employee_id = $empdata['post']['employee_id']; + } + + // print_r($requestData); die; + if ($employeeData && $otp_verification == true || $employeeData && isset($this->request->getJSON()->login_by_hr) || $employeeData && isset($this->request->getJSON()->otp) ) { $auth = HttpRequestHelper::getRequestInfo(); @@ -271,7 +329,8 @@ class RestAuthenticationController extends AdminController $this->authHistoryModel->insert($data); } - + // print_r($employeeData); die; + unset($employeeData['employee_id']); $result = JWTToken::encode($employeeData); if(isset($this->request->getJSON()->otp)){ @@ -279,17 +338,18 @@ class RestAuthenticationController extends AdminController } // Call the third-party API function - $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'getVerifiedUserData'); + $apiResponse = $this->callThirdPartyAPI($requestData,'getVerifiedUserData'); return $this->respond(['status' => 'success','code' => 200,'data' => $result , 'post_enrollment'=> json_decode($apiResponse, true)],200); } else { // Call the third-party API function - $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'getVerifiedUserData'); + $apiResponse = $this->callThirdPartyAPI($requestData,'getVerifiedUserData'); return $this->respond(['status' => 'failed','code' => 404,'data' => "Invalid OTP" , 'post_enrollment'=> json_decode($apiResponse, true)],200); } } catch (\Exception $e) { + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine())); return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500); } } @@ -497,6 +557,14 @@ class RestAuthenticationController extends AdminController $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null; $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number ]); + // print_r($empdata); die; + + if(empty($empdata)){ + $result = ['user_verification' => false , 'message' => "User not found"]; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200); + } + if (isset($mobile_number)) { // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first(); $employeeData = $this->employeeModel @@ -525,6 +593,11 @@ class RestAuthenticationController extends AdminController ->first(); } + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + $mpin = $this->request->getJSON()->mpin; $is_mpin_skipped = $this->request->getJSON()->is_mpin_skipped; $is_biometric_enabled = $this->request->getJSON()->is_biometric_enabled; @@ -534,12 +607,18 @@ class RestAuthenticationController extends AdminController 'is_mpin_skipped' => $is_mpin_skipped, 'is_biometric_enabled' => $is_biometric_enabled ]; + + $requestData = $this->request->getJSON(); + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $requestData->client_id = $empdata['post']['client_id']; + $requestData->employee_id = $empdata['post']['employee_id']; + } if ($employeeData) { $id= $employeeData["id"]; $updateMpin = $this->employeeModel->where('id', $id)->set($mpin_data_to_updata)->update(); if($updateMpin){ - $this->callThirdPartyAPI($this->request->getJSON(), 'saveMpin'); + $this->callThirdPartyAPI($requestData, 'saveMpin'); $result = ['user_verification' => true , 'message' => "Mpin Updated"]; return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); }else{ @@ -550,10 +629,11 @@ class RestAuthenticationController extends AdminController } else { - return $this->callThirdPartyAPI($this->request->getJSON(), 'saveMpin'); + return $this->callThirdPartyAPI($requestData, 'saveMpin'); } } catch (\Throwable $th) { + $this->myLogger->logme("error", ($th->getMessage().' --- '.$th->getLine())); return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } @@ -567,6 +647,14 @@ class RestAuthenticationController extends AdminController $old_mpin = $this->request->getJSON()->old_mpin; $mpin = $this->request->getJSON()->new_mpin; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number, 'old_mpin' => $old_mpin ]); + // print_r($empdata); die; + + if(empty($empdata)){ + $result = ['user_verification' => false , 'message' => "User not found"]; + return $this->respond(['status' => 'failed','code' => 404,'data' => $result],200); + } + if (isset($mobile_number)) { // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('mpin', $old_mpin)->where('relationship', 'self')->first(); $employeeData = $this->employeeModel @@ -597,13 +685,22 @@ class RestAuthenticationController extends AdminController ->first(); } - + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + + $requestData = $this->request->getJSON(); + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $requestData->client_id = $empdata['post']['client_id']; + } + if ($employeeData) { $id= $employeeData["id"]; $updateMpin = $this->employeeModel->where('id', $id)->set('mpin', $mpin)->update(); if($updateMpin){ - $this->callThirdPartyAPI($this->request->getJSON(), 'updateMpin'); + $this->callThirdPartyAPI($requestData, 'updateMpin'); $result = ['mpin_verification' => true , 'message' => "Mpin Updated"]; return $this->respond(['status' => 'success','code' => 200,'data' => $result],200); }else{ @@ -613,10 +710,11 @@ class RestAuthenticationController extends AdminController } else { - return $this->callThirdPartyAPI($this->request->getJSON(), 'updateMpin'); + return $this->callThirdPartyAPI($requestData, 'updateMpin'); } } catch (\Throwable $th) { + $this->myLogger->logme("error", ($th->getMessage().' --- '.$th->getLine())); return $this->respond(['status' => 'failed','code' => 500,'data' => $th],500); } } @@ -629,6 +727,13 @@ class RestAuthenticationController extends AdminController $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null; $mpin = $this->request->getJSON()->mpin; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number]); + // print_r($empdata); die; + + if(empty($empdata)){ + return $this->respond(['status' => 'failed', 'code' => 404, 'data' => 'Invalid MPIN'], 200); + } + if (isset($mobile_number)) { // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first(); $employeeData = $this->employeeModel @@ -657,6 +762,17 @@ class RestAuthenticationController extends AdminController ->first(); } + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + + $requestData = $this->request->getJSON(); + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $requestData->client_id = $empdata['post']['client_id']; + } + + if ($employeeData && $mpin == $employeeData["mpin"]) { $auth = HttpRequestHelper::getRequestInfo(); if ($auth) { @@ -671,22 +787,25 @@ class RestAuthenticationController extends AdminController $authdata = $this->authHistoryModel->insert($data); } + unset($employeeData['employee_id']); $result = JWTToken::encode($employeeData); // Call the third-party API function - $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(), 'verifyMpin'); + $apiResponse = $this->callThirdPartyAPI($requestData, 'verifyMpin'); return $this->respond(['status' => 'success', 'code' => 200, 'data' => $result, 'post_enrollment' => json_decode($apiResponse, true)], 200); } else { // Call the third-party API function - $apiResponse = $this->callThirdPartyAPI($this->request->getJSON(), 'verifyMpin'); + $apiResponse = $this->callThirdPartyAPI($requestData, 'verifyMpin'); return $this->respond(['status' => 'failed', 'code' => 404, 'data' => "Invalid OTP", 'post_enrollment' => json_decode($apiResponse, true)], 200); //$apiResponse = $this->callThirdPartyAPI($this->request->getJSON(),'/getVerifiedUserData'); // return $this->respond(['status' => 'failed','code' => 404,'data' => "Invalid OTP", 'post_enrollment'=> json_decode($apiResponse, true)],200); } + } catch (\Exception $e) { + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine())); return $this->respond(['status' => 'failed', 'code' => 500, 'data' => $e->getMessage()], 500); return $this->respond(['status' => 'failed', 'code' => 200, 'post_enrollment' => json_decode($apiResponse, true)], 200); } @@ -698,6 +817,14 @@ class RestAuthenticationController extends AdminController $mobile_number = isset($this->request->getJSON()->mobile_number) ? $this->request->getJSON()->mobile_number : null; $email_id = isset($this->request->getJSON()->email_id) ? $this->request->getJSON()->email_id : null; + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number]); + // print_r($empdata); die; + + if(empty($empdata)){ + return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200); + } + + if (isset($mobile_number)) { // $employeeData = $this->employeeModel->where('mobile', $mobile_number)->where('relationship', 'self')->first(); @@ -726,16 +853,29 @@ class RestAuthenticationController extends AdminController ->orderBy('id', 'desc') ->first(); } + + + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + + $requestData = $this->request->getJSON(); + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $requestData->client_id = $empdata['post']['client_id']; + } + if ($employeeData && $employeeData["mpin"] != null) { return $this->respond(['status' => 'success','code' => 200,'data' => "Mpin - exist" , 'Mpin' =>$employeeData["mpin"], 'is_mpin_skipped' => $employeeData['is_mpin_skipped'], 'is_biometric_enabled' => $employeeData['is_biometric_enabled']],200); } else { // return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200); - return $this->callThirdPartyAPI($this->request->getJSON(), 'checkMpin'); + return $this->callThirdPartyAPI($requestData, 'checkMpin'); } } catch (\Exception $e) { + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine())); return $this->respond(['status' => 'failed','code' => 500,'data' => $e->getMessage()],500); } } @@ -761,6 +901,13 @@ class RestAuthenticationController extends AdminController ], 400); } + $empdata = RestAuthHelper::getPreAndPostDataByEmailOrMobile(['email_id' => $email_id, 'mobile_number' => $mobile_number]); + // print_r($empdata); die; + + if(empty($empdata)){ + return $this->respond(['status' => 'failed','code' => 404,'data' => "Mpin - not found", 'Mpin' =>null],200); + } + // Step 2: Fetch employee data if ($mobile_number) { log_message('info', 'Looking up employee by mobile number: ' . $mobile_number); @@ -790,6 +937,15 @@ class RestAuthenticationController extends AdminController ->first(); } + $employeeData = []; + if (isset($empdata['pre']) && !empty($empdata['pre'])) { + $employeeData = $empdata['pre']; + } + + if (isset($empdata['post']['client_id']) && !empty($empdata['post']['client_id'])) { + $json->client_id = $empdata['post']['client_id']; + } + // Step 3: Found employee if (!empty($employeeData)) { log_message('info', 'Employee found: ID = ' . $employeeData['id']); @@ -829,7 +985,7 @@ class RestAuthenticationController extends AdminController return $this->callThirdPartyAPI($json, 'forgotMPIN'); } } catch (\Throwable $e) { - log_message('error', 'Exception in forgotMPIN(): ' . $e->getMessage()); + $this->myLogger->logme("error", ($e->getMessage().' --- '.$e->getLine())); return $this->respond([ 'status' => 'failed', 'code' => 500, diff --git a/app/Helpers/RestAuthHelper.php b/app/Helpers/RestAuthHelper.php new file mode 100644 index 0000000..1e3f35d --- /dev/null +++ b/app/Helpers/RestAuthHelper.php @@ -0,0 +1,171 @@ + $mobile_number, + 'email_id' => $email_id, + 'otp' => $otp, + '$old_mpin' => $old_mpin, + ]; + + $pre_data = self::getPreEmployeeData($params); + $post_data = self::getPostEmployeeData($params); + + // Return empty array if both are missing + if (empty($pre_data) && empty($post_data)) { + return []; + } + + // Determine the latest record + $latest_key = null; + if (!empty($pre_data) && !empty($post_data)) { + $latest_key = strtotime($pre_data['created_at']) > strtotime($post_data['created_at']) ? 'pre' : 'post'; + } elseif (!empty($pre_data)) { + $latest_key = 'pre'; + } elseif (!empty($post_data)) { + $latest_key = 'post'; + } + + // Compare client_short_name only if both records exist + if (!empty($pre_data) && !empty($post_data)) { + $latest_data = $latest_key === 'pre' ? $pre_data : $post_data; + $other_data = $latest_key === 'pre' ? $post_data : $pre_data; + + if ($latest_data['client_short_name'] === $other_data['client_short_name']) { + return [ + 'pre' => $pre_data, + 'post' => $post_data, + ]; + } + } + + // If one of the data is missing or client names mismatch + return [ + 'pre' => $latest_key === 'pre' ? $pre_data : [], + 'post' => $latest_key === 'post' ? $post_data : [], + ]; + } + + public static function getPreEmployeeData(array $params) + { + $employeeModel = new EmployeeModel(); + + $mobile_number = $params['mobile_number'] ?? null; + $email_id = $params['email_id'] ?? null; + $otp = $params['otp'] ?? null; + $old_mpin = $params['old_mpin'] ?? null; + + if (!empty($mobile_number)) { + $builder = $employeeModel + ->select('employees.id as employee_id, employees.*') + ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner') + ->where('employees.is_active', 1) + ->where("TRIM(employees.relationship) = 'self'", null, false) + ->whereIn('employees.emp_status', ['draft', 'enrolled']) + ->where('employees.mobile', $mobile_number) + ->where('EP.is_active', 1) + ->whereIn('EP.status', ['draft', 'enrolled']); + + if (!empty($old_mpin)) { + $builder->where('employees.mpin', $old_mpin); + } + + $employeeData = $builder->orderBy('employees.id', 'desc')->first(); + + } elseif (!empty($email_id)) { + $builder = $employeeModel + ->select('employees.id as employee_id, employees.*') + ->join('employee_polices EP', 'EP.employee_id = employees.id', 'inner') + ->where('employees.is_active', 1) + ->where("TRIM(employees.relationship) = 'self'", null, false) + ->whereIn('employees.emp_status', ['draft', 'enrolled']) + ->where('employees.email_corporate', $email_id) + ->where('EP.is_active', 1) + ->whereIn('EP.status', ['draft', 'enrolled']); + + if (!empty($otp)) { + $builder->where('employees.otp', $otp); + } + + if (!empty($old_mpin)) { + $builder->where('employees.mpin', $old_mpin); + } + + $employeeData = $builder->orderBy('employees.id', 'desc')->first(); + + } else { + return null; + } + + if($employeeData){ + $clientModel = new ClientModel; + $client_data = $clientModel->where('is_active', 1)->where('id', $employeeData['client_id'])->first(); + $employeeData['client_short_name'] = $client_data['short_name']; + } + + return $employeeData; + } + + public static function getPostEmployeeData(array $params) + { + // print_r($params); die; + $mobile_number = $params['mobile_number'] ?? null; + $email_id = $params['email_id'] ?? null; + $otp = $params['otp'] ?? null; + $old_mpin = $params['old_mpin'] ?? null; + + + if (!empty($mobile_number) || !empty($email_id)) { + + $client = \Config\Services::curlrequest(); + $endPoint = 'getPostEmployeeDataForAuth'; + $url = env('POST_ENROLLMENT_BASEURL') . $endPoint; + + $postData = []; + + if (!empty($mobile_number)) { + $postData['mobile_number'] = $mobile_number; + } + + if (!empty($email_id)) { + $postData['email_id'] = $email_id; + } + + if (!empty($otp)) { + $postData['otp'] = $otp; + } + + if (!empty($old_mpin)) { + $postData['old_mpin'] = $old_mpin; + } + + $response = $client->post( $url, ['json' => $postData, 'http_errors' => false]); + $post_json = $response->getBody(); + $post_data = json_decode($post_json, true); + + return $post_data['data']; + } + } +}