From 50316c9cf6f90fc9e050fbc2f5f42a7997c21e86 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 25 Apr 2023 10:06:45 +0200 Subject: [PATCH] settings view --- app/Actions/Fortify/CreateNewUser.php | 6 +++ app/Http/Livewire/InstanceSettings.php | 46 +++++++++++++++++++ app/Providers/FortifyServiceProvider.php | 21 +++++++-- resources/views/components/input.blade.php | 4 +- resources/views/components/layout.blade.php | 6 ++- resources/views/components/navbar.blade.php | 6 ++- .../livewire/instance-settings.blade.php | 23 ++++++++++ resources/views/settings.blade.php | 2 +- routes/channels.php | 6 +-- routes/console.php | 22 ++++----- 10 files changed, 119 insertions(+), 23 deletions(-) create mode 100644 app/Http/Livewire/InstanceSettings.php create mode 100644 resources/views/livewire/instance-settings.blade.php diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php index 662048a93..6f99fee43 100644 --- a/app/Actions/Fortify/CreateNewUser.php +++ b/app/Actions/Fortify/CreateNewUser.php @@ -2,6 +2,7 @@ namespace App\Actions\Fortify; +use App\Models\InstanceSettings; use App\Models\Team; use App\Models\User; use Illuminate\Support\Facades\DB; @@ -22,6 +23,11 @@ class CreateNewUser implements CreatesNewUsers */ public function create(array $input): User { + $settings = InstanceSettings::find(0); + if (!$settings->is_registration_enabled) { + Log::info('Registration is disabled'); + abort(403); + } Validator::make($input, [ 'name' => ['required', 'string', 'max:255'], 'email' => [ diff --git a/app/Http/Livewire/InstanceSettings.php b/app/Http/Livewire/InstanceSettings.php new file mode 100644 index 000000000..4efa6db6d --- /dev/null +++ b/app/Http/Livewire/InstanceSettings.php @@ -0,0 +1,46 @@ + 'nullable', + 'settings.wildcard_domain' => 'nullable', + 'settings.public_port_min' => 'required', + 'settings.public_port_max' => 'required', + ]; + public function mount() + { + $this->do_not_track = $this->settings->do_not_track; + $this->is_auto_update_enabled = $this->settings->is_auto_update_enabled; + $this->is_registration_enabled = $this->settings->is_registration_enabled; + $this->is_https_forced = $this->settings->is_https_forced; + } + public function instantSave() + { + $this->settings->do_not_track = $this->do_not_track; + $this->settings->is_auto_update_enabled = $this->is_auto_update_enabled; + $this->settings->is_registration_enabled = $this->is_registration_enabled; + $this->settings->is_https_forced = $this->is_https_forced; + $this->settings->save(); + } + public function submit() + { + $this->resetErrorBag(); + if ($this->settings->public_port_min > $this->settings->public_port_max) { + $this->addError('settings.public_port_min', 'The minimum port must be lower than the maximum port.'); + return; + } + $this->settings->save(); + } +} diff --git a/app/Providers/FortifyServiceProvider.php b/app/Providers/FortifyServiceProvider.php index f2f8ec1d7..b65eb2a00 100644 --- a/app/Providers/FortifyServiceProvider.php +++ b/app/Providers/FortifyServiceProvider.php @@ -6,6 +6,7 @@ use App\Actions\Fortify\CreateNewUser; use App\Actions\Fortify\ResetUserPassword; use App\Actions\Fortify\UpdateUserPassword; use App\Actions\Fortify\UpdateUserProfileInformation; +use App\Models\InstanceSettings; use App\Models\User; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Http\Request; @@ -29,8 +30,21 @@ class FortifyServiceProvider extends ServiceProvider */ public function boot(): void { - Fortify::loginView(fn () => view('auth.login')); - Fortify::registerView(fn () => view('auth.register')); + Fortify::registerView(function () { + $settings = InstanceSettings::find(0); + if (!$settings->is_registration_enabled) { + abort(403); + } + return view('auth.register'); + }); + + Fortify::loginView(function () { + $settings = InstanceSettings::find(0); + return view('auth.login', [ + 'is_registration_enabled' => $settings->is_registration_enabled + ]); + }); + Fortify::authenticateUsing(function (Request $request) { $user = User::where('email', $request->email)->with('teams')->first(); if ( @@ -49,12 +63,11 @@ class FortifyServiceProvider extends ServiceProvider RateLimiter::for('login', function (Request $request) { $email = (string) $request->email; - return Limit::perMinute(5)->by($email.$request->ip()); + return Limit::perMinute(5)->by($email . $request->ip()); }); RateLimiter::for('two-factor', function (Request $request) { return Limit::perMinute(5)->by($request->session()->get('login.id')); }); - } } diff --git a/resources/views/components/input.blade.php b/resources/views/components/input.blade.php index 4d6140a89..6ec6357b7 100644 --- a/resources/views/components/input.blade.php +++ b/resources/views/components/input.blade.php @@ -23,8 +23,8 @@ * @endif - @endif diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php index 82a04bfb7..118c9ce50 100644 --- a/resources/views/components/layout.blade.php +++ b/resources/views/components/layout.blade.php @@ -7,7 +7,11 @@ {{ $title ?? 'Coolify' }} @vite(['resources/js/app.js', 'resources/css/app.css']) - + @livewireStyles diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index fc581d903..1618f1326 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -2,7 +2,11 @@
v{{ config('coolify.version') }}
@guest Login - Register + @isset($isRegistrationEnabled) + Register + @else +
Registration disabled
+ @endisset @endguest @auth Home diff --git a/resources/views/livewire/instance-settings.blade.php b/resources/views/livewire/instance-settings.blade.php new file mode 100644 index 000000000..b0e988a72 --- /dev/null +++ b/resources/views/livewire/instance-settings.blade.php @@ -0,0 +1,23 @@ +
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + + + +
+
diff --git a/resources/views/settings.blade.php b/resources/views/settings.blade.php index de7941cf9..9093f7a07 100644 --- a/resources/views/settings.blade.php +++ b/resources/views/settings.blade.php @@ -1,4 +1,4 @@

Settings

- +
diff --git a/routes/channels.php b/routes/channels.php index 5d451e1fa..961394624 100644 --- a/routes/channels.php +++ b/routes/channels.php @@ -13,6 +13,6 @@ use Illuminate\Support\Facades\Broadcast; | */ -Broadcast::channel('App.Models.User.{id}', function ($user, $id) { - return (int) $user->id === (int) $id; -}); +// Broadcast::channel('App.Models.User.{id}', function ($user, $id) { +// return (int) $user->id === (int) $id; +// }); diff --git a/routes/console.php b/routes/console.php index 0f43c3b31..d2977bec5 100644 --- a/routes/console.php +++ b/routes/console.php @@ -14,19 +14,19 @@ use Illuminate\Support\Facades\Artisan; | */ -Artisan::command('inspire', function () { +// Artisan::command('inspire', function () { - $activity = Spatie\Activitylog\Models\Activity::latest()->first(); +// $activity = Spatie\Activitylog\Models\Activity::latest()->first(); - $this->info( - collect( - json_decode(data_get($activity, 'description'), associative: true, flags: JSON_THROW_ON_ERROR) - ) - ->sortBy('order') - ->map(fn($i) => $i['output']) - ->implode("\n") - ); +// $this->info( +// collect( +// json_decode(data_get($activity, 'description'), associative: true, flags: JSON_THROW_ON_ERROR) +// ) +// ->sortBy('order') +// ->map(fn($i) => $i['output']) +// ->implode("\n") +// ); -})->purpose('Display an inspiring quote'); +// })->purpose('Display an inspiring quote');