blob: 59e56ad2e9b78b24f9d2dd52f3dcf0e8a222e56c (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
from botocore.exceptions import ProfileNotFound
import subprocess
import sys
class PassTotpPrompter(object):
def __init__(self, mfa_path, original_prompter=None):
self.mfa_path = mfa_path
self._original_prompter = original_prompter
def __call__(self, prompt):
try:
pass_result = subprocess.run(
["pass", "otp", self.mfa_path], capture_output=True
)
token = pass_result.stdout.decode("utf-8").strip()
return token
except subprocess.CalledProcessError as e:
print(e, file=sys.stderr)
if self._original_prompter:
return self._original_prompter(prompt)
return None
def inject_pass_totp_prompter(session, **kwargs):
try:
providers = session.get_component("credential_provider")
except ProfileNotFound:
return
config = session.get_scoped_config()
mfa_path = config.get("mfa_path")
if mfa_path is None:
return
assume_role_provider = providers.get_provider("assume-role")
original_prompter = assume_role_provider._prompter
assume_role_provider._prompter = PassTotpPrompter(
mfa_path, original_prompter=original_prompter
)
|