public function presignInner()

in src/ClientImpl.php [95:164]


    public function presignInner(OperationInput &$input, array &$options = []): array
    {
        $this->verifyOperation($input);
        /**
         * @var GuzzleHttp\Psr7\Request $request
         */
        [$request, $context] = $this->buildRequestContext($input, $options);
        $sdk_context = $context['sdk_context'];
        /**
         * @var Credentials\CredentialsProvider $provider
         */
        $provider = $sdk_context['credentials_provider'];
        $result = [];
        if (!($provider instanceof Credentials\AnonymousCredentialsProvider)) {
            try {
                $cred = $provider->getCredentials();
            } catch (\Exception $e) {
                throw new Exception\CredentialsException('Fetch Credentials raised an exception', $e);
            }
            if ($cred == null || !$cred->hasKeys()) {
                throw new \InvalidArgumentException("Credentials is null or empty.");
            }
            /**
             * @var Signer\SignerInterface $signer
             */
            $signer = $sdk_context['signer'];
            /**
             * @var Signer\SigningContext $signingContext
             */
            $signingContext = $context['signing_context'];
            $signingContext->request = $request;
            $signingContext->credentials = $cred;
            $signer->sign($signingContext);
            $request = $signingContext->request;
            if ($signer instanceof Signer\SignerV4) {
                if (isset($signingContext->time) && $signingContext->time instanceof \DateTime) {
                    $nowPlusSevenDays = new \DateTime();
                    $nowPlusSevenDays->modify('+7 days');
                    if ($signingContext->time > $nowPlusSevenDays) {
                        throw new \InvalidArgumentException("Expires should not be greater than 604800 (seven days)");
                    }
                }
            }
            //save to result
            $result['expiration'] = $signingContext->time;
            $matches = ['content-type', 'content-md5'];
            if ($signer instanceof Signer\SignerV4 && !empty($signingContext->additionalHeaders)) {
                foreach ($signingContext->additionalHeaders as $k) {
                    $matches[] = strtolower($k);
                }
            }
            //signed headers
            $signedHeaders = [];
            foreach ($request->getHeaders() as $name => $values) {
                $lowName = strtolower((string)$name);
                if (
                    \in_array($lowName, $matches) ||
                    (strncmp($lowName, 'x-oss-', 6) == 0)
                ) {
                    $signedHeaders[(string)$name] = $values[0];
                }
            }
            $result['signedHeaders'] = $signedHeaders;
        }

        $result['url'] = $request->getUri()->__toString();
        $result['method'] = $request->getMethod();

        return $result;
    }