Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpnamespace Aws\Configuration;class ConfigurationResolver{const ENV_PROFILE = 'AWS_PROFILE';const ENV_CONFIG_FILE = 'AWS_CONFIG_FILE';public static $envPrefix = 'AWS_';/*** Generic configuration resolver that first checks for environment* variables, then checks for a specified profile in the environment-defined* config file location (env variable is 'AWS_CONFIG_FILE', file location* defaults to ~/.aws/config), then checks for the "default" profile in the* environment-defined config file location, and failing those uses a default* fallback value.** @param string $key Configuration key to be used when attempting* to retrieve value from the environment or ini file.* @param mixed $defaultValue* @param string $expectedType The expected type of the retrieved value.* @param array $config* @param array $additionalArgs** @return mixed*/public static function resolve($key,$defaultValue,$expectedType,$config = []){$envValue = self::env($key, $expectedType);if (!is_null($envValue)) {return $envValue;}if (!isset($config['use_aws_shared_config_files'])|| $config['use_aws_shared_config_files'] != false) {$iniValue = self::ini($key, $expectedType);if(!is_null($iniValue)) {return $iniValue;}}return $defaultValue;}/*** Resolves config values from environment variables.** @param string $key Configuration key to be used when attempting* to retrieve value from the environment.* @param string $expectedType The expected type of the retrieved value.** @return null | mixed*/public static function env($key, $expectedType){// Use config from environment variables, if available$envValue = getenv(self::$envPrefix . strtoupper($key));if (!empty($envValue)) {if ($expectedType) {$envValue = self::convertType($envValue, $expectedType);}return $envValue;}return null;}/*** Gets config values from a config file whose location* is specified by an environment variable 'AWS_CONFIG_FILE', defaulting to* ~/.aws/config if not specified*** @param string $key Configuration key to be used when attempting* to retrieve value from ini file.* @param string $expectedType The expected type of the retrieved value.* @param string|null $profile Profile to use. If not specified will use* the "default" profile.* @param string|null $filename If provided, uses a custom filename rather* than looking in the default directory.** @return null | mixed*/public static function ini($key, $expectedType, $profile = null, $filename = null){$filename = $filename ?: (self::getDefaultConfigFilename());$profile = $profile ?: (getenv(self::ENV_PROFILE) ?: 'default');if (!@is_readable($filename)) {return null;}// Use INI_SCANNER_NORMAL instead of INI_SCANNER_TYPED for PHP 5.5 compatibility//TODO change after deprecation$data = @\Aws\parse_ini_file($filename, true, INI_SCANNER_NORMAL);if ($data === false|| !isset($data[$profile])|| !isset($data[$profile][$key])) {return null;}// INI_SCANNER_NORMAL parses false-y values as an empty stringif ($data[$profile][$key] === "") {if ($expectedType === 'bool') {$data[$profile][$key] = false;} elseif ($expectedType === 'int') {$data[$profile][$key] = 0;}}return self::convertType($data[$profile][$key], $expectedType);}/*** Gets the environment's HOME directory if available.** @return null | string*/private static function getHomeDir(){// On Linux/Unix-like systems, use the HOME environment variableif ($homeDir = getenv('HOME')) {return $homeDir;}// Get the HOMEDRIVE and HOMEPATH values for Windows hosts$homeDrive = getenv('HOMEDRIVE');$homePath = getenv('HOMEPATH');return ($homeDrive && $homePath) ? $homeDrive . $homePath : null;}/*** Gets default config file location from environment, falling back to aws* default location** @return string*/private static function getDefaultConfigFilename(){if ($filename = getenv(self::ENV_CONFIG_FILE)) {return $filename;}return self::getHomeDir() . '/.aws/config';}/*** Normalizes string values pulled out of ini files and* environment variables.** @param string $value The value retrieved from the environment or* ini file.* @param $type $string The type that the value needs to be converted to.** @return mixed*/private static function convertType($value, $type){if ($type === 'bool'&& !is_null($convertedValue = \Aws\boolean_value($value))) {return $convertedValue;}if ($type === 'int'&& filter_var($value, FILTER_VALIDATE_INT)) {$value = intVal($value);}return $value;}}