Source code for coto.clients.federation
from furl import furl
import json
import requests
from . import BaseClient
[docs]class Client(BaseClient):
REQUIRES_AUTHENTICATION = False
def __init__(self, session):
super().__init__(session)
[docs] def signin(self, boto3_session):
"""
Signin using a boto3 session.
This method uses the federation endpoint to obtain a signin token using
the credentials in your boto3 session. The signin token is then used
to signin into the AWS Management Console.
Although possible, you are not encouraged to call this method directly,
instead follow the following example.
Example:
.. code-block:: python
import boto3
import coto
session = coto.Session(
boto3_session=boto3.Session()
)
Request Syntax:
.. code-block:: python
response = client.signin(
boto3_session=boto3.session.Session,
)
Args:
boto3_session (boto3.session.Session): The boto3 session to use as
provider for AWS credentials.
Returns:
bool: Signin succeeded.
"""
r = self.session()._get(self.get_signin_url(boto3_session))
if r.status_code != 200:
raise Exception("failed session signin")
self.session().authenticated = True
return True
[docs] def get_signin_url(self, boto3_session):
"""
Signin using a boto3 session.
This method uses the federation endpoint to obtain a signin token using
the credentials in your boto3 session. The signin token is then used
to signin into the AWS Management Console.
Although possible, you are not encouraged to call this method directly,
instead follow the following example.
Example:
.. code-block:: python
import boto3
import coto
session = coto.Session(
boto3_session=boto3.Session()
)
Request Syntax:
.. code-block:: python
response = client.signin(
boto3_session=boto3.session.Session,
)
Args:
boto3_session (boto3.session.Session): The boto3 session to use as
provider for AWS credentials.
Returns:
bool: Signin succeeded.
"""
url = furl('https://signin.aws.amazon.com/federation')
url.args['Action'] = "login"
url.args['Issuer'] = None
url.args['Destination'] = "https://console.aws.amazon.com/"
url.args['SigninToken'] = self.get_signin_token(boto3_session)
return url.url
[docs] def get_signin_token(self, boto3_session):
"""
Obtain a signin token for a boto3 session.
This method uses the federation endpoint to obtain a signin token using
the credentials in your boto3 session.
Request Syntax:
.. code-block:: python
response = client.get_signin_token(
boto3_session=boto3.session.Session,
)
Args:
boto3_session (boto3.session.Session): The boto3 session to use as
provider for AWS credentials.
Returns:
str: Signin token.
"""
credentials = boto3_session.get_credentials()
url = "https://signin.aws.amazon.com/federation"
response = self.session()._get(
url,
params={
"Action":
"getSigninToken",
"Session":
json.dumps({
"sessionId": credentials.access_key,
"sessionKey": credentials.secret_key,
"sessionToken": credentials.token,
})
}
)
return json.loads(response.text)["SigninToken"]