diff --git a/htdocs/lib/UI.js b/htdocs/lib/UI.js index 72863aad..5a99541d 100644 --- a/htdocs/lib/UI.js +++ b/htdocs/lib/UI.js @@ -258,8 +258,10 @@ UI.recvChatMessage = function(nickname, text, color = 'white') { toggle_panel('openwebrx-panel-log', true); divlog( - '[' + nickname - + ']: ' + '' + text + '' + '[' + + Utils.htmlEscape(nickname) + ']: ' + + '' + Utils.htmlEscape(text) + + '' ); }; diff --git a/owrx/client.py b/owrx/client.py index 6baea935..96b1567f 100644 --- a/owrx/client.py +++ b/owrx/client.py @@ -2,6 +2,7 @@ from owrx.config import Config from owrx.color import ColorCache from datetime import datetime, timedelta import threading +import re import logging @@ -31,7 +32,7 @@ class ClientRegistry(object): self.clients = [] self.bans = {} self.chat = {} - self.chatCount = 0 + self.chatCount = 1 self.chatColors = ColorCache() Config.get().wireProperty("max_clients", self._checkClientCount) super().__init__() @@ -69,23 +70,27 @@ class ClientRegistry(object): # Broadcast chat message to all connected clients. def broadcastChatMessage(self, client, text: str, name: str = None): - # Names have to be 3+ characters - if name is not None and len(name) < 1: - name = None + # Names can only include alphanumerics + if name is not None: + name = re.sub("\W+", "", name) + # If we have seen this client chatting before... if client in self.chat: + # Rename existing client as needed, keep color curname = self.chat[client]["name"] color = self.chat[client]["color"] - if name is None or name == curname: + if not name or name == curname: name = curname else: self.chatColors.rename(curname, name) self.chat[client]["name"] = name else: - name = "User%d" % (self.chatCount + 1) if name is None else name + # Create name and color for a new client + name = "User%d" % self.chatCount if not name else name color = self.chatColors.getColor(name) self.chat[client] = { "name": name, "color": color } - self.chatCount = (self.chatCount + 1) % 9999 + self.chatCount = self.chatCount + 1 + # Broadcast message to all clients for c in self.clients: c.write_chat_message(name, text, color)