mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-11-04 14:56:51 +01:00 
			
		
		
		
	Clean up constructors
This commit is contained in:
		
							parent
							
								
									305374192f
								
							
						
					
					
						commit
						e349f3fc58
					
				@ -10,10 +10,10 @@ class OAuthProvider
 | 
			
		||||
    /** @var OAuthSchemaInterface[] */
 | 
			
		||||
    private array $providers = [];
 | 
			
		||||
 | 
			
		||||
    /** @return OAuthSchemaInterface[] */
 | 
			
		||||
    public function get(): array
 | 
			
		||||
    /** @return OAuthSchemaInterface[] | OAuthSchemaInterface */
 | 
			
		||||
    public function get(?string $id = null): array|OAuthSchemaInterface
 | 
			
		||||
    {
 | 
			
		||||
        return $this->providers;
 | 
			
		||||
        return $id ? $this->providers[$id] : $this->providers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** @return OAuthSchemaInterface[] */
 | 
			
		||||
@ -32,8 +32,8 @@ class OAuthProvider
 | 
			
		||||
 | 
			
		||||
        config()->set('services.' . $provider->getId(), array_merge($provider->getServiceConfig(), ['redirect' => '/auth/oauth/callback/' . $provider->getId()]));
 | 
			
		||||
 | 
			
		||||
        if ($provider->getProviderClass()) {
 | 
			
		||||
            Event::listen(fn (SocialiteWasCalled $event) => $event->extendSocialite($provider->getId(), $provider->getProviderClass()));
 | 
			
		||||
        if ($provider->getSocialiteProvider()) {
 | 
			
		||||
            Event::listen(fn (SocialiteWasCalled $event) => $event->extendSocialite($provider->getId(), $provider->getSocialiteProvider()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->providers[$provider->getId()] = $provider;
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ interface OAuthSchemaInterface
 | 
			
		||||
    public function getId(): string;
 | 
			
		||||
 | 
			
		||||
    /** @return ?class-string */
 | 
			
		||||
    public function getProviderClass(): ?string;
 | 
			
		||||
    public function getSocialiteProvider(): ?string;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return array<string, string|string[]|bool|null>
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ final class AuthentikSchema extends OAuthSchema
 | 
			
		||||
        return 'authentik';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getProviderClass(): string
 | 
			
		||||
    public function getSocialiteProvider(): string
 | 
			
		||||
    {
 | 
			
		||||
        return Provider::class;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -4,21 +4,17 @@ namespace App\Extensions\OAuth\Schemas;
 | 
			
		||||
 | 
			
		||||
final class CommonSchema extends OAuthSchema
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(private string $id, private ?string $providerClass, private ?string $icon, private ?string $hexColor)
 | 
			
		||||
    {
 | 
			
		||||
        parent::__construct();
 | 
			
		||||
    }
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly string $id,
 | 
			
		||||
        private readonly ?string $icon,
 | 
			
		||||
        private readonly ?string $hexColor
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    public function getId(): string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getProviderClass(): ?string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->providerClass;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getIcon(): ?string
 | 
			
		||||
    {
 | 
			
		||||
        return $this->icon;
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ final class DiscordSchema extends OAuthSchema
 | 
			
		||||
        return 'discord';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getProviderClass(): string
 | 
			
		||||
    public function getSocialiteProvider(): string
 | 
			
		||||
    {
 | 
			
		||||
        return Provider::class;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -6,37 +6,13 @@ use App\Extensions\OAuth\OAuthSchemaInterface;
 | 
			
		||||
use Filament\Forms\Components\Component;
 | 
			
		||||
use Filament\Forms\Components\TextInput;
 | 
			
		||||
use Filament\Forms\Components\Wizard\Step;
 | 
			
		||||
use Illuminate\Support\Facades\Event;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
use SocialiteProviders\Manager\SocialiteWasCalled;
 | 
			
		||||
 | 
			
		||||
abstract class OAuthSchema implements OAuthSchemaInterface
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * @var array<string, static>
 | 
			
		||||
     */
 | 
			
		||||
    protected static array $providers = [];
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return self|static[]
 | 
			
		||||
     */
 | 
			
		||||
    public static function get(?string $id = null): array|self
 | 
			
		||||
    {
 | 
			
		||||
        return $id ? static::$providers[$id] : static::$providers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        if ($this->getProviderClass()) {
 | 
			
		||||
            Event::listen(function (SocialiteWasCalled $event) {
 | 
			
		||||
                $event->extendSocialite($this->getId(), $this->getProviderClass());
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    abstract public function getId(): string;
 | 
			
		||||
 | 
			
		||||
    public function getProviderClass(): ?string
 | 
			
		||||
    public function getSocialiteProvider(): ?string
 | 
			
		||||
    {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ final class SteamSchema extends OAuthSchema
 | 
			
		||||
        return 'steam';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getProviderClass(): string
 | 
			
		||||
    public function getSocialiteProvider(): string
 | 
			
		||||
    {
 | 
			
		||||
        return Provider::class;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
namespace App\Http\Controllers\Auth;
 | 
			
		||||
 | 
			
		||||
use App\Extensions\OAuth\Schemas\OAuthSchema;
 | 
			
		||||
use App\Extensions\OAuth\OAuthProvider;
 | 
			
		||||
use App\Filament\Pages\Auth\EditProfile;
 | 
			
		||||
use App\Http\Controllers\Controller;
 | 
			
		||||
use App\Models\User;
 | 
			
		||||
@ -18,7 +18,8 @@ class OAuthController extends Controller
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        private readonly AuthManager $auth,
 | 
			
		||||
        private readonly UserUpdateService $updateService
 | 
			
		||||
        private readonly UserUpdateService $updateService,
 | 
			
		||||
        private readonly OAuthProvider $oauthProvider
 | 
			
		||||
    ) {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -27,7 +28,7 @@ class OAuthController extends Controller
 | 
			
		||||
    public function redirect(string $driver): RedirectResponse
 | 
			
		||||
    {
 | 
			
		||||
        // Driver is disabled - redirect to normal login
 | 
			
		||||
        if (!OAuthSchema::get($driver)->isEnabled()) {
 | 
			
		||||
        if (!$this->oauthProvider->get($driver)->isEnabled()) {
 | 
			
		||||
            return redirect()->route('auth.login');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -40,7 +41,7 @@ class OAuthController extends Controller
 | 
			
		||||
    public function callback(Request $request, string $driver): RedirectResponse
 | 
			
		||||
    {
 | 
			
		||||
        // Driver is disabled - redirect to normal login
 | 
			
		||||
        if (!OAuthSchema::get($driver)->isEnabled()) {
 | 
			
		||||
        if (!$this->oauthProvider->get($driver)->isEnabled()) {
 | 
			
		||||
            return redirect()->route('auth.login');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -18,14 +18,14 @@ class OAuthServiceProvider extends ServiceProvider
 | 
			
		||||
        $this->app->singleton(OAuthProvider::class, function ($app) {
 | 
			
		||||
            $provider = new OAuthProvider();
 | 
			
		||||
            // Default OAuth providers included with Socialite
 | 
			
		||||
            $provider->register(new CommonSchema('facebook', null, 'tabler-brand-facebook-f', '#1877f2'));
 | 
			
		||||
            $provider->register(new CommonSchema('x', null, 'tabler-brand-x-f', '#1da1f2'));
 | 
			
		||||
            $provider->register(new CommonSchema('linkedin', null, 'tabler-brand-linkedin-f', '#0a66c2'));
 | 
			
		||||
            $provider->register(new CommonSchema('google', null, 'tabler-brand-google-f', '#4285f4'));
 | 
			
		||||
            $provider->register(new CommonSchema('facebook', 'tabler-brand-facebook-f', '#1877f2'));
 | 
			
		||||
            $provider->register(new CommonSchema('x', 'tabler-brand-x-f', '#1da1f2'));
 | 
			
		||||
            $provider->register(new CommonSchema('linkedin', 'tabler-brand-linkedin-f', '#0a66c2'));
 | 
			
		||||
            $provider->register(new CommonSchema('google', 'tabler-brand-google-f', '#4285f4'));
 | 
			
		||||
            $provider->register(new GithubSchema());
 | 
			
		||||
            $provider->register(new GitlabSchema());
 | 
			
		||||
            $provider->register(new CommonSchema('bitbucket', null, 'tabler-brand-bitbucket-f', '#205081'));
 | 
			
		||||
            $provider->register(new CommonSchema('slack', null, 'tabler-brand-slack', '#6ecadc'));
 | 
			
		||||
            $provider->register(new CommonSchema('bitbucket', 'tabler-brand-bitbucket-f', '#205081'));
 | 
			
		||||
            $provider->register(new CommonSchema('slack', 'tabler-brand-slack', '#6ecadc'));
 | 
			
		||||
 | 
			
		||||
            // Additional OAuth providers from socialiteproviders.com
 | 
			
		||||
            $provider->register(new AuthentikSchema());
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user