Skip to content

Commit c9361cd

Browse files
committed
♻️ Rework BuiltInInitializer and Cleanup
1 parent 40f5ead commit c9361cd

16 files changed

+189
-571
lines changed

packages/auth/src/OAuth/BuiltInOAuthProvider.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
namespace Tempest\Auth\OAuth;
66

7+
use Tempest\Auth\OAuth\Providers\GithubProvider;
8+
use Tempest\Auth\OAuth\Providers\GoogleProvider;
79
use Tempest\Support\IsEnumHelper;
810

911
enum BuiltInOAuthProvider: string
@@ -12,4 +14,24 @@ enum BuiltInOAuthProvider: string
1214

1315
case GITHUB = 'github';
1416
case GOOGLE = 'google';
17+
18+
/**
19+
* @return class-string<OAuthProvider>
20+
*/
21+
public function providerClass(): string
22+
{
23+
return match ($this) {
24+
self::GITHUB => GithubProvider::class,
25+
self::GOOGLE => GoogleProvider::class,
26+
};
27+
}
28+
29+
public static function fromProviderClass(string $providerClass): ?self
30+
{
31+
return match ($providerClass) {
32+
GithubProvider::class => self::GITHUB,
33+
GoogleProvider::class => self::GOOGLE,
34+
default => null,
35+
};
36+
}
1537
}

packages/auth/src/OAuth/Initializers/BuiltInOAuth2ProviderInitializer.php

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Auth\OAuth\Initializers;
6+
7+
use Tempest\Auth\OAuth\BuiltInOAuthProvider;
8+
use Tempest\Auth\OAuth\Exceptions\OAuthException;
9+
use Tempest\Auth\OAuth\OAuthProvider;
10+
use Tempest\Auth\OAuth\Providers\GithubProvider;
11+
use Tempest\Auth\OAuth\Providers\GoogleProvider;
12+
use Tempest\Container\Container;
13+
use Tempest\Container\DynamicInitializer;
14+
use Tempest\Http\Session\Session;
15+
use Tempest\Reflection\ClassReflector;
16+
use TypeError;
17+
use UnitEnum;
18+
use function \Tempest\env;
19+
20+
final class BuiltInOAuthProviderInitializer implements DynamicInitializer
21+
{
22+
public function canInitialize(ClassReflector $class, UnitEnum|string|null $tag): bool
23+
{
24+
return ($class->implements(OAuthProvider::class) || $class->is(OAuthProvider::class)) && $tag === 'from_env_variables';
25+
}
26+
27+
public function initialize(ClassReflector $class, UnitEnum|string|null $tag, Container $container): OAuthProvider
28+
{
29+
try {
30+
$providerType = BuiltInOAuthProvider::fromProviderClass($class->getName()) ?? throw new OAuthException(sprintf('No built-in OAuth2 provider found for class: "%s"', $class->getName()));
31+
32+
return match ($providerType) {
33+
BuiltInOAuthProvider::GOOGLE => new GoogleProvider(
34+
session: $container->get(Session::class),
35+
)->configure(
36+
clientId: env('GOOGLE_CLIENT_ID'),
37+
clientSecret: env('GOOGLE_CLIENT_SECRET'),
38+
redirectUri: env('GOOGLE_REDIRECT_URI')
39+
),
40+
BuiltInOAuthProvider::GITHUB => new GithubProvider(
41+
session: $container->get(Session::class),
42+
)->configure(
43+
clientId: env('GITHUB_CLIENT_ID'),
44+
clientSecret: env('GITHUB_CLIENT_SECRET'),
45+
redirectUri: env('GITHUB_REDIRECT_URI')
46+
),
47+
default => throw new OAuthException(sprintf('Cannot initialize "%s" built-in OAuth2 provider', $providerType->name))
48+
};
49+
} catch (TypeError $exception) {
50+
throw new OAuthException(
51+
sprintf('Failed to initialize OAuth2 provider for "%s". Ensure that the environment variables are set correctly.', $class->getName()),
52+
previous: $exception
53+
);
54+
}
55+
}
56+
}

packages/auth/src/OAuth/Initializers/OAuthManagerInitializer.php

Lines changed: 0 additions & 32 deletions
This file was deleted.

packages/auth/src/OAuth/IsOAuth2Provider.php

Lines changed: 0 additions & 67 deletions
This file was deleted.

packages/auth/src/OAuth/League/IsOauthProvider.php renamed to packages/auth/src/OAuth/IsOauthProvider.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22

33
declare(strict_types=1);
44

5-
namespace Tempest\Auth\OAuth\League;
5+
namespace Tempest\Auth\OAuth;
66

77
use GuzzleHttp\Exception\GuzzleException;
88
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
99
use League\OAuth2\Client\Provider\GenericProvider;
1010
use Tempest\Auth\OAuth\DataObjects\AccessToken;
1111
use Tempest\Auth\OAuth\DataObjects\OAuthUserData;
1212
use Tempest\Auth\OAuth\Exceptions\OAuthException;
13-
use Tempest\Container\Inject;
1413
use Tempest\Http\Session\Session;
15-
use function Tempest\map;
1614
use function Tempest\Support\str;
1715

1816
trait IsOauthProvider

packages/auth/src/OAuth/League/GoogleProvider.php

Lines changed: 0 additions & 52 deletions
This file was deleted.

packages/auth/src/OAuth/League/OAuthClient.php

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)