in src/Signer/SignerV1.php [87:133]
private function calcStringToSign(string $date, SigningContext $signingCtx): string
{
$request = $signingCtx->request;
$contentMd5 = $request->getHeaderLine(self::CONTENT_MD5_HEADER);
$contentType = $request->getHeaderLine(self::CONTENT_TYPE_HEADER);
// CanonicalizedOSSHeaders
$headers = [];
foreach ($request->getHeaders() as $k => $v) {
$lowerCaseKey = strtolower((string)$k);
if (strncmp($lowerCaseKey, self::OSS_HEADER_PREFIX, 6) == 0) {
$headers[] = $lowerCaseKey;
}
}
sort($headers);
$headerItems = [];
foreach ($headers as $k) {
$headerValues = array_map('trim', $request->getHeader($k));
$headerItems[] = $k . ':' . implode(',', $headerValues) . "\n";
}
$canonicalizedOSSHeaders = implode('', $headerItems);
// CanonicalizedResource
$query = [];
parse_str($request->getUri()->getQuery(), $query);
$params = [];
foreach ($query as $k => $v) {
if (in_array($k, self::$requiredSignedParametersMap) ||
strncmp($k, self::OSS_HEADER_PREFIX, 6) == 0 ||
$this->isSubResource($signingCtx->subResource, $k)) {
$params[] = ($v !== "") ? "$k=$v" : $k;
}
}
sort($params);
$subResource = implode('&', $params);
$canonicalizedResource = '/' . ($signingCtx->bucket ? $signingCtx->bucket . '/' : '') .
($signingCtx->key ? $signingCtx->key : '') .
($subResource ? '?' . $subResource : '');
// String to Sign
return $request->getMethod() . "\n" .
$contentMd5 . "\n" .
$contentType . "\n" .
$date . "\n" .
$canonicalizedOSSHeaders .
$canonicalizedResource;
}