Files
openstackid/app/services/utils/ServerConfigurationService.php
Sebastian Marcet ab777ecb8d Integration Testing
refactored db transactions to allow IOC
that would make easier unit testing

Change-Id: Ifbaa14e8b8025c3a68b4eddd794c92f389087a94
Implements: blueprint openid-oauth2-integration-testing
2014-02-19 20:14:22 -03:00

176 lines
10 KiB
PHP

<?php
namespace services\utils;
use Config;
use DB;
use Exception;
use openid\services\IServerConfigurationService as IOpenIdServerConfigurationService;
use ServerConfiguration;
use utils\services\ICacheService;
use utils\services\IServerConfigurationService;
use utils\db\ITransactionService;
/**
* Class ServerConfigurationService
* @package services
*/
class ServerConfigurationService implements IOpenIdServerConfigurationService, IServerConfigurationService
{
const DefaultAssetsUrl = 'http://www.openstack.org/';
const DefaultPrivateAssociationLifetime = 120;
const DefaultSessionAssociationLifetime = 21600;
const DefaultMaxFailedLoginAttempts = 10;
const DefaultMaxFailedLoginAttempts2ShowCaptcha = 3;
const DefaultNonceLifetime = 360;
private $default_config_params;
private $tx_service;
/***
* @param ICacheService $cache_service
* @param ITransactionService $tx_service
*/
public function __construct(ICacheService $cache_service, ITransactionService $tx_service)
{
$this->cache_service = $cache_service;
$this->tx_service = $tx_service;
$this->default_config_params = array();
//default config values
//general
$this->default_config_params["MaxFailed.Login.Attempts"] = Config::get('server.MaxFailed_Login_Attempts', 10);
$this->default_config_params["MaxFailed.LoginAttempts.2ShowCaptcha"] = Config::get('server.MaxFailed_LoginAttempts_2ShowCaptcha', 3);
$this->default_config_params["Assets.Url"] = Config::get('server.Assets_Url', 'http://www.openstack.org/');
//openid
$this->default_config_params["OpenId.Private.Association.Lifetime"] = Config::get('server.OpenId_Private_Association_Lifetime', 240);
$this->default_config_params["OpenId.Session.Association.Lifetime"] = Config::get('server.OpenId_Session_Association_Lifetime', 21600);
$this->default_config_params["OpenId.Nonce.Lifetime"] = Config::get('server.OpenId_Nonce_Lifetime', 360);
//policies
$this->default_config_params["BlacklistSecurityPolicy.BannedIpLifeTimeSeconds"] = Config::get('server.BlacklistSecurityPolicy_BannedIpLifeTimeSeconds', 21600);
$this->default_config_params["BlacklistSecurityPolicy.MinutesWithoutExceptions"] = Config::get('server.BlacklistSecurityPolicy_MinutesWithoutExceptions', 5);;
$this->default_config_params["BlacklistSecurityPolicy.ReplayAttackExceptionInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_ReplayAttackExceptionInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxInvalidNonceAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxInvalidNonceAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.InvalidNonceInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_InvalidNonceInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxInvalidOpenIdMessageExceptionAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxInvalidOpenIdMessageExceptionAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.InvalidOpenIdMessageExceptionInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_InvalidOpenIdMessageExceptionInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxOpenIdInvalidRealmExceptionAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxOpenIdInvalidRealmExceptionAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.OpenIdInvalidRealmExceptionInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_OpenIdInvalidRealmExceptionInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxInvalidOpenIdMessageModeAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxInvalidOpenIdMessageModeAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.InvalidOpenIdMessageModeInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_InvalidOpenIdMessageModeInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxInvalidOpenIdAuthenticationRequestModeAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxInvalidOpenIdAuthenticationRequestModeAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.InvalidOpenIdAuthenticationRequestModeInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_InvalidOpenIdAuthenticationRequestModeInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.MaxAuthenticationExceptionAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxAuthenticationExceptionAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.AuthenticationExceptionInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_AuthenticationExceptionInitialDelay', 20);
$this->default_config_params["BlacklistSecurityPolicy.MaxInvalidAssociationAttempts"] = Config::get('server.BlacklistSecurityPolicy_MaxInvalidAssociationAttempts', 10);
$this->default_config_params["BlacklistSecurityPolicy.InvalidAssociationInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_InvalidAssociationInitialDelay', 20);
//oauth2
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.MaxAuthCodeReplayAttackAttempts"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_MaxAuthCodeReplayAttackAttempts', 3);
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.AuthCodeReplayAttackInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_AuthCodeReplayAttackInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.MaxInvalidAuthorizationCodeAttempts"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_MaxInvalidAuthorizationCodeAttempts', 3);
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.InvalidAuthorizationCodeInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_InvalidAuthorizationCodeInitialDelay', 10);
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.MaxInvalidBearerTokenDisclosureAttempt"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_MaxInvalidBearerTokenDisclosureAttempt', 3);
$this->default_config_params["BlacklistSecurityPolicy.OAuth2.BearerTokenDisclosureAttemptInitialDelay"] = Config::get('server.BlacklistSecurityPolicy_OAuth2_BearerTokenDisclosureAttemptInitialDelay', 10);
$this->default_config_params["OAuth2.AuthorizationCode.Lifetime"] = Config::get('server.OAuth2_AuthorizationCode_Lifetime', 240);
$this->default_config_params["OAuth2.AccessToken.Lifetime"] = Config::get('server.OAuth2_AccessToken_Lifetime', 3600);
//infinite by default
$this->default_config_params["OAuth2.RefreshToken.Lifetime"] = Config::get('server.OAuth2_RefreshToken_Lifetime', 0);
//oauth2 policy defaults
$this->default_config_params["OAuth2SecurityPolicy.MinutesWithoutExceptions"] = Config::get('server.OAuth2SecurityPolicy_MinutesWithoutExceptions', 2);
$this->default_config_params["OAuth2SecurityPolicy.MaxBearerTokenDisclosureAttempts"] = Config::get('server.OAuth2SecurityPolicy_MaxBearerTokenDisclosureAttempts', 5);
$this->default_config_params["OAuth2SecurityPolicy.MaxInvalidClientExceptionAttempts"] = Config::get('server.OAuth2SecurityPolicy_MaxInvalidClientExceptionAttempts', 10);
$this->default_config_params["OAuth2SecurityPolicy.MaxInvalidRedeemAuthCodeAttempts"] = Config::get('server.OAuth2SecurityPolicy_MaxInvalidRedeemAuthCodeAttempts', 10);
$this->default_config_params["OAuth2SecurityPolicy.MaxInvalidInvalidClientCredentialsAttempts"] = Config::get('server.OAuth2SecurityPolicy_MaxInvalidInvalidClientCredentialsAttempts', 5);
}
public function getUserIdentityEndpointURL($identifier)
{
$url = action("UserController@getIdentity", array("identifier" => $identifier));
return $url;
}
public function getOPEndpointURL()
{
$url = action("OpenIdProviderController@endpoint");
return $url;
}
/**
* get config value from cache and if not in cache check for it on table server_configuration
* @param $key
* @return mixed
*/
public function getConfigValue($key)
{
$res = null;
$cache_service = $this->cache_service;
$default_config_params = $this->default_config_params;
$this->tx_service->transaction(function () use ($key, &$res,&$cache_service,&$default_config_params) {
try {
if (!$cache_service->exists($key)) {
if (!is_null($conf = ServerConfiguration::where('key', '=', $key)->first()))
$cache_service->addSingleValue($key, $conf->value);
else
if (isset($default_config_params[$key]))
$cache_service->addSingleValue($key, $default_config_params[$key]);
else {
$res = null;
return;
}
}
$res = $cache_service->getSingleValue($key);
} catch (Exception $ex) {
Log::error($ex);
if (isset($default_config_params[$key])) {
$res = $default_config_params[$key];
}
}
});
return $res;
}
public function getAllConfigValues()
{
// TODO: Implement getAllConfigValues() method.
}
public function saveConfigValue($key, $value)
{
$res = false;
$cache_service = $this->cache_service;
$this->tx_service->transaction(function () use ($key, $value, &$res,&$cache_service) {
$conf = ServerConfiguration::where('key', '=', $key)->first();
if (is_null($conf)) {
$conf = new ServerConfiguration();
$conf->key = $key;
$conf->value = $value;
$res = $conf->Save();
} else {
$conf->value = $value;
$res = $conf->Save();
}
$cache_service->delete($key);
});
return $res;
}
}