Completed
Push — master ( 04ac75...81967b )
by Nate
17:06
created

Settings::getEnvironments()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

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