#!/usr/bin/env python | |
import os | |
import boto3 | |
def describe_endpoint(): | |
client = boto3.client('iot') | |
endpoint = client.describe_endpoint(endpointType='iot:Data-ATS') | |
return endpoint['endpointAddress'] | |
def get_account_id(): | |
client = boto3.client('sts') | |
aws_account_id = client.get_caller_identity()['Account'] | |
return aws_account_id.strip('\n') | |
def get_aws_region(): | |
my_session = boto3.session.Session() | |
aws_region = my_session.region_name | |
return aws_region.strip('\n') | |
def create_policy_document(): | |
this_file_directory = os.getcwd() | |
policy_document = os.path.join(this_file_directory, | |
'policy_document.templ') | |
region_name = str(get_aws_region()) | |
aws_account_id = str(get_account_id()) | |
with open(policy_document) as policy_document_file: | |
policy_document_text = policy_document_file.read() | |
# Replace Account ID and AWS Region | |
policy_document_text = policy_document_text.replace('<aws-region>', | |
region_name) | |
policy_document_text = policy_document_text.replace('<aws-account-id>', | |
aws_account_id) | |
return policy_document_text | |
def format_credential_keys_text(credential_text): | |
credential_text_lines = credential_text.split('\n') | |
formatted_credential_text_lines = [] | |
for credential_text_line in credential_text_lines: | |
if credential_text_line.strip(): | |
formatted_credential_text_line = ' {:68s}'\ | |
.format('"' + credential_text_line + '\\n"') | |
formatted_credential_text_lines.append( | |
formatted_credential_text_line) | |
formatted_credential_text = ' \\\n'.join(formatted_credential_text_lines) | |
return formatted_credential_text | |
def write_client_credentials( | |
source_dir, | |
thing_name='', | |
client_certificate_pem='', | |
client_private_key_pem='', | |
cleanup=False): | |
file_to_modify = os.path.join(source_dir, | |
'FreeRTOS-Labs', | |
'Demo', | |
'FreeRTOS_IoT_Libraries', | |
'include', | |
'aws_iot_demo_profile.h') | |
file_text = '' | |
if cleanup: | |
filename = "aws_iot_demo_profile_empty.templ" | |
with open(filename, 'r') as template_file: | |
file_text = template_file.read() | |
else: | |
endpoint = describe_endpoint() | |
client_certificate_pem =\ | |
format_credential_keys_text(client_certificate_pem) | |
client_private_key_pem =\ | |
format_credential_keys_text(client_private_key_pem) | |
filename = "aws_iot_demo_profile.templ" | |
with open(filename, 'r') as template_file: | |
file_text = template_file.read() | |
file_text = file_text.replace("<IOTEndpoint>", | |
"\"" + endpoint + "\"") | |
file_text = file_text.replace("<IOTThingName>", | |
"\"" + thing_name + "\"") | |
file_text = file_text.replace("<ClientCertificatePEM>", | |
client_certificate_pem) | |
file_text = file_text.replace("<ClientPrivateKeyPEM>", | |
client_private_key_pem) | |
header_file = open(str(file_to_modify), 'w') | |
header_file.write(file_text) | |
header_file.close() |