private function calcStringToSign()

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