diff --git a/app/Http/Livewire/Notifications/DiscordSettings.php b/app/Http/Livewire/Notifications/DiscordSettings.php index be1c9ba38..cabfcfecc 100644 --- a/app/Http/Livewire/Notifications/DiscordSettings.php +++ b/app/Http/Livewire/Notifications/DiscordSettings.php @@ -10,26 +10,28 @@ class DiscordSettings extends Component { public Team $model; protected $rules = [ - 'model.discord.enabled' => 'nullable|boolean', - 'model.discord.webhook_url' => 'required|url', - 'model.discord_notifications.test' => 'nullable|boolean', - 'model.discord_notifications.deployments' => 'nullable|boolean', - 'model.discord_notifications.status_changes' => 'nullable|boolean', + 'model.discord_enabled' => 'nullable|boolean', + 'model.discord_webhook_url' => 'required|url', + 'model.discord_notifications_test' => 'nullable|boolean', + 'model.discord_notifications_deployments' => 'nullable|boolean', + 'model.discord_notifications_status_changes' => 'nullable|boolean', ]; protected $validationAttributes = [ - 'model.discord.webhook_url' => 'Discord Webhook', + 'model.discord_webhook_url' => 'Discord Webhook', ]; public function instantSave() { try { $this->submit(); } catch (\Exception $e) { - $this->model->discord->enabled = false; + ray($e->getMessage()); + $this->model->discord_enabled = false; $this->validate(); } } public function saveModel() { + ray($this->model); $this->model->save(); if (is_a($this->model, Team::class)) { session(['currentTeam' => $this->model]); @@ -47,4 +49,4 @@ class DiscordSettings extends Component $this->model->notify(new TestNotification('discord')); $this->emit('success', 'Test notification sent.'); } -} +} \ No newline at end of file diff --git a/app/Http/Livewire/Notifications/EmailSettings.php b/app/Http/Livewire/Notifications/EmailSettings.php index 47f5dcb14..31e50ea5a 100644 --- a/app/Http/Livewire/Notifications/EmailSettings.php +++ b/app/Http/Livewire/Notifications/EmailSettings.php @@ -12,37 +12,35 @@ class EmailSettings extends Component public Team $model; protected $rules = [ - 'model.smtp.enabled' => 'nullable|boolean', - 'model.smtp.from_address' => 'required|email', - 'model.smtp.from_name' => 'required', - 'model.smtp.recipients' => 'nullable', - 'model.smtp.host' => 'required', - 'model.smtp.port' => 'required', - 'model.smtp.encryption' => 'nullable', - 'model.smtp.username' => 'nullable', - 'model.smtp.password' => 'nullable', - 'model.smtp.timeout' => 'nullable', - 'model.smtp.test_recipients' => 'nullable', - 'model.smtp_notifications.test' => 'nullable|boolean', - 'model.smtp_notifications.deployments' => 'nullable|boolean', - 'model.smtp_notifications.status_changes' => 'nullable|boolean', + 'model.smtp_enabled' => 'nullable|boolean', + 'model.smtp_from_address' => 'required|email', + 'model.smtp_from_name' => 'required', + 'model.smtp_recipients' => 'nullable', + 'model.smtp_host' => 'required', + 'model.smtp_port' => 'required', + 'model.smtp_encryption' => 'nullable', + 'model.smtp_username' => 'nullable', + 'model.smtp_password' => 'nullable', + 'model.smtp_timeout' => 'nullable', + 'model.smtp_notifications_test' => 'nullable|boolean', + 'model.smtp_notifications_deployments' => 'nullable|boolean', + 'model.smtp_notifications_status_changes' => 'nullable|boolean', ]; protected $validationAttributes = [ - 'model.smtp.from_address' => 'From Address', - 'model.smtp.from_name' => 'From Name', - 'model.smtp.recipients' => 'Recipients', - 'model.smtp.host' => 'Host', - 'model.smtp.port' => 'Port', - 'model.smtp.encryption' => 'Encryption', - 'model.smtp.username' => 'Username', - 'model.smtp.password' => 'Password', - 'model.smtp.test_recipients' => 'Test Recipients', + 'model.smtp_from_address' => 'From Address', + 'model.smtp_from_name' => 'From Name', + 'model.smtp_recipients' => 'Recipients', + 'model.smtp_host' => 'Host', + 'model.smtp_port' => 'Port', + 'model.smtp_encryption' => 'Encryption', + 'model.smtp_username' => 'Username', + 'model.smtp_password' => 'Password', ]; private function decrypt() { - if (data_get($this->model, 'smtp.password')) { + if (data_get($this->model, 'smtp_password')) { try { - $this->model->smtp->password = decrypt($this->model->smtp->password); + $this->model->smtp_password = decrypt($this->model->smtp_password); } catch (\Exception $e) { } } @@ -54,18 +52,17 @@ class EmailSettings extends Component public function copyFromInstanceSettings() { $settings = InstanceSettings::get(); - if ($settings->smtp->enabled) { - $this->model->smtp->enabled = true; - $this->model->smtp->from_address = $settings->smtp->from_address; - $this->model->smtp->from_name = $settings->smtp->from_name; - $this->model->smtp->recipients = $settings->smtp->recipients; - $this->model->smtp->host = $settings->smtp->host; - $this->model->smtp->port = $settings->smtp->port; - $this->model->smtp->encryption = $settings->smtp->encryption; - $this->model->smtp->username = $settings->smtp->username; - $this->model->smtp->password = $settings->smtp->password; - $this->model->smtp->timeout = $settings->smtp->timeout; - $this->model->smtp->test_recipients = $settings->smtp->test_recipients; + if ($settings->smtp_enabled) { + $this->model->smtp_enabled = true; + $this->model->smtp_from_address = $settings->smtp_from_address; + $this->model->smtp_from_name = $settings->smtp_from_name; + $this->model->smtp_recipients = $settings->smtp_recipients; + $this->model->smtp_host = $settings->smtp_host; + $this->model->smtp_port = $settings->smtp_port; + $this->model->smtp_encryption = $settings->smtp_encryption; + $this->model->smtp_username = $settings->smtp_username; + $this->model->smtp_password = $settings->smtp_password; + $this->model->smtp_timeout = $settings->smtp_timeout; $this->saveModel(); } else { $this->emit('error', 'Instance SMTP settings are not enabled.'); @@ -76,14 +73,13 @@ class EmailSettings extends Component $this->resetErrorBag(); $this->validate(); - if ($this->model->smtp->password) { - $this->model->smtp->password = encrypt($this->model->smtp->password); + if ($this->model->smtp_password) { + $this->model->smtp_password = encrypt($this->model->smtp_password); } else { - $this->model->smtp->password = null; + $this->model->smtp_password = null; } - $this->model->smtp->recipients = str_replace(' ', '', $this->model->smtp->recipients); - $this->model->smtp->test_recipients = str_replace(' ', '', $this->model->smtp->test_recipients); + $this->model->smtp_recipients = str_replace(' ', '', $this->model->smtp_recipients); $this->saveModel(); } public function saveModel() @@ -105,8 +101,8 @@ class EmailSettings extends Component try { $this->submit(); } catch (\Exception $e) { - $this->model->smtp->enabled = false; + $this->model->smtp_enabled = false; $this->validate(); } } -} +} \ No newline at end of file diff --git a/app/Http/Livewire/Settings/Email.php b/app/Http/Livewire/Settings/Email.php index 6342ab4f5..5d418d73a 100644 --- a/app/Http/Livewire/Settings/Email.php +++ b/app/Http/Livewire/Settings/Email.php @@ -12,27 +12,27 @@ class Email extends Component public InstanceSettings $settings; protected $rules = [ - 'settings.smtp.enabled' => 'nullable|boolean', - 'settings.smtp.host' => 'required', - 'settings.smtp.port' => 'required|numeric', - 'settings.smtp.encryption' => 'nullable', - 'settings.smtp.username' => 'nullable', - 'settings.smtp.password' => 'nullable', - 'settings.smtp.timeout' => 'nullable', - 'settings.smtp.test_recipients' => 'nullable', - 'settings.smtp.from_address' => 'required|email', - 'settings.smtp.from_name' => 'required', + 'settings.smtp_enabled' => 'nullable|boolean', + 'settings.smtp_host' => 'required', + 'settings.smtp_port' => 'required|numeric', + 'settings.smtp_encryption' => 'nullable', + 'settings.smtp_username' => 'nullable', + 'settings.smtp_password' => 'nullable', + 'settings.smtp_timeout' => 'nullable', + 'settings.smtp_test_recipients' => 'nullable', + 'settings.smtp_from_address' => 'required|email', + 'settings.smtp_from_name' => 'required', ]; protected $validationAttributes = [ - 'settings.smtp.from_address' => 'From Address', - 'settings.smtp.from_name' => 'From Name', - 'settings.smtp.recipients' => 'Recipients', - 'settings.smtp.host' => 'Host', - 'settings.smtp.port' => 'Port', - 'settings.smtp.encryption' => 'Encryption', - 'settings.smtp.username' => 'Username', - 'settings.smtp.password' => 'Password', - 'settings.smtp.test_recipients' => 'Test Recipients', + 'settings.smtp_from_address' => 'From Address', + 'settings.smtp_from_name' => 'From Name', + 'settings.smtp_recipients' => 'Recipients', + 'settings.smtp_host' => 'Host', + 'settings.smtp_port' => 'Port', + 'settings.smtp_encryption' => 'Encryption', + 'settings.smtp_username' => 'Username', + 'settings.smtp_password' => 'Password', + 'settings.smtp_test_recipients' => 'Test Recipients', ]; public function mount() { @@ -44,7 +44,7 @@ class Email extends Component $this->submit(); $this->emit('success', 'Settings saved successfully.'); } catch (\Exception $e) { - $this->settings->smtp->enabled = false; + $this->settings->smtp_enabled = false; $this->validate(); } } @@ -55,9 +55,9 @@ class Email extends Component } private function decrypt() { - if (data_get($this->settings, 'smtp.password')) { + if (data_get($this->settings, 'smtp_password')) { try { - $this->settings->smtp->password = decrypt($this->settings->smtp->password); + $this->settings->smtp_password = decrypt($this->settings->smtp_password); } catch (\Exception $e) { } } @@ -66,15 +66,14 @@ class Email extends Component { $this->resetErrorBag(); $this->validate(); - if ($this->settings->smtp->password) { - $this->settings->smtp->password = encrypt($this->settings->smtp->password); + if ($this->settings->smtp_password) { + $this->settings->smtp_password = encrypt($this->settings->smtp_password); } else { - $this->settings->smtp->password = null; + $this->settings->smtp_password = null; } - $this->settings->smtp->test_recipients = str_replace(' ', '', $this->settings->smtp->test_recipients); $this->settings->save(); $this->emit('success', 'Transaction email settings updated successfully.'); $this->decrypt(); } -} +} \ No newline at end of file diff --git a/app/Models/InstanceSettings.php b/app/Models/InstanceSettings.php index b5c01f1fb..88aba9c96 100644 --- a/app/Models/InstanceSettings.php +++ b/app/Models/InstanceSettings.php @@ -7,26 +7,17 @@ use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Notifications\Notifiable; use Spatie\SchemalessAttributes\Casts\SchemalessAttributes; -use Spatie\SchemalessAttributes\SchemalessAttributesTrait; class InstanceSettings extends Model implements SendsEmail { - use Notifiable, SchemalessAttributesTrait; + use Notifiable; protected $guarded = []; - protected $schemalessAttributes = [ - 'smtp', - ]; protected $casts = [ - 'smtp' => SchemalessAttributes::class, 'resale_license' => 'encrypted', ]; - public function scopeWithSmtp(): Builder - { - return $this->smtp->modelScope(); - } public function routeNotificationForEmail(string $attribute = 'test_recipients') { - $recipients = $this->smtp->get($attribute, ''); + $recipients = data_get($this,'smtp',''); if (is_null($recipients) || $recipients === '') { return []; } @@ -36,4 +27,4 @@ class InstanceSettings extends Model implements SendsEmail { return InstanceSettings::findOrFail(0); } -} +} \ No newline at end of file diff --git a/app/Models/Team.php b/app/Models/Team.php index ad860dd72..4e624cd14 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -12,60 +12,26 @@ use Spatie\SchemalessAttributes\SchemalessAttributesTrait; class Team extends Model implements SendsDiscord, SendsEmail { - use Notifiable, SchemalessAttributesTrait; + use Notifiable; - protected $schemalessAttributes = [ - 'smtp', - 'discord', - 'smtp_notifications', - 'discord_notifications', - ]; + protected $guarded = []; protected $casts = [ - 'smtp' => SchemalessAttributes::class, - 'discord' => SchemalessAttributes::class, - 'smtp_notifications' => SchemalessAttributes::class, - 'discord_notifications' => SchemalessAttributes::class, 'personal_team' => 'boolean', ]; - public function scopeWithSmtp(): Builder - { - return $this->smtp->modelScope(); - } - public function scopeWithDiscord(): Builder - { - return $this->discord->modelScope(); - } - public function scopeWithSmtpNotifications(): Builder - { - return $this->smtp_notifications->modelScope(); - } - public function scopeWithDiscordNotifications(): Builder - { - return $this->discord_notifications->modelScope(); - } - protected $fillable = [ - 'id', - 'name', - 'description', - 'personal_team', - 'smtp', - 'discord' - ]; public function routeNotificationForDiscord() { - return $this->discord->get('webhook_url'); + return data_get($this, 'discord_webhook_url', null); } public function routeNotificationForEmail(string $attribute = 'recipients') { - $recipients = $this->smtp->get($attribute, ''); + $recipients = data_get($this, 'smtp_recipients', ''); if (is_null($recipients) || $recipients === '') { return []; } return explode(',', $recipients); } - public function subscription() { return $this->hasOne(Subscription::class); @@ -113,4 +79,4 @@ class Team extends Model implements SendsDiscord, SendsEmail } return false; } -} +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php index 13753a210..650fe1c0a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -34,20 +34,6 @@ class User extends Authenticatable implements SendsEmail $team = [ 'name' => $user->name . "'s Team", 'personal_team' => true, - 'smtp' => [ - 'enabled' => false, - ], - 'smtp_notifications' => [ - 'test' => true, - 'deployments' => false, - ], - 'discord' => [ - 'enabled' => false, - ], - 'discord_notifications' => [ - 'test' => true, - 'deployments' => false, - ], ]; if ($user->id === 0) { $team['id'] = 0; @@ -124,4 +110,4 @@ class User extends Authenticatable implements SendsEmail $data = Application::where('team_id', $team_id)->get(); return $data; } -} +} \ No newline at end of file diff --git a/app/Notifications/Channels/EmailChannel.php b/app/Notifications/Channels/EmailChannel.php index 20c641b5d..cc493be19 100644 --- a/app/Notifications/Channels/EmailChannel.php +++ b/app/Notifications/Channels/EmailChannel.php @@ -24,8 +24,8 @@ class EmailChannel [], fn (Message $message) => $message ->from( - data_get($notifiable, 'smtp.from_address'), - data_get($notifiable, 'smtp.from_name'), + data_get($notifiable, 'smtp_from_address'), + data_get($notifiable, 'smtp_from_name'), ) ->bcc($bcc) ->subject($mailMessage->subject) @@ -35,19 +35,19 @@ class EmailChannel private function bootConfigs($notifiable): void { - $password = data_get($notifiable, 'smtp.password'); + $password = data_get($notifiable, 'smtp_password'); if ($password) $password = decrypt($password); config()->set('mail.default', 'smtp'); config()->set('mail.mailers.smtp', [ "transport" => "smtp", - "host" => data_get($notifiable, 'smtp.host'), - "port" => data_get($notifiable, 'smtp.port'), - "encryption" => data_get($notifiable, 'smtp.encryption'), - "username" => data_get($notifiable, 'smtp.username'), + "host" => data_get($notifiable, 'smtp_host'), + "port" => data_get($notifiable, 'smtp_port'), + "encryption" => data_get($notifiable, 'smtp_encryption'), + "username" => data_get($notifiable, 'smtp_username'), "password" => $password, - "timeout" => data_get($notifiable, 'smtp.timeout'), + "timeout" => data_get($notifiable, 'smtp_timeout'), "local_domain" => null, ]); } -} +} \ No newline at end of file diff --git a/app/Notifications/Channels/TransactionalEmailChannel.php b/app/Notifications/Channels/TransactionalEmailChannel.php index 431469e10..848bb1bc8 100644 --- a/app/Notifications/Channels/TransactionalEmailChannel.php +++ b/app/Notifications/Channels/TransactionalEmailChannel.php @@ -13,7 +13,7 @@ class TransactionalEmailChannel public function send(User $notifiable, Notification $notification): void { $settings = InstanceSettings::get(); - if (data_get($settings, 'smtp.enabled') !== true) { + if (data_get($settings, 'smtp_enabled') !== true) { return; } $email = $notifiable->email; @@ -27,8 +27,8 @@ class TransactionalEmailChannel [], fn (Message $message) => $message ->from( - data_get($settings, 'smtp.from_address'), - data_get($settings, 'smtp.from_name') + data_get($settings, 'smtp_from_address'), + data_get($settings, 'smtp_from_name') ) ->to($email) ->subject($mailMessage->subject) @@ -40,4 +40,4 @@ class TransactionalEmailChannel { set_transanctional_email_settings(); } -} +} \ No newline at end of file diff --git a/app/Notifications/Notifications/Application/ApplicationStoppedNotification.php b/app/Notifications/Notifications/Application/ApplicationStoppedNotification.php index 083da55ba..f51956ca1 100644 --- a/app/Notifications/Notifications/Application/ApplicationStoppedNotification.php +++ b/app/Notifications/Notifications/Application/ApplicationStoppedNotification.php @@ -38,10 +38,10 @@ class ApplicationStoppedNotification extends Notification implements ShouldQueue public function via(object $notifiable): array { $channels = []; - $isEmailEnabled = data_get($notifiable, 'smtp.enabled'); - $isDiscordEnabled = data_get($notifiable, 'discord.enabled'); - $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications.status_changes'); - $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications.status_changes'); + $isEmailEnabled = data_get($notifiable, 'smtp_enabled'); + $isDiscordEnabled = data_get($notifiable, 'discord_enabled'); + $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications_status_changes'); + $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications_status_changes'); if ($isEmailEnabled && $isSubscribedToEmailEvent) { $channels[] = EmailChannel::class; @@ -67,7 +67,7 @@ class ApplicationStoppedNotification extends Notification implements ShouldQueue public function toDiscord(): string { $message = '⛔ ' . $this->application_name . ' has been stopped. - + '; $message .= '[Application URL](' . $this->application_url . ')'; return $message; diff --git a/app/Notifications/Notifications/Application/DeployedSuccessfullyNotification.php b/app/Notifications/Notifications/Application/DeployedSuccessfullyNotification.php index 73c591607..866e18d79 100644 --- a/app/Notifications/Notifications/Application/DeployedSuccessfullyNotification.php +++ b/app/Notifications/Notifications/Application/DeployedSuccessfullyNotification.php @@ -43,10 +43,10 @@ class DeployedSuccessfullyNotification extends Notification implements ShouldQue public function via(object $notifiable): array { $channels = []; - $isEmailEnabled = data_get($notifiable, 'smtp.enabled'); - $isDiscordEnabled = data_get($notifiable, 'discord.enabled'); - $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications.deployments'); - $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications.deployments'); + $isEmailEnabled = data_get($notifiable, 'smtp_enabled'); + $isDiscordEnabled = data_get($notifiable, 'discord_enabled'); + $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications_deployments'); + $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications_deployments'); if ($isEmailEnabled && $isSubscribedToEmailEvent) { $channels[] = EmailChannel::class; @@ -79,16 +79,16 @@ class DeployedSuccessfullyNotification extends Notification implements ShouldQue public function toDiscord(): string { if ($this->preview) { - $message = '✅ New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ' - + $message = '✅ New PR' . $this->preview->pull_request_id . ' version successfully deployed of ' . $this->application_name . ' + '; if ($this->preview->fqdn) { $message .= '[Open Application](' . $this->preview->fqdn . ') | '; } $message .= '[Deployment logs](' . $this->deployment_url . ')'; } else { - $message = '✅ New version successfully deployed of ' . $this->application_name . ' - + $message = '✅ New version successfully deployed of ' . $this->application_name . ' + '; if ($this->fqdn) { $message .= '[Open Application](' . $this->fqdn . ') | '; diff --git a/app/Notifications/Notifications/Application/DeployedWithErrorNotification.php b/app/Notifications/Notifications/Application/DeployedWithErrorNotification.php index 80ed99965..34ad4a06a 100644 --- a/app/Notifications/Notifications/Application/DeployedWithErrorNotification.php +++ b/app/Notifications/Notifications/Application/DeployedWithErrorNotification.php @@ -44,10 +44,10 @@ class DeployedWithErrorNotification extends Notification implements ShouldQueue public function via(object $notifiable): array { $channels = []; - $isEmailEnabled = data_get($notifiable, 'smtp.enabled'); - $isDiscordEnabled = data_get($notifiable, 'discord.enabled'); - $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications.deployments'); - $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications.deployments'); + $isEmailEnabled = data_get($notifiable, 'smtp_enabled'); + $isDiscordEnabled = data_get($notifiable, 'discord_enabled'); + $isSubscribedToEmailEvent = data_get($notifiable, 'smtp_notifications_deployments'); + $isSubscribedToDiscordEvent = data_get($notifiable, 'discord_notifications_deployments'); if ($isEmailEnabled && $isSubscribedToEmailEvent) { $channels[] = EmailChannel::class; @@ -89,4 +89,4 @@ class DeployedWithErrorNotification extends Notification implements ShouldQueue } return $message; } -} +} \ No newline at end of file diff --git a/app/Notifications/Notifications/TestNotification.php b/app/Notifications/Notifications/TestNotification.php index 7753c155d..422cc2dd9 100644 --- a/app/Notifications/Notifications/TestNotification.php +++ b/app/Notifications/Notifications/TestNotification.php @@ -23,8 +23,8 @@ class TestNotification extends Notification implements ShouldQueue $isSmtp = $this->type === 'smtp' || is_null($this->type); $isDiscord = $this->type === 'discord' || is_null($this->type); - $isEmailEnabled = data_get($notifiable, 'smtp.enabled'); - $isDiscordEnabled = data_get($notifiable, 'discord.enabled'); + $isEmailEnabled = data_get($notifiable, 'smtp_enabled'); + $isDiscordEnabled = data_get($notifiable, 'discord_enabled'); if ($isEmailEnabled && $isSmtp) { $channels[] = EmailChannel::class; @@ -50,4 +50,4 @@ class TestNotification extends Notification implements ShouldQueue $message .= '[Go to your dashboard](' . base_url() . ')'; return $message; } -} +} \ No newline at end of file diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index 71a2f3560..2dd89007c 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -70,24 +70,24 @@ function generate_application_name(string $git_repository, string $git_branch) function is_transactional_emails_active() { - return data_get(InstanceSettings::get(), 'smtp.enabled'); + return data_get(InstanceSettings::get(), 'smtp_enabled'); } function set_transanctional_email_settings() { $settings = InstanceSettings::get(); - $password = data_get($settings, 'smtp.password'); + $password = data_get($settings, 'smtp_password'); if ($password) $password = decrypt($password); config()->set('mail.default', 'smtp'); config()->set('mail.mailers.smtp', [ "transport" => "smtp", - "host" => data_get($settings, 'smtp.host'), - "port" => data_get($settings, 'smtp.port'), - "encryption" => data_get($settings, 'smtp.encryption'), - "username" => data_get($settings, 'smtp.username'), + "host" => data_get($settings, 'smtp_host'), + "port" => data_get($settings, 'smtp_port'), + "encryption" => data_get($settings, 'smtp_encryption'), + "username" => data_get($settings, 'smtp_username'), "password" => $password, - "timeout" => data_get($settings, 'smtp.timeout'), + "timeout" => data_get($settings, 'smtp_timeout'), "local_domain" => null, ]); } @@ -131,4 +131,4 @@ function isDev() function isCloud() { return !config('coolify.self_hosted'); -} +} \ No newline at end of file diff --git a/database/migrations/2023_03_20_112811_create_teams_table.php b/database/migrations/2023_03_20_112811_create_teams_table.php index 0f41c5e95..8fdc7e777 100644 --- a/database/migrations/2023_03_20_112811_create_teams_table.php +++ b/database/migrations/2023_03_20_112811_create_teams_table.php @@ -31,4 +31,4 @@ return new class extends Migration { Schema::dropIfExists('teams'); } -}; +}; \ No newline at end of file diff --git a/database/migrations/2023_06_23_084605_remove_wildcard_domain_from_instancesettings.php b/database/migrations/2023_06_23_084605_remove_wildcard_domain_from_instancesettings.php index e98ef529a..af264756b 100644 --- a/database/migrations/2023_06_23_084605_remove_wildcard_domain_from_instancesettings.php +++ b/database/migrations/2023_06_23_084605_remove_wildcard_domain_from_instancesettings.php @@ -21,8 +21,8 @@ return new class extends Migration */ public function down(): void { - Schema::table('instancesettings', function (Blueprint $table) { + Schema::table('instance_settings', function (Blueprint $table) { $table->string('wildcard_domain')->nullable(); }); } -}; +}; \ No newline at end of file diff --git a/database/migrations/2023_07_27_182013_smtp_discord_schemaless_to_normal.php b/database/migrations/2023_07_27_182013_smtp_discord_schemaless_to_normal.php new file mode 100644 index 000000000..45cb25bc3 --- /dev/null +++ b/database/migrations/2023_07_27_182013_smtp_discord_schemaless_to_normal.php @@ -0,0 +1,193 @@ +boolean('smtp_enabled')->default(false); + $table->string('smtp_from_address')->nullable(); + $table->string('smtp_from_name')->nullable(); + $table->string('smtp_recipients')->nullable(); + $table->string('smtp_host')->nullable(); + $table->integer('smtp_port')->nullable(); + $table->string('smtp_encryption')->nullable(); + $table->string('smtp_username')->nullable(); + $table->string('smtp_password')->nullable(); + $table->integer('smtp_timeout')->nullable(); + $table->boolean('smtp_notifications_test')->default(true); + $table->boolean('smtp_notifications_deployments')->default(false); + $table->boolean('smtp_notifications_status_changes')->default(false); + + $table->boolean('discord_enabled')->default(false); + $table->string('discord_webhook_url')->nullable(); + $table->boolean('discord_notifications_test')->default(true); + $table->boolean('discord_notifications_deployments')->default(true); + $table->boolean('discord_notifications_status_changes')->default(true); + }); + $teams = Team::all(); + foreach($teams as $team) { + $team->smtp_enabled = data_get($team, 'smtp.enabled', false); + $team->smtp_from_address = data_get($team, 'smtp.from_address'); + $team->smtp_from_name = data_get($team, 'smtp.from_name'); + $team->smtp_recipients = data_get($team, 'smtp.recipients'); + $team->smtp_host = data_get($team, 'smtp.host'); + $team->smtp_port = data_get($team, 'smtp.port'); + $team->smtp_encryption = data_get($team, 'smtp.encryption'); + $team->smtp_username = data_get($team, 'smtp.username'); + $team->smtp_password = data_get($team, 'smtp.password'); + $team->smtp_timeout = data_get($team, 'smtp.timeout'); + $team->smtp_notifications_test = data_get($team, 'smtp_notifications.test',true); + $team->smtp_notifications_deployments = data_get($team, 'smtp_notifications.deployments',false); + $team->smtp_notifications_status_changes = data_get($team, 'smtp_notifications.status_changes',false); + + $team->discord_enabled = data_get($team, 'discord.enabled', false); + $team->discord_webhook_url = data_get($team, 'discord.webhook_url'); + $team->discord_notifications_test = data_get($team, 'discord_notifications.test',true); + $team->discord_notifications_deployments = data_get($team, 'discord_notifications.deployments',true); + $team->discord_notifications_status_changes = data_get($team, 'discord_notifications.status_changes',true); + + $team->save(); + } + Schema::table('teams', function (Blueprint $table) { + $table->dropColumn('smtp'); + $table->dropColumn('smtp_notifications'); + $table->dropColumn('discord'); + $table->dropColumn('discord_notifications'); + }); + + Schema::table('instance_settings', function (Blueprint $table) { + $table->boolean('smtp_enabled')->default(false); + $table->string('smtp_from_address')->nullable(); + $table->string('smtp_from_name')->nullable(); + $table->string('smtp_recipients')->nullable(); + $table->string('smtp_host')->nullable(); + $table->integer('smtp_port')->nullable(); + $table->string('smtp_encryption')->nullable(); + $table->string('smtp_username')->nullable(); + $table->string('smtp_password')->nullable(); + $table->integer('smtp_timeout')->nullable(); + }); + $instance_settings = InstanceSettings::all(); + foreach($instance_settings as $instance_setting) { + $instance_setting->smtp_enabled = data_get($instance_setting, 'smtp.enabled', false); + $instance_setting->smtp_from_address = data_get($instance_setting, 'smtp.from_address'); + $instance_setting->smtp_from_name = data_get($instance_setting, 'smtp.from_name'); + $instance_setting->smtp_recipients = data_get($instance_setting, 'smtp.recipients'); + $instance_setting->smtp_host = data_get($instance_setting, 'smtp.host'); + $instance_setting->smtp_port = data_get($instance_setting, 'smtp.port'); + $instance_setting->smtp_encryption = data_get($instance_setting, 'smtp.encryption'); + $instance_setting->smtp_username = data_get($instance_setting, 'smtp.username'); + $instance_setting->smtp_password = data_get($instance_setting, 'smtp.password'); + $instance_setting->smtp_timeout = data_get($instance_setting, 'smtp.timeout'); + $instance_setting->save(); + } + Schema::table('instance_settings', function (Blueprint $table) { + $table->dropColumn('smtp'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('teams', function (Blueprint $table) { + $table->schemalessAttributes('smtp'); + $table->schemalessAttributes('smtp_notifications'); + $table->schemalessAttributes('discord'); + $table->schemalessAttributes('discord_notifications'); + }); + $teams = Team::all(); + foreach($teams as $team) { + $team->smtp = [ + 'enabled' => $team->smtp_enabled, + 'from_address' => $team->smtp_from_address, + 'from_name' => $team->smtp_from_name, + 'recipients' => $team->smtp_recipients, + 'host' => $team->smtp_host, + 'port' => $team->smtp_port, + 'encryption' => $team->smtp_encryption, + 'username' => $team->smtp_username, + 'password' => $team->smtp_password, + 'timeout' => $team->smtp_timeout, + ]; + $team->smtp_notifications = [ + 'test' => $team->smtp_notifications_test, + 'deployments' => $team->smtp_notifications_deployments, + 'status_changes' => $team->smtp_notifications_status_changes, + ]; + $team->discord = [ + 'enabled' => $team->discord_enabled, + 'webhook_url' => $team->discord_webhook_url, + ]; + $team->discord_notifications = [ + 'test' => $team->discord_notifications_test, + 'deployments' => $team->discord_notifications_deployments, + 'status_changes' => $team->discord_notifications_status_changes, + ]; + $team->save(); + } + Schema::table('teams', function (Blueprint $table) { + $table->dropColumn('smtp_enabled'); + $table->dropColumn('smtp_from_address'); + $table->dropColumn('smtp_from_name'); + $table->dropColumn('smtp_recipients'); + $table->dropColumn('smtp_host'); + $table->dropColumn('smtp_port'); + $table->dropColumn('smtp_encryption'); + $table->dropColumn('smtp_username'); + $table->dropColumn('smtp_password'); + $table->dropColumn('smtp_timeout'); + $table->dropColumn('smtp_notifications_test'); + $table->dropColumn('smtp_notifications_deployments'); + $table->dropColumn('smtp_notifications_status_changes'); + + $table->dropColumn('discord_enabled'); + $table->dropColumn('discord_webhook_url'); + $table->dropColumn('discord_notifications_test'); + $table->dropColumn('discord_notifications_deployments'); + $table->dropColumn('discord_notifications_status_changes'); + }); + + Schema::table('instance_settings', function (Blueprint $table) { + $table->schemalessAttributes('smtp'); + }); + + $instance_setting = InstanceSettings::get(); + $instance_setting->smtp = [ + 'enabled' => $instance_setting->smtp_enabled, + 'from_address' => $instance_setting->smtp_from_address, + 'from_name' => $instance_setting->smtp_from_name, + 'recipients' => $instance_setting->smtp_recipients, + 'host' => $instance_setting->smtp_host, + 'port' => $instance_setting->smtp_port, + 'encryption' => $instance_setting->smtp_encryption, + 'username' => $instance_setting->smtp_username, + 'password' => $instance_setting->smtp_password, + 'timeout' => $instance_setting->smtp_timeout, + ]; + $instance_setting->save(); + Schema::table('instance_settings', function (Blueprint $table) { + $table->dropColumn('smtp_enabled'); + $table->dropColumn('smtp_from_address'); + $table->dropColumn('smtp_from_name'); + $table->dropColumn('smtp_recipients'); + $table->dropColumn('smtp_host'); + $table->dropColumn('smtp_port'); + $table->dropColumn('smtp_encryption'); + $table->dropColumn('smtp_username'); + $table->dropColumn('smtp_password'); + $table->dropColumn('smtp_timeout'); + }); + } +}; \ No newline at end of file diff --git a/database/seeders/InstanceSettingsSeeder.php b/database/seeders/InstanceSettingsSeeder.php index 12e6e2fcb..d18c8ccbf 100644 --- a/database/seeders/InstanceSettingsSeeder.php +++ b/database/seeders/InstanceSettingsSeeder.php @@ -16,14 +16,11 @@ class InstanceSettingsSeeder extends Seeder InstanceSettings::create([ 'id' => 0, 'is_registration_enabled' => true, - 'smtp' => [ - 'enabled' => true, - 'test_recipients' => 'test@example.com,test2@example.com', - 'host' => 'coolify-mail', - 'port' => 1025, - 'from_address' => 'hi@localhost.com', - 'from_name' => 'Coolify', - ] + 'smtp_enabled' => true, + 'smtp_host' => 'coolify-mail', + 'smtp_port' => 1025, + 'smtp_from_address' => 'hi@localhost.com', + 'smtp_from_name' => 'Coolify', ]); try { $ipv4 = Process::run('curl -4s https://ifconfig.io')->output(); @@ -44,4 +41,4 @@ class InstanceSettingsSeeder extends Seeder echo "Error: {$e->getMessage()}\n"; } } -} +} \ No newline at end of file diff --git a/resources/views/components/forms/input.blade.php b/resources/views/components/forms/input.blade.php index bab75c13c..3dc520ebd 100644 --- a/resources/views/components/forms/input.blade.php +++ b/resources/views/components/forms/input.blade.php @@ -33,9 +33,15 @@ wire:dirty.class="text-black bg-warning" wire:loading.attr="disabled" type="{{ $type }}" @disabled($readonly) @disabled($disabled) id="{{ $id }}" name="{{ $name }}"> + @endif @if (!$label && $helper) @endif + @error($id) + + @enderror diff --git a/resources/views/livewire/notifications/discord-settings.blade.php b/resources/views/livewire/notifications/discord-settings.blade.php index 3aeb14ef8..f5546da17 100644 --- a/resources/views/livewire/notifications/discord-settings.blade.php +++ b/resources/views/livewire/notifications/discord-settings.blade.php @@ -5,7 +5,7 @@ Save - @if ($model->discord->enabled) + @if ($model->discord_enabled) Send Test Notifications @@ -13,23 +13,23 @@ @endif
- +
+ id="model.discord_webhook_url" label="Webhook" /> - @if (data_get($model, 'discord.enabled')) + @if (data_get($model, 'discord_enabled'))

Subscribe to events

@if (isDev()) - @endif
Applications
- -
@endif diff --git a/resources/views/livewire/notifications/email-settings.blade.php b/resources/views/livewire/notifications/email-settings.blade.php index 91c1091b9..082405fdb 100644 --- a/resources/views/livewire/notifications/email-settings.blade.php +++ b/resources/views/livewire/notifications/email-settings.blade.php @@ -1,4 +1,15 @@
+ +

Email

@@ -10,53 +21,50 @@ Copy from Instance Settings @endif - @if ($model->smtp->enabled) - - Send Test Notifications + @if ($model->smtp_enabled) + + Send Test Email @endif
- +
- -
- - - +
- - - + + +
- - +
- @if (data_get($model, 'smtp.enabled')) + @if (data_get($model, 'smtp_enabled'))

Subscribe to events

@if (isDev()) - @endif
Applications
- -
@endif diff --git a/resources/views/livewire/settings/email.blade.php b/resources/views/livewire/settings/email.blade.php index d1cb2bdb0..4ebb7f94e 100644 --- a/resources/views/livewire/settings/email.blade.php +++ b/resources/views/livewire/settings/email.blade.php @@ -5,7 +5,7 @@ Save - @if ($settings->smtp->enabled) + @if ($settings->smtp_enabled) Send Test Email @@ -13,28 +13,28 @@
SMTP settings for password resets, invitations, etc.
- +
-
- - - +
- - - + + +
- - +