from __future__ import print_function from __future__ import unicode_literals import argparse import os from six.moves import configparser # pylint: disable=import-error def get_your_keys(credentials_file): """ reads the secret keys in your credentials file in order to be able to look for them in the submitted code. """ aws_credentials_file_path = os.path.expanduser(credentials_file) if not os.path.exists(aws_credentials_file_path): return None parser = configparser.ConfigParser() parser.read(aws_credentials_file_path) keys = set() for section in parser.sections(): keys.add(parser.get(section, 'aws_secret_access_key')) return keys def check_file_for_aws_keys(filename, keys): with open(filename, 'r') as content: # naively match the entire file, chances be so slim # of random characters matching your flipping key. text_body = content.read() if any(key in text_body for key in keys): return 1 return 0 def main(argv=None): parser = argparse.ArgumentParser() parser.add_argument('filenames', nargs='*', help='Filenames to run') parser.add_argument( "--credentials-file", default='~/.aws/credentials', help="location of aws credentials file from which to get the secret " "keys we're looking for", ) args = parser.parse_args(argv) keys = get_your_keys(args.credentials_file) if not keys: return 2 retv = 0 for filename in args.filenames: retv |= check_file_for_aws_keys(filename, keys) return retv if __name__ == '__main__': exit(main())