creating networks wip

This commit is contained in:
2025-04-07 16:39:53 +01:00
parent 32d30e00aa
commit b2070e052d
11 changed files with 108 additions and 19 deletions

View File

@@ -0,0 +1,12 @@
<?php
namespace App\Data\ServerProviders;
class Network
{
public function __construct(
public string $id,
public string $name,
public string $ipRange,
) {}
}

View File

@@ -7,7 +7,7 @@ use App\Enums\Concerns\Arrayable;
enum FirewallRuleType: string
{
use Arrayable;
case ALLOW = 'allow';
case DENY = 'deny';
}

View File

@@ -5,9 +5,7 @@ namespace App\Events\Servers;
use App\Models\Server;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
@@ -17,8 +15,7 @@ class ServerProvisioned
public function __construct(
protected Server $server,
)
{
) {
//
}

View File

@@ -31,10 +31,10 @@ class ProvisionCallback extends Controller
if (! $isValidIp) {
logger('someone tried to callback from an invalid IP');
logger(' server ip: ' . $server->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);
}

View File

@@ -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;

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\Servers;
use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;
class CreateNetworkRequest extends Request implements HasBody
{
use HasJsonBody;
protected Method $method = Method::POST;
public function __construct(
protected ?string $name = null,
) {}
protected function defaultBody(): array
{
return [
'name' => $this->name,
];
}
public function resolveEndpoint(): string
{
return '/networks';
}
}

View File

@@ -0,0 +1,31 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\Servers;
use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;
class GetNetworksRequest extends Request implements HasBody
{
use HasJsonBody;
protected Method $method = Method::GET;
public function __construct(
protected ?string $name = null,
) {}
protected function defaultBody(): array
{
return [
'name' => $this->name,
];
}
public function resolveEndpoint(): string
{
return '/networks';
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}