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;
}