Skip to content
This repository was archived by the owner on Jan 25, 2023. It is now read-only.

Commit 84f82e7

Browse files
committed
Fixes issue #148 by adding python3 support to sign_request.py
1 parent 0b7f606 commit 84f82e7

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

examples/vault-consul-ami/auth/sign-request.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,24 @@
1515
# the response from GetCallerIdentity, which tells who is trying to authenticate
1616
# ------------------------------------------------------------------------------
1717

18-
import botocore.session
19-
from botocore.awsrequest import create_request_object
20-
import json
2118
import base64
19+
import json
2220
import sys
2321

22+
import botocore.session
23+
from botocore.awsrequest import create_request_object
24+
25+
2426
def headers_to_go_style(headers):
2527
retval = {}
26-
for k, v in headers.iteritems():
27-
retval[k] = [v]
28+
for k, v in headers.items():
29+
try:
30+
retval[k] = [v.decode()]
31+
except AttributeError:
32+
retval[k] = [v]
2833
return retval
2934

35+
3036
def generate_vault_request(awsIamServerId):
3137
session = botocore.session.get_session()
3238
client = session.create_client('sts')
@@ -40,12 +46,22 @@ def generate_vault_request(awsIamServerId):
4046

4147
return {
4248
'iam_http_request_method': request.method,
43-
'iam_request_url': base64.b64encode(request.url),
44-
'iam_request_body': base64.b64encode(request.body),
45-
'iam_request_headers': base64.b64encode(json.dumps(headers_to_go_style(dict(request.headers)))), # It's a CaseInsensitiveDict, which is not JSON-serializable
49+
'iam_request_url': base64.b64encode(request.url.encode()),
50+
'iam_request_body': base64.b64encode(request.body.encode()),
51+
'iam_request_headers': base64.b64encode(json.dumps(headers_to_go_style(dict(request.headers))).encode()), # It's a CaseInsensitiveDict, which is not JSON-serializable
4652
}
4753

4854

55+
def decode_byte_values_from_dict(_dict):
56+
for k, v in _dict.items():
57+
try:
58+
_dict[k] = v.decode()
59+
except AttributeError:
60+
_dict[k] = v
61+
return _dict
62+
63+
4964
if __name__ == "__main__":
5065
awsIamServerId = sys.argv[1]
51-
print json.dumps(generate_vault_request(awsIamServerId))
66+
vault_request = generate_vault_request(awsIamServerId)
67+
print(json.dumps(decode_byte_values_from_dict(vault_request)))

0 commit comments

Comments
 (0)