#!perl

use Paws;
use v5.10;
use Module::Runtime qw/require_module/;

package Opts {
  use Moose;
  with 'MooseX::Getopt';
  has console => (is => 'rw', isa => 'Bool', default => 0);
}

my $opts = Opts->new_with_options;
my $bo_loaded = 0;

if (not $opts->console) {
  # Try to load Browser::Open;
  eval {
    require_module 'Browser::Open';
  };
  if ($@) {
    $opts->console(1);
  }
}

my $user = $ENV{USER} or 'paws federated user';
my $issuer = 'http://aws.amazon.com';
my $dest = 'https://console.aws.amazon.com/';

my $creds = Paws->service('STS')->GetFederationToken(
  Name => $user, 
  Policy => '{"Version": "2012-10-17","Statement": {"Effect": "Allow","Action": "*", "Resource": "*" } }');

my $token = Paws->service('Signin')->GetSigninToken(
  SessionId => $creds->Credentials->AccessKeyId, 
  SessionKey => $creds->Credentials->SecretAccessKey, 
  SessionToken => $creds->Credentials->SessionToken
);

my $url = Paws->service('Signin')->Login(
  Issuer => $issuer,
  Destination => $dest,
  SigninToken => $token->SigninToken
);

if ($opts->console){
  say "Go to :";
  say $url->URL;
} else {
  Browser::Open::open_browser($url->URL);
}
