From 4c417be38c8d9b7730ad9b5bcbe3c118e02ead62 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Thu, 26 Feb 2026 14:30:18 -0600 Subject: [PATCH] =?UTF-8?q?feat:=20actualiza=20controladores=20y=20solicit?= =?UTF-8?q?udes=20para=20unificar=20permisos=20y=20agrega=20m=C3=A9todo=20?= =?UTF-8?q?de=20desencriptaci=C3=B3n=20en=20SettingsController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Repuve/ModuleController.php | 10 ++-- .../Controllers/System/SettingsController.php | 47 ++++++++++++++++++- .../Requests/Repuve/ModuleStoreRequest.php | 2 +- .../Requests/Repuve/ModuleUpdateRequest.php | 2 +- database/seeders/RoleSeeder.php | 14 ++++-- docker-compose.yml | 4 +- routes/api.php | 1 + 7 files changed, 66 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/Repuve/ModuleController.php b/app/Http/Controllers/Repuve/ModuleController.php index 1bee4db..028cbb3 100644 --- a/app/Http/Controllers/Repuve/ModuleController.php +++ b/app/Http/Controllers/Repuve/ModuleController.php @@ -21,12 +21,12 @@ class ModuleController extends Controller implements HasMiddleware public static function middleware(): array { return [ - self::can('modules.index', ['index']), - self::can('modules.show', ['show']), - self::can('modules.destroy', ['destroy']), - self::can('modules.toggle_status', ['toggleStatus']), + self::can('module.index', ['index']), + self::can('module.show', ['show']), + self::can('module.destroy', ['destroy']), + self::can('module.toggle_status', ['toggleStatus']), ]; - } + } /** * Listar módulos existentes diff --git a/app/Http/Controllers/System/SettingsController.php b/app/Http/Controllers/System/SettingsController.php index 82ca53f..a166751 100644 --- a/app/Http/Controllers/System/SettingsController.php +++ b/app/Http/Controllers/System/SettingsController.php @@ -8,13 +8,19 @@ use App\Helpers\EncryptionHelper; use App\Enums\SettingTypeEk; use Illuminate\Http\Request; - +use Illuminate\Routing\Controllers\HasMiddleware; /** * Descripción */ -class SettingsController extends Controller +class SettingsController extends Controller implements HasMiddleware { + public static function middleware(): array + { + return [ + self::can('system.settings', ['show', 'update']), + ]; + } public function show() { @@ -36,11 +42,48 @@ public function show() 'success' => true, 'data' => [ 'username' => $credentials['username'] ?? '', + 'password' => $credentials['password'] ?? '', 'password_exists' => !empty($credentials['password']) ] ]); } + public function decrypt(Request $request) + { + $request->validate([ + 'value' => 'required|string', + 'app_key' => 'nullable|string', + ]); + + if ($request->filled('app_key')) { + try { + $rawKey = base64_decode(str_replace('base64:', '', $request->app_key)); + $encrypter = new \Illuminate\Encryption\Encrypter($rawKey, 'AES-256-CBC'); + $credentials = json_decode($encrypter->decryptString($request->value), true); + } catch (\Exception $e) { + return response()->json([ + 'success' => false, + 'message' => 'No se pudo desencriptar con el APP_KEY proporcionado', + 'error' => $e->getMessage(), + ], 422); + } + } else { + $credentials = EncryptionHelper::decryptData($request->value); + } + + if (!$credentials) { + return response()->json([ + 'success' => false, + 'message' => 'No se pudo desencriptar el valor proporcionado', + ], 422); + } + + return response()->json([ + 'success' => true, + 'data' => $credentials, + ]); + } + public function update(Request $request) { $validated = $request->validate([ diff --git a/app/Http/Requests/Repuve/ModuleStoreRequest.php b/app/Http/Requests/Repuve/ModuleStoreRequest.php index e01b3bc..94c39bb 100644 --- a/app/Http/Requests/Repuve/ModuleStoreRequest.php +++ b/app/Http/Requests/Repuve/ModuleStoreRequest.php @@ -9,7 +9,7 @@ class ModuleStoreRequest extends FormRequest { public function authorize(): bool { - return auth()->user()->can('modules.create'); + return auth()->user()->can('module.create'); } public function rules(): array diff --git a/app/Http/Requests/Repuve/ModuleUpdateRequest.php b/app/Http/Requests/Repuve/ModuleUpdateRequest.php index f457727..c3abb3e 100644 --- a/app/Http/Requests/Repuve/ModuleUpdateRequest.php +++ b/app/Http/Requests/Repuve/ModuleUpdateRequest.php @@ -9,7 +9,7 @@ class ModuleUpdateRequest extends FormRequest { public function authorize(): bool { - return auth()->user()->can('modules.edit'); + return auth()->user()->can('module.edit'); } public function rules(): array diff --git a/database/seeders/RoleSeeder.php b/database/seeders/RoleSeeder.php index 513a3c2..2f43b26 100644 --- a/database/seeders/RoleSeeder.php +++ b/database/seeders/RoleSeeder.php @@ -58,9 +58,10 @@ public function run(): void $moduleCreate, $moduleEdit, $moduleDestroy - ] = $this->onCRUD('modules', $modules, 'api'); + ] = $this->onCRUD('module', $modules, 'api'); - $moduleToggleStatus = $this->onPermission('modules.toggle_status', 'Cambiar estado del módulo', $modules, 'api'); + $moduleShow = $this->onPermission('module.show', 'Ver módulo', $modules, 'api'); + $moduleToggleStatus = $this->onPermission('module.toggle_status', 'Cambiar estado del módulo', $modules, 'api'); // === DISPOSITIVOS MÓVILES === $devices = PermissionType::firstOrCreate(['name' => 'Dispositivos Móviles']); @@ -86,6 +87,11 @@ public function run(): void $cancellationTagNoAsignado = $this->onPermission('cancellations.cancel_tag_no_asignado', 'Cancelar constancia no asignada', $cancellations, 'api'); + // === SISTEMA === + $system = PermissionType::firstOrCreate(['name' => 'Sistema']); + + $systemSettings = $this->onPermission('system.settings', 'Configurar credenciales REPUVE', $system, 'api'); + // === ACTUALIZAR REGISTRO === $updates = PermissionType::firstOrCreate(['name' => 'Actualizar Registro']); @@ -159,9 +165,11 @@ public function run(): void // Roles $roleIndex, $roleCreate, $roleEdit, $roleDestroy, $rolePermissions, // Módulos - $moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleToggleStatus, + $moduleIndex, $moduleCreate, $moduleEdit, $moduleDestroy, $moduleShow, $moduleToggleStatus, // Dispositivos $deviceIndex, $deviceCreate, $deviceEdit, $deviceDestroy, $deviceToggleStatus, + // Sistema + $systemSettings, // Inscripciones $inscriptionVehicle, $inscriptionSearch, $inscriptionSearchNational, // Cancelaciones diff --git a/docker-compose.yml b/docker-compose.yml index 7d5bdd3..ff73ec7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -50,7 +50,7 @@ services: MYSQL_PASSWORD: ${DB_PASSWORD} MYSQL_USER: ${DB_USERNAME} ports: - - ${DB_PORT}:${DB_PORT} + - ${DB_PORT}:3306 volumes: - mysql_data:/var/lib/mysql networks: @@ -70,4 +70,4 @@ volumes: networks: repuve-network: - driver: bridge \ No newline at end of file + driver: bridge diff --git a/routes/api.php b/routes/api.php index ad5a352..98a4916 100644 --- a/routes/api.php +++ b/routes/api.php @@ -90,6 +90,7 @@ //Ruta de encriptación de RepuveService Route::get('repuve-credentials', [SettingsController::class, 'show']); Route::put('repuve-credentials', [SettingsController::class, 'update']); + Route::post('repuve-credentials/decrypt', [SettingsController::class, 'decrypt']); });