AlkantarClanX12
| Current Path : /www/capitalgmcbuickregina_830/public/wp-content/plugins/ninja-forms-uploads/lib/Aws/Arn/ |
| Current File : /www/capitalgmcbuickregina_830/public/wp-content/plugins/ninja-forms-uploads/lib/Aws/Arn/Arn.php |
<?php
namespace NF_FU_LIB\Aws\Arn;
use NF_FU_LIB\Aws\Arn\Exception\InvalidArnException;
/**
* Amazon Resource Names (ARNs) uniquely identify AWS resources. The Arn class
* parses and stores a generic ARN object representation that can apply to any
* service resource.
*
* @internal
*/
class Arn implements ArnInterface
{
protected $data;
protected $string;
public static function parse($string)
{
$data = ['arn' => null, 'partition' => null, 'service' => null, 'region' => null, 'account_id' => null, 'resource' => null];
$length = \strlen($string);
$lastDelim = 0;
$numComponents = 0;
for ($i = 0; $i < $length; $i++) {
if ($numComponents < 5 && $string[$i] === ':') {
// Split components between delimiters
$data[\key($data)] = \substr($string, $lastDelim, $i - $lastDelim);
// Do not include delimiter character itself
$lastDelim = $i + 1;
\next($data);
$numComponents++;
}
if ($i === $length - 1) {
// Put the remainder in the last component.
if (\in_array($numComponents, [5])) {
$data['resource'] = \substr($string, $lastDelim);
} else {
// If there are < 5 components, put remainder in current
// component.
$data[\key($data)] = \substr($string, $lastDelim);
}
}
}
return $data;
}
public function __construct($data)
{
if (\is_array($data)) {
$this->data = $data;
} elseif (\is_string($data)) {
$this->data = static::parse($data);
} else {
throw new InvalidArnException('Constructor accepts a string or an' . ' array as an argument.');
}
self::validate($this->data);
}
public function __toString()
{
if (!isset($this->string)) {
$components = [$this->getPrefix(), $this->getPartition(), $this->getService(), $this->getRegion(), $this->getAccountId(), $this->getResource()];
$this->string = \implode(':', $components);
}
return $this->string;
}
public function getPrefix()
{
return $this->data['arn'];
}
public function getPartition()
{
return $this->data['partition'];
}
public function getService()
{
return $this->data['service'];
}
public function getRegion()
{
return $this->data['region'];
}
public function getAccountId()
{
return $this->data['account_id'];
}
public function getResource()
{
return $this->data['resource'];
}
public function toArray()
{
return $this->data;
}
/**
* Minimally restrictive generic ARN validation
*
* @param array $data
*/
protected static function validate(array $data)
{
if ($data['arn'] !== 'arn') {
throw new InvalidArnException("The 1st component of an ARN must be" . " 'arn'.");
}
if (empty($data['partition'])) {
throw new InvalidArnException("The 2nd component of an ARN" . " represents the partition and must not be empty.");
}
if (empty($data['service'])) {
throw new InvalidArnException("The 3rd component of an ARN" . " represents the service and must not be empty.");
}
if (empty($data['resource'])) {
throw new InvalidArnException("The 6th component of an ARN" . " represents the resource information and must not be empty." . " Individual service ARNs may include additional delimiters" . " to further qualify resources.");
}
}
}