crowbar 0.4.10

Securily generates temporary AWS credentials through Identity Providers using SAML
Documentation
extern crate crowbar;
extern crate keyring;

use crowbar::config::app::AppProfile;
use crowbar::credentials::aws;
use crowbar::credentials::aws::AwsCredentials;
use std::collections::HashMap;

#[allow(dead_code)]
pub fn short_app_profile_a() -> AppProfile {
    toml::from_str(
        r#"
        name = "profile_a"
        provider = "okta"
        url = "https://example.com/example/url"
        username = "username"
    "#
        .trim_start(),
    )
    .unwrap()
}

#[allow(dead_code)]
pub fn short_app_profile_b() -> AppProfile {
    toml::from_str(
        r#"
        name = "profile_b"
        provider = "okta"
        url = "https://example.com/example/url"
        username = "username"
    "#
        .trim_start(),
    )
    .unwrap()
}

#[allow(dead_code)]
pub fn long_aws_profile() -> String {
    r#"
    [profile profile]
    region=eu-central-1
    credential_process=sh -c 'crowbar creds profile -p 2> /dev/tty'
    "#
    .trim_start()
    .to_string()
}

#[allow(dead_code)]
pub fn short_aws_profile() -> String {
    r#"
    [profile profile]
    credential_process=sh -c 'crowbar creds profile -p 2> /dev/tty'
    "#
    .trim_start()
    .to_string()
}

#[allow(dead_code)]
pub fn create_credentials() -> AwsCredentials {
    AwsCredentials {
        version: 1,
        access_key_id: Some("some_key".to_string()),
        secret_access_key: Some("some_secret".to_string()),
        session_token: Some("some_token".to_string()),
        expiration: Some("2038-01-01T10:10:10Z".to_string()),
    }
}

#[allow(dead_code)]
pub fn empty_credentials() -> AwsCredentials {
    AwsCredentials {
        version: 1,
        access_key_id: None,
        secret_access_key: None,
        session_token: None,
        expiration: None,
    }
}

#[allow(dead_code)]
pub fn clean_keystore(profile: &AppProfile, creds: AwsCredentials) {
    let credential_map: HashMap<String, Option<String>> = creds.into();
    let service = aws::credentials_as_service(profile);

    for key in credential_map.keys() {
        keyring::Entry::new(&service, key)
            .delete_password()
            .unwrap()
    }
}