CollectionFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Test Coverage

Coverage 70%

Importance

Changes 3
Bugs 0 Features 1
Metric Value
eloc 49
c 3
b 0
f 1
dl 0
loc 103
ccs 14
cts 20
cp 0.7
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A factory() 0 22 2
A has() 0 3 1
A __construct() 0 4 2
A register() 0 3 1
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\PixelPin::NAME     => OpenIDConnect\Provider\PixelPin::class,
59
    ];
60
61
    /**
62
     * @param array $providers
63
     */
64 3
    public function __construct(array $providers = null)
65
    {
66 3
        if ($providers) {
67
            $this->providers = $providers;
68
        }
69 3
    }
70
71
    /**
72
     * @param string $id
73
     * @return bool
74
     */
75
    public function has($id)
76
    {
77
        return isset($this->providers[$id]);
78
    }
79
80
    /**
81
     * @param string $id
82
     * @param array $parameters
83
     * @param Service $service
84
     * @return \SocialConnect\Provider\AbstractBaseProvider
85
     */
86 2
    public function factory($id, array $parameters, Service $service)
87
    {
88 2
        $id = strtolower($id);
89
90 2
        if (!isset($this->providers[$id])) {
91
            throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
92
        }
93
94
        /** @var string $providerClassName */
95 2
        $providerClassName = $this->providers[$id];
96
97
        /** @var \SocialConnect\Provider\AbstractBaseProvider $provider */
98 2
        $provider = new $providerClassName(
99 2
            $service->getHttpStack(),
100 2
            $service->getSession(),
101 2
            array_merge(
102 2
                $parameters,
103 2
                $service->getConfig()
104
            )
105
        );
106
107 2
        return $provider;
108
    }
109
110
    /**
111
     * Register new provider to Provider's collection
112
     *
113
     * @param string $providerName
114
     * @param string $providerClass
115
     */
116
    public function register(string $providerName, string $providerClass)
117
    {
118
        $this->providers[$providerName] = $providerClass;
119
    }
120
}
121