From a8d2ed8d45ac61538fbb734c152f54935c222cd2 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Wed, 11 Dec 2019 18:04:09 +0530 Subject: [PATCH] fix(chat): refactor code to make chat work fixes issues with token being wrongly passed as the owner, instead of current session user (ie. frappe.session.user), which in turn causes the following issue: Traceback (most recent call last): File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 57, in application response = frappe.handler.handle() File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle data = execute_cmd(cmd) File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 61, in execute_cmd return frappe.call(method, **frappe.form_dict) File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1042, in call return fn(*args, **newargs) File "/home/frappe/frappe-bench/apps/frappe/frappe/chat/doctype/chat_room/chat_room.py", line 203, in create room.save(ignore_permissions = True) File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 272, in save return self._save(*args, **kwargs) File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 295, in _save self.insert() File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 223, in insert self._validate_links() File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 756, in _validate_links frappe.LinkValidationError) File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 364, in throw msgprint(msg, raise_exception=exc, title=title, indicator='red') File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 350, in msgprint _raise_exception() File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 316, in _raise_exception raise raise_exception(msg) frappe.exceptions.LinkValidationError: Could not find Owner: 0a4d6eb7763ef2065f44ece0653d829a1ba189f753562ab9ac261620 also fixes issue where the chat rooms do not load because of wrongly passed parameters Signed-off-by: Chinmay D. Pai --- frappe/chat/doctype/chat_room/chat_room.py | 39 +++++++++++----------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/frappe/chat/doctype/chat_room/chat_room.py b/frappe/chat/doctype/chat_room/chat_room.py index 44a6ce0f0b..0afe2daa69 100644 --- a/frappe/chat/doctype/chat_room/chat_room.py +++ b/frappe/chat/doctype/chat_room/chat_room.py @@ -93,14 +93,14 @@ class ChatRoom(Document): frappe.publish_realtime('frappe.chat.room:update', update, room = self.name, after_commit = True) -@frappe.whitelist(allow_guest = True) -def get(user, rooms = None, fields = None, filters = None): +@frappe.whitelist(allow_guest=True) +def get(token, rooms=None, fields=None, filters=None): # There is this horrible bug out here. # Looks like if frappe.call sends optional arguments (not in right order), the argument turns to an empty string. # I'm not even going to think searching for it. # Hence, the hack was get_if_empty (previous assign_if_none) # - Achilles Rasquinha achilles@frappe.io - authenticate(user) + authenticate(token) rooms, fields, filters = safe_json_loads(rooms, fields, filters) @@ -123,8 +123,8 @@ def get(user, rooms = None, fields = None, filters = None): rooms = frappe.get_all('Chat Room', or_filters = [ - ['Chat Room', 'owner', '=', user], - ['Chat Room User', 'user', '=', user] + ['Chat Room', 'owner', '=', frappe.session.user], + ['Chat Room User', 'user', '=', frappe.session.user] ], filters = const, fields = param + ['name'] if param else default, @@ -151,9 +151,9 @@ def get(user, rooms = None, fields = None, filters = None): return rooms -@frappe.whitelist(allow_guest = True) -def create(kind, owner, users = None, name = None): - authenticate(owner) +@frappe.whitelist(allow_guest=True) +def create(kind, token, users=None, name=None): + authenticate(token) users = safe_json_loads(users) create = True @@ -163,16 +163,16 @@ def create(kind, owner, users = None, name = None): SELECT name FROM `tabChat Room` WHERE owner = "{owner}" - """.format(owner = owner), as_dict = True)) + """.format(owner=frappe.session.user), as_dict=True)) if room: room = frappe.get_doc('Chat Room', room.name) create = False if create: - room = frappe.new_doc('Chat Room') - room.type = kind - room.owner = owner + room = frappe.new_doc('Chat Room') + room.type = kind + room.owner = frappe.session.user room.room_name = name dusers = [ ] @@ -181,13 +181,13 @@ def create(kind, owner, users = None, name = None): if users: users = listify(users) for user in users: - duser = frappe.new_doc('Chat Room User') + duser = frappe.new_doc('Chat Room User') duser.user = user dusers.append(duser) room.users = dusers else: - dsettings = frappe.get_single('Website Settings') + dsettings = frappe.get_single('Website Settings') room.room_name = dsettings.chat_room_name users = [user for user in room.users] if hasattr(room, 'users') else [ ] @@ -201,11 +201,12 @@ def create(kind, owner, users = None, name = None): room.save(ignore_permissions = True) - room = get(owner, rooms = room.name) - users = [room.owner] + [u for u in room.users] + room = get(token, rooms=room.name) + if room: + users = [room.owner] + [u for u in room.users] - for u in users: - frappe.publish_realtime('frappe.chat.room:create', room, user = u, after_commit = True) + for user in users: + frappe.publish_realtime('frappe.chat.room:create', room, user=user, after_commit=True) return room @@ -219,4 +220,4 @@ def history(room, user, fields = None, limit = 10, start = None, end = None): mess = chat_message.history(room, limit = limit, start = start, end = end) mess = squashify(mess) - return dictify(mess) \ No newline at end of file + return dictify(mess)