sub compose_url()

in legacy/perl/urlinfo.pl [108:145]


sub compose_url {
    my ($site) = @_;
    my $uri = {
        'Action'           => $action,
        'ResponseGroup'    => 'Rank,LinksInCount',
        'Url'              => $site
    };
    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);
}