Beispiel #1
0
    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))
Beispiel #2
0
    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))))