This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 56649d4ce [OPENMEETINGS-2828] private chat messages are properly
filtered during download/delete
56649d4ce is described below
commit 56649d4cea1a5ce75a03f5aface479f713af988f
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed Aug 26 16:38:51 2026 +0700
[OPENMEETINGS-2828] private chat messages are properly filtered during
download/delete
---
.../apache/openmeetings/db/dao/basic/ChatDao.java | 10 +++--
.../openmeetings/db/entity/basic/ChatMessage.java | 51 +++++++++++++++++-----
.../openmeetings/web/user/chat/ChatForm.java | 1 +
.../openmeetings/web/user/chat/ChatToolbar.java | 4 +-
4 files changed, 49 insertions(+), 17 deletions(-)
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
index e8a6f2c17..53bad8d0e 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
@@ -61,8 +61,9 @@ public class ChatDao {
, start, count).getResultList();
}
- public List<ChatMessage> getUser(long userId, long start, long count) {
+ public List<ChatMessage> getUser(long selfId, long userId, long start,
long count) {
return setLimits(em.createNamedQuery("getChatMessagesByUser",
ChatMessage.class)
+ .setParameter("selfId", selfId)
.setParameter(PARAM_USER_ID, userId)
, start, count).getResultList();
}
@@ -110,7 +111,10 @@ public class ChatDao {
em.createNamedQuery("deleteChatRoom").setParameter("roomId",
roomId).executeUpdate();
}
- public void deleteUser(Long userId) {
-
em.createNamedQuery("deleteChatUser").setParameter(PARAM_USER_ID,
userId).executeUpdate();
+ public void deleteUser(long selfId, Long userId) {
+ em.createNamedQuery("deleteChatUser")
+ .setParameter("selfId", selfId)
+ .setParameter(PARAM_USER_ID, userId)
+ .executeUpdate();
}
}
diff --git
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
index 6d14f6eb0..9f7c6a1b5 100644
---
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
+++
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
@@ -54,20 +54,47 @@ import org.apache.openmeetings.db.entity.user.User;
@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c
WHERE c.id = :id")
@NamedQuery(name = "getChatMessages", query = "SELECT c FROM ChatMessage c
ORDER BY c.id")
@NamedQuery(name = "getGlobalChatMessages", query = "SELECT c FROM ChatMessage
c WHERE c.toUser IS NULL AND c.toRoom IS NULL ORDER BY c.sent DESC")
-@NamedQuery(name = "getChatMessagesByRoom", query = "SELECT c FROM ChatMessage
c WHERE c.toUser IS NULL AND c.toRoom.id = :roomId"
- + " AND (true = :all OR (false = :all AND c.needModeration =
false)) ORDER BY c.sent DESC")
-@NamedQuery(name = "getChatMessagesByUser", query = "SELECT c FROM ChatMessage
c WHERE "
- + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND "
- + "(c.fromUser.id = :userId OR c.toUser.id = :userId) ORDER BY
c.sent DESC")
-@NamedQuery(name = "getChatMessagesByUserTime", query = "SELECT c FROM
ChatMessage c WHERE "
- + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND c.status <>
:status AND "
- + "(c.fromUser.id = :userId OR c.toUser.id = :userId) AND
c.sent > :date ORDER BY c.sent DESC")
-@NamedQuery(name = "chatCloseMessagesByUser", query = "UPDATE ChatMessage c
SET c.status = :status WHERE "
- + "c.toUser IS NOT NULL AND c.toRoom IS NULL AND c.status <>
:status AND "
- + "(c.fromUser.id = :userId OR c.toUser.id = :userId)")
+@NamedQuery(name = "getChatMessagesByRoom", query = """
+ SELECT c
+ FROM ChatMessage c
+ WHERE c.toUser IS NULL
+ AND c.toRoom.id = :roomId
+ AND (true = :all OR (false = :all AND c.needModeration = false))
+ ORDER BY c.sent DESC""")
+@NamedQuery(name = "getChatMessagesByUser", query = """
+ SELECT c
+ FROM ChatMessage c
+ WHERE c.toUser IS NOT NULL
+ AND c.fromUser IS NOT NULL
+ AND c.toRoom IS NULL
+ AND ((c.fromUser.id = :userId AND c.toUser.id = :selfId) OR
(c.fromUser.id = :selfId AND c.toUser.id = :userId))
+ ORDER BY c.sent DESC""")
+@NamedQuery(name = "getChatMessagesByUserTime", query = """
+ SELECT c
+ FROM ChatMessage c
+ WHERE c.toUser IS NOT NULL
+ AND c.fromUser IS NOT NULL
+ AND c.toRoom IS NULL
+ AND c.status <> :status
+ AND (c.fromUser.id = :userId OR c.toUser.id = :userId)
+ AND c.sent > :date
+ ORDER BY c.sent DESC""")
+@NamedQuery(name = "chatCloseMessagesByUser", query = """
+ UPDATE ChatMessage c
+ SET c.status = :status
+ WHERE c.toUser IS NOT NULL
+ AND c.toRoom IS NULL
+ AND c.status <> :status
+ AND (c.fromUser.id = :userId OR c.toUser.id = :userId)""")
@NamedQuery(name = "deleteChatGlobal", query = "DELETE FROM ChatMessage c
WHERE c.toUser IS NULL AND c.toRoom IS NULL")
@NamedQuery(name = "deleteChatRoom", query = "DELETE FROM ChatMessage c WHERE
c.toUser IS NULL AND c.toRoom.id = :roomId")
-@NamedQuery(name = "deleteChatUser", query = "DELETE FROM ChatMessage c WHERE
c.toRoom IS NULL AND c.toUser.id = :userId")
+@NamedQuery(name = "deleteChatUser", query = """
+ DELETE
+ FROM ChatMessage c
+ WHERE c.toUser IS NOT NULL
+ AND c.fromUser IS NOT NULL
+ AND c.toRoom IS NULL
+ AND ((c.fromUser.id = :userId AND c.toUser.id = :selfId) OR
(c.fromUser.id = :selfId AND c.toUser.id = :userId))""")
@NamedQuery(name = "purgeChatUserName", query = "UPDATE ChatMessage c SET
c.fromName = :purged WHERE c.fromUser.id = :userId")
@Table(name = "chat")
@XmlRootElement(name = CHAT_NODE)
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
index 7d15c7aff..6f858f330 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
@@ -128,6 +128,7 @@ public class ChatForm extends Form<Void> {
return true;
}, u -> {
m.setToUser(u);
+
m.setStatus(ChatMessage.Status.OPEN);
return true;
}))
{
diff --git
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
index 9e043082b..ec7853f5b 100644
---
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
+++
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
@@ -133,7 +133,7 @@ public class ChatToolbar extends Panel implements
IWysiwygToolbar {
return true;
}, u -> {
setFileName(String.format(CHAT_FNAME_TMPL, "user_" + u.getId()));
-
export(chatDao.getUser(u.getId(), 0, Integer.MAX_VALUE), sb);
+
export(chatDao.getUser(getUserId(), u.getId(), 0, Integer.MAX_VALUE), sb);
return true;
});
StringResourceStream srs = new StringResourceStream(sb,
"text/csv");
@@ -206,7 +206,7 @@ public class ChatToolbar extends Panel implements
IWysiwygToolbar {
}
return true;
}, u -> {
- chatDao.deleteUser(u.getId());
+ chatDao.deleteUser(getUserId(),
u.getId());
WebSocketHelper.sendUser(u.getId(), cleanMsg(scope));
return true;
});