Security update on base_device.py

Add authentication for WebSocket connection in Device class
pull/254/head
Keyvan Hardani 9 months ago committed by GitHub
parent 3e7d6eadd7
commit c059cf1f94
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -285,11 +285,49 @@ class Device:
await websocket.send(json.dumps(message))
send_queue.task_done()
await asyncio.sleep(0.01)
async def authenticate(self, websocket):
while True:
# Receive authentication request from the server
auth_request = await websocket.recv()
auth_data = json.loads(auth_request)
if auth_data["type"] == "auth_request":
# Send authentication response with the token
token = os.getenv("WS_TOKEN")
if token:
auth_response = {"token": token}
await websocket.send(json.dumps(auth_response))
# Receive authentication result from the server
auth_result = await websocket.recv()
result_data = json.loads(auth_result)
if result_data["type"] == "auth_success":
# Authentication successful
return True
else:
# Authentication failed
logger.error("Authentication failed. Closing the connection.")
await websocket.close()
return False
else:
logger.error("WS_TOKEN not found in environment variables.")
await websocket.close()
return False
else:
# Unexpected message from the server
logger.warning(f"Unexpected message from the server: {auth_data}")
async def websocket_communication(self, WS_URL):
show_connection_log = True
async def exec_ws_communication(websocket):
# Perform authentication
if not await self.authenticate(websocket):
return # Authentication successful, continue with the rest of the communication
if CAMERA_ENABLED:
print(
"\nHold the spacebar to start recording. Press 'c' to capture an image from the camera. Press CTRL-C to exit."
@ -347,8 +385,8 @@ class Device:
# Workaround for Windows 10 not latching to the websocket server.
# See https://github.com/OpenInterpreter/01/issues/197
try:
ws = websockets.connect(WS_URL)
await exec_ws_communication(ws)
async with websockets.connect(WS_URL) as websocket:
await exec_ws_communication(websocket)
except Exception as e:
logger.error(f"Error while attempting to connect: {e}")
else:

Loading…
Cancel
Save