diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index 19d22ae21..2ed3ee454 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -218,7 +218,7 @@ class Kernel extends ConsoleKernel
}
}
if ($service) {
- if (str($service->status())->contains('running') === false) {
+ if (str($service->status)->contains('running') === false) {
continue;
}
}
diff --git a/app/Http/Controllers/Api/ResourcesController.php b/app/Http/Controllers/Api/ResourcesController.php
index 4180cef9a..ad12c83ab 100644
--- a/app/Http/Controllers/Api/ResourcesController.php
+++ b/app/Http/Controllers/Api/ResourcesController.php
@@ -53,11 +53,7 @@ class ResourcesController extends Controller
$resources = $resources->flatten();
$resources = $resources->map(function ($resource) {
$payload = $resource->toArray();
- if ($resource->getMorphClass() === \App\Models\Service::class) {
- $payload['status'] = $resource->status();
- } else {
- $payload['status'] = $resource->status;
- }
+ $payload['status'] = $resource->status;
$payload['type'] = $resource->type();
return $payload;
diff --git a/app/Http/Controllers/Api/ServersController.php b/app/Http/Controllers/Api/ServersController.php
index f37040bdd..b1deb5321 100644
--- a/app/Http/Controllers/Api/ServersController.php
+++ b/app/Http/Controllers/Api/ServersController.php
@@ -154,11 +154,7 @@ class ServersController extends Controller
'created_at' => $resource->created_at,
'updated_at' => $resource->updated_at,
];
- if ($resource->type() === 'service') {
- $payload['status'] = $resource->status();
- } else {
- $payload['status'] = $resource->status;
- }
+ $payload['status'] = $resource->status;
return $payload;
});
@@ -237,11 +233,7 @@ class ServersController extends Controller
'created_at' => $resource->created_at,
'updated_at' => $resource->updated_at,
];
- if ($resource->type() === 'service') {
- $payload['status'] = $resource->status();
- } else {
- $payload['status'] = $resource->status;
- }
+ $payload['status'] = $resource->status;
return $payload;
});
diff --git a/app/Http/Controllers/Api/ServicesController.php b/app/Http/Controllers/Api/ServicesController.php
index ed9af8c90..bcaba7107 100644
--- a/app/Http/Controllers/Api/ServicesController.php
+++ b/app/Http/Controllers/Api/ServicesController.php
@@ -1072,7 +1072,7 @@ class ServicesController extends Controller
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
- if (str($service->status())->contains('running')) {
+ if (str($service->status)->contains('running')) {
return response()->json(['message' => 'Service is already running.'], 400);
}
StartService::dispatch($service);
@@ -1150,7 +1150,7 @@ class ServicesController extends Controller
if (! $service) {
return response()->json(['message' => 'Service not found.'], 404);
}
- if (str($service->status())->contains('stopped') || str($service->status())->contains('exited')) {
+ if (str($service->status)->contains('stopped') || str($service->status)->contains('exited')) {
return response()->json(['message' => 'Service is already stopped.'], 400);
}
StopService::dispatch($service);
diff --git a/app/Livewire/Project/Service/Navbar.php b/app/Livewire/Project/Service/Navbar.php
index ee43dc911..22fc1c0d6 100644
--- a/app/Livewire/Project/Service/Navbar.php
+++ b/app/Livewire/Project/Service/Navbar.php
@@ -27,7 +27,7 @@ class Navbar extends Component
public function mount()
{
- if (str($this->service->status())->contains('running') && is_null($this->service->config_hash)) {
+ if (str($this->service->status)->contains('running') && is_null($this->service->config_hash)) {
$this->service->isConfigurationChanged(true);
$this->dispatch('configurationChanged');
}
diff --git a/app/Livewire/SettingsOauth.php b/app/Livewire/SettingsOauth.php
index d5f0be14a..857de1df8 100644
--- a/app/Livewire/SettingsOauth.php
+++ b/app/Livewire/SettingsOauth.php
@@ -35,16 +35,26 @@ class SettingsOauth extends Component
}, []);
}
- private function updateOauthSettings()
+ private function updateOauthSettings(?string $provider = null)
{
- foreach (array_values($this->oauth_settings_map) as &$setting) {
- $setting->save();
+ if ($provider) {
+ $oauth = $this->oauth_settings_map[$provider];
+ if (! $oauth->couldBeEnabled()) {
+ $oauth->update(['enabled' => false]);
+ throw new \Exception('OAuth settings are not complete for '.$oauth->provider.'.
Please fill in all required fields.');
+ }
+ $oauth->save();
+ $this->dispatch('success', 'OAuth settings for '.$oauth->provider.' updated successfully!');
}
}
- public function instantSave()
+ public function instantSave(string $provider)
{
- $this->updateOauthSettings();
+ try {
+ $this->updateOauthSettings($provider);
+ } catch (\Exception $e) {
+ return handleError($e, $this);
+ }
}
public function submit()
diff --git a/app/Models/OauthSetting.php b/app/Models/OauthSetting.php
index c17c318f1..3d82e89f2 100644
--- a/app/Models/OauthSetting.php
+++ b/app/Models/OauthSetting.php
@@ -11,6 +11,8 @@ class OauthSetting extends Model
{
use HasFactory;
+ protected $fillable = ['provider', 'client_id', 'client_secret', 'redirect_uri', 'tenant', 'base_url', 'enabled'];
+
protected function clientSecret(): Attribute
{
return Attribute::make(
@@ -18,4 +20,16 @@ class OauthSetting extends Model
set: fn (?string $value) => empty($value) ? null : Crypt::encryptString($value),
);
}
+
+ public function couldBeEnabled(): bool
+ {
+ switch ($this->provider) {
+ case 'azure':
+ return filled($this->client_id) && filled($this->client_secret) && filled($this->redirect_uri) && filled($this->tenant);
+ case 'authentik':
+ return filled($this->client_id) && filled($this->client_secret) && filled($this->redirect_uri) && filled($this->base_url);
+ default:
+ return filled($this->client_id) && filled($this->client_secret) && filled($this->redirect_uri);
+ }
+ }
}
diff --git a/app/Models/Service.php b/app/Models/Service.php
index 117677d53..5a2690490 100644
--- a/app/Models/Service.php
+++ b/app/Models/Service.php
@@ -46,7 +46,7 @@ class Service extends BaseModel
protected $guarded = [];
- protected $appends = ['server_status'];
+ protected $appends = ['server_status', 'status'];
protected static function booted()
{
@@ -105,12 +105,12 @@ class Service extends BaseModel
public function isRunning()
{
- return (bool) str($this->status())->contains('running');
+ return (bool) str($this->status)->contains('running');
}
public function isExited()
{
- return (bool) str($this->status())->contains('exited');
+ return (bool) str($this->status)->contains('exited');
}
public function type()
@@ -213,7 +213,7 @@ class Service extends BaseModel
instant_remote_process(["docker network rm {$uuid}"], $server, false);
}
- public function status()
+ public function getStatusAttribute()
{
$applications = $this->applications;
$databases = $this->databases;
diff --git a/app/View/Components/Status/Services.php b/app/View/Components/Status/Services.php
index 70db62172..291841854 100644
--- a/app/View/Components/Status/Services.php
+++ b/app/View/Components/Status/Services.php
@@ -17,7 +17,7 @@ class Services extends Component
public string $complexStatus = 'exited',
public bool $showRefreshButton = true
) {
- $this->complexStatus = $service->status();
+ $this->complexStatus = $service->status;
}
/**
diff --git a/resources/views/livewire/project/service/navbar.blade.php b/resources/views/livewire/project/service/navbar.blade.php
index 342c071d4..f268096f8 100644
--- a/resources/views/livewire/project/service/navbar.blade.php
+++ b/resources/views/livewire/project/service/navbar.blade.php
@@ -22,7 +22,7 @@
@if ($service->isDeployable)