refactor: only get instanceSettings once from db

This commit is contained in:
Andras Bacsai 2024-07-12 12:51:55 +02:00
parent 21612cccf7
commit 88f33be5b6
23 changed files with 54 additions and 51 deletions

View File

@ -65,7 +65,7 @@ public function register(): void
if ($e instanceof RuntimeException) { if ($e instanceof RuntimeException) {
return; return;
} }
$this->settings = InstanceSettings::get(); $this->settings = view()->shared('instanceSettings');
if ($this->settings->do_not_track) { if ($this->settings->do_not_track) {
return; return;
} }

View File

@ -3,7 +3,6 @@
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\InstanceSettings;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use OpenApi\Attributes as OA; use OpenApi\Attributes as OA;
@ -85,7 +84,7 @@ public function enable_api(Request $request)
if ($teamId !== '0') { if ($teamId !== '0') {
return response()->json(['message' => 'You are not allowed to enable the API.'], 403); return response()->json(['message' => 'You are not allowed to enable the API.'], 403);
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$settings->update(['is_api_enabled' => true]); $settings->update(['is_api_enabled' => true]);
return response()->json(['message' => 'API enabled.'], 200); return response()->json(['message' => 'API enabled.'], 200);
@ -136,7 +135,7 @@ public function disable_api(Request $request)
if ($teamId !== '0') { if ($teamId !== '0') {
return response()->json(['message' => 'You are not allowed to disable the API.'], 403); return response()->json(['message' => 'You are not allowed to disable the API.'], 403);
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$settings->update(['is_api_enabled' => false]); $settings->update(['is_api_enabled' => false]);
return response()->json(['message' => 'API disabled.'], 200); return response()->json(['message' => 'API disabled.'], 200);

View File

@ -301,7 +301,7 @@ public function domains_by_server(Request $request)
$projects = Project::where('team_id', $teamId)->get(); $projects = Project::where('team_id', $teamId)->get();
$domains = collect(); $domains = collect();
$applications = $projects->pluck('applications')->flatten(); $applications = $projects->pluck('applications')->flatten();
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if ($applications->count() > 0) { if ($applications->count() > 0) {
foreach ($applications as $application) { foreach ($applications as $application) {
$ip = $application->destination->server->ip; $ip = $application->destination->server->ip;

View File

@ -15,7 +15,7 @@ public function handle(Request $request, Closure $next): Response
if (isCloud()) { if (isCloud()) {
return $next($request); return $next($request);
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if ($settings->is_api_enabled === false) { if ($settings->is_api_enabled === false) {
return response()->json(['success' => true, 'message' => 'API is disabled.'], 403); return response()->json(['success' => true, 'message' => 'API is disabled.'], 403);
} }

View File

@ -36,7 +36,7 @@ public function handle(): void
$latest_version = get_latest_version_of_coolify(); $latest_version = get_latest_version_of_coolify();
instant_remote_process(["docker pull -q ghcr.io/coollabsio/coolify:{$latest_version}"], $server, false); instant_remote_process(["docker pull -q ghcr.io/coollabsio/coolify:{$latest_version}"], $server, false);
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$current_version = config('version'); $current_version = config('version');
if (! $settings->is_auto_update_enabled) { if (! $settings->is_auto_update_enabled) {
return; return;

View File

@ -48,7 +48,7 @@ public function submit()
] ]
); );
$mail->subject("[HELP]: {$this->subject}"); $mail->subject("[HELP]: {$this->subject}");
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$type = set_transanctional_email_settings($settings); $type = set_transanctional_email_settings($settings);
if (! $type) { if (! $type) {
$url = 'https://app.coolify.io/api/feedback'; $url = 'https://app.coolify.io/api/feedback';

View File

@ -173,7 +173,7 @@ public function submitResend()
public function copyFromInstanceSettings() public function copyFromInstanceSettings()
{ {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if ($settings->smtp_enabled) { if ($settings->smtp_enabled) {
$team = currentTeam(); $team = currentTeam();
$team->update([ $team->update([

View File

@ -29,6 +29,8 @@ class Webhooks extends Component
public function mount() public function mount()
{ {
// ray()->clearAll();
// ray()->showQueries();
$this->deploywebhook = generateDeployWebhook($this->resource); $this->deploywebhook = generateDeployWebhook($this->resource);
$this->githubManualWebhookSecret = data_get($this->resource, 'manual_webhook_secret_github'); $this->githubManualWebhookSecret = data_get($this->resource, 'manual_webhook_secret_github');

View File

@ -18,7 +18,7 @@ class Index extends Component
public function mount() public function mount()
{ {
if (isInstanceAdmin()) { if (isInstanceAdmin()) {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$database = StandalonePostgresql::whereName('coolify-db')->first(); $database = StandalonePostgresql::whereName('coolify-db')->first();
$s3s = S3Storage::whereTeamId(0)->get() ?? []; $s3s = S3Storage::whereTeamId(0)->get() ?? [];
if ($database) { if ($database) {

View File

@ -29,7 +29,7 @@ public function mount()
abort(404); abort(404);
} }
$this->instance_id = config('app.id'); $this->instance_id = config('app.id');
$this->settings = InstanceSettings::get(); $this->settings = view()->shared('instanceSettings');
} }
public function render() public function render()

View File

@ -100,7 +100,7 @@ public function mount()
return redirect()->route('source.all'); return redirect()->route('source.all');
} }
$this->applications = $this->github_app->applications; $this->applications = $this->github_app->applications;
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret'); $this->github_app->makeVisible('client_secret')->makeVisible('webhook_secret');
$this->name = str($this->github_app->name)->kebab(); $this->name = str($this->github_app->name)->kebab();

View File

@ -23,7 +23,7 @@ public function mount()
if (data_get(currentTeam(), 'subscription') && isSubscriptionActive()) { if (data_get(currentTeam(), 'subscription') && isSubscriptionActive()) {
return redirect()->route('subscription.show'); return redirect()->route('subscription.show');
} }
$this->settings = InstanceSettings::get(); $this->settings = view()->shared('instanceSettings');
$this->alreadySubscribed = currentTeam()->subscription()->exists(); $this->alreadySubscribed = currentTeam()->subscription()->exists();
} }

View File

@ -318,7 +318,7 @@ public function setupDefault404Redirect()
public function setupDynamicProxyConfiguration() public function setupDynamicProxyConfiguration()
{ {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$dynamic_config_path = $this->proxyPath().'/dynamic'; $dynamic_config_path = $this->proxyPath().'/dynamic';
if ($this->proxyType() === 'TRAEFIK_V2') { if ($this->proxyType() === 'TRAEFIK_V2') {
$file = "$dynamic_config_path/coolify.yaml"; $file = "$dynamic_config_path/coolify.yaml";

View File

@ -2,7 +2,6 @@
namespace App\Notifications\Channels; namespace App\Notifications\Channels;
use App\Models\InstanceSettings;
use App\Models\User; use App\Models\User;
use Exception; use Exception;
use Illuminate\Mail\Message; use Illuminate\Mail\Message;
@ -14,7 +13,7 @@ class TransactionalEmailChannel
{ {
public function send(User $notifiable, Notification $notification): void public function send(User $notifiable, Notification $notification): void
{ {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (! data_get($settings, 'smtp_enabled') && ! data_get($settings, 'resend_enabled')) { if (! data_get($settings, 'smtp_enabled') && ! data_get($settings, 'resend_enabled')) {
Log::info('SMTP/Resend not enabled'); Log::info('SMTP/Resend not enabled');

View File

@ -18,7 +18,7 @@ class ResetPassword extends Notification
public function __construct($token) public function __construct($token)
{ {
$this->settings = InstanceSettings::get(); $this->settings = view()->shared('instanceSettings');
$this->token = $token; $this->token = $token;
} }

View File

@ -2,8 +2,10 @@
namespace App\Providers; namespace App\Providers;
use App\Models\InstanceSettings;
use App\Models\PersonalAccessToken; use App\Models\PersonalAccessToken;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Laravel\Sanctum\Sanctum; use Laravel\Sanctum\Sanctum;
@ -27,5 +29,7 @@ public function boot(): void
])->baseUrl($api_url); ])->baseUrl($api_url);
} }
}); });
View::share('instanceSettings', InstanceSettings::get());
} }
} }

View File

@ -6,7 +6,6 @@
use App\Actions\Fortify\ResetUserPassword; use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword; use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation; use App\Actions\Fortify\UpdateUserProfileInformation;
use App\Models\InstanceSettings;
use App\Models\OauthSetting; use App\Models\OauthSetting;
use App\Models\User; use App\Models\User;
use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Cache\RateLimiting\Limit;
@ -45,7 +44,7 @@ public function boot(): void
{ {
Fortify::createUsersUsing(CreateNewUser::class); Fortify::createUsersUsing(CreateNewUser::class);
Fortify::registerView(function () { Fortify::registerView(function () {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (! $settings->is_registration_enabled) { if (! $settings->is_registration_enabled) {
return redirect()->route('login'); return redirect()->route('login');
} }
@ -57,7 +56,7 @@ public function boot(): void
}); });
Fortify::loginView(function () { Fortify::loginView(function () {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$enabled_oauth_providers = OauthSetting::where('enabled', true)->get(); $enabled_oauth_providers = OauthSetting::where('enabled', true)->get();
$users = User::count(); $users = User::count();
if ($users == 0) { if ($users == 0) {

View File

@ -244,13 +244,13 @@ function generate_application_name(string $git_repository, string $git_branch, ?
function is_transactional_emails_active(): bool function is_transactional_emails_active(): bool
{ {
return isEmailEnabled(InstanceSettings::get()); return isEmailEnabled(view()->shared('instanceSettings'));
} }
function set_transanctional_email_settings(?InstanceSettings $settings = null): ?string function set_transanctional_email_settings(?InstanceSettings $settings = null): ?string
{ {
if (! $settings) { if (! $settings) {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
} }
config()->set('mail.from.address', data_get($settings, 'smtp_from_address')); config()->set('mail.from.address', data_get($settings, 'smtp_from_address'));
config()->set('mail.from.name', data_get($settings, 'smtp_from_name')); config()->set('mail.from.name', data_get($settings, 'smtp_from_name'));
@ -284,7 +284,7 @@ function base_ip(): string
if (isDev()) { if (isDev()) {
return 'localhost'; return 'localhost';
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if ($settings->public_ipv4) { if ($settings->public_ipv4) {
return "$settings->public_ipv4"; return "$settings->public_ipv4";
} }
@ -312,7 +312,7 @@ function getFqdnWithoutPort(string $fqdn)
*/ */
function base_url(bool $withPort = true): string function base_url(bool $withPort = true): string
{ {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if ($settings->fqdn) { if ($settings->fqdn) {
return $settings->fqdn; return $settings->fqdn;
} }
@ -379,7 +379,7 @@ function send_internal_notification(string $message): void
} }
function send_user_an_email(MailMessage $mail, string $email, ?string $cc = null): void function send_user_an_email(MailMessage $mail, string $email, ?string $cc = null): void
{ {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$type = set_transanctional_email_settings($settings); $type = set_transanctional_email_settings($settings);
if (! $type) { if (! $type) {
throw new Exception('No email settings found.'); throw new Exception('No email settings found.');
@ -2258,7 +2258,7 @@ function validate_dns_entry(string $fqdn, Server $server)
if (str($host)->contains('sslip.io')) { if (str($host)->contains('sslip.io')) {
return true; return true;
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
$is_dns_validation_enabled = data_get($settings, 'is_dns_validation_enabled'); $is_dns_validation_enabled = data_get($settings, 'is_dns_validation_enabled');
if (! $is_dns_validation_enabled) { if (! $is_dns_validation_enabled) {
return true; return true;
@ -2378,7 +2378,7 @@ function checkIfDomainIsAlreadyUsed(Collection|array $domains, ?string $teamId =
if ($domainFound) { if ($domainFound) {
return true; return true;
} }
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (data_get($settings, 'fqdn')) { if (data_get($settings, 'fqdn')) {
$domain = data_get($settings, 'fqdn'); $domain = data_get($settings, 'fqdn');
if (str($domain)->endsWith('/')) { if (str($domain)->endsWith('/')) {
@ -2450,7 +2450,7 @@ function check_domain_usage(ServiceApplication|Application|null $resource = null
} }
} }
if ($resource) { if ($resource) {
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (data_get($settings, 'fqdn')) { if (data_get($settings, 'fqdn')) {
$domain = data_get($settings, 'fqdn'); $domain = data_get($settings, 'fqdn');
if (str($domain)->endsWith('/')) { if (str($domain)->endsWith('/')) {
@ -2525,7 +2525,7 @@ function get_public_ips()
{ {
try { try {
echo "Refreshing public ips!\n"; echo "Refreshing public ips!\n";
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
[$first, $second] = Process::concurrently(function (Pool $pool) { [$first, $second] = Process::concurrently(function (Pool $pool) {
$pool->path(__DIR__)->command('curl -4s https://ifconfig.io'); $pool->path(__DIR__)->command('curl -4s https://ifconfig.io');
$pool->path(__DIR__)->command('curl -6s https://ifconfig.io'); $pool->path(__DIR__)->command('curl -6s https://ifconfig.io');

View File

@ -90,7 +90,7 @@
| |
*/ */
'legacy_model_binding' => true, 'legacy_model_binding' => false,
/* /*
|--------------------------------------------------------------------------- |---------------------------------------------------------------------------

View File

@ -27,14 +27,14 @@ public function run(): void
$ipv4 = Process::run('curl -4s https://ifconfig.io')->output(); $ipv4 = Process::run('curl -4s https://ifconfig.io')->output();
$ipv4 = trim($ipv4); $ipv4 = trim($ipv4);
$ipv4 = filter_var($ipv4, FILTER_VALIDATE_IP); $ipv4 = filter_var($ipv4, FILTER_VALIDATE_IP);
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (is_null($settings->public_ipv4) && $ipv4) { if (is_null($settings->public_ipv4) && $ipv4) {
$settings->update(['public_ipv4' => $ipv4]); $settings->update(['public_ipv4' => $ipv4]);
} }
$ipv6 = Process::run('curl -6s https://ifconfig.io')->output(); $ipv6 = Process::run('curl -6s https://ifconfig.io')->output();
$ipv6 = trim($ipv6); $ipv6 = trim($ipv6);
$ipv6 = filter_var($ipv6, FILTER_VALIDATE_IP); $ipv6 = filter_var($ipv6, FILTER_VALIDATE_IP);
$settings = InstanceSettings::get(); $settings = view()->shared('instanceSettings');
if (is_null($settings->public_ipv6) && $ipv6) { if (is_null($settings->public_ipv6) && $ipv6) {
$settings->update(['public_ipv6' => $ipv6]); $settings->update(['public_ipv6' => $ipv6]);
} }

View File

@ -8,7 +8,7 @@
@use('App\Models\InstanceSettings') @use('App\Models\InstanceSettings')
@php @php
$instanceSettings = InstanceSettings::first(); $instanceSettings = view()->shared('instanceSettings');
$name = null; $name = null;
if ($instanceSettings) { if ($instanceSettings) {

View File

@ -86,57 +86,57 @@
</div> </div>
<div class="w-full"> <div class="w-full">
<div x-cloak x-show="activeTab === 'general'" class="h-full"> <div x-cloak x-show="activeTab === 'general'" class="h-full">
<livewire:project.application.general :application="$application" /> {{-- <livewire:project.application.general :application="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'swarm'" class="h-full"> <div x-cloak x-show="activeTab === 'swarm'" class="h-full">
<livewire:project.application.swarm :application="$application" /> {{-- <livewire:project.application.swarm :application="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'advanced'" class="h-full"> <div x-cloak x-show="activeTab === 'advanced'" class="h-full">
<livewire:project.application.advanced :application="$application" /> {{-- <livewire:project.application.advanced :application="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'environment-variables'"> <div x-cloak x-show="activeTab === 'environment-variables'">
<livewire:project.shared.environment-variable.all :resource="$application" /> {{-- <livewire:project.shared.environment-variable.all :resource="$application" /> --}}
</div> </div>
@if ($application->git_based()) @if ($application->git_based())
<div x-cloak x-show="activeTab === 'source'"> <div x-cloak x-show="activeTab === 'source'">
<livewire:project.application.source :application="$application" /> {{-- <livewire:project.application.source :application="$application" /> --}}
</div> </div>
@endif @endif
<div x-cloak x-show="activeTab === 'servers'"> <div x-cloak x-show="activeTab === 'servers'">
<livewire:project.shared.destination :resource="$application" :servers="$servers" /> {{-- <livewire:project.shared.destination :resource="$application" :servers="$servers" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'storages'"> <div x-cloak x-show="activeTab === 'storages'">
<livewire:project.service.storage :resource="$application" /> {{-- <livewire:project.service.storage :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'webhooks'"> <div x-cloak x-show="activeTab === 'webhooks'">
<livewire:project.shared.webhooks :resource="$application" /> <livewire:project.shared.webhooks :resource="$application" lazy />
</div> </div>
<div x-cloak x-show="activeTab === 'previews'"> <div x-cloak x-show="activeTab === 'previews'">
<livewire:project.application.previews :application="$application" /> {{-- <livewire:project.application.previews :application="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'health'"> <div x-cloak x-show="activeTab === 'health'">
<livewire:project.shared.health-checks :resource="$application" /> {{-- <livewire:project.shared.health-checks :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'rollback'"> <div x-cloak x-show="activeTab === 'rollback'">
<livewire:project.application.rollback :application="$application" /> {{-- <livewire:project.application.rollback :application="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'resource-limits'"> <div x-cloak x-show="activeTab === 'resource-limits'">
<livewire:project.shared.resource-limits :resource="$application" /> {{-- <livewire:project.shared.resource-limits :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'scheduled-tasks'"> <div x-cloak x-show="activeTab === 'scheduled-tasks'">
<livewire:project.shared.scheduled-task.all :resource="$application" /> {{-- <livewire:project.shared.scheduled-task.all :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'resource-operations'"> <div x-cloak x-show="activeTab === 'resource-operations'">
<livewire:project.shared.resource-operations :resource="$application" /> {{-- <livewire:project.shared.resource-operations :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'metrics'"> <div x-cloak x-show="activeTab === 'metrics'">
<livewire:project.shared.metrics :resource="$application" /> {{-- <livewire:project.shared.metrics :resource="$application" /> --}}
</div> </div>
<div x-cloak x-show="activeTab === 'tags'"> <div x-cloak x-show="activeTab === 'tags'">
<livewire:project.shared.tags :resource="$application" /> <livewire:project.shared.tags :resource="$application" lazy />
</div> </div>
<div x-cloak x-show="activeTab === 'danger'"> <div x-cloak x-show="activeTab === 'danger'">
<livewire:project.shared.danger :resource="$application" /> {{-- <livewire:project.shared.danger :resource="$application" /> --}}
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,5 +1,5 @@
<x-forms.select wire:model.live="selectedEnvironment"> <x-forms.select wire:model.live="selectedEnvironment">
<option value="edit">Create/Edit Environments</option> <option value="edit">Create / Edit</option>
<option disabled>-----</option> <option disabled>-----</option>
@foreach ($environments as $environment) @foreach ($environments as $environment)
<option value="{{ $environment->name }}">{{ $environment->name }} <option value="{{ $environment->name }}">{{ $environment->name }}