FEAT_REST_AUTH_HELPER_AND_MPIN_CHANGES : RV

This commit is contained in:
VENKATESHWARAN 2025-07-09 09:50:25 +05:30
parent 1be1f421ab
commit 8784c20bf6
3 changed files with 349 additions and 21 deletions

View File

@ -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);
}

View File

@ -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,

View File

@ -0,0 +1,171 @@
<?php
namespace App\Helpers;
use App\Models\ClientModel;
use App\Models\ClientPolicyModel;
use App\Models\EmployeeModel;
use App\Models\EmployeePolicyModel;
class RestAuthHelper
{
public static function getPreAndPostDataByEmailOrMobile($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;
// Return null if both inputs are empty
if (empty($mobile_number) && empty($email_id)) {
return null;
}
$params = [
'mobile_number' => $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'];
}
}
}