test_that("can correctly sign a request", {
skip_if_not(has_paws_credentials())
creds <- paws.common::locate_credentials()
# https://docs.aws.amazon.com/STS/latest/APIReference/API_GetCallerIdentity.html
req <- request("https://sts.amazonaws.com/")
req <- req_auth_aws_v4(req,
aws_access_key_id = creds$access_key_id,
aws_secret_access_key = creds$secret_access_key,
aws_session_token = creds$session_token,
aws_region = creds$region
)
req <- req_body_form(
req,
Action = "GetCallerIdentity",
Version = "2011-06-15"
)
expect_no_error(req_perform(req))
})
test_that("signing agrees with glacier example", {
# Example from
# https://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-signing-requests.html
signature <- aws_v4_signature(
method = "PUT",
url = url_parse("https://glacier.us-east-1.amazonaws.com/-/vaults/examplevault"),
headers = list(
"x-amz-date" = "20120525T002453Z",
"x-amz-glacier-version" = "2012-06-01"
),
body_sha256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
current_time = as.POSIXct("2012-05-25 00:24:53", tz = "UTC"),
aws_access_key_id = "AKIAIOSFODNN7EXAMPLE",
aws_secret_access_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
)
expected <- paste0(
"AWS4-HMAC-SHA256 ",
"Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request,",
"SignedHeaders=host;x-amz-date;x-amz-glacier-version,",
"Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a"
)
expect_equal(signature$Authorization, expected)
})
test_that("validates its inputs", {
req <- request("https://sts.amazonaws.com/")
expect_snapshot(error = TRUE, {
req_auth_aws_v4(1)
req_auth_aws_v4(req, 1)
req_auth_aws_v4(req, "", "", aws_session_token = 1)
req_auth_aws_v4(req, "", "", aws_service = 1)
req_auth_aws_v4(req, "", "", aws_region = 1)
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.