From 18e3bdefdbc7249bdff90fa5284073d5019e92fc Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Wed, 10 Dec 2025 09:24:54 -0600 Subject: [PATCH] Add: encriptar credenciales repuve --- .../Controllers/System/SettingsController.php | 77 +++++++++++++++++++ app/Services/RepuveService.php | 39 +++++++++- resources/views/pdfs/constancia.blade.php | 2 +- routes/api.php | 6 ++ 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/System/SettingsController.php diff --git a/app/Http/Controllers/System/SettingsController.php b/app/Http/Controllers/System/SettingsController.php new file mode 100644 index 0000000..82ca53f --- /dev/null +++ b/app/Http/Controllers/System/SettingsController.php @@ -0,0 +1,77 @@ +json([ + 'success' => true, + 'data' => [ + 'username' => '', + 'password_exists' => false + ] + ]); + } + + $credentials = EncryptionHelper::decryptData($encryptedCredentials); + + return response()->json([ + 'success' => true, + 'data' => [ + 'username' => $credentials['username'] ?? '', + 'password_exists' => !empty($credentials['password']) + ] + ]); + } + + public function update(Request $request) + { + $validated = $request->validate([ + 'username' => 'required|string|max:255', + 'password' => 'required|string|min:6|max:255', + ]); + + // Preparar datos para encriptar + $credentials = [ + 'username' => $validated['username'], + 'password' => $validated['password'] + ]; + + // Encriptar las credenciales + $encryptedValue = EncryptionHelper::encryptData($credentials); + + // Guardar en BD (crea o actualiza automáticamente) + Setting::value( + key: 'repuve_federal_credentials', + value: $encryptedValue, + description: 'Credenciales encriptadas para REPUVE Federal', + type_ek: SettingTypeEk::JSON + ); + + return response()->json([ + 'success' => true, + 'message' => 'Credenciales guardadas correctamente', + 'data' => [ + 'username' => $credentials['username'], + 'password_exists' => true + ] + ]); + } +} diff --git a/app/Services/RepuveService.php b/app/Services/RepuveService.php index 2ef8208..cbf84a7 100644 --- a/app/Services/RepuveService.php +++ b/app/Services/RepuveService.php @@ -4,6 +4,8 @@ use Exception; use App\Models\Error; +use App\Models\Setting; +use App\Helpers\EncryptionHelper; class RepuveService { @@ -18,8 +20,41 @@ public function __construct() $this->baseUrl = config('services.repuve_federal.base_url'); $this->roboEndpoint = config('services.repuve_federal.robo_endpoint'); $this->inscripcionEndpoint = config('services.repuve_federal.inscripcion_endpoint'); - $this->username = config('services.repuve_federal.username'); - $this->password = config('services.repuve_federal.password'); + + // Cargar credenciales desde BD (encriptadas) + $this->loadCredentials(); + } + + /** + * Cargar credenciales desde BD + */ + private function loadCredentials(): void + { + try { + // Obtener credenciales encriptadas desde BD + $encryptedCredentials = Setting::value('repuve_federal_credentials'); + + if (!$encryptedCredentials) { + throw new Exception('Credenciales REPUVE no configuradas en el sistema'); + } + + $credentials = EncryptionHelper::decryptData($encryptedCredentials); + + if (!$credentials || !isset($credentials['username'], $credentials['password'])) { + throw new Exception('Error al desencriptar credenciales REPUVE'); + } + + $this->username = $credentials['username']; + $this->password = $credentials['password']; + + logger()->info('RepuveService: Credenciales cargadas correctamente desde BD'); + } catch (Exception $e) { + logger()->error('RepuveService: Error al cargar credenciales', [ + 'error' => $e->getMessage() + ]); + + throw new Exception('No se pudieron cargar las credenciales REPUVE: ' . $e->getMessage()); + } } public function consultarPadron(string $niv) diff --git a/resources/views/pdfs/constancia.blade.php b/resources/views/pdfs/constancia.blade.php index c110535..5552f10 100644 --- a/resources/views/pdfs/constancia.blade.php +++ b/resources/views/pdfs/constancia.blade.php @@ -12,7 +12,7 @@ body { font-family: Arial, Helvetica, sans-serif; - font-size: 9pt; + font-size: 12pt; margin: 0; padding: 0; } diff --git a/routes/api.php b/routes/api.php index 7fc5123..488bfd5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,6 +14,7 @@ use App\Http\Controllers\Repuve\ExcelController; use App\Http\Controllers\Repuve\PackageController; use App\Http\Controllers\Repuve\TagsController; +use App\Http\Controllers\System\SettingsController; /** * Rutas del núcleo de la aplicación. @@ -81,6 +82,11 @@ //Rutas de nombres de archivos en catálogo Route::resource('catalog-name-imgs', CatalogNameImgController::class); + + //Ruta de encriptación de RepuveService + Route::get('repuve-credentials', [SettingsController::class, 'show']); + Route::put('repuve-credentials', [SettingsController::class, 'update']); + }); /** Rutas públicas */