def authorization(self, client, instances, coder): while True: print("client's authorization...") try: raw_data = ClientManager.get_msg(client, coder) print("get msg " + str(raw_data)) if raw_data is None or RequestType.AUTHORIZE not in raw_data: ClientManager.send_msg( client, *ClientManager.build_response( error_msg(RequestType.AUTHORIZE, "You are not authorized"), coder)) continue array = json.loads(raw_data[RequestType.AUTHORIZE]) access_rights = None admin = instances.DATA_BASE.get_admin(array[DataType.LOGIN]) if admin is not None and self.psw_equals( admin[DataType.PASSWORD], array[DataType.PASSWORD]): access_rights = DataType.ACCESS_ADMIN else: viewer = instances.DATA_BASE.get_viewer( array[DataType.LOGIN]) if viewer is not None and self.psw_equals( viewer[DataType.PASSWORD], array[DataType.PASSWORD]): access_rights = DataType.ACCESS_VIEWER if access_rights is None: ClientManager.send_msg( client, *ClientManager.build_response( error_msg(RequestType.AUTHORIZE, "Wrong login or password"), coder)) else: ClientManager.send_msg( client, *ClientManager.build_response( { RequestType.AUTHORIZE: admin if admin is not None else viewer, DataType.ACCESS: access_rights, DataType.CODE: DataType.CODE_SUCCESS }, coder)) ClientManager.run(client, instances, access_rights, coder) except ConnectionAbortedError as e: client.close() return except Exception as e: print("Server exception " + str(e)) ClientManager.send_msg( client, *ClientManager.build_response( error_msg(RequestType.AUTHORIZE, str(e)), coder))
def dh_key_exchange(self, client, coder): while True: try: print("waiting dh params..") raw_data = ClientManager.get_msg(client) print("get msg " + str(raw_data)) if "dh_params" in raw_data: ClientManager.send_msg( client, *ClientManager.build_response(coder.get_dh_params())) print("Waiting for client's public key") client_key_msg = ClientManager.get_msg(client) print("Public key received") if "public_key" not in client_key_msg: raise Exception( "Waiting for client public key for encryption") coder.calc_shared_key(client_key_msg["public_key"]) return elif coder.shared_key is None: raise Exception("Missing client public key for encryption") except Exception as e: print("Server exception " + str(e)) ClientManager.send_msg( client, *ClientManager.build_response( error_msg("dh_params", str(e))))