client side encrption+ pid lock for sigle instance
This commit is contained in:
		
							parent
							
								
									2bfc30a49a
								
							
						
					
					
						commit
						5a114c546f
					
				
							
								
								
									
										68
									
								
								client.py
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								client.py
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | ||||
| """ | ||||
| This script is a daemon that, on event, send and sync the clipboard with a  | ||||
| This script is a daemon that, on event, send and sync the clipboard with a | ||||
| distant one | ||||
| """ | ||||
| import threading | ||||
| @ -9,24 +9,27 @@ import json | ||||
| import pyperclip | ||||
| import requests | ||||
| import socketio | ||||
| import zc.lockfile | ||||
| from pid.decorator import pidfile | ||||
| from cryptography.fernet import Fernet | ||||
| import notification as notif | ||||
| 
 | ||||
| # to put in a conf file | ||||
| ip = 'localhost' | ||||
| port = "9564" | ||||
| hostname = "WarMachine" | ||||
| username = "neotaku67" | ||||
| password = "un bon mot de passe de prefererance mais en sah tant qu'il est hashe ca passe" | ||||
| sign = "[AllSync] " | ||||
| IP = 'localhost' | ||||
| PORT = "9564" | ||||
| HOSTNAME = "WarMachine" | ||||
| USERNAME = "neotaku67" | ||||
| PASSWORD = "un bon mot de passe de prefererance mais en sah tant qu'il est hashe ca passe" | ||||
| SIGNATURE = "[AllSync] " | ||||
| KEY = b'n63cPRiZ5DBIBgIR8oiDhnzE5oAj-6xsU1ed8gdPr8A=' | ||||
| fernet = Fernet(KEY) | ||||
| 
 | ||||
| 
 | ||||
| ip = f"http://{ip}:{port}" | ||||
| IP = f"http://{IP}:{PORT}" | ||||
| sio = socketio.Client() | ||||
| sio.connect(ip) | ||||
| sio.connect(IP) | ||||
| print("[Debug] Connected to Server .w.") | ||||
| auth = requests.post(f"{ip}/user", | ||||
|                      data={"username": username, "password": password}, | ||||
| auth = requests.post(f"{IP}/user", | ||||
|                      data={"username": USERNAME, "password": PASSWORD}, | ||||
|                      timeout=10000) | ||||
| if auth.status_code != 200: | ||||
|     print("invalid credentials") | ||||
| @ -40,14 +43,17 @@ def send_notification(): | ||||
|     while not notify_stop_event.is_set(): | ||||
|         while not notif.notification_queue.empty(): | ||||
|             notification = notif.notification_queue.get() | ||||
|             if notification.title.find(sign) == -1: | ||||
|             if notification.title.find(SIGNATURE) != -1: | ||||
|                 continue | ||||
|             requests.put(f"{ip}/notification", | ||||
|             requests.put(f"{IP}/notification", | ||||
|                          data={"token": token, | ||||
|                                "title": notification.title, | ||||
|                                "content": notification.content, | ||||
|                                "deviceName": hostname}, | ||||
|                                "title": | ||||
|                                fernet.encrypt(notification.title.encode()), | ||||
|                                "content": | ||||
|                                fernet.encrypt(notification.content.encode()), | ||||
|                                "deviceName": HOSTNAME}, | ||||
|                          timeout=5000) | ||||
|             print("[NotificationEvent] data sent") | ||||
|         time.sleep(1) | ||||
| 
 | ||||
| 
 | ||||
| @ -57,22 +63,26 @@ notification_thread = threading.Thread(target=send_notification) | ||||
| 
 | ||||
| @sio.event | ||||
| def NotificationUpdate(data): | ||||
|     if data["device_name"] == hostname: | ||||
|     if data["device_name"] == HOSTNAME: | ||||
|         return | ||||
|     response = requests.get(f"{ip}/notification/-1?token={token}", | ||||
|     response = requests.get(f"{IP}/notification/-1?token={token}", | ||||
|                             timeout=2000) | ||||
|     response = json.loads(response.content.decode())["notifications"] | ||||
|     notification = notif.Notification(title=sign+response["title"], | ||||
|                                       content=response["content"]) | ||||
|     notification = notif.Notification(title=SIGNATURE+fernet | ||||
|                                       .decrypt(response["title"]) | ||||
|                                       .decode(), | ||||
|                                       content=fernet | ||||
|                                       .decrypt(response["content"]) | ||||
|                                       .decode()) | ||||
|     notification.show() | ||||
|     print("[NotificationEvent] received data") | ||||
| 
 | ||||
| 
 | ||||
| @sio.event | ||||
| def ClipboardUpdate(data): | ||||
|     if data["device_name"] == hostname: | ||||
|     if data["device_name"] == HOSTNAME: | ||||
|         return | ||||
|     clipboard = requests.get(f"{ip}/clipboard/-1?token={token}", | ||||
|     clipboard = requests.get(f"{IP}/clipboard/-1?token={token}", | ||||
|                              timeout=2000) | ||||
|     clipboard = json.loads(clipboard.content.decode()) | ||||
|     clipboard = clipboard["clipboard"] | ||||
| @ -80,6 +90,16 @@ def ClipboardUpdate(data): | ||||
|     print("[ClipboardEvent] received data") | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
| @pidfile() | ||||
| def main(): | ||||
|     notification_thread.start() | ||||
|     sio.wait() | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == "__main__": | ||||
|     try: | ||||
|         main() | ||||
|     except: | ||||
|         print("cant lock pid file, is an another instance running?") | ||||
|         sio.disconnect() | ||||
|         sys.exit(1) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user