Beispiel #1
0
    def send_avatar(self, avatar_bytes):
        avatar_part = 512
        for i in range(0, len(avatar_bytes), avatar_part):
            part = b64encode(avatar_bytes[i:i + avatar_part])
            part_req = Request(RequestAction.IMAGE, part.decode())
            self.__send_request(part_req)
            self.file_answers.get()

        self.logger.debug(f'Send end part')
        end_req = Request(RequestAction.END_IMAGE, 'set_avatar')
        self.__send_request(end_req)
        resp = self.file_answers.get()
Beispiel #2
0
 def authorization(self):
     """ Method of authorization on server """
     pr_req = Request(RequestAction.PRESENCE, self.user.username)
     self.__send_request(pr_req)
     resp = self.__get_response()
     if resp is None:
         return Response(SERVER_ERROR)
     if resp.code != AUTH:
         return resp
     enc_pass = encrypt_rsa(import_pub_key(resp.message.encode()),
                            self.user.password)
     auth_req = Request(RequestAction.AUTH, enc_pass.decode())
     self.__send_request(auth_req)
     return self.__get_response()
Beispiel #3
0
 def get_chat_req(self, contact):
     """ Method send request for gets all messages of chat with contact """
     if self.get_chat_sended:
         return
     req = Request(RequestAction.COMMAND,
                   f'get_chat {self.user.username} {contact}')
     self.__send_request(req)
Beispiel #4
0
 def check_self_avatar(self):
     user = self.username
     av_hash = self.storage.get_avatar_hash(self.username)
     ch_req = Request(RequestAction.COMMAND,
                      f'check_avatar {user} {av_hash}')
     self.__send_request(ch_req)
     resp = self.answers.get()
     if not resp:
         self.send_avatar(self.avatar)
Beispiel #5
0
    def add_contact(self, contact):
        """ Method add contact in contact list """

        if self.storage.get_contact(contact):
            return False
        self.storage.add_contact(contact)
        req = Request(RequestAction.COMMAND, f'add_contact {contact}')
        self.__send_request(req)
        return True
Beispiel #6
0
    def send_msg(self, text, to):
        """ Method send messge to server """

        encryptor = self.get_encryptor(to)
        text = encryptor.encript_msg(text.encode()).decode()
        msg = Msg(text, self.user, to)
        self.storage.add_message(msg.to, msg.text)
        request = Request(RequestAction.MESSAGE, msg)
        self.__send_request(request)
Beispiel #7
0
    def start_chat(self, contact):
        """ Method initialization of chat with contact """

        key = self.storage.get_key(contact)
        if key is not None:
            self.set_encryptor(contact, ClientCrypt(key))

        prv, pub = gen_keys()
        self.priv_key = prv
        msg = Msg(pub.export_key().decode(), self.username, contact)
        start_req = Request(RequestAction.START_CHAT, msg)
        self.__send_request(start_req)
Beispiel #8
0
    def get_user_avatar(self, user):
        avatar = self.storage.get_avatar(user)
        if avatar:
            ch_req = Request(RequestAction.COMMAND,
                             f'check_avatar {user} {avatar.avatar_hash}')
            self.__send_request(ch_req)
            resp = self.answers.get()
            if resp == 1:
                return avatar.avatar
        get_req = Request(RequestAction.GET_IMAGE, user)
        self.__send_request(get_req)
        avatar_bytes = b''

        while True:
            resp = self.file_answers.get()
            if not resp:
                break
            avatar_bytes += b64decode(resp.encode())

        self.storage.set_avatar(user, avatar_bytes)
        return avatar_bytes
        pass
Beispiel #9
0
    def accepting_chat(self, resp_mes):
        """ Method of handle request to start chat """

        r_msg = Msg.from_formated(resp_mes)
        pub = import_pub_key(r_msg.text.encode())

        key = self.storage.get_key(r_msg.sender)
        if key is not None:
            encryptor = ClientCrypt(key)
        else:
            encryptor = ClientCrypt.gen_secret(self.username, r_msg.sender)
            self.storage.add_chat_key(r_msg.sender, encryptor.secret)
        self.set_encryptor(r_msg.sender, encryptor)
        enc_key = encrypt_rsa(pub, encryptor.secret)
        msg = Msg(enc_key.decode(), self.username, r_msg.sender)
        accept_req = Request(RequestAction.ACCEPT_CHAT, msg)
        self.__send_request(accept_req)
Beispiel #10
0
    def rem_contact(self, contact):
        """ Method remove contact from contact list """

        self.storage.remove_contact(contact)
        req = Request(RequestAction.COMMAND, f'rem_contact {contact}')
        self.__send_request(req)
Beispiel #11
0
    def get_contacts_req(self):
        """ Method send request for gets list contacts """

        self.__send_request(Request(RequestAction.COMMAND, 'get_contacts'))
Beispiel #12
0
    def get_users_req(self):
        """ Method send request for gets users online """

        self.__send_request(Request(RequestAction.COMMAND, 'get_users'))