Completed
Push — master ( 483eda...cb59ac )
by Дмитрий
03:04
created

CollectionFactory::factory()   B

Complexity

Conditions 5
Paths 10

Size

Total Lines 31
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 31
rs 8.439
cc 5
eloc 14
nc 10
nop 3
1
<?php
2
/**
3
 * SocialConnect project
4
 * @author: Patsura Dmitry https://github.com/ovr <[email protected]>
5
 */
6
7
namespace SocialConnect\Auth;
8
9
use LogicException;
10
11
/**
12
 * Class Factory
13
 * @package SocialConnect\Auth\Provider
14
 */
15
class CollectionFactory implements FactoryInterface
16
{
17
    /**
18
     * @var array
19
     */
20
    protected $providers = [
21
        'facebook' => \SocialConnect\Auth\Provider\Facebook::class,
22
        'github' => \SocialConnect\Auth\Provider\GitHub::class,
23
        'instagram' => \SocialConnect\Auth\Provider\Instagram::class,
24
        'twitter' => \SocialConnect\Auth\Provider\Twitter::class,
25
        'google' => \SocialConnect\Auth\Provider\Google::class,
26
        'vk' => \SocialConnect\Auth\Provider\Vk::class,
27
        'slack' => \SocialConnect\Auth\Provider\Slack::class,
28
        'twitch' => \SocialConnect\Auth\Provider\Twitch::class,
29
        'px500' => \SocialConnect\Auth\Provider\Px500::class,
30
        'bitbucket' => \SocialConnect\Auth\Provider\Bitbucket::class,
31
        'amazon' => \SocialConnect\Auth\Provider\Amazon::class,
32
        'gitlab' => \SocialConnect\Auth\Provider\GitLab::class,
33
        'vimeo' => \SocialConnect\Auth\Provider\Vimeo::class,
34
        'digital-ocean' => \SocialConnect\Auth\Provider\DigitalOcean::class,
35
        'yandex' => \SocialConnect\Auth\Provider\Yandex::class,
36
        'mail-ru' => \SocialConnect\Auth\Provider\MailRu::class,
37
        'odnoklassniki' => \SocialConnect\Auth\Provider\Odnoklassniki::class,
38
        'steam' => \SocialConnect\Auth\Provider\Steam::class,
39
    ];
40
41
    /**
42
     * @param array $providers
43
     */
44
    public function __construct(array $providers = null)
45
    {
46
        if ($providers) {
47
            $this->providers = $providers;
48
        }
49
    }
50
51
    /**
52
     * @param $id
53
     * @return bool
54
     */
55
    public function has($id)
56
    {
57
        return isset($this->providers[$id]);
58
    }
59
60
    /**
61
     * @param string $id
62
     * @param array $parameters
63
     * @param Service $service
64
     * @return AbstractBaseProvider
65
     */
66
    public function factory($id, array $parameters, Service $service)
67
    {
68
        $consumer = new Consumer($parameters['applicationId'], $parameters['applicationSecret']);
69
70
        if (isset($parameters['applicationPublic'])) {
71
            $consumer->setPublic($parameters['applicationPublic']);
72
        }
73
74
        $id = strtolower($id);
75
76
        if (!isset($this->providers[$id])) {
77
            throw new LogicException('Provider with $id = ' . $id . ' doest not exist');
78
        }
79
80
        $providerClassName = $this->providers[$id];
81
82
        /**
83
         * @var $provider AbstractBaseProvider
84
         */
85
        $provider = new $providerClassName($service, $consumer);
86
87
        if (isset($parameters['scope'])) {
88
            $provider->setScope($parameters['scope']);
89
        }
90
91
        if (isset($parameters['fields'])) {
92
            $provider->setFields($parameters['fields']);
93
        }
94
95
        return $provider;
96
    }
97
}
98