diff --git a/app/Data/ServerProviders/Network.php b/app/Data/ServerProviders/Network.php new file mode 100644 index 0000000..102e441 --- /dev/null +++ b/app/Data/ServerProviders/Network.php @@ -0,0 +1,12 @@ +ipv4); - logger(' server ipv6: ' . $server->ipv6); - logger(' callback ip: ' . $request->ip()); - logger(' server id: ' . $server->id); + logger(' server ip: '.$server->ipv4); + logger(' server ipv6: '.$server->ipv6); + logger(' callback ip: '.$request->ip()); + logger(' server id: '.$server->id); return response('Unauthorized', 401); } diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index a600fc8..2c946a7 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers; use App\Actions\GenerateRandomSlug; -use App\Actions\GetProviderService; use App\Enums\ServerStatus; use App\Jobs\Servers\WaitForServerToConnect; use App\Models\Organisation; diff --git a/app/Http/Integrations/Requests/Hetzner/Networks/CreateNetworkRequest.php b/app/Http/Integrations/Requests/Hetzner/Networks/CreateNetworkRequest.php new file mode 100644 index 0000000..2e5a287 --- /dev/null +++ b/app/Http/Integrations/Requests/Hetzner/Networks/CreateNetworkRequest.php @@ -0,0 +1,31 @@ + $this->name, + ]; + } + + public function resolveEndpoint(): string + { + return '/networks'; + } +} diff --git a/app/Http/Integrations/Requests/Hetzner/Networks/GetNetworksRequest.php b/app/Http/Integrations/Requests/Hetzner/Networks/GetNetworksRequest.php new file mode 100644 index 0000000..e4204d5 --- /dev/null +++ b/app/Http/Integrations/Requests/Hetzner/Networks/GetNetworksRequest.php @@ -0,0 +1,31 @@ + $this->name, + ]; + } + + public function resolveEndpoint(): string + { + return '/networks'; + } +} diff --git a/app/Services/ServerProviders/HetznerService.php b/app/Services/ServerProviders/HetznerService.php index d1772c9..cdc4c42 100644 --- a/app/Services/ServerProviders/HetznerService.php +++ b/app/Services/ServerProviders/HetznerService.php @@ -5,11 +5,13 @@ namespace App\Services\ServerProviders; use App\Data\ServerProviders\CreatedServer; use App\Data\ServerProviders\Image; use App\Data\ServerProviders\Location; +use App\Data\ServerProviders\Network; use App\Data\ServerProviders\ServerType; use App\Http\Integrations\Connectors\HetznerConnector; use App\Http\Integrations\Requests\Hetzner\Images\GetImagesRequest; use App\Http\Integrations\Requests\Hetzner\Locations\GetLocationsRequest; use App\Http\Integrations\Requests\Hetzner\Servers\CreateServerRequest; +use App\Http\Integrations\Requests\Hetzner\Servers\GetNetworksRequest; use App\Http\Integrations\Requests\Hetzner\ServerTypes\GetServerTypesRequest; use App\Models\Provider; use Exception; @@ -107,4 +109,27 @@ class HetznerService extends ServerProviderService ); })->where('osVersion', '!=', 'unknown')->values(); } + + public function findNetwork(string $name): ?Network + { + $response = $this->connector->send(new GetNetworksRequest( + name: $name, + )); + + if ($response->status() !== 200) { + throw new Exception('Failed to fetch networks from Hetzner'); + } + + $network = collect($response->json('networks'))->where('name', $name)->first(); + + if ($network) { + return new Network( + id: $network['id'], + name: $network['name'], + ipRange: $network['ip_range'], + ); + } + + return null; + } } diff --git a/app/Services/ServerProviders/ServerProviderService.php b/app/Services/ServerProviders/ServerProviderService.php index cf9af0d..7c35ca5 100644 --- a/app/Services/ServerProviders/ServerProviderService.php +++ b/app/Services/ServerProviders/ServerProviderService.php @@ -3,6 +3,7 @@ namespace App\Services\ServerProviders; use App\Data\ServerProviders\CreatedServer; +use App\Data\ServerProviders\Network; use Illuminate\Support\Collection; use Saloon\Http\Connector; @@ -22,4 +23,6 @@ abstract class ServerProviderService abstract public function getLocations(): Collection; abstract public function getImages(): Collection; + + abstract public function findNetwork(string $name): ?Network; } diff --git a/routes/web.php b/routes/web.php index 8055d73..5985b72 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,7 +1,5 @@ name('home'); diff --git a/tests/Feature/ServerControllerTest.php b/tests/Feature/ServerControllerTest.php index 4daf4a9..a9b4a87 100644 --- a/tests/Feature/ServerControllerTest.php +++ b/tests/Feature/ServerControllerTest.php @@ -1,11 +1,8 @@