Completed
Push — master ( 495535...8d39af )
by Jared
02:28
created

Xero::userDetails()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
1
<?php
2
3
namespace Invoiced\OAuth1\Client\Server;
4
5
use Exception;
6
use League\OAuth1\Client\Credentials\TokenCredentials;
7
use League\OAuth1\Client\Server\Server;
8
use League\OAuth1\Client\Signature\SignatureInterface;
9
10
class Xero extends Server
11
{
12
    /**
13
     * @var string
14
     */
15
    protected $responseType = 'xml';
16
17
    /**
18
     * @var bool
19
     */
20
    protected $usePartnerApi = false;
21
22
    /**
23
     * {@inheritdoc}
24
     */
25
    public function __construct($clientCredentials, SignatureInterface $signature = null)
26
    {
27
        parent::__construct($clientCredentials, $signature);
28
29
        if (is_array($clientCredentials)) {
30
            $this->parseConfiguration($clientCredentials);
31
        }
32
    }
33
34
    /**
35
     * Sets whether the Xero partner API should be used.
36
     *
37
     * @param bool $enable
38
     *
39
     * @return self
40
     */
41
    public function usePartnerApi($enable = true)
42
    {
43
        $this->usePartnerApi = $enable;
44
45
        return $this;
46
    }
47
48
    /**
49
     * Checks if the Xero partner API is used.
50
     *
51
     * @return bool
52
     */
53
    public function getUsePartnerApi()
54
    {
55
        return $this->usePartnerApi;
56
    }
57
58
    public function urlTemporaryCredentials()
59
    {
60
        if ($this->usePartnerApi) {
61
            return 'https://api-partner.network.xero.com/oauth/RequestToken';
62
        }
63
64
        return 'https://api.xero.com/oauth/RequestToken';
65
    }
66
67
    public function urlAuthorization()
68
    {
69
        return 'https://api.xero.com/oauth/Authorize';
70
    }
71
72
    public function urlTokenCredentials()
73
    {
74
        if ($this->usePartnerApi) {
75
            return 'https://api-partner.network.xero.com/oauth/AccessToken';
76
        }
77
78
        return 'https://api.xero.com/oauth/AccessToken';
79
    }
80
81
    public function urlUserDetails()
82
    {
83
        return $this->notSupportedByXero();
84
    }
85
86
    public function userDetails($data, TokenCredentials $tokenCredentials)
87
    {
88
        return $this->notSupportedByXero();
89
    }
90
91
    public function userUid($data, TokenCredentials $tokenCredentials)
92
    {
93
        return $this->notSupportedByXero();
94
    }
95
96
    public function userEmail($data, TokenCredentials $tokenCredentials)
97
    {
98
        return $this->notSupportedByXero();
99
    }
100
101
    public function userScreenName($data, TokenCredentials $tokenCredentials)
102
    {
103
        return $this->notSupportedByXero();
104
    }
105
106
    protected function notSupportedByXero()
107
    {
108
        throw new Exception("Xero's API does not support retrieving the current user. Please see https://xero.uservoice.com/forums/5528-xero-accounting-api/suggestions/5688571-expose-which-user-connected-the-organization-via-o");
109
    }
110
111
    /**
112
     * Parse configuration array to set attributes.
113
     *
114
     * @param array $configuration
115
     */
116
    private function parseConfiguration(array $configuration = array())
117
    {
118
        $configToPropertyMap = array(
119
            'partner' => 'usePartnerApi',
120
        );
121
        foreach ($configToPropertyMap as $config => $property) {
122
            if (isset($configuration[$config])) {
123
                $this->$property = $configuration[$config];
124
            }
125
        }
126
    }
127
}
128