Add OAuth Settings to Settings (#839)

* Replace tabler icon package

* Use new filled icons

note: not everything has a filled icon

* Add OAuth Settings to Settings Page

* Fix authentik base url

* replace hard coded oauth
This commit is contained in:
Charles 2025-01-04 12:35:07 -05:00 committed by GitHub
parent 23d515c3e5
commit 17805f676e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 83 additions and 10 deletions

View File

@ -28,6 +28,7 @@ use Filament\Pages\Page;
use Filament\Support\Enums\MaxWidth; use Filament\Support\Enums\MaxWidth;
use Illuminate\Http\Client\Factory; use Illuminate\Http\Client\Factory;
use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Notification as MailNotification; use Illuminate\Support\Facades\Notification as MailNotification;
use Illuminate\Support\HtmlString; use Illuminate\Support\HtmlString;
@ -83,6 +84,10 @@ class Settings extends Page implements HasForms
->label('Backup') ->label('Backup')
->icon('tabler-box') ->icon('tabler-box')
->schema($this->backupSettings()), ->schema($this->backupSettings()),
Tab::make('OAuth')
->label('OAuth')
->icon('tabler-brand-oauth')
->schema($this->oauthSettings()),
Tab::make('misc') Tab::make('misc')
->label('Misc') ->label('Misc')
->icon('tabler-tool') ->icon('tabler-tool')
@ -411,6 +416,74 @@ class Settings extends Page implements HasForms
]; ];
} }
private function oauthSettings(): array
{
$oauthProviders = Config::get('auth.oauth');
$formFields = [];
foreach ($oauthProviders as $providerName => $providerConfig) {
$providerEnvPrefix = strtoupper($providerName);
$fields = [
Toggle::make("OAUTH_{$providerEnvPrefix}_ENABLED")
->onColor('success')
->offColor('danger')
->onIcon('tabler-check')
->offIcon('tabler-x')
->live()
->columnSpan(1)
->label('Enabled')
->default(env("OAUTH_{$providerEnvPrefix}_ENABLED", false)),
];
if (array_key_exists('client_id', $providerConfig['service'] ?? [])) {
$fields[] = TextInput::make("OAUTH_{$providerEnvPrefix}_CLIENT_ID")
->label('Client ID')
->columnSpan(2)
->required()
->password()
->revealable()
->autocomplete(false)
->hidden(fn (Get $get) => !$get("OAUTH_{$providerEnvPrefix}_ENABLED"))
->default(env("OAUTH_{$providerEnvPrefix}_CLIENT_ID", $providerConfig['service']['client_id'] ?? ''))
->placeholder('Client ID');
}
if (array_key_exists('client_secret', $providerConfig['service'] ?? [])) {
$fields[] = TextInput::make("OAUTH_{$providerEnvPrefix}_CLIENT_SECRET")
->label('Client Secret')
->columnSpan(2)
->required()
->password()
->revealable()
->autocomplete(false)
->hidden(fn (Get $get) => !$get("OAUTH_{$providerEnvPrefix}_ENABLED"))
->default(env("OAUTH_{$providerEnvPrefix}_CLIENT_SECRET", $providerConfig['service']['client_secret'] ?? ''))
->placeholder('Client Secret');
}
if (array_key_exists('base_url', $providerConfig['service'] ?? [])) {
$fields[] = TextInput::make("OAUTH_{$providerEnvPrefix}_BASE_URL")
->label('Base URL')
->columnSpanFull()
->autocomplete(false)
->hidden(fn (Get $get) => !$get("OAUTH_{$providerEnvPrefix}_ENABLED"))
->default(env("OAUTH_{$providerEnvPrefix}_BASE_URL", ''))
->placeholder('Base URL');
}
$formFields[] = Section::make(ucfirst($providerName))
->columns(5)
->icon($providerConfig['icon'] ?? 'tabler-brand-oauth')
->collapsed(fn () => !env("OAUTH_{$providerEnvPrefix}_ENABLED", false))
->collapsible()
->schema($fields);
}
return $formFields;
}
private function miscSettings(): array private function miscSettings(): array
{ {
return [ return [

4
composer.lock generated
View File

@ -13973,7 +13973,7 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": [], "stability-flags": {},
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
@ -13984,6 +13984,6 @@
"ext-pdo": "*", "ext-pdo": "*",
"ext-zip": "*" "ext-zip": "*"
}, },
"platform-dev": [], "platform-dev": {},
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"
} }

View File

@ -29,7 +29,7 @@ return [
// Default providers // Default providers
'facebook' => [ 'facebook' => [
'enabled' => env('OAUTH_FACEBOOK_ENABLED'), 'enabled' => env('OAUTH_FACEBOOK_ENABLED'),
'icon' => 'tabler-brand-facebook', 'icon' => 'tabler-brand-facebook-f',
'color' => Color::hex('#1877f2'), 'color' => Color::hex('#1877f2'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_FACEBOOK_CLIENT_ID'), 'client_id' => env('OAUTH_FACEBOOK_CLIENT_ID'),
@ -38,7 +38,7 @@ return [
], ],
'x' => [ 'x' => [
'enabled' => env('OAUTH_X_ENABLED'), 'enabled' => env('OAUTH_X_ENABLED'),
'icon' => 'tabler-brand-x', 'icon' => 'tabler-brand-x-f',
'color' => Color::hex('#1da1f2'), 'color' => Color::hex('#1da1f2'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_X_CLIENT_ID'), 'client_id' => env('OAUTH_X_CLIENT_ID'),
@ -47,7 +47,7 @@ return [
], ],
'linkedin' => [ 'linkedin' => [
'enabled' => env('OAUTH_LINKEDIN_ENABLED'), 'enabled' => env('OAUTH_LINKEDIN_ENABLED'),
'icon' => 'tabler-brand-linkedin', 'icon' => 'tabler-brand-linkedin-f',
'color' => Color::hex('#0a66c2'), 'color' => Color::hex('#0a66c2'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_LINKEDIN_CLIENT_ID'), 'client_id' => env('OAUTH_LINKEDIN_CLIENT_ID'),
@ -56,7 +56,7 @@ return [
], ],
'google' => [ 'google' => [
'enabled' => env('OAUTH_GOOGLE_ENABLED'), 'enabled' => env('OAUTH_GOOGLE_ENABLED'),
'icon' => 'tabler-brand-google', 'icon' => 'tabler-brand-google-f',
'color' => Color::hex('#4285f4'), 'color' => Color::hex('#4285f4'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_GOOGLE_CLIENT_ID'), 'client_id' => env('OAUTH_GOOGLE_CLIENT_ID'),
@ -65,7 +65,7 @@ return [
], ],
'github' => [ 'github' => [
'enabled' => env('OAUTH_GITHUB_ENABLED'), 'enabled' => env('OAUTH_GITHUB_ENABLED'),
'icon' => 'tabler-brand-github', 'icon' => 'tabler-brand-github-f',
'color' => Color::hex('#4078c0'), 'color' => Color::hex('#4078c0'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_GITHUB_CLIENT_ID'), 'client_id' => env('OAUTH_GITHUB_CLIENT_ID'),
@ -83,7 +83,7 @@ return [
], ],
'bitbucket' => [ 'bitbucket' => [
'enabled' => env('OAUTH_BITBUCKET_ENABLED'), 'enabled' => env('OAUTH_BITBUCKET_ENABLED'),
'icon' => 'tabler-brand-bitbucket', 'icon' => 'tabler-brand-bitbucket-f',
'color' => Color::hex('#205081'), 'color' => Color::hex('#205081'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_BITBUCKET_CLIENT_ID'), 'client_id' => env('OAUTH_BITBUCKET_CLIENT_ID'),
@ -114,7 +114,7 @@ return [
], ],
'discord' => [ 'discord' => [
'enabled' => env('OAUTH_DISCORD_ENABLED'), 'enabled' => env('OAUTH_DISCORD_ENABLED'),
'icon' => 'tabler-brand-discord', 'icon' => 'tabler-brand-discord-f',
'color' => Color::hex('#5865F2'), 'color' => Color::hex('#5865F2'),
'service' => [ 'service' => [
'client_id' => env('OAUTH_DISCORD_CLIENT_ID'), 'client_id' => env('OAUTH_DISCORD_CLIENT_ID'),
@ -124,7 +124,7 @@ return [
], ],
'steam' => [ 'steam' => [
'enabled' => env('OAUTH_STEAM_ENABLED'), 'enabled' => env('OAUTH_STEAM_ENABLED'),
'icon' => 'tabler-brand-steam', 'icon' => 'tabler-brand-steam-f',
'color' => Color::hex('#00adee'), 'color' => Color::hex('#00adee'),
'service' => [ 'service' => [
'client_secret' => env('OAUTH_STEAM_CLIENT_SECRET'), 'client_secret' => env('OAUTH_STEAM_CLIENT_SECRET'),