diff options
Diffstat (limited to 'tools/aws_config_quick_start/SetupAWS.py')
-rw-r--r-- | tools/aws_config_quick_start/SetupAWS.py | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/tools/aws_config_quick_start/SetupAWS.py b/tools/aws_config_quick_start/SetupAWS.py new file mode 100644 index 000000000..cf6fff548 --- /dev/null +++ b/tools/aws_config_quick_start/SetupAWS.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python + +import os +import sys +import json +import pprint +import argparse +import boto3 +import misc +import certs +import thing +import policy + +pp = pprint.PrettyPrinter(indent=4) + + +def check_aws_configuration(): + mysession = boto3.session.Session() + if not mysession._session._config['profiles']: + print("AWS not configured. Please run `aws configure`.") + sys.exit(1) + + +def prereq(): + with open('configure.json') as configure_file: + json_text = json.load(configure_file) + + # Create a Thing + thing_name = json_text['thing_name'] + thing_obj = thing.Thing(thing_name) + if not thing_obj.create(): + + # Create a Certificate + cert_obj = certs.Certificate() + result = cert_obj.create() + + # Store certId + cert_id = result['certificateId'] + cert_id_filename = thing_name + '_cert_id_file.txt' + cert_id_file = open(cert_id_filename, 'w') + cert_id_file.write(cert_id) + cert_id_file_path = os.path.abspath(cert_id_filename) + os.chmod(cert_id_file_path, 0o444) + cert_id_file.close() + + # Store cert_pem as file + cert_pem = result['certificatePem'] + cert_pem_filename = thing_name + '_cert_pem_file.pem' + cert_pem_file = open(cert_pem_filename, 'w') + cert_pem_file.write(cert_pem) + cert_pem_file_path = os.path.abspath(cert_pem_filename) + os.chmod(cert_pem_file_path, 0o444) + cert_pem_file.close() + + # Store private key PEM as file + private_key_pem = result['keyPair']['PrivateKey'] + private_key_pem_filename = thing_name + '_private_key_pem_file.pem' + private_key_pem_file = open(private_key_pem_filename, 'w') + private_key_pem_file.write(private_key_pem) + private_key_pem_file_path = os.path.abspath(private_key_pem_filename) + os.chmod(private_key_pem_file_path, 0o444) + private_key_pem_file.close() + + # Create a Policy + policy_document = misc.create_policy_document() + policy_name = thing_name + '_amazon_freertos_policy' + policy_obj = policy.Policy(policy_name, policy_document) + policy_obj.create() + + # Attach certificate to Thing + cert_obj.attach_thing(thing_name) + + # Attach policy to certificate + cert_obj.attach_policy(policy_name) + + +def update_credential_file(): + with open('configure.json') as configure_file: + json_text = json.load(configure_file) + + source_dir = os.path.expanduser(json_text['FreeRTOS_source_dir']) + thing_name = json_text['thing_name'] + + # Read cert_pem from file + cert_pem_filename = thing_name + '_cert_pem_file.pem' + try: + cert_pem_file = open(cert_pem_filename, 'r') + except IOError: + print("{} file not found. Run prerequisite step" + .format(cert_pem_filename)) + sys.exit(1) + else: + cert_pem = cert_pem_file.read() + + # Read private_key_pem from file + private_key_pem_filename = thing_name + '_private_key_pem_file.pem' + try: + private_key_pem_file = open(private_key_pem_filename, 'r') + except IOError: + print("{} file not found. Run prerequisite step" + .format(private_key_pem_filename)) + sys.exit(1) + else: + private_key_pem = private_key_pem_file.read() + + # Modify 'demo_config.h' file + misc.write_client_credentials( + source_dir, + thing_name=thing_name, + client_certificate_pem=cert_pem, + client_private_key_pem=private_key_pem, + cleanup=False) + + +def delete_prereq(): + with open('configure.json') as configure_file: + json_text = json.load(configure_file) + + # Delete Thing + thing_name = json_text['thing_name'] + thing_obj = thing.Thing(thing_name) + if thing_obj.exists(): + thing_obj.delete() + + # Delete certificate + cert_id_filename = thing_name + '_cert_id_file.txt' + if os.path.exists(cert_id_filename): + cert_id_file = open(cert_id_filename, 'r') + cert_id = cert_id_file.read() + cert_obj = certs.Certificate(cert_id) + cert_obj.delete() + cert_id_file.close() + cert_id_file_path = os.path.abspath(cert_id_filename) + os.chmod(cert_id_file_path, 0o666) + os.remove(cert_id_filename) + + # Delete cert_pem file and private_key_pem file + cert_pem_filename = thing_name + '_cert_pem_file.pem' + if os.path.exists(cert_pem_filename): + cert_pem_file_path = os.path.abspath(cert_pem_filename) + os.chmod(cert_pem_file_path, 0o666) + os.remove(cert_pem_filename) + + private_key_pem_filename = thing_name + '_private_key_pem_file.pem' + if os.path.exists(private_key_pem_filename): + private_key_pem_file_path = os.path.abspath(private_key_pem_filename) + os.chmod(private_key_pem_file_path, 0o666) + os.remove(private_key_pem_filename) + + # Delete policy + policy_name = thing_name + '_amazon_freertos_policy' + policy_obj = policy.Policy(policy_name) + if policy_obj.exists(): + policy_obj.delete() + + +def cleanup_creds(): + with open('configure.json') as file: + json_text = json.load(file) + + source_dir = os.path.expanduser(json_text['FreeRTOS_source_dir']) + + # Cleanup 'demo_config.h' file + misc.write_client_credentials(source_dir, cleanup=True) + + +def setup(): + prereq() + update_credential_file() + print("Setup Completed") + + +def cleanup(): + delete_prereq() + cleanup_creds() + print("Cleanup Completed") + + +def list_certificates(): + client = boto3.client('iot') + certs = client.list_certificates()['certificates'] + pp.pprint(certs) + + +def list_things(): + client = boto3.client('iot') + things = client.list_things()['things'] + pp.pprint(things) + + +def list_policies(): + client = boto3.client('iot') + policies = client.list_policies()['policies'] + pp.pprint(policies) + + +if __name__ == "__main__": + + arg_parser = argparse.ArgumentParser() + subparsers = arg_parser.add_subparsers(help='Available commands', + dest='command') + subparsers.add_parser('setup', help='Setup AWS IoT') + subparsers.add_parser('cleanup', help='Cleanup AWS IoT') + subparsers.add_parser('list_certificates', help='List certificates') + subparsers.add_parser('list_things', help='List things') + subparsers.add_parser('list_policies', help='List policies') + subparsers.add_parser('prereq', help='Setup prerequisites for AWS IoT') + subparsers.add_parser('update_creds', help='Update credential files') + subparsers.add_parser('delete_prereq', help='Delete prerequisites created') + subparsers.add_parser('cleanup_creds', help='Cleanup credential files') + args = arg_parser.parse_args() + check_aws_configuration() + + if args.command == 'setup': + setup() + elif args.command == 'cleanup': + cleanup() + elif args.command == 'list_certificates': + list_certificates() + elif args.command == 'list_things': + list_things() + elif args.command == 'list_policies': + list_policies() + elif args.command == 'prereq': + prereq() + elif args.command == 'update_creds': + update_credential_file() + elif args.command == 'delete_prereq': + delete_prereq() + elif args.command == 'cleanup_creds': + cleanup_creds() + else: + print("Command does not exist") + + sys.exit(0) |