coolify/app/Actions/Proxy/CheckProxy.php

75 lines
2.7 KiB
PHP
Raw Normal View History

<?php
namespace App\Actions\Proxy;
use App\Models\Server;
use Lorisleiva\Actions\Concerns\AsAction;
class CheckProxy
{
use AsAction;
2023-10-17 19:00:23 +02:00
public function handle(Server $server, $fromUI = false)
{
if (!$server->isFunctional()) {
return false;
}
2024-03-11 15:08:05 +01:00
if ($server->proxyType() === 'NONE') {
return false;
}
2024-04-16 15:42:38 +02:00
['uptime' => $uptime, 'error' => $error] = $server->validateConnection();
if (!$uptime) {
throw new \Exception($error);
}
if (!$server->isProxyShouldRun()) {
2023-10-17 19:00:23 +02:00
if ($fromUI) {
throw new \Exception("Proxy should not run. You selected the Custom Proxy.");
} else {
return false;
}
}
2023-11-29 14:59:06 +01:00
if ($server->isSwarm()) {
$status = getContainerStatus($server, 'coolify-proxy_traefik');
$server->proxy->set('status', $status);
$server->save();
if ($status === 'running') {
return false;
}
return true;
2023-11-29 14:59:06 +01:00
} else {
$status = getContainerStatus($server, 'coolify-proxy');
if ($status === 'running') {
$server->proxy->set('status', 'running');
$server->save();
2023-10-17 19:00:23 +02:00
return false;
}
2024-03-27 18:24:24 +01:00
if ($server->settings->is_cloudflare_tunnel) {
return false;
}
2023-11-29 14:59:06 +01:00
$ip = $server->ip;
if ($server->id === 0) {
$ip = 'host.docker.internal';
}
$connection80 = @fsockopen($ip, '80');
$connection443 = @fsockopen($ip, '443');
$port80 = is_resource($connection80) && fclose($connection80);
$port443 = is_resource($connection443) && fclose($connection443);
if ($port80) {
if ($fromUI) {
throw new \Exception("Port 80 is in use.<br>You must stop the process using this port.<br>Docs: <a target='_blank' href='https://coolify.io/docs'>https://coolify.io/docs</a><br>Discord: <a target='_blank' href='https://coollabs.io/discord'>https://coollabs.io/discord</a>");
2023-11-29 14:59:06 +01:00
} else {
return false;
}
}
if ($port443) {
if ($fromUI) {
throw new \Exception("Port 443 is in use.<br>You must stop the process using this port.<br>Docs: <a target='_blank' href='https://coolify.io/docs'>https://coolify.io/docs</a><br>Discord: <a target='_blank' href='https://coollabs.io/discord'>https://coollabs.io/discord</a>");
2023-11-29 14:59:06 +01:00
} else {
return false;
}
2023-10-17 19:00:23 +02:00
}
2023-11-29 14:59:06 +01:00
return true;
}
}
}