class AwsAssumeRole::Cli::Actions::Console

Constants

CONSOLE_URL
CommandSchema
FEDERATION_URL
GENERIC_SIGNIN_URL
LOGIN_URL
SIGNIN_URL

Public Instance Methods

act_on(config) click to toggle source
# File lib/aws_assume_role/cli/actions/console.rb, line 62
def act_on(config)
    final_url = try_federation(config) || try_switch_url(config) || CONSOLE_URL
    Launchy.open final_url
rescue KeyError, Aws::Errors::NoSuchProfileError
    error format(t("errors.NoSuchProfileError"), config.profile)
rescue Aws::Errors::MissingCredentialsError
    error t("errors.MissingCredentialsError")
end
session_json(credentials) click to toggle source
# File lib/aws_assume_role/cli/actions/console.rb, line 41
def session_json(credentials)
    {
        sessionId: credentials.credentials.access_key_id,
        sessionKey: credentials.credentials.secret_access_key,
        sessionToken: credentials.credentials.session_token,
    }.to_json
end
try_federation(config) click to toggle source
# File lib/aws_assume_role/cli/actions/console.rb, line 30
def try_federation(config)
    credentials = try_for_credentials config.to_h
    return unless credentials.set?
    session = session_json(credentials)
    signin_url = format SIGNIN_URL, CGI.escape(session)
    sso_token = JSON.parse(URI.parse(signin_url).read)["SigninToken"]
    format LOGIN_URL, CGI.escape(CONSOLE_URL), CGI.escape(sso_token)
rescue OpenURI::HTTPError
    error "Error getting federated session, forming simple switch URL instead"
end
try_switch_url(config) click to toggle source
# File lib/aws_assume_role/cli/actions/console.rb, line 49
def try_switch_url(config)
    profile = AwsAssumeRole.shared_config.determine_profile(profile_name: config.profile)
    config_section = AwsAssumeRole.shared_config.parsed_config[profile]
    raise Aws::Errors::NoSuchProfileError if config_section.nil?
    resolved_role_arn = config.role_arn || config_section.fetch("role_arn", nil)
    return unless resolved_role_arn
    components = resolved_role_arn.split(":")
    account = components[4]
    role = components[5].split("/").last
    display_name = config.profile || "#{account}_#{role}"
    format "https://signin.aws.amazon.com/switchrole?account=%s&roleName=%s&displayName=%s", account, role, display_name
end