-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOAuthProviderFactory.php
102 lines (86 loc) · 2.65 KB
/
OAuthProviderFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
* Class OAuthProviderFactory
*
* @created 25.03.2024
* @author smiley <[email protected]>
* @copyright 2024 smiley
* @license MIT
*/
declare(strict_types=1);
namespace chillerlan\OAuth;
use chillerlan\OAuth\Core\{OAuth1Interface, OAuth2Interface, OAuthInterface};
use chillerlan\OAuth\Providers\ProviderException;
use chillerlan\OAuth\Storage\{MemoryStorage, OAuthStorageInterface};
use chillerlan\Settings\SettingsContainerInterface;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\{RequestFactoryInterface, StreamFactoryInterface, UriFactoryInterface};
use Psr\Log\{LoggerInterface, NullLogger};
use function class_exists;
/**
* A simple OAuth provider factory (not sure if that clears the mess...)
*/
class OAuthProviderFactory{
protected ClientInterface $http;
protected RequestFactoryInterface $requestFactory;
protected StreamFactoryInterface $streamFactory;
protected UriFactoryInterface $uriFactory;
protected LoggerInterface $logger;
/**
* thank you PHP-FIG for absolutely nothing
*/
public function __construct(
ClientInterface $http,
RequestFactoryInterface $requestFactory,
StreamFactoryInterface $streamFactory,
UriFactoryInterface $uriFactory,
LoggerInterface $logger = new NullLogger,
){
$this->http = $http;
$this->requestFactory = $requestFactory;
$this->streamFactory = $streamFactory;
$this->uriFactory = $uriFactory;
$this->logger = $logger;
}
/**
* invokes a provider instance with the given $options and $storage interfaces
*/
public function getProvider(
string $providerFQN,
SettingsContainerInterface|OAuthOptions $options = new OAuthOptions,
OAuthStorageInterface $storage = new MemoryStorage,
):OAuthInterface|OAuth1Interface|OAuth2Interface{
if(!class_exists($providerFQN)){
throw new ProviderException('invalid provider class given');
}
return new $providerFQN(
$options,
$this->http,
$this->requestFactory,
$this->streamFactory,
$this->uriFactory,
$storage,
$this->logger,
);
}
/** @codeCoverageIgnore */
public function setLogger(LoggerInterface $logger):static{
$this->logger = $logger;
return $this;
}
/*
* factory getters (convenience)
*/
/** @codeCoverageIgnore */
public function getRequestFactory():RequestFactoryInterface{
return $this->requestFactory;
}
/** @codeCoverageIgnore */
public function getStreamFactory():StreamFactoryInterface{
return $this->streamFactory;
}
/** @codeCoverageIgnore */
public function getUriFactory():UriFactoryInterface{
return $this->uriFactory;
}
}