in aws_secretsmanager_agent/src/cache_manager.rs [241:298]
fn format_rsp(req: Request<SdkBody>) -> (u16, String) {
let (parts, body) = req.into_parts();
assert!(parts.headers["user-agent"]
.to_str()
.unwrap()
.contains(APPNAME)); // validate user-agent
let req_map: serde_json::Map<String, Value> =
serde_json::from_slice(body.bytes().unwrap()).unwrap();
let version = req_map
.get("VersionId")
.map_or(DEFAULT_VERSION, |x| x.as_str().unwrap());
let label = req_map
.get("VersionStage")
.map_or(DEFAULT_LABEL, |x| x.as_str().unwrap());
let name = req_map.get("SecretId").unwrap().as_str().unwrap(); // Does not handle full ARN case.
let secret_string = match name {
secret if secret.starts_with("REFRESHNOW") => SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_millis()
.to_string(),
_ => DEFAULT_SECRET_STRING.to_string(),
};
let (code, template) = match parts.headers["x-amz-target"].to_str().unwrap() {
"secretsmanager.GetSecretValue" if name.starts_with("KMSACCESSDENIED") => {
(400, KMS_ACCESS_DENIED_BODY)
}
"secretsmanager.GetSecretValue" if name.starts_with("OTHERERROR") => {
(400, OTHER_EXCEPTION_BODY)
}
"secretsmanager.DescribeSecret" if name.starts_with("NOTFOUND") => {
(400, NOT_FOUND_EXCEPTION_BODY)
}
"secretsmanager.GetSecretValue" => (200, GSV_BODY),
"secretsmanager.DescribeSecret" => (200, DESC_BODY),
_ => panic!("Unknown operation"),
};
// Implement a sleep for testing. We can not do an async sleep here so
// timeout tests should use the timeout_client instead.
if let Some(sleep_val) = name.strip_prefix("SleepyTest_") {
if let Ok(sleep_num) = sleep_val.parse::<u64>() {
sleep(Duration::from_secs(sleep_num));
}
}
// Fill in the template and return the response.
let rsp = template
.replace("{{arn}}", FAKE_ARN)
.replace("{{name}}", name)
.replace("{{version}}", version)
.replace("{{secret}}", &secret_string)
.replace("{{label}}", label);
(code, rsp)
}