private function addSignatureMiddleware()

in src/AwsClient.php [435:514]


    private function addSignatureMiddleware(array $args)
    {
        $api = $this->getApi();
        $provider = $this->signatureProvider;
        $signatureVersion = $this->config['signature_version'];
        $name = $this->config['signing_name'];
        $region = $this->config['signing_region'];
        $signingRegionSet = $this->signingRegionSet;

        if (isset($args['signature_version'])
         || isset($this->config['configured_signature_version'])
        ) {
            $configuredSignatureVersion = true;
        } else {
            $configuredSignatureVersion = false;
        }

        $resolver = static function (
            CommandInterface $command
        ) use (
                $api,
                $provider,
                $name,
                $region,
                $signatureVersion,
                $configuredSignatureVersion,
                $signingRegionSet
        ) {
            if (!$configuredSignatureVersion) {
                if (!empty($command['@context']['signing_region'])) {
                    $region = $command['@context']['signing_region'];
                }
                if (!empty($command['@context']['signing_service'])) {
                    $name = $command['@context']['signing_service'];
                }
                if (!empty($command['@context']['signature_version'])) {
                    $signatureVersion = $command['@context']['signature_version'];
                }

                $authType = $api->getOperation($command->getName())['authtype'];
                switch ($authType){
                    case 'none':
                        $signatureVersion = 'anonymous';
                        break;
                    case 'v4-unsigned-body':
                        $signatureVersion = 'v4-unsigned-body';
                        break;
                    case 'bearer':
                        $signatureVersion = 'bearer';
                        break;
                }
            }

            if ($signatureVersion === 'v4a') {
                $commandSigningRegionSet = !empty($command['@context']['signing_region_set'])
                    ? implode(', ', $command['@context']['signing_region_set'])
                    : null;

                $region = $signingRegionSet
                    ?? $commandSigningRegionSet
                    ?? $region;
            }

            // Capture signature metric
            $command->getMetricsBuilder()->identifyMetricByValueAndAppend(
                'signature',
                $signatureVersion
            );

            return SignatureProvider::resolve($provider, $signatureVersion, $name, $region);
        };
        $this->handlerList->appendSign(
            Middleware::signer($this->credentialProvider,
                $resolver,
                $this->tokenProvider,
                $this->getConfig()
            ),
            'signer'
        );
    }