Completed
Push — develop ( 27afa3...8e20cf )
by Nate
06:58
created

Settings   A

Complexity

Total Complexity 30

Size/Duplication

Total Lines 368
Duplicated Lines 0 %

Coupling/Cohesion

Components 6
Dependencies 5

Test Coverage

Coverage 13.64%

Importance

Changes 0
Metric Value
wmc 30
lcom 6
cbo 5
dl 0
loc 368
ccs 12
cts 88
cp 0.1364
rs 10
c 0
b 0
f 0

13 Methods

Rating   Name   Duplication   Size   Complexity  
A getEncryptStorageData() 0 4 1
A setEncryptStorageData() 0 5 1
A getAutoPopulateTokenEnvironments() 0 4 1
A setAutoPopulateTokenEnvironments() 0 5 1
A getApplyProviderEnvironmentsToToken() 0 4 1
A setApplyProviderEnvironmentsToToken() 0 5 1
A getEnvironment() 0 8 2
A setEnvironment() 0 5 1
A getEnvironments() 0 8 2
A setEnvironments() 0 5 1
A getDefaultEnvironments() 0 11 2
A setDefaultEnvironments() 0 5 1
A getProviderEnvironmentView() 0 6 1
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://flipboxfactory.com/software/patron/license
6
 * @link       https://www.flipboxfactory.com/software/patron/
7
 */
8
9
namespace flipbox\patron\models;
10
11
use Craft;
12
use craft\base\Model;
13
use craft\helpers\StringHelper;
14
use craft\validators\UriValidator;
15
use flipbox\craft\ember\helpers\ModelHelper;
16
use flipbox\craft\ember\helpers\UrlHelper;
17
use flipbox\craft\ember\views\Template;
18
use flipbox\craft\ember\views\ViewInterface;
19
use yii\base\Exception;
20
21
/**
22
 * @author Flipbox Factory <[email protected]>
23
 * @since 1.0.0
24
 */
25
class Settings extends Model
26
{
27
    /**
28
     * The callback url path
29
     */
30
    const DEFAULT_CALLBACK_URL_PATH = 'patron/authorization/callback';
31
32
    /**
33
     * Tge callback url route
34
     */
35
    const DEFAULT_CALLBACK_ROUTE = self::DEFAULT_CALLBACK_URL_PATH;
36
37
    /**
38
     * @var string|null
39
     */
40
    private $callbackUrlPath;
41
42
    /**
43
     * @var array
44
     */
45
    private $environments = [];
46
47
    /**
48
     * @var string
49
     */
50
    private $environment = null;
51
52
    /**
53
     * Encrypt data in storage
54
     *
55
     * @var bool
56
     */
57
    private $encryptStorageData = true;
58
59
    /**
60
     * Default environments to apply to new Providers when they're created
61
     *
62
     * @var array
63
     */
64
    private $defaultEnvironments = [];
65
66
    /**
67
     * Auto populate token enviornments upon creation.
68
     *
69
     * @var bool
70
     */
71
    private $autoPopulateTokenEnvironments = true;
72
73
    /**
74
     * If [[Settings::$autoPopulateTokenEnvironments]] is true, and this is enabled, the environments
75
     * will mirror the provider environments.
76
     *
77
     * @var bool
78
     */
79
    private $applyProviderEnvironmentsToToken = false;
80
81
82
    /*******************************************
83
     * ENCRYPTION
84
     *******************************************/
85
86
    /**
87
     * @return bool
88
     */
89
    public function getEncryptStorageData(): bool
90
    {
91
        return (bool)$this->encryptStorageData;
92
    }
93
94
    /**
95
     * @param bool $value
96
     * @return $this
97
     */
98
    public function setEncryptStorageData(bool $value)
99
    {
100
        $this->encryptStorageData = $value;
101
        return $this;
102
    }
103
104
    /*******************************************
105
     * TOKEN ENVIORNMENTS
106
     *******************************************/
107
108
    /**
109
     * @return bool
110
     */
111 3
    public function getAutoPopulateTokenEnvironments(): bool
112
    {
113 3
        return (bool)$this->autoPopulateTokenEnvironments;
114
    }
115
116
    /**
117
     * @param bool $value
118
     * @return $this
119
     */
120
    public function setAutoPopulateTokenEnvironments(bool $value)
121
    {
122
        $this->autoPopulateTokenEnvironments = $value;
123
        return $this;
124
    }
125
126
    /**
127
     * @return bool
128
     */
129
    public function getApplyProviderEnvironmentsToToken(): bool
130
    {
131
        return (bool)$this->applyProviderEnvironmentsToToken;
132
    }
133
134
    /**
135
     * @param bool $value
136
     * @return $this
137
     */
138
    public function setApplyProviderEnvironmentsToToken(bool $value)
139
    {
140
        $this->applyProviderEnvironmentsToToken = $value;
141
        return $this;
142
    }
143
144
    /*******************************************
145
     * ENVIRONMENTS
146
     *******************************************/
147
148
    /**
149
     * @return string
150
     */
151
    public function getEnvironment(): string
152
    {
153
        if ($this->environment === null) {
154
            $this->environment = Craft::$app->getConfig()->env;
155
        }
156
157
        return $this->environment;
158
    }
159
160
    /**
161
     * @param string $environment
162
     * @return $this
163
     */
164
    public function setEnvironment(string $environment)
165
    {
166
        $this->environment = $environment;
167
        return $this;
168
    }
169
170
    /**
171
     * @return array
172
     */
173 3
    public function getEnvironments(): array
174
    {
175 3
        if (empty($this->environments)) {
176 3
            $this->environments[] = Craft::$app->getConfig()->env;
177
        }
178
179 3
        return $this->environments;
180
    }
181
182
    /**
183
     * @param array $environments
184
     * @return $this
185
     */
186
    public function setEnvironments(array $environments)
187
    {
188
        $this->environments = $environments;
189
        return $this;
190
    }
191
192
    /**
193
     * @return array
194
     */
195 3
    public function getDefaultEnvironments(): array
196
    {
197 3
        if (empty($this->defaultEnvironments)) {
198 3
            $this->defaultEnvironments[] = Craft::$app->getConfig()->env;
199
        }
200
201 3
        return array_intersect(
202 3
            $this->getEnvironments(),
203 3
            $this->defaultEnvironments
204
        );
205
    }
206
207
    /**
208
     * @param array $environments
209
     * @return $this
210
     */
211
    public function setDefaultEnvironments(array $environments)
212
    {
213
        $this->defaultEnvironments = $environments;
214
        return $this;
215
    }
216
217
    /*******************************************
218
     * CALLBACK
219
     *******************************************/
220
221
    /**
222
     * @return string
223
     */
224
    public function getCallbackUrl(): string
225
    {
226
        try {
227
            if ($this->callbackUrlPath === null) {
228
                return UrlHelper::siteActionUrl(self::DEFAULT_CALLBACK_URL_PATH);
229
            }
230
231
            return UrlHelper::siteUrl($this->callbackUrlPath);
232
        } catch (Exception $e) {
233
            if ($this->callbackUrlPath === null) {
234
                return UrlHelper::actionUrl(self::DEFAULT_CALLBACK_URL_PATH);
235
            }
236
237
            return UrlHelper::url($this->callbackUrlPath);
238
        }
239
    }
240
241
    /**
242
     * @param $callbackUrlPath
243
     * @return $this
244
     * @throws \yii\base\Exception
245
     */
246
    public function setCallbackUrlPath($callbackUrlPath)
247
    {
248
        $callbackUrlPath = trim(
249
            StringHelper::removeLeft(
250
                (string)$callbackUrlPath,
251
                UrlHelper::siteUrl()
252
            ),
253
            ' /'
254
        );
255
256
        $this->callbackUrlPath = empty($callbackUrlPath) ? null : $callbackUrlPath;
257
258
        return $this;
259
    }
260
261
    /**
262
     * @return string|null
263
     */
264
    public function getCallbackUrlPath()
265
    {
266
        return $this->callbackUrlPath;
267
    }
268
269
    /**
270
     * @return array|null
271
     */
272
    public function getCallbackUrlRule()
273
    {
274
        if ($path = $this->callbackUrlPath) {
275
            return [
276
                $path => self::DEFAULT_CALLBACK_ROUTE
277
            ];
278
        }
279
        return null;
280
    }
281
282
283
    /*******************************************
284
     * PROVIDER SETTINGS VIEW (not currently editable)
285
     *******************************************/
286
287
    /**
288
     * @return ViewInterface
289
     */
290
    public function getProviderEnvironmentView(): ViewInterface
291
    {
292
        return new Template([
293
            'template' => 'patron/_cp/provider/_environment'
294
        ]);
295
    }
296
297
    /**
298
     * @return ViewInterface
299
     */
300
    public function getProviderSettingsView(): ViewInterface
301
    {
302
        return new Template([
303
            'template' => 'patron/_cp/provider/_settings'
304
        ]);
305
    }
306
307
    /**
308
     * @return ViewInterface
309
     */
310
    public function getTokenView(): ViewInterface
311
    {
312
        return new Template([
313
            'template' => 'patron/_modal/token'
314
        ]);
315
    }
316
317
318
    /**
319
     * @inheritdoc
320
     */
321
    public function rules()
322
    {
323
        return array_merge(
324
            parent::rules(),
325
            [
326
                [
327
                    [
328
                        'callbackUrlPath'
329
                    ],
330
                    UriValidator::class
331
                ],
332
                [
333
                    [
334
                        'encryptStorageData',
335
                        'applyProviderEnvironmentsToToken',
336
                        'autoPopulateTokenEnvironments'
337
                    ],
338
                    'boolean'
339
                ],
340
                [
341
                    [
342
                        'callbackUrlPath',
343
                        'defaultEnvironments',
344
                        'encryptStorageData',
345
                        'environments',
346
                        'applyProviderEnvironmentsToToken',
347
                        'autoPopulateTokenEnvironments',
348
                    ],
349
                    'safe',
350
                    'on' => [
351
                        ModelHelper::SCENARIO_DEFAULT
352
                    ]
353
                ]
354
            ]
355
        );
356
    }
357
358
    /**
359
     * @inheritdoc
360
     */
361
    public function attributes()
362
    {
363
        return array_merge(
364
            parent::attributes(),
365
            [
366
                'callbackUrlPath',
367
                'encryptStorageData',
368
                'environments',
369
                'applyProviderEnvironmentsToToken',
370
                'autoPopulateTokenEnvironments',
371
            ]
372
        );
373
    }
374
375
    /**
376
     * @inheritdocå
377
     */
378
    public function attributeLabels()
379
    {
380
        return array_merge(
381
            parent::attributeLabels(),
382
            [
383
                'callbackUrlPath' => Craft::t('patron', 'Callback Url Path'),
384
                'defaultEnvironments' => Craft::t('patron', 'Default Enviornments'),
385
                'encryptStorageData' => Craft::t('patron', 'Encrypt Storage Data'),
386
                'environments' => Craft::t('patron', 'Environments'),
387
                'autoPopulateTokenEnvironments' => Craft::t('patron', 'Auto Populate Token Environments'),
388
                'applyProviderEnvironmentsToToken' => Craft::t('patron', 'Apply Provider Environments to Token')
389
            ]
390
        );
391
    }
392
}
393