From 3ca93438e627ffee8f9518f5f4963fa5bf6bee45 Mon Sep 17 00:00:00 2001 From: "DESKTOP-DPA61F8\\Benedek" Date: Thu, 22 Apr 2021 14:35:58 +0200 Subject: [PATCH] 1: config init in separate file 2: auth_test doesnt generate production state --- server/authentication.py | 34 --------------------------- server/authentication_test.py | 18 +++----------- server/config_init.py | 44 +++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 49 deletions(-) create mode 100644 server/config_init.py diff --git a/server/authentication.py b/server/authentication.py index 1f6c2b0..7ccc159 100644 --- a/server/authentication.py +++ b/server/authentication.py @@ -54,7 +54,6 @@ class Authetication: auth_logger.debug("User logged in: " + username) return user['homeDir'] - def checkUserExists(self, username: str) -> bool: with open(self.CONFIG_FILE_LOCATION) as json_file: data = json.load(json_file) @@ -76,39 +75,6 @@ class Authetication: os.mkdir(self.PRIVATE_KEY_DIRECTORY_LOCATION) - def generatePrivateKeyForUser(self, username:str, user_passphrase:str, public_server_key='') -> bool: - if self.checkUserExists(username): - with open(self.CONFIG_FILE_LOCATION) as json_file: - data = json.load(json_file) - - private_key = RSA.generate(2048) - public_key = private_key.publickey() - private_key_value = bytes.hex(private_key.exportKey('DER', passphrase=user_passphrase, pkcs=8)) - public_key_value = bytes.hex(public_key.exportKey('DER', pkcs=8)) - - - ##Save private key in separate file - user_privatekey = {'passphrase': user_passphrase, 'privateClientKey': private_key_value, 'publicServerKey': public_server_key} - with open(self.PRIVATE_KEY_DIRECTORY_LOCATION + os.path.sep + str(data['index']) + '.txt', 'w+') as outfile: - json.dump(user_privatekey, outfile) - outfile.close() - - ##Save public key in users - for user in data['user']: - if username == user['username']: - user['publicKey'] = public_key_value - with open(self.CONFIG_FILE_LOCATION, 'w') as outfile: - json.dump(data, outfile) - break - outfile.close() - return True - else: - - return False - - - - def saveUser(self, username: str, password: str) -> bool: bytePass = password.encode('utf-8') b64pwd = b64encode(SHA256.new(bytePass).digest()) diff --git a/server/authentication_test.py b/server/authentication_test.py index 7729b1d..47d37be 100644 --- a/server/authentication_test.py +++ b/server/authentication_test.py @@ -1,4 +1,5 @@ from authentication import Authetication +import config_init as init import json import logging import os @@ -63,26 +64,14 @@ def testUserExists(username: str, password: str): logging.info('TEST 2 --> User exists with INVALID user :: PASSED') -def productionInit(): - logging.info('INITIATING CONFIG FILE') - auth = Authetication() - auth.initConfig() - auth.saveUser('alma','alma') - auth.generatePrivateKeyForUser('alma', 'amla') - auth.saveUser('citrom','citrom') - auth.generatePrivateKeyForUser('citrom', 'mortic') - auth.saveUser('dinnye','dinnye') - auth.generatePrivateKeyForUser('dinnye', 'eynnid') - - def testPersistency(): logging.info('PERSISTENCY TEST') auth = Authetication() auth.initConfig() auth.saveUser('alma','alma') - auth.generatePrivateKeyForUser('alma', 'amla') + init.generatePrivateKeyForUser(auth, 'alma', 'amla') auth.saveUser('citrom','citrom') - auth.generatePrivateKeyForUser('citrom', 'mortic') + init.generatePrivateKeyForUser(auth, 'citrom', 'mortic') auth2 = Authetication() if auth2.checkUserExists('alma'): @@ -127,4 +116,3 @@ if __name__ == '__main__': testAuth("Diósbejglia", "Diósbejgli") testUserExists("Diósbejglia", "Diósbejgli") testPersistency() - productionInit() diff --git a/server/config_init.py b/server/config_init.py new file mode 100644 index 0000000..c8e9759 --- /dev/null +++ b/server/config_init.py @@ -0,0 +1,44 @@ +from authentication import Authetication +from Crypto.PublicKey import RSA +import json +import logging +import os + + +def generatePrivateKeyForUser(auth: Authetication, username: str, user_passphrase: str, public_server_key='') -> bool: + if auth.checkUserExists(username): + with open(auth.CONFIG_FILE_LOCATION) as json_file: + data = json.load(json_file) + + private_key = RSA.generate(2048) + public_key = private_key.publickey() + private_key_value = bytes.hex(private_key.exportKey('DER', passphrase=user_passphrase, pkcs=8)) + public_key_value = bytes.hex(public_key.exportKey('DER', pkcs=8)) + + ##Save private key in separate file + user_privatekey = {'passphrase': user_passphrase, 'privateClientKey': private_key_value, + 'publicServerKey': public_server_key} + with open(auth.PRIVATE_KEY_DIRECTORY_LOCATION + os.path.sep + str(data['index']) + '.txt', 'w+') as outfile: + json.dump(user_privatekey, outfile) + outfile.close() + + ##Save public key in users + for user in data['user']: + if username == user['username']: + user['publicKey'] = public_key_value + with open(auth.CONFIG_FILE_LOCATION, 'w') as outfile: + json.dump(data, outfile) + break + outfile.close() + return True + else: + return False + + +if __name__ == '__main__': + auth = Authetication() + auth.initConfig() + auth.saveUser('alma' ,'alma') + generatePrivateKeyForUser('alma', 'amla') + auth.saveUser('citrom' ,'citrom') + generatePrivateKeyForUser('citrom', 'mortic') \ No newline at end of file