mirror of
https://github.com/tiennm99/coolify.git
synced 2026-10-16 10:15:05 +00:00
fix(destination): validate network server pairing
Ensure destination attach and promote operations only accept networks that belong to the selected server, preventing mismatched same-team server/network pairs.
This commit is contained in:
1 parent
579ce3064f
commit
f44ace3965
2 files changed
+24
-2
No files matched your search
@@ -112,7 +112,7 @@ class Destination extends Component
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
|
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
|
||||||
$network = StandaloneDocker::ownedByCurrentTeam()->findOrFail($network_id);
|
$network = StandaloneDocker::ownedByCurrentTeam()->where('server_id', $server->id)->findOrFail($network_id);
|
||||||
$this->authorize('update', $this->resource);
|
$this->authorize('update', $this->resource);
|
||||||
|
|
||||||
$main_destination = $this->resource->destination;
|
$main_destination = $this->resource->destination;
|
||||||
@@ -140,7 +140,7 @@ class Destination extends Component
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
|
$server = Server::ownedByCurrentTeam()->findOrFail($server_id);
|
||||||
$network = StandaloneDocker::ownedByCurrentTeam()->findOrFail($network_id);
|
$network = StandaloneDocker::ownedByCurrentTeam()->where('server_id', $server->id)->findOrFail($network_id);
|
||||||
$this->authorize('update', $this->resource);
|
$this->authorize('update', $this->resource);
|
||||||
|
|
||||||
$this->resource->additional_networks()->attach($network->id, ['server_id' => $server->id]);
|
$this->resource->additional_networks()->attach($network->id, ['server_id' => $server->id]);
|
||||||
|
|||||||
@@ -98,6 +98,16 @@ describe('Destination::addServer GHSA-j395-3pqh-9r5g', function () {
|
|||||||
expect($this->applicationA->fresh()->additional_networks)->toHaveCount(0);
|
expect($this->applicationA->fresh()->additional_networks)->toHaveCount(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('cannot attach own network paired with wrong own server', function () {
|
||||||
|
try {
|
||||||
|
Livewire::test(Destination::class, ['resource' => $this->applicationA])
|
||||||
|
->call('addServer', $this->destinationA2->id, $this->serverA->id);
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
expect($this->applicationA->fresh()->additional_networks)->toHaveCount(0);
|
||||||
|
});
|
||||||
|
|
||||||
test('can attach own team\'s server + network to own application', function () {
|
test('can attach own team\'s server + network to own application', function () {
|
||||||
Livewire::test(Destination::class, ['resource' => $this->applicationA])
|
Livewire::test(Destination::class, ['resource' => $this->applicationA])
|
||||||
->call('addServer', $this->destinationA2->id, $this->serverA2->id);
|
->call('addServer', $this->destinationA2->id, $this->serverA2->id);
|
||||||
@@ -121,4 +131,16 @@ describe('Destination::promote GHSA-j395-3pqh-9r5g', function () {
|
|||||||
|
|
||||||
expect($this->applicationA->fresh()->destination_id)->toBe($originalDestinationId);
|
expect($this->applicationA->fresh()->destination_id)->toBe($originalDestinationId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('cannot promote own network paired with wrong own server', function () {
|
||||||
|
$originalDestinationId = $this->applicationA->destination_id;
|
||||||
|
|
||||||
|
try {
|
||||||
|
Livewire::test(Destination::class, ['resource' => $this->applicationA])
|
||||||
|
->call('promote', $this->destinationA2->id, $this->serverA->id);
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
expect($this->applicationA->fresh()->destination_id)->toBe($originalDestinationId);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
Reference in new issue
Block a user