public function presign()

in src/OSS/Signer/SignerV4.php [60:111]


    public function presign(RequestCore $request, Credentials $credentials, array &$options)
    {
        if (!isset($request->request_headers['Date'])) {
            $request->add_header('Date', gmdate('D, d M Y H:i:s \G\M\T'));
        }
        $timestamp = strtotime($request->request_headers['Date']);
        if ($timestamp === false) {
            $timestamp = time();
        }
        $datetime = gmdate('Ymd\THis\Z', $timestamp);
        $expiration = $options['expiration'];
        $date = substr($datetime, 0, 8);
        $expires = $expiration - $timestamp;
        $headers = $request->request_headers;
        $method = strtoupper($request->method);
        $region = $options['region'];
        $product = $options['product'];
        $scope = $this->buildScope($date, $region, $product);
        $resourcePath = $this->getResourcePath($options);
        $additionalHeaders = $this->getCommonAdditionalHeaders($request, $options);
        $queryString = parse_url($request->request_url, PHP_URL_QUERY);
        $query = array();
        if ($queryString !== null) {
            parse_str($queryString, $query);
        }
        if (!empty($credentials->getSecurityToken())) {
            $query["x-oss-security-token"] = $credentials->getSecurityToken();
        }
        $query["x-oss-signature-version"] = 'OSS4-HMAC-SHA256';
        $query["x-oss-date"] = $datetime;
        $query["x-oss-expires"] = $expires;
        $query["x-oss-credential"] = $credentials->getAccessKeyId() . '/' . $scope;
        if (count($additionalHeaders) > 0) {
            $query["x-oss-additional-headers"] = implode(";", $additionalHeaders);
        }
        $canonicalRequest = $this->calcCanonicalRequest($method, $resourcePath, $query, $headers, $additionalHeaders);
        $stringToSign = $this->calcStringToSign($datetime, $scope, $canonicalRequest);
//        printf('canonical request:%s' . PHP_EOL, $canonicalRequest);
//        printf('sign str:%s' . PHP_EOL, $stringToSign);
        $options['string_to_sign'] = $stringToSign;
        $signature = $this->calcSignature($credentials->getAccessKeySecret(), $date, $region, $product, $stringToSign);
        $query["x-oss-signature"] = $signature;
        $queryStr = OssUtil::toQueryString($query);
        $explodeUrl = explode('?', $request->request_url);
        $index = count($explodeUrl);
        if ($index === 1) {
            $request->request_url .= '?' . $queryStr;
        } else {
            $baseUrl = $explodeUrl[0];
            $request->request_url = $baseUrl . '?' . $queryStr;
        }
    }