fix(api): hide the legacy password quoting flag of KeyDB and Dragonfly

legacy_password_quoting is internal start-command state. Add it to the
hidden fields of both models, so the database API does not return it.
This commit is contained in:
Andras Bacsai
2026-10-02 17:03:55 +02:00
parent 2f3a5088ee
commit a7cc32f249
3 changed files with 45 additions and 0 deletions
+2
View File
@@ -64,6 +64,8 @@ class StandaloneDragonfly extends BaseModel
'dragonfly_password',
'internal_db_url',
'external_db_url',
// Internal start-command state, not part of the API.
'legacy_password_quoting',
];
protected $casts = [
+2
View File
@@ -65,6 +65,8 @@ class StandaloneKeydb extends BaseModel
'keydb_password',
'internal_db_url',
'external_db_url',
// Internal start-command state, not part of the API.
'legacy_password_quoting',
];
protected $casts = [
@@ -0,0 +1,41 @@
<?php
use App\Models\Environment;
use App\Models\InstanceSettings;
use App\Models\Project;
use App\Models\Server;
use App\Models\StandaloneDocker;
use App\Models\Team;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\DB;
uses(RefreshDatabase::class);
beforeEach(function () {
InstanceSettings::unguarded(fn () => InstanceSettings::firstOrCreate(['id' => 0], ['is_api_enabled' => true]));
Server::flushIdentityMap();
$this->team = Team::factory()->create();
$user = User::factory()->create();
$this->team->members()->attach($user->id, ['role' => 'owner']);
session(['currentTeam' => $this->team]);
$this->bearerToken = $user->createToken('test-token', ['root'])->plainTextToken;
$server = Server::factory()->create(['team_id' => $this->team->id]);
$this->destination = StandaloneDocker::query()->where('server_id', $server->id)->firstOrFail();
$project = Project::factory()->create(['team_id' => $this->team->id]);
$this->environment = Environment::factory()->create(['project_id' => $project->id]);
});
it('does not return the internal legacy password quoting flag in the database API', function (string $create) {
$database = $create($this->environment->id, $this->destination, []);
DB::table($database->getTable())->where('id', $database->id)->update(['legacy_password_quoting' => true]);
$headers = ['Authorization' => 'Bearer '.$this->bearerToken];
$single = $this->withHeaders($headers)->getJson("/api/v1/databases/{$database->uuid}")->assertOk();
$list = $this->withHeaders($headers)->getJson('/api/v1/databases')->assertOk();
expect($single->json())->not->toHaveKey('legacy_password_quoting')
->and(collect($list->json())->firstWhere('uuid', $database->uuid))->not->toHaveKey('legacy_password_quoting');
})->with(['keydb' => 'create_standalone_keydb', 'dragonfly' => 'create_standalone_dragonfly']);