diff --git a/btc_tracker/kraken_fetch.py b/btc_tracker/kraken_fetch.py index f53eb1f..8dda463 100755 --- a/btc_tracker/kraken_fetch.py +++ b/btc_tracker/kraken_fetch.py @@ -33,7 +33,6 @@ server_public_key = server_private_key.get_verifying_key() # We need the hexadecimal form for sharing over http/json server_public_key_hex = binascii.hexlify(server_public_key.to_string()).decode("utf-8") -database_lock = threading.Lock() # Empty response json empty_dict = { @@ -51,10 +50,32 @@ empty_json = json.dumps(empty_dict) def read_keys(): - with open(KEYSFILE, "r") as cfile: - user_keys = json.load(cfile) - return user_keys["user_publickeys"] + """ + Reads the declared KEYSFILE and returns "user_publickeys" from it. + Returns: json object + """ + # test if the file is there, we could make one if there is non + try: + # ascii is subset of UTF-8, this should be quite safe... + with open(KEYSFILE, "r", encoding='utf-8') as cfile: + user_keys = json.load(cfile) + if 'user_publickeys' not in user_keys: + raise ValueError('Missing required property "user_publickeys" in config file') + + return user_keys["user_publickeys"] + except FileNotFoundError: + empty_userkeys = { + "user_publickeys": { + "user_name": "user_ecdsa_public key" + } + } + empty_userkeys_json = json.dumps(empty_userkeys) + with open(KEYSFILE, "w", encoding='utf-8') as nfile: + print('You seem be lacking the users key file, created example for you. Exiting') + json.dump(empty_userkeys_json, nfile) + raise EmptyUsersFile('Error') + return {} def check_database(): """ @@ -398,9 +419,12 @@ def give_serverkey(): if __name__ == "__main__": # Make sanity checks for the database check_database() + database_lock = threading.Lock() # Get the users public keys - user_publickeys = read_keys() + try: + user_publickeys = read_keys() + # Start the data fetching backend processĀ§ fetch_thread = threading.Thread(target=get_the_data)