Scalr\Service\Aws\Client\QueryClient::signRequestV2 PHP Method

signRequestV2() protected method

Only POST http method is supported
protected signRequestV2 ( Scalr\System\Http\Client\Request $request )
$request Scalr\System\Http\Client\Request Http request object
    protected function signRequestV2($request)
    {
        $time = time();
        //Gets the http method name
        $httpMethod = $request->getRequestMethod();
        //Gets both host and path from the url
        $components = parse_url($request->getRequestUrl());
        $common = ['AWSAccessKeyId' => $this->awsAccessKeyId, 'SignatureVersion' => '2', 'SignatureMethod' => 'HmacSHA1', 'Timestamp' => gmdate('Y-m-d\\TH:i:s', $time) . "Z"];
        $request->append($common);
        //Gets adjusted options
        $options = (new QueryString($request->getRawBody()))->toArray();
        //Calculating canonicalized query string
        ksort($options);
        $c11dQueryString = http_build_query($options, null, '&', PHP_QUERY_RFC3986);
        $stringToSign = $httpMethod . "\n" . strtolower($components['host']) . "\n" . $components['path'] . "\n" . $c11dQueryString;
        switch ($common['SignatureMethod']) {
            case 'HmacSHA1':
            case 'HmacSHA256':
                $algo = strtolower(substr($common['SignatureMethod'], 4));
                break;
            default:
                throw new QueryClientException('Unknown SignatureMethod ' . $common['SignatureMethod']);
        }
        $request->append(['Signature' => base64_encode(hash_hmac($algo, $stringToSign, $this->secretAccessKey, 1))]);
        $request->addHeaders(['X-Amz-Date' => gmdate(\DateTime::ISO8601, $time)]);
    }