@@ -50,22 +50,22 @@ class Email extends Component
|
|||||||
public ?int $smtpTimeout = null;
|
public ?int $smtpTimeout = null;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsTest;
|
public bool $smtpNotificationsTest = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsDeployments;
|
public bool $smtpNotificationsDeployments = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsStatusChanges;
|
public bool $smtpNotificationsStatusChanges = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsDatabaseBackups;
|
public bool $smtpNotificationsDatabaseBackups = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsScheduledTasks;
|
public bool $smtpNotificationsScheduledTasks = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $smtpNotificationsServerDiskUsage;
|
public bool $smtpNotificationsServerDiskUsage = false;
|
||||||
|
|
||||||
#[Validate(['boolean'])]
|
#[Validate(['boolean'])]
|
||||||
public bool $resendEnabled;
|
public bool $resendEnabled;
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ class BackupEdit extends Component
|
|||||||
#[Validate(['required', 'boolean'])]
|
#[Validate(['required', 'boolean'])]
|
||||||
public bool $saveS3 = false;
|
public bool $saveS3 = false;
|
||||||
|
|
||||||
#[Validate(['required', 'integer'])]
|
#[Validate(['nullable', 'integer'])]
|
||||||
public int $s3StorageId = 1;
|
public ?int $s3StorageId = 1;
|
||||||
|
|
||||||
#[Validate(['nullable', 'string'])]
|
#[Validate(['nullable', 'string'])]
|
||||||
public ?string $databasesToBackup = null;
|
public ?string $databasesToBackup = null;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace App\Livewire\Server;
|
|||||||
use App\Actions\Server\StartSentinel;
|
use App\Actions\Server\StartSentinel;
|
||||||
use App\Actions\Server\StopSentinel;
|
use App\Actions\Server\StopSentinel;
|
||||||
use App\Models\Server;
|
use App\Models\Server;
|
||||||
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ class Show extends Component
|
|||||||
public string $name;
|
public string $name;
|
||||||
|
|
||||||
#[Validate(['nullable'])]
|
#[Validate(['nullable'])]
|
||||||
public ?string $description;
|
public ?string $description = null;
|
||||||
|
|
||||||
#[Validate(['required'])]
|
#[Validate(['required'])]
|
||||||
public string $ip;
|
public string $ip;
|
||||||
@@ -31,7 +32,7 @@ class Show extends Component
|
|||||||
public ?string $validationLogs = null;
|
public ?string $validationLogs = null;
|
||||||
|
|
||||||
#[Validate(['nullable', 'url'])]
|
#[Validate(['nullable', 'url'])]
|
||||||
public ?string $wildcardDomain;
|
public ?string $wildcardDomain = null;
|
||||||
|
|
||||||
#[Validate(['required'])]
|
#[Validate(['required'])]
|
||||||
public bool $isReachable;
|
public bool $isReachable;
|
||||||
@@ -55,7 +56,7 @@ class Show extends Component
|
|||||||
public string $sentinelToken;
|
public string $sentinelToken;
|
||||||
|
|
||||||
#[Validate(['nullable'])]
|
#[Validate(['nullable'])]
|
||||||
public ?string $sentinelUpdatedAt;
|
public ?string $sentinelUpdatedAt = null;
|
||||||
|
|
||||||
#[Validate(['required', 'integer', 'min:1'])]
|
#[Validate(['required', 'integer', 'min:1'])]
|
||||||
public int $sentinelMetricsRefreshRateSeconds;
|
public int $sentinelMetricsRefreshRateSeconds;
|
||||||
@@ -67,7 +68,7 @@ class Show extends Component
|
|||||||
public int $sentinelPushIntervalSeconds;
|
public int $sentinelPushIntervalSeconds;
|
||||||
|
|
||||||
#[Validate(['nullable', 'url'])]
|
#[Validate(['nullable', 'url'])]
|
||||||
public ?string $sentinelCustomUrl;
|
public ?string $sentinelCustomUrl = null;
|
||||||
|
|
||||||
#[Validate(['required'])]
|
#[Validate(['required'])]
|
||||||
public bool $isSentinelEnabled;
|
public bool $isSentinelEnabled;
|
||||||
@@ -78,6 +79,7 @@ class Show extends Component
|
|||||||
#[Validate(['required'])]
|
#[Validate(['required'])]
|
||||||
public string $serverTimezone;
|
public string $serverTimezone;
|
||||||
|
|
||||||
|
#[Locked]
|
||||||
public array $timezones;
|
public array $timezones;
|
||||||
|
|
||||||
public function getListeners()
|
public function getListeners()
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
timeout: 2s
|
timeout: 2s
|
||||||
soketi:
|
soketi:
|
||||||
image: 'ghcr.io/coollabsio/coolify-realtime:1.0.3'
|
image: 'ghcr.io/coollabsio/coolify-realtime:1.0.4'
|
||||||
ports:
|
ports:
|
||||||
- "${SOKETI_PORT:-6001}:6001"
|
- "${SOKETI_PORT:-6001}:6001"
|
||||||
- "6002:6002"
|
- "6002:6002"
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
timeout: 2s
|
timeout: 2s
|
||||||
soketi:
|
soketi:
|
||||||
image: 'ghcr.io/coollabsio/coolify-realtime:1.0.0'
|
image: 'ghcr.io/coollabsio/coolify-realtime:1.0.4'
|
||||||
pull_policy: always
|
pull_policy: always
|
||||||
container_name: coolify-realtime
|
container_name: coolify-realtime
|
||||||
restart: always
|
restart: always
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"coolify": {
|
"coolify": {
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.360"
|
"version": "4.0.0-beta.362"
|
||||||
},
|
},
|
||||||
"nightly": {
|
"nightly": {
|
||||||
"version": "4.0.0-beta.362"
|
"version": "4.0.0-beta.363"
|
||||||
},
|
},
|
||||||
"helper": {
|
"helper": {
|
||||||
"version": "1.0.3"
|
"version": "1.0.3"
|
||||||
|
|||||||
@@ -148,7 +148,7 @@
|
|||||||
<li>
|
<li>
|
||||||
<a title="Destinations"
|
<a title="Destinations"
|
||||||
class="{{ request()->is('destination*') ? 'menu-item-active menu-item' : 'menu-item' }}"
|
class="{{ request()->is('destination*') ? 'menu-item-active menu-item' : 'menu-item' }}"
|
||||||
href="{{ route('destination.index') }}" wire:navigate>
|
href="{{ route('destination.index') }}">
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24">
|
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 24 24">
|
||||||
<path fill="none" stroke="currentColor" stroke-linecap="round"
|
<path fill="none" stroke="currentColor" stroke-linecap="round"
|
||||||
|
|||||||
@@ -3,15 +3,15 @@
|
|||||||
<div class="subtitle">Get notified about your infrastructure.</div>
|
<div class="subtitle">Get notified about your infrastructure.</div>
|
||||||
<div class="navbar-main">
|
<div class="navbar-main">
|
||||||
<nav class="flex items-center gap-6 min-h-10">
|
<nav class="flex items-center gap-6 min-h-10">
|
||||||
<a wire:navigate class="{{ request()->routeIs('notifications.email') ? 'dark:text-white' : '' }}"
|
<a class="{{ request()->routeIs('notifications.email') ? 'dark:text-white' : '' }}"
|
||||||
href="{{ route('notifications.email') }}">
|
href="{{ route('notifications.email') }}">
|
||||||
<button>Email</button>
|
<button>Email</button>
|
||||||
</a>
|
</a>
|
||||||
<a wire:navigate class="{{ request()->routeIs('notifications.telegram') ? 'dark:text-white' : '' }}"
|
<a class="{{ request()->routeIs('notifications.telegram') ? 'dark:text-white' : '' }}"
|
||||||
href="{{ route('notifications.telegram') }}">
|
href="{{ route('notifications.telegram') }}">
|
||||||
<button>Telegram</button>
|
<button>Telegram</button>
|
||||||
</a>
|
</a>
|
||||||
<a wire:navigate class="{{ request()->routeIs('notifications.discord') ? 'dark:text-white' : '' }}"
|
<a class="{{ request()->routeIs('notifications.discord') ? 'dark:text-white' : '' }}"
|
||||||
href="{{ route('notifications.discord') }}">
|
href="{{ route('notifications.discord') }}">
|
||||||
<button>Discord</button>
|
<button>Discord</button>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -1,29 +1,29 @@
|
|||||||
<div class="flex flex-col items-start gap-2 min-w-fit">
|
<div class="flex flex-col items-start gap-2 min-w-fit">
|
||||||
<a class="menu-item {{ $activeMenu === 'general' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'general' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.show', ['server_uuid' => $server->uuid]) }}" wire:navigate>General</a>
|
href="{{ route('server.show', ['server_uuid' => $server->uuid]) }}">General</a>
|
||||||
@if ($server->isFunctional())
|
@if ($server->isFunctional())
|
||||||
<a class="menu-item {{ $activeMenu === 'advanced' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'advanced' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.advanced', ['server_uuid' => $server->uuid]) }}" wire:navigate>Advanced
|
href="{{ route('server.advanced', ['server_uuid' => $server->uuid]) }}">Advanced
|
||||||
</a>
|
</a>
|
||||||
@endif
|
@endif
|
||||||
<a class="menu-item {{ $activeMenu === 'private-key' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'private-key' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.private-key', ['server_uuid' => $server->uuid]) }}" wire:navigate>Private Key
|
href="{{ route('server.private-key', ['server_uuid' => $server->uuid]) }}">Private Key
|
||||||
</a>
|
</a>
|
||||||
@if ($server->isFunctional())
|
@if ($server->isFunctional())
|
||||||
<a class="menu-item {{ $activeMenu === 'cloudflare-tunnels' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'cloudflare-tunnels' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.cloudflare-tunnels', ['server_uuid' => $server->uuid]) }}" wire:navigate>Cloudflare
|
href="{{ route('server.cloudflare-tunnels', ['server_uuid' => $server->uuid]) }}">Cloudflare
|
||||||
Tunnels</a>
|
Tunnels</a>
|
||||||
<a class="menu-item {{ $activeMenu === 'destinations' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'destinations' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.destinations', ['server_uuid' => $server->uuid]) }}" wire:navigate>Destinations
|
href="{{ route('server.destinations', ['server_uuid' => $server->uuid]) }}">Destinations
|
||||||
</a>
|
</a>
|
||||||
<a class="menu-item {{ $activeMenu === 'log-drains' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'log-drains' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.log-drains', ['server_uuid' => $server->uuid]) }}" wire:navigate>Log
|
href="{{ route('server.log-drains', ['server_uuid' => $server->uuid]) }}">Log
|
||||||
Drains</a>
|
Drains</a>
|
||||||
<a class="menu-item {{ $activeMenu === 'metrics' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'metrics' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.charts', ['server_uuid' => $server->uuid]) }}">Metrics</a>
|
href="{{ route('server.charts', ['server_uuid' => $server->uuid]) }}">Metrics</a>
|
||||||
@endif
|
@endif
|
||||||
@if (!$server->isLocalhost())
|
@if (!$server->isLocalhost())
|
||||||
<a class="menu-item {{ $activeMenu === 'danger' ? 'menu-item-active' : '' }}"
|
<a class="menu-item {{ $activeMenu === 'danger' ? 'menu-item-active' : '' }}"
|
||||||
href="{{ route('server.delete', ['server_uuid' => $server->uuid]) }}" wire:navigate>Danger</a>
|
href="{{ route('server.delete', ['server_uuid' => $server->uuid]) }}">Danger</a>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,8 +16,7 @@
|
|||||||
@forelse ($server->destinations() as $destination)
|
@forelse ($server->destinations() as $destination)
|
||||||
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
|
@if ($destination->getMorphClass() === 'App\Models\StandaloneDocker')
|
||||||
<a class="box group"
|
<a class="box group"
|
||||||
href="{{ route('destination.show', ['destination_uuid' => data_get($destination, 'uuid')]) }}"
|
href="{{ route('destination.show', ['destination_uuid' => data_get($destination, 'uuid')]) }}">
|
||||||
wire:navigate>
|
|
||||||
<div class="flex flex-col mx-6">
|
<div class="flex flex-col mx-6">
|
||||||
<div class="box-title">{{ $destination->name }}</div>
|
<div class="box-title">{{ $destination->name }}</div>
|
||||||
<div class="box-description">Server: {{ $destination->server->name }}</div>
|
<div class="box-description">Server: {{ $destination->server->name }}</div>
|
||||||
@@ -26,8 +25,7 @@
|
|||||||
@endif
|
@endif
|
||||||
@if ($destination->getMorphClass() === 'App\Models\SwarmDocker')
|
@if ($destination->getMorphClass() === 'App\Models\SwarmDocker')
|
||||||
<a class="box group"
|
<a class="box group"
|
||||||
href="{{ route('destination.show', ['destination_uuid' => data_get($destination, 'uuid')]) }}"
|
href="{{ route('destination.show', ['destination_uuid' => data_get($destination, 'uuid')]) }}">
|
||||||
wire:navigate>
|
|
||||||
<div class="flex flex-col mx-6">
|
<div class="flex flex-col mx-6">
|
||||||
<div class="box-title">{{ $destination->name }}</div>
|
<div class="box-title">{{ $destination->name }}</div>
|
||||||
<div class="box-description">server: {{ $destination->server->name }}</div>
|
<div class="box-description">server: {{ $destination->server->name }}</div>
|
||||||
|
|||||||
@@ -98,12 +98,6 @@
|
|||||||
<x-forms.input id="allowed_ips" label="Allowed IPs"
|
<x-forms.input id="allowed_ips" label="Allowed IPs"
|
||||||
helper="Allowed IP lists for the API. A comma separated list of IPs. Empty means you allow from everywhere."
|
helper="Allowed IP lists for the API. A comma separated list of IPs. Empty means you allow from everywhere."
|
||||||
placeholder="1.1.1.1,8.8.8.8" />
|
placeholder="1.1.1.1,8.8.8.8" />
|
||||||
|
|
||||||
<h4 class="pt-6">Advanced</h4>
|
|
||||||
<div class="text-right md:w-96">
|
|
||||||
<x-forms.checkbox instantSave id="is_registration_enabled" label="Registration Allowed" />
|
|
||||||
<x-forms.checkbox instantSave id="do_not_track" label="Do Not Track" />
|
|
||||||
</div>
|
|
||||||
<h4 class="pt-6">Update</h4>
|
<h4 class="pt-6">Update</h4>
|
||||||
<div class="text-right md:w-96">
|
<div class="text-right md:w-96">
|
||||||
@if (!is_null(env('AUTOUPDATE', null)))
|
@if (!is_null(env('AUTOUPDATE', null)))
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="flex flex-wrap gap-2 ">
|
<div class="flex flex-wrap gap-2 ">
|
||||||
@forelse ($tags as $oneTag)
|
@forelse ($tags as $oneTag)
|
||||||
<a wire:navigate :class="{{ $tag?->id == $oneTag->id }} && 'dark:bg-coollabs hover:bg-coollabs-100'"
|
<a :class="{{ $tag?->id == $oneTag->id }} && 'dark:bg-coollabs hover:bg-coollabs-100'"
|
||||||
class="w-64 box-without-bg dark:bg-coolgray-100 dark:text-white font-bold"
|
class="w-64 box-without-bg dark:bg-coolgray-100 dark:text-white font-bold"
|
||||||
href="{{ route('tags.show', ['tagName' => $oneTag->name]) }}">{{ $oneTag->name }}</a>
|
href="{{ route('tags.show', ['tagName' => $oneTag->name]) }}">{{ $oneTag->name }}</a>
|
||||||
@empty
|
@empty
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"coolify": {
|
"coolify": {
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.360"
|
"version": "4.0.0-beta.362"
|
||||||
},
|
},
|
||||||
"nightly": {
|
"nightly": {
|
||||||
"version": "4.0.0-beta.362"
|
"version": "4.0.0-beta.363"
|
||||||
},
|
},
|
||||||
"helper": {
|
"helper": {
|
||||||
"version": "1.0.3"
|
"version": "1.0.3"
|
||||||
|
|||||||
Reference in New Issue
Block a user