From 03be2d3ee2b075b6e7d8f42efa62b24376ed1ade Mon Sep 17 00:00:00 2001 From: Jamie Wood Date: Fri, 21 Mar 2025 09:26:51 +0000 Subject: [PATCH] Add API endpoint to update site aliases (#551) --- app/Http/Controllers/API/SiteController.php | 19 ++++++++++++++++ tests/Feature/API/SitesTest.php | 24 +++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/app/Http/Controllers/API/SiteController.php b/app/Http/Controllers/API/SiteController.php index dda0bdb..ea0e46b 100644 --- a/app/Http/Controllers/API/SiteController.php +++ b/app/Http/Controllers/API/SiteController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\API; use App\Actions\Site\CreateSite; +use App\Actions\Site\UpdateAliases; use App\Actions\Site\UpdateLoadBalancer; use App\Enums\LoadBalancerMethod; use App\Enums\SiteType; @@ -23,6 +24,7 @@ use Spatie\RouteAttributes\Attributes\Middleware; use Spatie\RouteAttributes\Attributes\Post; use Spatie\RouteAttributes\Attributes\Prefix; +use Spatie\RouteAttributes\Attributes\Put; #[Prefix('api/projects/{project}/servers/{server}/sites')] #[Middleware(['auth:sanctum', 'can-see-project'])] @@ -113,6 +115,23 @@ public function updateLoadBalancer(Request $request, Project $project, Server $s return new SiteResource($site); } + #[Put('{site}/aliases', name: 'api.projects.servers.sites.aliases', middleware: 'ability:write')] + #[Endpoint(title: 'aliases', description: 'Update aliases.')] + #[BodyParam(name: 'aliases', type: 'array', description: 'Array of aliases')] + #[Response(status: 200)] + public function updateAliases(Request $request, Project $project, Server $server, Site $site): SiteResource + { + $this->authorize('update', [$site, $server]); + + $this->validateRoute($project, $server, $site); + + $this->validate($request, UpdateAliases::rules()); + + app(UpdateAliases::class)->update($site, $request->all()); + + return new SiteResource($site); + } + private function validateRoute(Project $project, Server $server, ?Site $site = null): void { if ($project->id !== $server->project_id) { diff --git a/tests/Feature/API/SitesTest.php b/tests/Feature/API/SitesTest.php index 1a6134b..978e773 100644 --- a/tests/Feature/API/SitesTest.php +++ b/tests/Feature/API/SitesTest.php @@ -118,6 +118,30 @@ public function test_delete_site(): void ->assertNoContent(); } + public function test_update_aliases(): void + { + SSH::fake(); + + Sanctum::actingAs($this->user, ['read', 'write']); + + /** @var Site $site */ + $site = Site::factory()->create([ + 'server_id' => $this->server->id, + ]); + + $this->json('PUT', route('api.projects.servers.sites.aliases', [ + 'project' => $this->server->project, + 'server' => $this->server, + 'site' => $site, + ]), [ + 'aliases' => ['example.com', 'example.net'], + ]) + ->assertSuccessful() + ->assertJsonFragment([ + 'aliases' => ['example.com', 'example.net'], + ]); + } + public function test_update_load_balancer(): void { SSH::fake();