Skip to content

Commit

Permalink
Close #17
Browse files Browse the repository at this point in the history
  • Loading branch information
neomerx committed Apr 25, 2016
1 parent d77c751 commit b705fb4
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 166 deletions.
6 changes: 3 additions & 3 deletions config/cors-illuminate.php
Expand Up @@ -99,12 +99,12 @@
/**
* Pre-flight response cache max period in seconds.
*/
S::KEY_PRE_FLIGHT_MAX_AGE => 0,
S::KEY_FLIGHT_CACHE_MAX_AGE => 0,

/**
* If allowed methods should be added to pre-flight response when 'simple' method is requested.
*/
S::KEY_FORCE_ADD_METHODS => false,
S::KEY_IS_FORCE_ADD_METHODS => false,

/**
* If allowed headers should be added when request headers are 'simple' and
Expand All @@ -115,6 +115,6 @@
/**
* If request 'Host' header should be checked against server's origin.
*/
S::KEY_CHECK_HOST_HEADER => false,
S::KEY_IS_CHECK_HOST => false,

];
169 changes: 10 additions & 159 deletions src/Settings/Settings.php
Expand Up @@ -28,175 +28,26 @@ class Settings extends CorsSettings
/**
* If CORS handling should be logged (true/false, by default is turned off).
*/
const KEY_LOGS_ENABLED = 'logsEnabled';
const KEY_LOGS_ENABLED = 21;

/**
* Could be string or array.
* @return bool
*/
const KEY_SERVER_ORIGIN = 'serverOrigin';

/**
* A list of allowed request origins (lower-cased, no trail slashes).
*/
const KEY_ALLOWED_ORIGINS = 'origins';

/**
* A list of allowed request methods (case sensitive).
*/
const KEY_ALLOWED_METHODS = 'allowedMethods';

/**
* A list of allowed request headers (lower-cased).
*/
const KEY_ALLOWED_HEADERS = 'allowedHeaders';

/**
* A list of headers (case insensitive) which will be made accessible to user agent (browser) in response.
*/
const KEY_EXPOSED_HEADERS = 'exposedHeaders';

/**
* If access with credentials is supported by the resource.
*/
const KEY_IS_USING_CREDENTIALS = 'supportsCredentials';

/**
* Pre-flight response cache max period in seconds.
*/
const KEY_PRE_FLIGHT_MAX_AGE = 'maxAge';

/**
* If allowed methods should be added to pre-flight response when 'simple' method is requested.
*/
const KEY_FORCE_ADD_METHODS = 'forceAddMethods';

/**
* If allowed headers should be added when request headers are 'simple' and
* non of them is 'Content-Type'.
*/
const KEY_FORCE_ADD_HEADERS = 'forceAddHeaders';

/**
* If request 'Host' header should be checked against server's origin.
*/
const KEY_CHECK_HOST_HEADER = 'checkHost';

/**
* @param array $settings
*/
public function __construct(array $settings = [])
public function isLogsEnabled()
{
if (empty($settings) === false) {
$this->setSettings($settings);
}
return array_key_exists(self::KEY_LOGS_ENABLED, $this->settings) === true ?
$this->settings[self::KEY_LOGS_ENABLED] : false;
}

/**
* Set app CORS settings.
* @param bool $enabled
*
* @param array $settings
* @return $this
*/
public function setSettings(array $settings)
public function setLogsEnabled($enabled)
{
$this->configServerOrigin($settings);
$this->configRequestAllowedOrigins($settings);
$this->configRequestAllowedMethods($settings);
$this->configRequestAllowedHeaders($settings);
$this->configResponseExposedHeaders($settings);
$this->configRequestCredentialsSupported($settings);
$this->configPreFlightCacheMaxAge($settings);
$this->configForceAddAllowedMethodsToPreFlightResponse($settings);
$this->configForceAddAllowedHeadersToPreFlightResponse($settings);
$this->configCheckHost($settings);
}

/**
* @param array $settings
*/
private function configServerOrigin($settings)
{
array_key_exists(self::KEY_SERVER_ORIGIN, $settings) === false ?:
$this->setServerOrigin($settings[self::KEY_SERVER_ORIGIN]);
}
$this->settings[self::KEY_LOGS_ENABLED] = $enabled;

/**
* @param array $settings
*/
private function configRequestAllowedOrigins($settings)
{
array_key_exists(self::KEY_ALLOWED_ORIGINS, $settings) === false ?:
$this->setRequestAllowedOrigins($settings[self::KEY_ALLOWED_ORIGINS]);
}

/**
* @param array $settings
*/
private function configRequestAllowedMethods($settings)
{
array_key_exists(self::KEY_ALLOWED_METHODS, $settings) === false ?:
$this->setRequestAllowedMethods($settings[self::KEY_ALLOWED_METHODS]);
}

/**
* @param array $settings
*/
private function configRequestAllowedHeaders($settings)
{
array_key_exists(self::KEY_ALLOWED_HEADERS, $settings) === false ?:
$this->setRequestAllowedHeaders($settings[self::KEY_ALLOWED_HEADERS]);
}

/**
* @param array $settings
*/
private function configResponseExposedHeaders($settings)
{
array_key_exists(self::KEY_EXPOSED_HEADERS, $settings) === false ?:
$this->setResponseExposedHeaders($settings[self::KEY_EXPOSED_HEADERS]);
}

/**
* @param array $settings
*/
private function configRequestCredentialsSupported($settings)
{
array_key_exists(self::KEY_IS_USING_CREDENTIALS, $settings) === false ?:
$this->setRequestCredentialsSupported($settings[self::KEY_IS_USING_CREDENTIALS]);
}

/**
* @param array $settings
*/
private function configPreFlightCacheMaxAge($settings)
{
array_key_exists(self::KEY_PRE_FLIGHT_MAX_AGE, $settings) === false ?:
$this->setPreFlightCacheMaxAge($settings[self::KEY_PRE_FLIGHT_MAX_AGE]);
}

/**
* @param array $settings
*/
private function configForceAddAllowedMethodsToPreFlightResponse($settings)
{
array_key_exists(self::KEY_FORCE_ADD_METHODS, $settings) === false ?:
$this->setForceAddAllowedMethodsToPreFlightResponse($settings[self::KEY_FORCE_ADD_METHODS]);
}

/**
* @param array $settings
*/
private function configForceAddAllowedHeadersToPreFlightResponse($settings)
{
array_key_exists(self::KEY_FORCE_ADD_HEADERS, $settings) === false ?:
$this->setForceAddAllowedHeadersToPreFlightResponse($settings[self::KEY_FORCE_ADD_HEADERS]);
}

/**
* @param array $settings
*/
private function configCheckHost($settings)
{
array_key_exists(self::KEY_CHECK_HOST_HEADER, $settings) === false ?:
$this->setCheckHost($settings[self::KEY_CHECK_HOST_HEADER]);
return $this;
}
}
15 changes: 11 additions & 4 deletions tests/Settings/SettingsTest.php
Expand Up @@ -42,12 +42,19 @@ public function testSetSettings()
Settings::KEY_ALLOWED_HEADERS => ['x-does-not-matter' => true],
Settings::KEY_EXPOSED_HEADERS => ['x-does-not-matter' => true],
Settings::KEY_IS_USING_CREDENTIALS => false,
Settings::KEY_PRE_FLIGHT_MAX_AGE => 0,
Settings::KEY_FORCE_ADD_METHODS => false,
Settings::KEY_FORCE_ADD_HEADERS => false,
Settings::KEY_CHECK_HOST_HEADER => false,
Settings::KEY_FLIGHT_CACHE_MAX_AGE => 0,
Settings::KEY_IS_FORCE_ADD_METHODS => false,
Settings::KEY_IS_FORCE_ADD_HEADERS => false,
Settings::KEY_IS_CHECK_HOST => false,
Settings::KEY_LOGS_ENABLED => true,
]);

$this->assertEquals($origin, $settings->getServerOrigin());
$this->assertEquals(false, $settings->isCheckHost());
$this->assertEquals(true, $settings->isLogsEnabled());

$settings->setLogsEnabled(false);

$this->assertEquals(false, $settings->isLogsEnabled());
}
}

0 comments on commit b705fb4

Please sign in to comment.