Implements password validation while network config password is MAX

This commit is contained in:
Djery-Tom 2022-04-14 15:21:57 +01:00
parent 0ce46df5a9
commit b94f264f57
11 changed files with 254 additions and 38 deletions

View File

@ -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)) {

View File

@ -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', []);

View File

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

View File

@ -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')

View File

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

View File

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

View File

@ -0,0 +1,87 @@
<?php
namespace App\Rules;
use App\Exceptions\AppException;
use App\Models\AgentPlus;
use App\Models\NhNetworksConfig;
use Illuminate\Contracts\Validation\DataAwareRule;
use Illuminate\Contracts\Validation\ImplicitRule;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
class PasswordValidation implements ImplicitRule, DataAwareRule
{
/**
* All of the data under validation.
*
* @var array
*/
protected $data = [];
private $network_id;
private $type;
private $user;
public function __construct($network_id, $type = 'agent', $user = null)
{
$this->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');
}
}

View File

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

View File

@ -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"
];

View File

@ -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"
];

View File

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