in legacy/perl/topsites.pl [102:141]
sub compose_url {
my ($site) = @_;
my $uri = {
'Action' => $action,
'ResponseGroup' => 'Country',
'CountryCode' => $country_code,
'Count' => $count,
'Start' => $start
};
my $headers = {
"host" => $service_host,
"x-amz-date" => $timestamp
};
my @hdrs_arr = ();
my @hdrl_arr = ();
foreach my $key (sort keys %$headers) {
push(@hdrs_arr, escape($key) . ':' . escape($headers->{$key}));
push(@hdrl_arr, escape($key));
}
my $hdr_str = join("\n", @hdrs_arr) . "\n";
my $hdr_lst = join(';', @hdrl_arr);
my @uri_arr = ();
#sort hash and uri escape
foreach my $key (sort keys %$uri) {
push(@uri_arr, escape($key) . '=' . escape($uri->{$key}));
}
my $uri_str = join('&', @uri_arr);
my $payload_hash = sha256_hex("");
my $canonical_request = "GET" . "\n" . $service_uri . "\n" . $uri_str . "\n" . $hdr_str . "\n" . $hdr_lst . "\n" . $payload_hash;
my $algorithm = "AWS4-HMAC-SHA256";
my $credential_scope = substr($timestamp, 0, 8) . "/" . $service_region . "/" . $service_name . "/" . "aws4_request";
my $string_to_sign = $algorithm . "\n" . $timestamp . "\n" . $credential_scope . "\n" . sha256_hex($canonical_request);
my $signature = calculate_signature($secret_access_key,$service_name,$service_region,substr($timestamp, 0, 8),$string_to_sign);
my $authorization_header = $algorithm . " " . "Credential=" . $access_key_id . "/" . $credential_scope . ", " . "SignedHeaders=" . $hdr_lst . ", " . "Signature=" . $signature;
return ('https://' . $service_endpoint . $service_uri . '?' . $uri_str, $authorization_header);
}