MCPcopy
hub / github.com/HelloZeroNet/ZeroNet / actionWebsocket

Method actionWebsocket

src/Ui/UiRequest.py:736–781  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

734
735 # On websocket connection
736 def actionWebsocket(self):
737 ws = self.env.get("wsgi.websocket")
738
739 if ws:
740 # Allow only same-origin websocket requests
741 origin = self.env.get("HTTP_ORIGIN")
742 host = self.env.get("HTTP_HOST")
743 # Allow only same-origin websocket requests
744 if origin:
745 origin_host = origin.split("://", 1)[-1]
746 if origin_host != host and origin_host not in self.server.allowed_ws_origins:
747 ws.send(json.dumps({"error": "Invalid origin: %s" % origin}))
748 return self.error403("Invalid origin: %s" % origin)
749
750 # Find site by wrapper_key
751 wrapper_key = self.get["wrapper_key"]
752 site = None
753 for site_check in list(self.server.sites.values()):
754 if site_check.settings["wrapper_key"] == wrapper_key:
755 site = site_check
756
757 if site: # Correct wrapper key
758 try:
759 user = self.getCurrentUser()
760 except Exception as err:
761 ws.send(json.dumps({"error": "Error in data/user.json: %s" % err}))
762 return self.error500("Error in data/user.json: %s" % err)
763 if not user:
764 ws.send(json.dumps({"error": "No user found"}))
765 return self.error403("No user found")
766 ui_websocket = UiWebsocket(ws, site, self.server, user, self)
767 site.websockets.append(ui_websocket) # Add to site websockets to allow notify on events
768 self.server.websockets.append(ui_websocket)
769 ui_websocket.start()
770 self.server.websockets.remove(ui_websocket)
771 for site_check in list(self.server.sites.values()):
772 # Remove websocket from every site (admin sites allowed to join other sites event channels)
773 if ui_websocket in site_check.websockets:
774 site_check.websockets.remove(ui_websocket)
775 return "Bye."
776 else: # No site found by wrapper key
777 ws.send(json.dumps({"error": "Wrapper key not found: %s" % wrapper_key}))
778 return self.error403("Wrapper key not found: %s" % wrapper_key)
779 else:
780 self.start_response("400 Bad Request", [])
781 return [b"Not a websocket request!"]
782
783 # Debug last error
784 def actionDebug(self):

Callers 1

routeMethod · 0.95

Calls 9

error403Method · 0.95
getCurrentUserMethod · 0.95
error500Method · 0.95
startMethod · 0.95
UiWebsocketClass · 0.90
valuesMethod · 0.80
removeMethod · 0.80
getMethod · 0.45
sendMethod · 0.45

Tested by

no test coverage detected