1 | <?php declare(strict_types=1); |
||
28 | class CorsSettings implements SettingsInterface |
||
29 | { |
||
30 | /** @see Settings */ |
||
31 | const KEY_ALLOWED_ORIGINS = 0; |
||
32 | |||
33 | /** @see Settings */ |
||
34 | const KEY_ALLOWED_METHODS = self::KEY_ALLOWED_ORIGINS + 1; |
||
35 | |||
36 | /** @see Settings */ |
||
37 | const KEY_ALLOWED_HEADERS = self::KEY_ALLOWED_METHODS + 1; |
||
38 | |||
39 | /** @see Settings */ |
||
40 | const KEY_EXPOSED_HEADERS = self::KEY_ALLOWED_HEADERS + 1; |
||
41 | |||
42 | /** @see Settings */ |
||
43 | const KEY_IS_USING_CREDENTIALS = self::KEY_EXPOSED_HEADERS + 1; |
||
44 | |||
45 | /** @see Settings */ |
||
46 | const KEY_FLIGHT_CACHE_MAX_AGE = self::KEY_IS_USING_CREDENTIALS + 1; |
||
47 | |||
48 | /** @see Settings */ |
||
49 | const KEY_IS_FORCE_ADD_METHODS = self::KEY_FLIGHT_CACHE_MAX_AGE + 1; |
||
50 | |||
51 | /** @see Settings */ |
||
52 | const KEY_IS_FORCE_ADD_HEADERS = self::KEY_IS_FORCE_ADD_METHODS + 1; |
||
53 | |||
54 | /** @see Settings */ |
||
55 | const KEY_IS_CHECK_HOST = self::KEY_IS_FORCE_ADD_HEADERS + 1; |
||
56 | |||
57 | /** Settings key */ |
||
58 | const KEY_LOG_IS_ENABLED = self::KEY_IS_CHECK_HOST + 1; |
||
59 | |||
60 | /** Settings key */ |
||
61 | const KEY_LAST = self::KEY_LOG_IS_ENABLED; |
||
62 | |||
63 | /** |
||
64 | * @var array |
||
65 | */ |
||
66 | private $appConfig; |
||
67 | |||
68 | /** |
||
69 | * @inheritdoc |
||
70 | */ |
||
71 | 2 | final public function get(array $appConfig): array |
|
72 | { |
||
73 | 2 | $this->appConfig = $appConfig; |
|
74 | |||
75 | 2 | $serverOriginScheme = $appConfig[A::KEY_APP_ORIGIN_SCHEMA]; |
|
76 | 2 | $serverOriginHost = $appConfig[A::KEY_APP_ORIGIN_HOST]; |
|
77 | 2 | $serverOriginPort = $appConfig[A::KEY_APP_ORIGIN_PORT] ? (int)$appConfig[A::KEY_APP_ORIGIN_PORT] : null; |
|
78 | |||
79 | 2 | $corsSettings = (new Settings())->init($serverOriginScheme, $serverOriginHost, $serverOriginPort); |
|
80 | |||
81 | // convert settings into Cors Settings and then into cache data |
||
82 | 2 | $packageSettings = $this->getSettings(); |
|
83 | |||
84 | 2 | $corsSettings->setAllowedOrigins($packageSettings[static::KEY_ALLOWED_ORIGINS]); |
|
85 | 2 | $corsSettings->setAllowedMethods($packageSettings[static::KEY_ALLOWED_METHODS]); |
|
86 | 2 | $corsSettings->setAllowedHeaders($packageSettings[static::KEY_ALLOWED_HEADERS]); |
|
87 | 2 | $corsSettings->setExposedHeaders($packageSettings[static::KEY_EXPOSED_HEADERS]); |
|
88 | 2 | $corsSettings->setPreFlightCacheMaxAge($packageSettings[static::KEY_FLIGHT_CACHE_MAX_AGE]); |
|
89 | |||
90 | 2 | $packageSettings[static::KEY_IS_USING_CREDENTIALS] === true ? |
|
91 | 2 | $corsSettings->setCredentialsSupported() : $corsSettings->setCredentialsNotSupported(); |
|
92 | |||
93 | 2 | $packageSettings[static::KEY_IS_FORCE_ADD_METHODS] === true ? |
|
94 | 1 | $corsSettings->enableAddAllowedMethodsToPreFlightResponse() : |
|
95 | 1 | $corsSettings->disableAddAllowedMethodsToPreFlightResponse(); |
|
96 | |||
97 | 2 | $packageSettings[static::KEY_IS_FORCE_ADD_HEADERS] === true ? |
|
98 | 1 | $corsSettings->enableAddAllowedHeadersToPreFlightResponse() : |
|
99 | 1 | $corsSettings->disableAddAllowedHeadersToPreFlightResponse(); |
|
100 | |||
101 | 2 | $packageSettings[static::KEY_IS_CHECK_HOST] === true ? |
|
102 | 2 | $corsSettings->enableCheckHost() : $corsSettings->disableCheckHost(); |
|
103 | |||
104 | 2 | return [$corsSettings->getData(), (bool)$packageSettings[static::KEY_LOG_IS_ENABLED]]; |
|
105 | } |
||
106 | |||
107 | /** |
||
108 | * @inheritdoc |
||
109 | */ |
||
110 | 2 | protected function getSettings(): array |
|
111 | { |
||
112 | 2 | $appConfig = $this->getAppConfig(); |
|
113 | |||
114 | 2 | $serverOrigin = $appConfig[A::KEY_APP_ORIGIN_URI] ?? null; |
|
115 | 2 | $isLogEnabled = (bool)($appConfig[A::KEY_IS_LOG_ENABLED] ?? false); |
|
116 | |||
117 | return [ |
||
118 | 2 | static::KEY_ALLOWED_ORIGINS => empty($serverOrigin) === true ? [] : [$serverOrigin], |
|
119 | 2 | static::KEY_ALLOWED_METHODS => [], |
|
120 | 2 | static::KEY_ALLOWED_HEADERS => [], |
|
121 | 2 | static::KEY_EXPOSED_HEADERS => [], |
|
122 | 2 | static::KEY_IS_USING_CREDENTIALS => false, |
|
123 | 2 | static::KEY_FLIGHT_CACHE_MAX_AGE => 0, |
|
124 | 2 | static::KEY_IS_FORCE_ADD_METHODS => false, |
|
125 | 2 | static::KEY_IS_FORCE_ADD_HEADERS => false, |
|
126 | 2 | static::KEY_IS_CHECK_HOST => true, |
|
127 | 2 | static::KEY_LOG_IS_ENABLED => $isLogEnabled, |
|
128 | ]; |
||
129 | } |
||
130 | |||
131 | /** |
||
132 | * @return mixed |
||
133 | */ |
||
134 | 2 | protected function getAppConfig() |
|
138 | } |
||
139 |