Passed
Pull Request — master (#190)
by AD
05:46 queued 03:08
created

CollectionFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Test Coverage

Coverage 66.67%

Importance

Changes 3
Bugs 0 Features 1
Metric Value
eloc 51
dl 0
loc 105
ccs 12
cts 18
cp 0.6667
rs 10
c 3
b 0
f 1
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A factory() 0 22 2
A register() 0 3 1
A has() 0 3 1
A __construct() 0 4 2
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 */
6
declare(strict_types=1);
7
8
namespace SocialConnect\Auth;
9
10
use LogicException;
11
use SocialConnect\OAuth1;
12
use SocialConnect\OAuth2;
13
use SocialConnect\OpenID;
14
use SocialConnect\OpenIDConnect;
15
16
class CollectionFactory implements FactoryInterface
17
{
18
    /**
19
     * @var array
20
     */
21
    protected $providers = [
22
        // OAuth1
23
        OAuth1\Provider\Twitter::NAME       => OAuth1\Provider\Twitter::class,
24
        OAuth1\Provider\Px500::NAME         => OAuth1\Provider\Px500::class,
25
        OAuth1\Provider\Tumblr::NAME        => OAuth1\Provider\Tumblr::class,
26
        OAuth1\Provider\Atlassian::NAME     => OAuth1\Provider\Atlassian::class,
27
        OAuth1\Provider\Trello::NAME        => OAuth1\Provider\Trello::class,
28
        // OAuth2
29
        OAuth2\Provider\Facebook::NAME      => OAuth2\Provider\Facebook::class,
30
        //OAuth2\Provider\Google::NAME        => OAuth2\Provider\Google::class,
31
        OAuth2\Provider\GitHub::NAME        => OAuth2\Provider\GitHub::class,
32
        OAuth2\Provider\Instagram::NAME     => OAuth2\Provider\Instagram::class,
33
        OAuth2\Provider\Vk::NAME            => OAuth2\Provider\Vk::class,
34
        OAuth2\Provider\SmashCast::NAME     => OAuth2\Provider\SmashCast::class,
35
        OAuth2\Provider\Slack::NAME         => OAuth2\Provider\Slack::class,
36
        OAuth2\Provider\Steein::NAME        => OAuth2\Provider\Steein::class,
37
        OAuth2\Provider\Twitch::NAME        => OAuth2\Provider\Twitch::class,
38
        OAuth2\Provider\Bitbucket::NAME     => OAuth2\Provider\Bitbucket::class,
39
        OAuth2\Provider\Amazon::NAME        => OAuth2\Provider\Amazon::class,
40
        OAuth2\Provider\GitLab::NAME        => OAuth2\Provider\GitLab::class,
41
        OAuth2\Provider\Vimeo::NAME         => OAuth2\Provider\Vimeo::class,
42
        OAuth2\Provider\DigitalOcean::NAME  => OAuth2\Provider\DigitalOcean::class,
43
        OAuth2\Provider\Yandex::NAME        => OAuth2\Provider\Yandex::class,
44
        OAuth2\Provider\MailRu::NAME        => OAuth2\Provider\MailRu::class,
45
        OAuth2\Provider\Microsoft::NAME     => OAuth2\Provider\Microsoft::class,
46
        OAuth2\Provider\Odnoklassniki::NAME => OAuth2\Provider\Odnoklassniki::class,
47
        OAuth2\Provider\Discord::NAME       => OAuth2\Provider\Discord::class,
48
        OAuth2\Provider\Reddit::NAME        => OAuth2\Provider\Reddit::class,
49
        OAuth2\Provider\LinkedIn::NAME      => OAuth2\Provider\LinkedIn::class,
50
        OAuth2\Provider\Yahoo::NAME         => OAuth2\Provider\Yahoo::class,
51
        OAuth2\Provider\WordPress::NAME     => OAuth2\Provider\WordPress::class,
52
        OAuth2\Provider\Meetup::NAME        => OAuth2\Provider\Meetup::class,
53
        // OpenID
54
        OpenID\Provider\Steam::NAME         => OpenID\Provider\Steam::class,
55
        // OpenIDConnect
56
        OpenIDConnect\Provider\Apple::NAME        => OpenIDConnect\Provider\Apple::class,
57
        OpenIDConnect\Provider\Google::NAME       => OpenIDConnect\Provider\Google::class,
58
        OpenIDConnect\Provider\Keycloak::NAME     => OpenIDConnect\Provider\Keycloak::class,
59
        OpenIDConnect\Provider\PixelPin::NAME     => OpenIDConnect\Provider\PixelPin::class,
60
        OpenIDConnect\Provider\AzureAD::NAME      => OpenIDConnect\Provider\AzureAD::class,
61
    ];
62
63
    /**
64
     * @param array $providers
65
     */
66 3
    public function __construct(?array $providers = null)
67
    {
68 3
        if ($providers) {
69
            $this->providers = $providers;
70
        }
71
    }
72
73
    /**
74
     * @param string $id
75
     * @return bool
76
     */
77
    public function has($id)
78
    {
79
        return isset($this->providers[$id]);
80
    }
81
82
    /**
83
     * @param string $id
84
     * @param array $parameters
85
     * @param Service $service
86
     * @return \SocialConnect\Provider\AbstractBaseProvider
87
     */
88 2
    public function factory($id, array $parameters, Service $service)
89
    {
90 2
        $id = strtolower($id);
91
92 2
        if (!isset($this->providers[$id])) {
93
            throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
94
        }
95
96
        /** @var string $providerClassName */
97 2
        $providerClassName = $this->providers[$id];
98
99
        /** @var \SocialConnect\Provider\AbstractBaseProvider $provider */
100 2
        $provider = new $providerClassName(
101 2
            $service->getHttpStack(),
102 2
            $service->getSession(),
103 2
            array_merge(
104
                $parameters,
105 2
                $service->getConfig()
106
            )
107
        );
108
109 2
        return $provider;
110
    }
111
112
    /**
113
     * Register new provider to Provider's collection
114
     *
115
     * @param string $providerName
116
     * @param string $providerClass
117
     */
118
    public function register(string $providerName, string $providerClass)
119
    {
120
        $this->providers[$providerName] = $providerClass;
121
    }
122
}
123