Exemple #1
0
 def send_msg(self):
     msg_txt = self.message_text.text()
     encrypt_msg= encrypt(msg_txt,self.my_user.chat_key)
     # print("my text is " + msg_txt)
     self.chat_text.scrollToBottom()
     if msg_txt != '':
         '''
         # send date at the start of conversation
         if self.first_msg:
             date = datetime.date.today().strftime("%B %d, %Y")
             item = QListWidgetItem('%s' % (date))
             self.chat_text.addItem(item)
             item.setBackground(QtGui.QColor('#fad000'))
             date= encrypt(date,self.my_user.chat_key)
             t = Thread(target=self.my_user.send_message, args=(self.friend_id, date))
             t.daemon = True
             # self.my_user.send_message(self.friend_id, msg_txt)
             t.start()
             self.first_msg = False
             time.sleep(0.8)
         '''
         item = QListWidgetItem('%s' % (self.my_user.name + " > " + msg_txt))
         self.chat_text.addItem(item)
         item.setBackground(QtGui.QColor('#ff944d'))
         self.message_text.setText("")
         t = Thread(target=self.my_user.send_message, args=(self.friend_id , encrypt_msg))
         t.daemon = True
         #self.my_user.send_message(self.friend_id, msg_txt)
         t.start()
         self.chat_text.scrollToBottom()
Exemple #2
0
 def execute_command_from_ssh_requests_command_queue(self):
     #print("got in execute command")
     while True:
         # queue not empty - get new message
         if len(self.ssh_requests_command_queue) > 0:
             #print("execute_command got a command")
             data = self.ssh_requests_command_queue.pop()
             decrypt_msg = decrypt(data['chat']['text'], self.chat_key)
             while decrypt_msg[-1:] == "0":
                 decrypt_msg = decrypt_msg[:-1]
             try:
                 result = self.execute_command(decrypt_msg[16:])
             except:
                 result = "no respond"
             print("result: " + result)
             if result != '':
                 new_msg = {"sender_id": data['ID'], "ssh_cmd": result}
                 encrypt_msg = encrypt(result, self.chat_key)
                 if self.show_ssh_res:
                     self.ssh_results_command_queue.append(new_msg)
                     self.ssh_results_command_queue_waiter.acquire()
                     self.ssh_results_command_queue_waiter.notify()
                     self.ssh_results_command_queue_waiter.release()
                 self.send_message(data['ID'], encrypt_msg)
         else:
             #print("execute_command go to sleep")
             self.command_request.acquire()
             self.command_request.wait()
             self.command_request.release()
Exemple #3
0
 def ask_for_control(self, friend_id):
     encrypted_msg = encrypt('can i control yours computer?@#$<<',
                             self.chat_key)
     params = {
         'ID': self.id,
         "otherID": friend_id,
         'chat': {
             "senderName": self.name,
             "text": encrypted_msg
         }
     }
     r = requests.post(url=URL.postURL, json=params)
Exemple #4
0
 def send_ssh_message(self, friend_id, msg):
     msg = 'ssh control@#$<<' + msg
     encrypt_msg = encrypt(msg, self.chat_key)
     params = {
         'ID': self.id,
         "otherID": friend_id,
         'chat': {
             "senderName": self.name,
             "text": encrypt_msg
         }
     }
     r = requests.post(url=URL.postURL, json=params)
     return_msg = r.text
Exemple #5
0
 def ask_for_control(self):
     self.my_user.ask_for_control(self.friend_id)
     encrypted_msg = encrypt("can i control yours computer? (press 'yes' or 'no' button)", self.my_user.chat_key)
     t = Thread(target=self.my_user.send_message, args=(self.friend_id, encrypted_msg))
     t.daemon = True
     t.start()
Exemple #6
0
    def listen_to_server(self):
        while True:
            # queue not empty - got new message
            if len(User.q) != 0:
                # pop the new msg
                data = User.q.pop()
                # check if the message designated to me
                if data['otherID'] == self.id:
                    decrypt_msg = decrypt(data['chat']['text'], self.chat_key)
                    while decrypt_msg[-1:] == "0":
                        decrypt_msg = decrypt_msg[:-1]
                    # check the kind of the message - ordinary or control
                    if str(decrypt_msg
                           ) == 'can i control yours computer?@#$<<':
                        self.approve_control_requests.add(data['ID'])
                        self.approve_control_requests_waiter.acquire()
                        self.approve_control_requests_waiter.notify()
                        self.approve_control_requests_waiter.release()

                    elif str(decrypt_msg).startswith(
                            'ssh control@#$<<'
                    ) and data['ID'] in self.approved_control:
                        self.ssh_requests_command_queue.append(data)
                        self.command_request.acquire()
                        self.command_request.notify()
                        self.command_request.release()
                    elif str(decrypt_msg).startswith('ssh control@#$<<'):
                        encrypted_msg = encrypt(
                            "send the bush command " + decrypt_msg[16:] +
                            " but it didnt execute", self.chat_key)
                        new_msg = {
                            "sender_id": data['ID'],
                            "sender_name": data['chat']['senderName'],
                            "text": encrypted_msg
                        }

                        self.my_queue.append(new_msg)
                        self.my_queue_waiter.acquire()
                        self.my_queue_waiter.notify()
                        self.my_queue_waiter.release()

                    else:
                        new_msg = {
                            "sender_id": data['ID'],
                            "sender_name": data['chat']['senderName'],
                            "text": data['chat']['text']
                        }
                        self.my_queue.append(new_msg)
                        # for alert to main windows that the user get a new msg
                        self.sender_queue.append(new_msg["sender_id"])
                        self.my_queue_waiter.acquire()
                        self.my_queue_waiter.notifyAll()
                        self.my_queue_waiter.release()
                # my friend announce to me he is disconnect/connect
                elif data['otherID'] == "broadcast" and data[
                        'ID'] in self.friends_list:
                    if str(data['chat']['text']) == 'i am connected!@#$':
                        new_msg = {"sender_id": data['ID']}
                        self.connect_friend_queue.append(new_msg)
                        self.connect_status_waiter.acquire()
                        self.connect_status_waiter.notify()
                        self.connect_status_waiter.release()
                    elif str(data['chat']['text']) == 'i am disconnected!@#$':
                        new_msg = {"sender_id": data['ID']}
                        self.disconnect_friend_queue.append(new_msg)
                        #time.sleep(.1)
                        self.connect_status_waiter.acquire()
                        self.connect_status_waiter.notify()
                        self.connect_status_waiter.release()
            # queue empty thread go to sleep, avoid busy waiting
            else:
                User.cv.acquire()
                User.cv.wait()
                User.cv.release()