diff options
author | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2022-11-23 21:14:33 +0300 |
commit | 0c8af4992cb0f7589dcafaad65ada12753c64594 (patch) | |
tree | 18e83d068c3e7dd2499331de977782b382279396 /vendor/aws/aws-sdk-php/src/Arn |
initial
Diffstat (limited to 'vendor/aws/aws-sdk-php/src/Arn')
14 files changed, 740 insertions, 0 deletions
diff --git a/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php b/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php new file mode 100644 index 0000000..e7b88ee --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/AccessPointArn.php @@ -0,0 +1,66 @@ +<?php +namespace Aws\Arn; + +use Aws\Arn\Exception\InvalidArnException; + +/** + * @internal + */ +class AccessPointArn extends Arn implements AccessPointArnInterface +{ + use ResourceTypeAndIdTrait; + + /** + * AccessPointArn constructor + * + * @param $data + */ + public function __construct($data) + { + parent::__construct($data); + static::validate($this->data); + } + + public static function parse($string) + { + $data = parent::parse($string); + $data = self::parseResourceTypeAndId($data); + $data['accesspoint_name'] = $data['resource_id']; + return $data; + } + + public function getAccesspointName() + { + return $this->data['accesspoint_name']; + } + + /** + * Validation specific to AccessPointArn + * + * @param array $data + */ + protected static function validate(array $data) + { + self::validateRegion($data, 'access point ARN'); + self::validateAccountId($data, 'access point ARN'); + + if ($data['resource_type'] !== 'accesspoint') { + throw new InvalidArnException("The 6th component of an access point ARN" + . " represents the resource type and must be 'accesspoint'."); + } + + if (empty($data['resource_id'])) { + throw new InvalidArnException("The 7th component of an access point ARN" + . " represents the resource ID and must not be empty."); + } + if (strpos($data['resource_id'], ':') !== false) { + throw new InvalidArnException("The resource ID component of an access" + . " point ARN must not contain additional components" + . " (delimited by ':')."); + } + if (!self::isValidHostLabel($data['resource_id'])) { + throw new InvalidArnException("The resource ID in an access point ARN" + . " must be a valid host label value."); + } + } +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php b/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php new file mode 100644 index 0000000..9eb5f2b --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/AccessPointArnInterface.php @@ -0,0 +1,10 @@ +<?php +namespace Aws\Arn; + +/** + * @internal + */ +interface AccessPointArnInterface extends ArnInterface +{ + public function getAccesspointName(); +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/Arn.php b/vendor/aws/aws-sdk-php/src/Arn/Arn.php new file mode 100644 index 0000000..50367c6 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/Arn.php @@ -0,0 +1,188 @@ +<?php +namespace Aws\Arn; + +use 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.'); + } + + static::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."); + } + } + + protected static function validateAccountId($data, $arnName) + { + if (!self::isValidHostLabel($data['account_id'])) { + throw new InvalidArnException("The 5th component of a {$arnName}" + . " is required, represents the account ID, and" + . " must be a valid host label."); + } + } + + protected static function validateRegion($data, $arnName) + { + if (empty($data['region'])) { + throw new InvalidArnException("The 4th component of a {$arnName}" + . " represents the region and must not be empty."); + } + } + + /** + * Validates whether a string component is a valid host label + * + * @param $string + * @return bool + */ + protected static function isValidHostLabel($string) + { + if (empty($string) || strlen($string) > 63) { + return false; + } + if ($value = preg_match("/^[a-zA-Z0-9-]+$/", $string)) { + return true; + } + return false; + } +}
\ No newline at end of file diff --git a/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php b/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php new file mode 100644 index 0000000..c30c6cc --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/ArnInterface.php @@ -0,0 +1,37 @@ +<?php +namespace Aws\Arn; + +/** + * Amazon Resource Names (ARNs) uniquely identify AWS resources. Classes + * implementing ArnInterface parse and store an ARN object representation. + * + * Valid ARN formats include: + * + * arn:partition:service:region:account-id:resource-id + * arn:partition:service:region:account-id:resource-type/resource-id + * arn:partition:service:region:account-id:resource-type:resource-id + * + * Some components may be omitted, depending on the service and resource type. + * + * @internal + */ +interface ArnInterface +{ + public static function parse($string); + + public function __toString(); + + public function getPrefix(); + + public function getPartition(); + + public function getService(); + + public function getRegion(); + + public function getAccountId(); + + public function getResource(); + + public function toArray(); +}
\ No newline at end of file diff --git a/vendor/aws/aws-sdk-php/src/Arn/ArnParser.php b/vendor/aws/aws-sdk-php/src/Arn/ArnParser.php new file mode 100644 index 0000000..331c507 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/ArnParser.php @@ -0,0 +1,69 @@ +<?php +namespace Aws\Arn; + +use Aws\Arn\S3\AccessPointArn as S3AccessPointArn; +use Aws\Arn\ObjectLambdaAccessPointArn; +use Aws\Arn\S3\MultiRegionAccessPointArn; +use Aws\Arn\S3\OutpostsBucketArn; +use Aws\Arn\S3\RegionalBucketArn; +use Aws\Arn\S3\OutpostsAccessPointArn; + +/** + * This class provides functionality to parse ARN strings and return a + * corresponding ARN object. ARN-parsing logic may be subject to change in the + * future, so this should not be relied upon for external customer usage. + * + * @internal + */ +class ArnParser +{ + /** + * @param $string + * @return bool + */ + public static function isArn($string) + { + return $string !== null && strpos($string, 'arn:') === 0; + } + + /** + * Parses a string and returns an instance of ArnInterface. Returns a + * specific type of Arn object if it has a specific class representation + * or a generic Arn object if not. + * + * @param $string + * @return ArnInterface + */ + public static function parse($string) + { + $data = Arn::parse($string); + if ($data['service'] === 's3-object-lambda') { + return new ObjectLambdaAccessPointArn($string); + } + $resource = self::explodeResourceComponent($data['resource']); + if ($resource[0] === 'outpost') { + if (isset($resource[2]) && $resource[2] === 'bucket') { + return new OutpostsBucketArn($string); + } + if (isset($resource[2]) && $resource[2] === 'accesspoint') { + return new OutpostsAccessPointArn($string); + } + } + if (empty($data['region'])) { + return new MultiRegionAccessPointArn($string); + } + if ($resource[0] === 'accesspoint') { + if ($data['service'] === 's3') { + return new S3AccessPointArn($string); + } + return new AccessPointArn($string); + } + + return new Arn($data); + } + + private static function explodeResourceComponent($resource) + { + return preg_split("/[\/:]/", $resource); + } +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/Exception/InvalidArnException.php b/vendor/aws/aws-sdk-php/src/Arn/Exception/InvalidArnException.php new file mode 100644 index 0000000..8690f75 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/Exception/InvalidArnException.php @@ -0,0 +1,7 @@ +<?php +namespace Aws\Arn\Exception; + +/** + * Represents a failed attempt to construct an Arn + */ +class InvalidArnException extends \RuntimeException {} diff --git a/vendor/aws/aws-sdk-php/src/Arn/ObjectLambdaAccessPointArn.php b/vendor/aws/aws-sdk-php/src/Arn/ObjectLambdaAccessPointArn.php new file mode 100644 index 0000000..48a0667 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/ObjectLambdaAccessPointArn.php @@ -0,0 +1,35 @@ +<?php +namespace Aws\Arn; + +/** + * This class represents an S3 Object bucket ARN, which is in the + * following format: + * + * @internal + */ +class ObjectLambdaAccessPointArn extends AccessPointArn +{ + /** + * Parses a string into an associative array of components that represent + * a ObjectLambdaAccessPointArn + * + * @param $string + * @return array + */ + public static function parse($string) + { + $data = parent::parse($string); + return parent::parseResourceTypeAndId($data); + } + + /** + * + * @param array $data + */ + protected static function validate(array $data) + { + parent::validate($data); + self::validateRegion($data, 'S3 Object Lambda ARN'); + self::validateAccountId($data, 'S3 Object Lambda ARN'); + } +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/ResourceTypeAndIdTrait.php b/vendor/aws/aws-sdk-php/src/Arn/ResourceTypeAndIdTrait.php new file mode 100644 index 0000000..424974f --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/ResourceTypeAndIdTrait.php @@ -0,0 +1,30 @@ +<?php +namespace Aws\Arn; + +/** + * @internal + */ +trait ResourceTypeAndIdTrait +{ + public function getResourceType() + { + return $this->data['resource_type']; + } + + public function getResourceId() + { + return $this->data['resource_id']; + } + + protected static function parseResourceTypeAndId(array $data) + { + $resourceData = preg_split("/[\/:]/", $data['resource'], 2); + $data['resource_type'] = isset($resourceData[0]) + ? $resourceData[0] + : null; + $data['resource_id'] = isset($resourceData[1]) + ? $resourceData[1] + : null; + return $data; + } +}
\ No newline at end of file diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php b/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php new file mode 100644 index 0000000..5841d90 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/AccessPointArn.php @@ -0,0 +1,27 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\AccessPointArn as BaseAccessPointArn; +use Aws\Arn\AccessPointArnInterface; +use Aws\Arn\ArnInterface; +use Aws\Arn\Exception\InvalidArnException; + +/** + * @internal + */ +class AccessPointArn extends BaseAccessPointArn implements AccessPointArnInterface +{ + /** + * Validation specific to AccessPointArn + * + * @param array $data + */ + public static function validate(array $data) + { + parent::validate($data); + if ($data['service'] !== 's3') { + throw new InvalidArnException("The 3rd component of an S3 access" + . " point ARN represents the region and must be 's3'."); + } + } +}
\ No newline at end of file diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/BucketArnInterface.php b/vendor/aws/aws-sdk-php/src/Arn/S3/BucketArnInterface.php new file mode 100644 index 0000000..1be0586 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/BucketArnInterface.php @@ -0,0 +1,12 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\ArnInterface; + +/** + * @internal + */ +interface BucketArnInterface extends ArnInterface +{ + public function getBucketName(); +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/MultiRegionAccessPointArn.php b/vendor/aws/aws-sdk-php/src/Arn/S3/MultiRegionAccessPointArn.php new file mode 100644 index 0000000..401ab0c --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/MultiRegionAccessPointArn.php @@ -0,0 +1,38 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\Arn; +use Aws\Arn\ResourceTypeAndIdTrait; + +/** + * This class represents an S3 multi-region bucket ARN, which is in the + * following format: + * + * @internal + */ +class MultiRegionAccessPointArn extends AccessPointArn +{ + use ResourceTypeAndIdTrait; + + /** + * Parses a string into an associative array of components that represent + * a MultiRegionArn + * + * @param $string + * @return array + */ + public static function parse($string) + { + return parent::parse($string); + } + + /** + * + * @param array $data + */ + public static function validate(array $data) + { + Arn::validate($data); + } + +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsAccessPointArn.php b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsAccessPointArn.php new file mode 100644 index 0000000..b77745d --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsAccessPointArn.php @@ -0,0 +1,110 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\AccessPointArn as BaseAccessPointArn; +use Aws\Arn\AccessPointArnInterface; +use Aws\Arn\Arn; +use Aws\Arn\Exception\InvalidArnException; + +/** + * This class represents an S3 Outposts access point ARN, which is in the + * following format: + * + * arn:{partition}:s3-outposts:{region}:{accountId}:outpost:{outpostId}:accesspoint:{accesspointName} + * + * ':' and '/' can be used interchangeably as delimiters for components after + * the account ID. + * + * @internal + */ +class OutpostsAccessPointArn extends BaseAccessPointArn implements + AccessPointArnInterface, + OutpostsArnInterface +{ + public static function parse($string) + { + $data = parent::parse($string); + return self::parseOutpostData($data); + } + + public function getOutpostId() + { + return $this->data['outpost_id']; + } + + public function getAccesspointName() + { + return $this->data['accesspoint_name']; + } + + private static function parseOutpostData(array $data) + { + $resourceData = preg_split("/[\/:]/", $data['resource_id']); + + $data['outpost_id'] = isset($resourceData[0]) + ? $resourceData[0] + : null; + $data['accesspoint_type'] = isset($resourceData[1]) + ? $resourceData[1] + : null; + $data['accesspoint_name'] = isset($resourceData[2]) + ? $resourceData[2] + : null; + if (isset($resourceData[3])) { + $data['resource_extra'] = implode(':', array_slice($resourceData, 3)); + } + + return $data; + } + + /** + * Validation specific to OutpostsAccessPointArn. Note this uses the base Arn + * class validation instead of the direct parent due to it having slightly + * differing requirements from its parent. + * + * @param array $data + */ + public static function validate(array $data) + { + Arn::validate($data); + + if (($data['service'] !== 's3-outposts')) { + throw new InvalidArnException("The 3rd component of an S3 Outposts" + . " access point ARN represents the service and must be" + . " 's3-outposts'."); + } + + self::validateRegion($data, 'S3 Outposts access point ARN'); + self::validateAccountId($data, 'S3 Outposts access point ARN'); + + if (($data['resource_type'] !== 'outpost')) { + throw new InvalidArnException("The 6th component of an S3 Outposts" + . " access point ARN represents the resource type and must be" + . " 'outpost'."); + } + + if (!self::isValidHostLabel($data['outpost_id'])) { + throw new InvalidArnException("The 7th component of an S3 Outposts" + . " access point ARN is required, represents the outpost ID, and" + . " must be a valid host label."); + } + + if ($data['accesspoint_type'] !== 'accesspoint') { + throw new InvalidArnException("The 8th component of an S3 Outposts" + . " access point ARN must be 'accesspoint'"); + } + + if (!self::isValidHostLabel($data['accesspoint_name'])) { + throw new InvalidArnException("The 9th component of an S3 Outposts" + . " access point ARN is required, represents the accesspoint name," + . " and must be a valid host label."); + } + + if (!empty($data['resource_extra'])) { + throw new InvalidArnException("An S3 Outposts access point ARN" + . " should only have 9 components, delimited by the characters" + . " ':' and '/'. '{$data['resource_extra']}' was found after the" + . " 9th component."); + } + } +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php new file mode 100644 index 0000000..20285e0 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsArnInterface.php @@ -0,0 +1,12 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\ArnInterface; + +/** + * @internal + */ +interface OutpostsArnInterface extends ArnInterface +{ + public function getOutpostId(); +} diff --git a/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsBucketArn.php b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsBucketArn.php new file mode 100644 index 0000000..7236a58 --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/Arn/S3/OutpostsBucketArn.php @@ -0,0 +1,99 @@ +<?php +namespace Aws\Arn\S3; + +use Aws\Arn\Arn; +use Aws\Arn\Exception\InvalidArnException; +use Aws\Arn\ResourceTypeAndIdTrait; + +/** + * This class represents an S3 Outposts bucket ARN, which is in the + * following format: + * + * @internal + */ +class OutpostsBucketArn extends Arn implements + BucketArnInterface, + OutpostsArnInterface +{ + use ResourceTypeAndIdTrait; + + /** + * Parses a string into an associative array of components that represent + * a OutpostsBucketArn + * + * @param $string + * @return array + */ + public static function parse($string) + { + $data = parent::parse($string); + $data = self::parseResourceTypeAndId($data); + return self::parseOutpostData($data); + } + + public function getBucketName() + { + return $this->data['bucket_name']; + } + + public function getOutpostId() + { + return $this->data['outpost_id']; + } + + private static function parseOutpostData(array $data) + { + $resourceData = preg_split("/[\/:]/", $data['resource_id'], 3); + + $data['outpost_id'] = isset($resourceData[0]) + ? $resourceData[0] + : null; + $data['bucket_label'] = isset($resourceData[1]) + ? $resourceData[1] + : null; + $data['bucket_name'] = isset($resourceData[2]) + ? $resourceData[2] + : null; + + return $data; + } + + /** + * + * @param array $data + */ + public static function validate(array $data) + { + Arn::validate($data); + + if (($data['service'] !== 's3-outposts')) { + throw new InvalidArnException("The 3rd component of an S3 Outposts" + . " bucket ARN represents the service and must be 's3-outposts'."); + } + + self::validateRegion($data, 'S3 Outposts bucket ARN'); + self::validateAccountId($data, 'S3 Outposts bucket ARN'); + + if (($data['resource_type'] !== 'outpost')) { + throw new InvalidArnException("The 6th component of an S3 Outposts" + . " bucket ARN represents the resource type and must be" + . " 'outpost'."); + } + + if (!self::isValidHostLabel($data['outpost_id'])) { + throw new InvalidArnException("The 7th component of an S3 Outposts" + . " bucket ARN is required, represents the outpost ID, and" + . " must be a valid host label."); + } + + if ($data['bucket_label'] !== 'bucket') { + throw new InvalidArnException("The 8th component of an S3 Outposts" + . " bucket ARN must be 'bucket'"); + } + + if (empty($data['bucket_name'])) { + throw new InvalidArnException("The 9th component of an S3 Outposts" + . " bucket ARN represents the bucket name and must not be empty."); + } + } +} |