use ibmcloud_iam::jwt::validate_token;
use ibmcloud_iam::pdp as pdpapi;
use ibmcloud_iam::pdp::Resource;
use ibmcloud_iam::token::TokenManager;
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let endpoint = "https://iam.cloud.ibm.com";
let api_key =
std::env::var("IBMCLOUD_API_KEY").expect("Could not read IBMCLOUD_API_KEY from env");
let tm = TokenManager::new(&api_key, &endpoint);
let user_token = tm.token()?;
let _claims = validate_token(&user_token, &endpoint);
let service_id_key =
std::env::var("SERVICE_ID_KEY").expect("Could not parse SERVICE_ID_KEY from env");
let pdp = pdpapi::PDPClient::new(&service_id_key, &endpoint);
let sub = pdpapi::subject_from_token(&user_token);
let action = "books.dashboard.view";
let mut resource = Resource::new();
[
("serviceName", "books"),
("accountId", "1111222233334444"),
("ctype", "public"),
("serviceInstance", "9e386139-0000-000-8101-103771fa7793"),
]
.iter()
.for_each(|tup| {
resource.insert(tup.0.to_string(), tup.1.to_string());
});
let resp = pdp.authorize(sub, &action, resource)?;
println!("Authorization Decision: {:?}", resp);
Ok(())
}