diff --git a/app/Http/Controllers/AuthorizationCareRequestController.php b/app/Http/Controllers/AuthorizationCareRequestController.php index c341bc1..0aa0196 100755 --- a/app/Http/Controllers/AuthorizationCareRequestController.php +++ b/app/Http/Controllers/AuthorizationCareRequestController.php @@ -27,6 +27,7 @@ use App\Models\NhPerformance; use App\Models\NhProviderClass; use App\Models\NhValidatingAgent; use App\Models\User; +use App\Rules\PasswordValidation; use App\Traits\ApiResponser; use App\Traits\Helper; use GuzzleHttp\Client; @@ -111,7 +112,7 @@ class AuthorizationCareRequestController extends Controller 'act_id' => 'required|integer|exists:nh_acts,id', 'insurance_id' => 'required|integer|exists:nh_insurances,id', 'beneficiary_id' => 'nullable|int|exists:nh_having_rights,id', - 'password' => 'required|string' +// 'password' => 'required|string' ]); $act_id = $request->input('act_id'); @@ -122,7 +123,11 @@ class AuthorizationCareRequestController extends Controller } $user = $insurance->user; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id)] + ]); $beneficiary_id = $request->input('beneficiary_id'); if (!empty($beneficiary_id)) { diff --git a/app/Http/Controllers/HealthCareSheetController.php b/app/Http/Controllers/HealthCareSheetController.php index 728632e..b6f87f7 100755 --- a/app/Http/Controllers/HealthCareSheetController.php +++ b/app/Http/Controllers/HealthCareSheetController.php @@ -27,6 +27,7 @@ use App\Models\NhNetworksConfig; use App\Models\NhPerformance; use App\Models\NhProviderClass; use App\Models\NhTmpHealthCareSheet; +use App\Rules\PasswordValidation; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Event; @@ -598,7 +599,7 @@ class HealthCareSheetController extends Controller $this->validate($request, [ 'insured_id' => 'required|string', 'network_agent_id' => 'required|integer|exists:networks_agents,id', - 'password' => 'required|string', +// 'password' => 'required|string', 'beneficiary_id' => 'nullable|int|exists:nh_having_rights,id', // 'patient_lastname' => 'required|string', // 'patient_firstname' => 'nullable|string', @@ -632,7 +633,10 @@ class HealthCareSheetController extends Controller return $this->errorResponse(trans('errors.not_insured')); } - $this->agentCredentialsVerification($request->input('network_agent_id'), $request->input('password')); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id)] + ]); $beneficiary_id = $request->input('beneficiary_id'); if (!empty($beneficiary_id)) { @@ -946,7 +950,7 @@ class HealthCareSheetController extends Controller $this->validate($request, [ 'health_care_sheet_id' => 'required|integer|exists:nh_health_care_sheets,id', 'network_agent_id' => 'required|integer|exists:networks_agents,id', - 'password' => 'required|string', +// 'password' => 'required|string', 'practitioner_lastname' => 'required|string', 'practitioner_firstname' => 'nullable|string', 'practitioner_provider_class_id' => 'required|integer', @@ -976,13 +980,16 @@ class HealthCareSheetController extends Controller return $this->errorResponse(trans('errors.sheet_not_comes_from_consultation')); } - $this->agentCredentialsVerification($request->input('network_agent_id'), $request->input('password')); - $nhConfig = NhNetworksConfig::where('network_id', $sheet->insurance->network_id)->first(); if (!isset($nhConfig)) { return $this->errorResponse(trans('errors.nano_health_not_activated')); } + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($sheet->insurance->network_id)] + ]); + $parts = $this->getConfigInsuranceParts($nhConfig, $sheet->care_condition); $currency_code = $this->getNetworkCurrency($sheet->insurance->network_id); @@ -1756,7 +1763,7 @@ class HealthCareSheetController extends Controller */ $this->validate($request, [ 'network_agent_id' => 'required|integer|exists:networks_agents,id', - 'password' => 'required|string', +// 'password' => 'required|string', // 'beneficiary_id' => 'nullable|int|exists:nh_having_rights,id', 'practitioner_lastname' => 'nullable|string', 'practitioner_firstname' => 'nullable|string', @@ -1796,9 +1803,6 @@ class HealthCareSheetController extends Controller if ($sheet->network_agent_id != $request->input('network_agent_id')) { return $this->errorResponse(__('errors.unauthorized_to_update_sheet'), 403); } - - $this->agentCredentialsVerification($request->input('network_agent_id'), $request->input('password')); - // $beneficiary_id = $request->input('beneficiary_id'); // if (!empty($beneficiary_id)) { // $beneficiary = $sheet->insurance->beneficiaries()->where('nh_having_rights.id', $beneficiary_id)->first(); @@ -1813,6 +1817,11 @@ class HealthCareSheetController extends Controller return $this->errorResponse(trans('errors.nano_health_not_activated')); } + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($sheet->insurance->network_id)] + ]); + $performances = $request->input('performances', []); $prescriptions = $request->input('prescriptions', []); $exams = $request->input('exams', []); diff --git a/app/Http/Controllers/HelperController.php b/app/Http/Controllers/HelperController.php index c9135ad..5e995d9 100644 --- a/app/Http/Controllers/HelperController.php +++ b/app/Http/Controllers/HelperController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\AgentPlus; +use App\Models\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -75,4 +77,82 @@ class HelperController extends Controller $exclusion = current(DB::select("SELECT document FROM nh_exclusions WHERE network_id = :network_id LIMIT 1", ['network_id' => $network_id])); return $this->successResponse($exclusion); } + + /** + * @OA\Post( + * path="/password-validation", + * summary="Validation du mot de passe", + * tags={"Validation du mot de passe"}, + * security={{"api_key":{}}}, + * @OA\RequestBody( + * description="Corps de la requete", + * required=true, + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * schema="request_for_authorizations_of_care", + * title = "Demande autorisation de prise en charge", + * required={"password"}, + * @OA\Property( + * property="password", + * description = "Mot de passe", + * type="string", + * example= "1234" + * ), + * @OA\Property( + * property="user_id", + * description = "ID de l'utilisateur", + * type="integer", + * example= 5 + * ), + * @OA\Property( + * property="network_agent_id", + * description = "ID de l'agent dans le reseau", + * type="integer", + * example= 43959 + * ) + * ), + * ), + * ), + * @OA\Response( + * response=200, + * description="OK", + * @OA\JsonContent( + * ref="#/components/schemas/ApiResponse", + * example = { + * "status" : 200, + * "response" : "Authentification réussie", + * "error":null + * } + * ) + * ) + * ) + */ + // Validation du mot de passe lors de l'ouverture du wallet coté front + public function passwordValidation(Request $request) + { + $this->validate($request, [ + 'password' => 'required|string', + 'user_id' => 'required_without:network_agent_id|integer|exists:users,id', + 'network_agent_id' => 'required_without:user_id|integer|exists:networks_agents,id', + ]); + $password = $request->input('password'); + $user_id = $request->input('user_id'); + $network_agent_id = $request->input('network_agent_id'); + + if (!empty($user_id)) { + $user = User::findOrFail($user_id); + $check = checkPassword($password, $user->encrypted_password, $user->salt); + } else { + $agent = AgentPlus::where('network_agent_id', $network_agent_id)->firstOrFail(); + $check = checkPassword($password, $agent->encrypted_password, $agent->salt); + } + + if ($check) { + return $this->successResponse(trans('messages.successful_authentification')); + } else { + return $this->errorResponse(trans('messages.incorrect_user_password')); + } + + } } diff --git a/app/Http/Controllers/InsuranceController.php b/app/Http/Controllers/InsuranceController.php index 1e27fdd..54e3d00 100644 --- a/app/Http/Controllers/InsuranceController.php +++ b/app/Http/Controllers/InsuranceController.php @@ -17,6 +17,7 @@ use App\Models\NhInsurancesSubscription; use App\Models\NhInsurancesSubscriptionsHistory; use App\Models\NhNetworksConfig; use App\Models\Wallet; +use App\Rules\PasswordValidation; use App\Traits\Helper; use DateTime; use Exception; @@ -339,7 +340,7 @@ class InsuranceController extends Controller * */ $this->validate($request, [ - 'password' => 'required|string', +// 'password' => 'required|string', 'beneficiaries' => 'nullable|array', 'beneficiaries.*.lastname' => 'required|string', 'beneficiaries.*.gender' => 'required|in:M,F', @@ -359,7 +360,11 @@ class InsuranceController extends Controller $this->latestSubscriptionVerification($request->input('network_id'), $request->input('user_id')); $user = $insurance->user; $identification = $insurance->user->identification; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id, 'user', $user)] + ]); $nbOfBeneficiaries = $insurance->beneficiaries()->count(); $networkConfig = NhNetworksConfig::where('network_id', $insurance->network_id)->first(); @@ -469,7 +474,7 @@ class InsuranceController extends Controller * */ $this->validate($request, [ - 'password' => 'required|string', +// 'password' => 'required|string', 'beneficiaries_ids' => 'required|array', 'beneficiaries_ids.*' => 'required|integer|exists:nh_having_rights,id', ]); @@ -477,7 +482,11 @@ class InsuranceController extends Controller $insurance = NhInsurance::findOrFail($id); $this->insuranceVerification($insurance); $user = $insurance->user; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id, 'user', $user)] + ]); $current_beneficiaries_ids = array_map(function ($b) { return $b['id']; @@ -561,14 +570,18 @@ class InsuranceController extends Controller */ public function stopInsurance(Request $request, $id) { - $this->validate($request, [ - 'password' => 'required|string', - ]); +// $this->validate($request, [ +// 'password' => 'required|string', +// ]); $insurance = NhInsurance::findOrFail($id); $user = $insurance->user; $identification = $insurance->user->identification; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id, 'user', $user)] + ]); $this->insuranceVerification($insurance); $this->latestSubscriptionVerification($insurance->network_id, $insurance->user_id); try { @@ -653,9 +666,9 @@ class InsuranceController extends Controller */ public function renewInsurance(Request $request, $id) { - $this->validate($request, [ - 'password' => 'required|string', - ]); +// $this->validate($request, [ +// 'password' => 'required|string', +// ]); $insurance = NhInsurance::findOrFail($id); if (!in_array($insurance->state, [InsuranceState::STOPPED, InsuranceState::EXPIRED])) { @@ -663,7 +676,11 @@ class InsuranceController extends Controller } $user = $insurance->user; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($insurance->network_id, 'user', $user)] + ]); $networkConfig = NhNetworksConfig::where('network_id', $insurance->network_id)->first(); if (!isset($networkConfig) || $networkConfig->configWallet->type != 'ilink_sante') diff --git a/app/Http/Controllers/InsuranceInvoiceController.php b/app/Http/Controllers/InsuranceInvoiceController.php index 44dae84..5f95905 100644 --- a/app/Http/Controllers/InsuranceInvoiceController.php +++ b/app/Http/Controllers/InsuranceInvoiceController.php @@ -22,6 +22,7 @@ use App\Models\NhMonthsPricesGrid; use App\Models\NhNetworksConfig; use App\Models\User; use App\Models\Wallet; +use App\Rules\PasswordValidation; use App\Traits\Helper; use Carbon\Carbon; use DateTime; @@ -201,9 +202,9 @@ class InsuranceInvoiceController extends Controller */ public function payInvoice($id, Request $request) { - $this->validate($request, [ - 'password' => 'required|string', - ]); +// $this->validate($request, [ +// 'password' => 'required|string', +// ]); $invoice = NhInsurancesInvoice::findOrFail($id); $datetime = $this->getCurrentTimeByCountryCode($invoice->insurance->network->country->code_country); @@ -217,7 +218,12 @@ class InsuranceInvoiceController extends Controller // } $user = $invoice->insurance->user; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($invoice->insurance->network_id, 'user', $user)] + ]); $currency = $this->getNetworkCurrency($invoice->insurance->network_id); diff --git a/app/Http/Controllers/InsuranceSubscriptionController.php b/app/Http/Controllers/InsuranceSubscriptionController.php index effd6f4..14dad65 100644 --- a/app/Http/Controllers/InsuranceSubscriptionController.php +++ b/app/Http/Controllers/InsuranceSubscriptionController.php @@ -22,6 +22,7 @@ use App\Models\NhMonthsPricesGrid; use App\Models\NhNetworksConfig; use App\Models\User; use App\Models\Wallet; +use App\Rules\PasswordValidation; use App\Traits\Helper; use Carbon\Carbon; use DateTime; @@ -280,7 +281,7 @@ class InsuranceSubscriptionController extends Controller $this->validate($request, [ 'network_id' => 'required|integer|exists:networks,id', 'user_id' => 'required|integer|exists:users,id', - 'password' => 'required|string', +// 'password' => 'required|string', 'month_price_id' => 'required|integer|exists:nh_months_prices_grid,id', 'beneficiaries' => 'nullable|array', 'beneficiaries.*.lastname' => 'required|string', @@ -298,7 +299,11 @@ class InsuranceSubscriptionController extends Controller $user = User::findOrFail($request->input('user_id')); $identification = $user->identification; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($request->input('network_id'), 'user', $user)] + ]); $networkConfig = NhNetworksConfig::where('network_id', $request->input('network_id'))->first(); if (!isset($networkConfig) || $networkConfig->configWallet->type != 'ilink_sante') @@ -627,9 +632,9 @@ class InsuranceSubscriptionController extends Controller */ public function paySubscription($id, Request $request) { - $this->validate($request, [ - 'password' => 'required|string', - ]); +// $this->validate($request, [ +// 'password' => 'required|string', +// ]); $subscription = NhInsurancesSubscription::findOrFail($id); if ($subscription->state != InsuranceSubscriptionState::ACCEPTED) { @@ -641,7 +646,11 @@ class InsuranceSubscriptionController extends Controller } $user = $subscription->user; - $this->userCredentialsVerification($user, $request->input('password')); + $this->userIdentificationVerification($user); + // Validation du mot de passe dépendamment de la configuration du réseau + $this->validate($request, [ + 'password' => [new PasswordValidation($subscription->network_id, 'user', $user)] + ]); $currency = $this->getNetworkCurrency($subscription->network_id); diff --git a/app/Rules/PasswordValidation.php b/app/Rules/PasswordValidation.php new file mode 100644 index 0000000..8729baf --- /dev/null +++ b/app/Rules/PasswordValidation.php @@ -0,0 +1,87 @@ +network_id = $network_id; + $this->type = $type; + $this->user = $user; + } + + + /** + * Set the data under validation. + * + * @param array $data + * @return $this + */ + public function setData($data) + { + $this->data = $data; + return $this; + } + + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + * @throws AppException + */ + public function passes($attribute, $value) + { + $config = NhNetworksConfig::where('network_id', $this->network_id)->first(); + + if (isset($config) && $config->password_validation == 'MAX') { + $validator = Validator::make($this->data, [ + 'password' => 'required|string' + ]); + if ($validator->fails()) { + throw new AppException(trans('validation.required', ['attribute' => 'password']), 422); + } + + if ($this->type == 'agent') { + $network_agent_id = $this->data['network_agent_id'] ?? $this->data['issuer_network_agent_id']; + $agent = AgentPlus::where('network_agent_id', $network_agent_id)->first(); + return checkPassword($value, $agent->encrypted_password, $agent->salt); + } else { + return checkPassword($value, $this->user->encrypted_password, $this->user->salt); + } + + } + return true; + } + + /** + * Get the validation error message. + * + * @return string + */ + public function message() + { + return trans('messages.incorrect_user_password'); + } +} diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 6445fd8..e5998b9 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -214,13 +214,13 @@ trait Helper /** * @throws AppException */ - public function userCredentialsVerification(User $user, $password) + public function userIdentificationVerification(User $user) { if (!isset($user->identification) || $user->identification->status == 0) throw new AppException(trans('errors.user_identification_required')); - if (!checkPassword($password, $user->encrypted_password, $user->salt)) - throw new AppException(trans('messages.incorrect_user_password')); +// if (!checkPassword($password, $user->encrypted_password, $user->salt)) +// throw new AppException(trans('messages.incorrect_user_password')); } /** diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 0d6afb0..1275eaf 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -253,5 +253,6 @@ Your insurance has expired. 'insurance_invoice_generated_mail_title' => "Your :deadline insurance invoice has been issued", 'the_invoice' => "the invoice", 'the_payment' => "the payment", - 'care_request_already_been_processed' => "The care request has already been processed" + 'care_request_already_been_processed' => "The care request has already been processed", + 'successful_authentification' => "Successful authentication" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 35decb3..065cf8c 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -270,5 +270,6 @@ Votre assurance est arrivée à échéance. 'insurance_invoice_generated_mail_title' => "La facture de votre assurance d'échéance :deadline a été émise.", 'the_invoice' => "la facture", 'the_payment' => "le paiement", - 'care_request_already_been_processed' => "La demande de prise en charge a deja ete traitée" + 'care_request_already_been_processed' => "La demande de prise en charge a deja ete traitée", + 'successful_authentification' => "Authentification réussie" ]; diff --git a/routes/web.php b/routes/web.php index 075cbba..bb0895f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -74,4 +74,5 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route $router->put('authorizations-care-requests', 'AuthorizationCareRequestController@treatRequest'); $router->get('exclusions/{network_id}', 'HelperController@getNetworkExclusions'); + $router->post('password-validation', 'HelperController@passwordValidation'); });