diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php index d3991b14b..3c21300b9 100644 --- a/app/Http/Controllers/Api/DatabasesController.php +++ b/app/Http/Controllers/Api/DatabasesController.php @@ -37,7 +37,7 @@ private function exposeFileStorageContentIfAllowed(LocalFileVolume|LocalPersiste return $storage; } - private function removeSensitiveData($database) + private function removeSensitiveData($database, bool $loadNestedServerSecrets = false) { $database->makeHidden([ 'id', @@ -60,11 +60,51 @@ private function removeSensitiveData($database) 'mariadb_root_password', ]); $this->exposeNestedServerSecrets($database); + } else { + $this->hideNestedServerSecrets($database, $loadNestedServerSecrets); } return serializeApiResponse($database); } + private function hideNestedServerSecrets(Model $model, bool $loadRelations = false): void + { + if ($loadRelations) { + $server = data_get($model, 'destination.server'); + } else { + if (! $model->relationLoaded('destination')) { + return; + } + + $destination = $model->getRelation('destination'); + if (! $destination || ! $destination->relationLoaded('server')) { + return; + } + + $server = $destination->getRelation('server'); + } + + if (! $server) { + return; + } + + $server->makeHidden([ + 'logdrain_axiom_api_key', + 'logdrain_newrelic_license_key', + ]); + + if ($loadRelations || $server->relationLoaded('settings')) { + $server->settings->makeHidden([ + 'sentinel_token', + 'sentinel_custom_url', + 'logdrain_newrelic_license_key', + 'logdrain_axiom_api_key', + 'logdrain_custom_config', + 'logdrain_custom_config_parser', + ]); + } + } + /** * Expose sensitive fields on eager-loaded nested Server + ServerSetting * relations for callers with the `read:sensitive` or `root` token ability. @@ -276,7 +316,7 @@ public function database_by_uuid(Request $request) $this->authorize('view', $database); - return response()->json($this->removeSensitiveData($database)); + return response()->json($this->removeSensitiveData($database, loadNestedServerSecrets: true)); } #[OA\Patch(