-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy pathCollectionFactory.php
122 lines (111 loc) · 4.71 KB
/
CollectionFactory.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
/**
* SocialConnect project
* @author: Patsura Dmitry https://github.com/ovr <talk@dmtry.me>
*/
declare(strict_types=1);
namespace SocialConnect\Auth;
use LogicException;
use SocialConnect\OAuth1;
use SocialConnect\OAuth2;
use SocialConnect\OpenID;
use SocialConnect\OpenIDConnect;
class CollectionFactory implements FactoryInterface
{
/**
* @var array
*/
protected $providers = [
// OAuth1
OAuth1\Provider\Twitter::NAME => OAuth1\Provider\Twitter::class,
OAuth1\Provider\Px500::NAME => OAuth1\Provider\Px500::class,
OAuth1\Provider\Tumblr::NAME => OAuth1\Provider\Tumblr::class,
OAuth1\Provider\Atlassian::NAME => OAuth1\Provider\Atlassian::class,
OAuth1\Provider\Trello::NAME => OAuth1\Provider\Trello::class,
// OAuth2
OAuth2\Provider\Facebook::NAME => OAuth2\Provider\Facebook::class,
//OAuth2\Provider\Google::NAME => OAuth2\Provider\Google::class,
OAuth2\Provider\GitHub::NAME => OAuth2\Provider\GitHub::class,
OAuth2\Provider\Instagram::NAME => OAuth2\Provider\Instagram::class,
OAuth2\Provider\Vk::NAME => OAuth2\Provider\Vk::class,
OAuth2\Provider\SmashCast::NAME => OAuth2\Provider\SmashCast::class,
OAuth2\Provider\Slack::NAME => OAuth2\Provider\Slack::class,
OAuth2\Provider\Steein::NAME => OAuth2\Provider\Steein::class,
OAuth2\Provider\Twitch::NAME => OAuth2\Provider\Twitch::class,
OAuth2\Provider\Bitbucket::NAME => OAuth2\Provider\Bitbucket::class,
OAuth2\Provider\Amazon::NAME => OAuth2\Provider\Amazon::class,
OAuth2\Provider\GitLab::NAME => OAuth2\Provider\GitLab::class,
OAuth2\Provider\Vimeo::NAME => OAuth2\Provider\Vimeo::class,
OAuth2\Provider\DigitalOcean::NAME => OAuth2\Provider\DigitalOcean::class,
OAuth2\Provider\Yandex::NAME => OAuth2\Provider\Yandex::class,
OAuth2\Provider\MailRu::NAME => OAuth2\Provider\MailRu::class,
OAuth2\Provider\Microsoft::NAME => OAuth2\Provider\Microsoft::class,
OAuth2\Provider\Odnoklassniki::NAME => OAuth2\Provider\Odnoklassniki::class,
OAuth2\Provider\Discord::NAME => OAuth2\Provider\Discord::class,
OAuth2\Provider\Reddit::NAME => OAuth2\Provider\Reddit::class,
OAuth2\Provider\LinkedIn::NAME => OAuth2\Provider\LinkedIn::class,
OAuth2\Provider\Yahoo::NAME => OAuth2\Provider\Yahoo::class,
OAuth2\Provider\WordPress::NAME => OAuth2\Provider\WordPress::class,
OAuth2\Provider\Meetup::NAME => OAuth2\Provider\Meetup::class,
// OpenID
OpenID\Provider\Steam::NAME => OpenID\Provider\Steam::class,
// OpenIDConnect
OpenIDConnect\Provider\Apple::NAME => OpenIDConnect\Provider\Apple::class,
OpenIDConnect\Provider\Google::NAME => OpenIDConnect\Provider\Google::class,
OpenIDConnect\Provider\Keycloak::NAME => OpenIDConnect\Provider\Keycloak::class,
OpenIDConnect\Provider\PixelPin::NAME => OpenIDConnect\Provider\PixelPin::class,
OpenIDConnect\Provider\AzureAD::NAME => OpenIDConnect\Provider\AzureAD::class,
];
/**
* @param array $providers
*/
public function __construct(array $providers = null)
{
if ($providers) {
$this->providers = $providers;
}
}
/**
* @param string $id
* @return bool
*/
public function has($id)
{
return isset($this->providers[$id]);
}
/**
* @param string $id
* @param array $parameters
* @param Service $service
* @return \SocialConnect\Provider\AbstractBaseProvider
*/
public function factory($id, array $parameters, Service $service)
{
$id = strtolower($id);
if (!isset($this->providers[$id])) {
throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
}
/** @var string $providerClassName */
$providerClassName = $this->providers[$id];
/** @var \SocialConnect\Provider\AbstractBaseProvider $provider */
$provider = new $providerClassName(
$service->getHttpStack(),
$service->getSession(),
array_merge(
$parameters,
$service->getConfig()
)
);
return $provider;
}
/**
* Register new provider to Provider's collection
*
* @param string $providerName
* @param string $providerClass
*/
public function register(string $providerName, string $providerClass)
{
$this->providers[$providerName] = $providerClass;
}
}