diff --git a/.htaccess b/.htaccess index c9db48e..cf3c184 100755 --- a/.htaccess +++ b/.htaccess @@ -5,28 +5,6 @@ Options -Indexes # Rewrite engine # ---------------------------------------------------------------------- - -## ADDED for - block any script execution inside folder of public - - Deny from all - # Disable PHP engine - - php_flag engine off - - - # Disable CGI and other executable handlers - Options -ExecCGI - AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi - - # Block access to any script-like files entirely - - ForceType text/plain - #Order allow,deny - Deny from all - - - - # Turning on the rewrite engine is necessary for the following rules and features. # FollowSymLinks must be enabled for this to work. diff --git a/app/Controllers/EmployeeController.php b/app/Controllers/EmployeeController.php index 8b9785d..936d914 100755 --- a/app/Controllers/EmployeeController.php +++ b/app/Controllers/EmployeeController.php @@ -500,7 +500,7 @@ class EmployeeController extends AdminController } } - public function getExcelFileErrors($file_id, $retun_type) + public function getExcelFileErrors($file_id, $retun_type = null) { // $file_id = $this->request->uri->getSegment(3); $empServiceController = new EmployeeServiceController(); diff --git a/app/Controllers/EmployeeRestController.php b/app/Controllers/EmployeeRestController.php index e90be33..d8ffc24 100755 --- a/app/Controllers/EmployeeRestController.php +++ b/app/Controllers/EmployeeRestController.php @@ -4470,19 +4470,22 @@ class EmployeeRestController extends AdminController ") ->join('employee_polices', 'employees.id = employee_polices.employee_id') ->join('client_policy', 'employee_polices.client_policy_id = client_policy.id') + ->whereIn('employees.emp_status', ['draft', 'enrolled']) + ->whereIn('employee_polices.status', ['draft', 'enrolled']) ->where([ 'employees.is_active' => 1, 'employee_polices.is_active' => 1, 'client_policy.policy_type_id' => 2, 'employees.family_floater_key' => 'self', - 'employees.emp_code' => $emp_code, - 'employees.client_id' => $client_id, - 'employees.client_branch_id' => $client_branch_id, + 'employees.emp_code' => $emp_code ?? null, + 'employees.client_id' => $client_id ?? null, + 'employees.client_branch_id' => $client_branch_id ?? null, ]) + ->orderBy('employee_polices.id', 'desc') ->first(); // dd($data); - // dd( db_connect()->getLastQuery()); + // dd(db_connect()->getLastQuery()); if (!empty($data) && !empty($data['gmc_parent_policy_id'])) { diff --git a/app/Controllers/LoginController.php b/app/Controllers/LoginController.php index aa5d9a8..73f7bb0 100755 --- a/app/Controllers/LoginController.php +++ b/app/Controllers/LoginController.php @@ -61,9 +61,7 @@ class LoginController extends BaseController set_session_data($session_data); // Bind session to device - set_session_data(['fingerprint' => hash('sha256', - ($this->request->getUserAgent()->getAgentString() . '|' . ($this->request->getIPAddress() - )))]); + set_session_data(['fingerprint' => generateFingerprint()]); log_message('error', 'Set The UserId : `'. $user->id .'` in Session'); log_message('error', 'User Login Sucessfully'); diff --git a/app/Filters/AuthMVC.php b/app/Filters/AuthMVC.php index e6c6948..285f586 100755 --- a/app/Filters/AuthMVC.php +++ b/app/Filters/AuthMVC.php @@ -22,9 +22,7 @@ class AuthMVC implements FilterInterface // } // Fingerprint validation - $fp = hash('sha256', - $request->getUserAgent()->getAgentString() . '|' . $request->getIPAddress() - ); + $fp = generateFingerprint(); if (session()->get('fingerprint') !== $fp) { return AuthLogout::logout(); diff --git a/app/Helpers/session_helper.php b/app/Helpers/session_helper.php index eb9eb9a..ccbdd51 100755 --- a/app/Helpers/session_helper.php +++ b/app/Helpers/session_helper.php @@ -118,7 +118,8 @@ if (!function_exists('check_role')) { { // $ci =& get_instance(); $session = \Config\Services::session(); - return $session->get('role'); + return $role_id = isset(get_session_userdata()->role) ? get_session_userdata()->role : null; + } } diff --git a/app/Helpers/utility_helper.php b/app/Helpers/utility_helper.php index e1b8a9b..d1f858b 100755 --- a/app/Helpers/utility_helper.php +++ b/app/Helpers/utility_helper.php @@ -557,7 +557,7 @@ if (!function_exists('change_date_format')) { $date = DateTime::createFromFormat($source_format, $date_str); if (!$date) { // throw new Exception("Invalid date string for source format: $source_format"); - log_message('error', "❌ Date format error : Invalid date string | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); + // log_message('error', "❌ Date format error : Invalid date string | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); return null; } return $date->format($output_format); @@ -568,7 +568,7 @@ if (!function_exists('change_date_format')) { $date = DateTime::createFromFormat($source_format, $date_str); if (!$date) { // throw new Exception("Invalid date string for source format: $source_format"); - log_message('error', "❌ Date format error : Invalid date string | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); + // log_message('error', "❌ Date format error : Invalid date string | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); return null; } return $date->format('Y-m-d'); // MySQL default format @@ -585,15 +585,15 @@ if (!function_exists('change_date_format')) { // If no format matches, throw an exception $allowed_placeholders = implode(', ', $allowed_formats); // throw new Exception("Invalid date string format. Allowed formats: $allowed_placeholders"); - log_message( - 'error', - "❌ Date format error: Invalid date string. Allowed formats: {$allowed_placeholders} | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}" - ); + // log_message( + // 'error', + // "❌ Date format error: Invalid date string. Allowed formats: {$allowed_placeholders} | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}" + // ); return null; } } catch (Exception $e) { // return "Error: " . $e->getMessage(); - log_message('error', "❌ Date format error: {$e->getMessage()} | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); + // log_message('error', "❌ Date format error: {$e->getMessage()} | Params => date_str: {$date_str}, source_format: {$source_format}, output_format: {$output_format}"); return null; } @@ -756,3 +756,34 @@ if (!function_exists('validateExcelFile')) { return true; } } +function getRealClientIP() +{ + $request = service('request'); + + if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) { + return $_SERVER['HTTP_CF_CONNECTING_IP']; + } + + if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]; + } + + return $request->getIPAddress(); +} + +function generateFingerprint() +{ + $request = service('request'); + + $ua = $request->getUserAgent()->getAgentString(); + $ip = getRealClientIP(); + // echo $ip;die(); + // Use only subnet (first 3 blocks) to tolerate IP change + $ipParts = explode('.', $ip); + $ipSubnet = $ipParts[0] . '.' . $ipParts[1] . '.' . $ipParts[2]; + + // $secret = env('app.sessionFingerprintSalt'); + + // return hash('sha256', $ua . '|' . $ipSubnet . '|' . $secret); + return hash('sha256', $ua . '|' . $ipSubnet ); +} \ No newline at end of file diff --git a/app/Views/file_list.php b/app/Views/file_list.php index 0810319..9886ae9 100755 --- a/app/Views/file_list.php +++ b/app/Views/file_list.php @@ -113,7 +113,16 @@ class="mdi mdi-dots-horizontal">