#!/usr/bin/env bash set -euo pipefail profile=$1 option=${2:-ff} container_name() { if ! aws configure get "profile.$profile.ff_container"; then echo "Unknown profile" exit 1 fi } urlencode() { # urlencode local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in [a-zA-Z0-9.~_-]) printf '%s' "$c" ;; *) printf '%%%02X' "'$c" ;; esac done } get-credentials() { if command -v aws-keyring > /dev/null; then aws-keyring --profile "$profile" --duration=12h else get-aws-login --profile "$profile" --duration 43200 --output credential_process fi } container=$(container_name) credentials=$(get-credentials | jq -c \ '{ sessionId: .AccessKeyId, sessionKey: .SecretAccessKey, sessionToken: .SessionToken }' ) response=$(curl -sfS "https://signin.aws.amazon.com/federation?Action=getSigninToken&SessionDuration=28800&Session=$(urlencode "$credentials")") url="https://signin.aws.amazon.com/federation?Action=login&Issuer=aws-web-login&Destination=$(urlencode "https://console.aws.amazon.com")&SigninToken=$(jq -r .SigninToken <<<"$response")" if [ "$option" = "ff" ]; then firefox "ext+container:name=$(urlencode "$container")&url=$(urlencode "$url")" else echo "$url" fi