Compare commits

...

38 Commits

Author SHA1 Message Date
alfresco-build
dfa94fbe21 [maven-release-plugin][skip ci] prepare release 23.7.0.1 2025-10-19 04:45:22 +00:00
Somnath-Deshmukh
4a93aec66b MNT-25359 Validating and Sanitizing the comment before posting (#3615)
MNT-25359 Validating and Sanitizing the comment before posting to prevent any XSS attack
2025-10-17 21:00:11 +05:30
Jakub Kochman
3f0bbc9844 Updating release/23.N branch to 23.7.0 after 23.6.0 ACS release [skip ci] 2025-10-10 11:19:17 +02:00
alfresco-build
cb9ad42101 [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-09 16:41:21 +00:00
alfresco-build
ca385b3bbc [maven-release-plugin][skip ci] prepare release 23.6.0.33 2025-10-09 16:41:20 +00:00
Kacper Magdziarz
19c1582f1e [ACS-10423] Bump IE/SS to 2.0.17 (#3612) 2025-10-09 17:38:42 +02:00
alfresco-build
06a918b082 [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-09 13:44:28 +00:00
alfresco-build
f543de9959 [maven-release-plugin][skip ci] prepare release 23.6.0.32 2025-10-09 13:44:26 +00:00
Debjit Chattopadhyay
8124279e6a Merge pull request #3610 from Alfresco/fix/revert_MNT_24776
Revert "MNT-24776 adding if-else conditionals to avoid null values"
2025-10-09 18:27:59 +05:30
Debjit Chattopadhyay
4281fd5b2d Revert "MNT-24776 adding if-else conditionals to avoid null values"
This reverts commit 393b064918.
2025-10-09 18:14:50 +05:30
alfresco-build
d10d88306b [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-09 10:12:06 +00:00
alfresco-build
1d7a37cd8c [maven-release-plugin][skip ci] prepare release 23.6.0.31 2025-10-09 10:12:04 +00:00
Debjit Chattopadhyay
4bcb795452 Merge pull request #3609 from Alfresco/fix/MNT-24776_backport_to_23.N
MNT-24776 backport to release/23.N
2025-10-09 14:34:25 +05:30
Debjit Chattopadhyay
393b064918 MNT-24776 adding if-else conditionals to avoid null values
(cherry picked from commit be02be5a8b)
2025-10-09 13:29:30 +05:30
alfresco-build
f741f2ca45 [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-08 15:59:31 +00:00
alfresco-build
ef676f11e4 [maven-release-plugin][skip ci] prepare release 23.6.0.30 2025-10-08 15:59:29 +00:00
cezary-witkowski
478c81fee3 [ACS-10454] Bump AOS to fix "Edit in Microsoft Office" error (#3606) 2025-10-08 16:57:01 +02:00
alfresco-build
cf9cc8042d [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-06 13:25:18 +00:00
alfresco-build
8d790ed1cb [maven-release-plugin][skip ci] prepare release 23.6.0.29 2025-10-06 13:25:16 +00:00
cezary-witkowski
87c7bd2877 [ACS-10454] Bump AOS to fix "Edit in Microsoft Office" error (#3602) 2025-10-06 14:16:10 +02:00
alfresco-build
9125f889b0 [maven-release-plugin][skip ci] prepare for next development iteration 2025-10-03 11:40:58 +00:00
alfresco-build
2fb74d2691 [maven-release-plugin][skip ci] prepare release 23.6.0.28 2025-10-03 11:40:56 +00:00
Gerard Olenski
d671162dae ACS-10427 Bump ATS 4.2.2 (#3601) 2025-10-03 12:54:03 +02:00
alfresco-build
bfaa629da7 [maven-release-plugin][skip ci] prepare for next development iteration 2025-09-26 17:19:48 +00:00
alfresco-build
719d73a558 [maven-release-plugin][skip ci] prepare release 23.6.0.27 2025-09-26 17:19:46 +00:00
Piotr Żurek
a2aa867f3f ACS-9665 Fix formatting 2025-09-26 18:34:04 +02:00
Piotr Żurek
8d745c536a Cherry pick ACS-9665 add event generation extensions (#3593) 280a873cb6 Piotr Żurek <Piotr.Zurek@hyland.com> 26 Sep 2025 at 10:25 2025-09-26 18:25:10 +02:00
alfresco-build
b0f4c21ae3 [maven-release-plugin][skip ci] prepare for next development iteration 2025-09-26 12:31:24 +00:00
alfresco-build
72494e34fa [maven-release-plugin][skip ci] prepare release 23.6.0.26 2025-09-26 12:31:22 +00:00
Tiago Salvado
792b7024ea [ACS-9940] Bump spring security version to 6.4.11 (#3592) (#3594) 2025-09-26 12:44:25 +01:00
alfresco-build
40a1371f0d [maven-release-plugin][skip ci] prepare for next development iteration 2025-09-25 20:52:06 +00:00
alfresco-build
c22c47e63f [maven-release-plugin][skip ci] prepare release 23.6.0.25 2025-09-25 20:52:03 +00:00
Tiago Salvado
232299d42d [ACS-10155] Bump spring version to 6.2.11 (#3589) (#3591) 2025-09-25 21:04:30 +01:00
alfresco-build
aca7969849 [maven-release-plugin][skip ci] prepare for next development iteration 2025-09-25 10:22:26 +00:00
alfresco-build
4ab2bbd3d6 [maven-release-plugin][skip ci] prepare release 23.6.0.24 2025-09-25 10:22:24 +00:00
Debjit Chattopadhyay
f68f02372d Merge pull request #3590 from Alfresco/fix/MNT-24776_revert
Revert MNT-24776 as this fix is affecting other scenarios.
2025-09-25 15:05:51 +05:30
Debjit Chattopadhyay
9b0eedc8c1 Revert MNT-24776 as this fix is affecting other scenarios. 2025-09-25 13:19:23 +05:30
alfresco-build
f164dedcee [maven-release-plugin][skip ci] prepare for next development iteration 2025-09-23 12:55:06 +00:00
31 changed files with 118 additions and 94 deletions

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId> <artifactId>alfresco-community-repo-amps</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId> <artifactId>alfresco-governance-services-community-parent</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-automation-community-repo</artifactId> <artifactId>alfresco-governance-services-automation-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<build> <build>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-parent</artifactId> <artifactId>alfresco-governance-services-community-parent</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -1,3 +1,3 @@
SOLR6_TAG=2.0.13 SOLR6_TAG=2.0.17
POSTGRES_TAG=15.4 POSTGRES_TAG=15.4
ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8 ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8

View File

@@ -8,7 +8,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId> <artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

View File

@@ -4,7 +4,7 @@
# Version label # Version label
version.major=23 version.major=23
version.minor=6 version.minor=7
version.revision=0 version.revision=0
version.label= version.label=

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-governance-services-community-repo-parent</artifactId> <artifactId>alfresco-governance-services-community-repo-parent</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<build> <build>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -8,7 +8,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-amps</artifactId> <artifactId>alfresco-community-repo-amps</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -9,6 +9,6 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
</project> </project>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -1,3 +1,3 @@
SOLR6_TAG=2.0.13 SOLR6_TAG=2.0.17
POSTGRES_TAG=15.4 POSTGRES_TAG=15.4
ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8 ACTIVEMQ_TAG=5.18.3-jre17-rockylinux8

View File

@@ -6,7 +6,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<modules> <modules>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId> <artifactId>alfresco-community-repo-tests</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<organization> <organization>

View File

@@ -9,7 +9,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId> <artifactId>alfresco-community-repo-tests</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<developers> <developers>

View File

@@ -9,7 +9,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId> <artifactId>alfresco-community-repo-tests</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<developers> <developers>

View File

@@ -8,7 +8,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId> <artifactId>alfresco-community-repo-tests</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

View File

@@ -9,7 +9,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-tests</artifactId> <artifactId>alfresco-community-repo-tests</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<developers> <developers>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo-packaging</artifactId> <artifactId>alfresco-community-repo-packaging</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<properties> <properties>

16
pom.xml
View File

@@ -2,7 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>Alfresco Community Repo Parent</name> <name>Alfresco Community Repo Parent</name>
@@ -24,7 +24,7 @@
<properties> <properties>
<acs.version.major>23</acs.version.major> <acs.version.major>23</acs.version.major>
<acs.version.minor>6</acs.version.minor> <acs.version.minor>7</acs.version.minor>
<acs.version.revision>0</acs.version.revision> <acs.version.revision>0</acs.version.revision>
<acs.version.label /> <acs.version.label />
<amp.min.version>${acs.version.major}.0.0</amp.min.version> <amp.min.version>${acs.version.major}.0.0</amp.min.version>
@@ -51,14 +51,14 @@
<dependency.alfresco-server-root.version>7.0.1</dependency.alfresco-server-root.version> <dependency.alfresco-server-root.version>7.0.1</dependency.alfresco-server-root.version>
<dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version> <dependency.activiti-engine.version>5.23.0</dependency.activiti-engine.version>
<dependency.activiti.version>5.23.0</dependency.activiti.version> <dependency.activiti.version>5.23.0</dependency.activiti.version>
<dependency.alfresco-transform-core.version>5.2.2-A.4</dependency.alfresco-transform-core.version> <dependency.alfresco-transform-core.version>5.2.2</dependency.alfresco-transform-core.version>
<dependency.alfresco-transform-service.version>4.2.2-A.2</dependency.alfresco-transform-service.version> <dependency.alfresco-transform-service.version>4.2.2</dependency.alfresco-transform-service.version>
<dependency.alfresco-greenmail.version>7.0</dependency.alfresco-greenmail.version> <dependency.alfresco-greenmail.version>7.0</dependency.alfresco-greenmail.version>
<dependency.acs-event-model.version>0.0.33</dependency.acs-event-model.version> <dependency.acs-event-model.version>0.0.33</dependency.acs-event-model.version>
<dependency.aspectj.version>1.9.22.1</dependency.aspectj.version> <dependency.aspectj.version>1.9.22.1</dependency.aspectj.version>
<dependency.spring.version>6.2.8</dependency.spring.version> <dependency.spring.version>6.2.11</dependency.spring.version>
<dependency.spring-security.version>6.3.9</dependency.spring-security.version> <dependency.spring-security.version>6.4.11</dependency.spring-security.version>
<dependency.antlr.version>3.5.3</dependency.antlr.version> <dependency.antlr.version>3.5.3</dependency.antlr.version>
<dependency.jackson.version>2.17.2</dependency.jackson.version> <dependency.jackson.version>2.17.2</dependency.jackson.version>
<dependency.cxf.version>4.1.2</dependency.cxf.version> <dependency.cxf.version>4.1.2</dependency.cxf.version>
@@ -113,7 +113,7 @@
<dependency.jakarta-json-path.version>2.9.0</dependency.jakarta-json-path.version> <dependency.jakarta-json-path.version>2.9.0</dependency.jakarta-json-path.version>
<dependency.json-smart.version>2.5.2</dependency.json-smart.version> <dependency.json-smart.version>2.5.2</dependency.json-smart.version>
<alfresco.googledrive.version>4.1.0</alfresco.googledrive.version> <alfresco.googledrive.version>4.1.0</alfresco.googledrive.version>
<alfresco.aos-module.version>3.3.0</alfresco.aos-module.version> <alfresco.aos-module.version>3.4.0</alfresco.aos-module.version>
<alfresco.api-explorer.version>23.4.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share --> <alfresco.api-explorer.version>23.4.0</alfresco.api-explorer.version> <!-- Also in alfresco-enterprise-share -->
<alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version> <alfresco.maven-plugin.version>2.2.0</alfresco.maven-plugin.version>
@@ -154,7 +154,7 @@
<connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection> <connection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</connection>
<developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection> <developerConnection>scm:git:https://github.com/Alfresco/alfresco-community-repo.git</developerConnection>
<url>https://github.com/Alfresco/alfresco-community-repo</url> <url>https://github.com/Alfresco/alfresco-community-repo</url>
<tag>23.6.0.23</tag> <tag>23.7.0.1</tag>
</scm> </scm>
<distributionManagement> <distributionManagement>

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -2,7 +2,7 @@
* #%L * #%L
* Alfresco Remote API * Alfresco Remote API
* %% * %%
* Copyright (C) 2005 - 2016 Alfresco Software Limited * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %% * %%
* This file is part of the Alfresco software. * This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of * If the software was purchased under a paid Alfresco license, the terms of
@@ -31,6 +31,14 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.json.simple.JSONObject;
import org.owasp.html.PolicyFactory;
import org.owasp.html.Sanitizers;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.model.ForumModel; import org.alfresco.model.ForumModel;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
@@ -44,10 +52,6 @@ import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern; import org.alfresco.service.namespace.RegexQNamePattern;
import org.json.simple.JSONObject;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
/** /**
* This class is the controller for the comments.post web script. * This class is the controller for the comments.post web script.
@@ -58,7 +62,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
public class CommentsPost extends AbstractCommentsWebScript public class CommentsPost extends AbstractCommentsWebScript
{ {
/** /**
* Overrides AbstractCommentsWebScript to add comment * Overrides AbstractCommentsWebScript to add comment
*/ */
@Override @Override
protected Map<String, Object> executeImpl(NodeRef nodeRef, WebScriptRequest req, Status status, Cache cache) protected Map<String, Object> executeImpl(NodeRef nodeRef, WebScriptRequest req, Status status, Cache cache)
@@ -66,6 +70,19 @@ public class CommentsPost extends AbstractCommentsWebScript
// get json object from request // get json object from request
JSONObject json = parseJSON(req); JSONObject json = parseJSON(req);
// Validating and Sanitizing comment content to prevent XSS
String commentContent = getOrNull(json, "content");
if (StringUtils.isBlank(commentContent))
{
throw new IllegalArgumentException("Comment content must not be empty");
}
else
{
PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
String safeContent = policy.sanitize(commentContent);
json.replace("content", safeContent);
}
/* MNT-10231, MNT-9771 fix */ /* MNT-10231, MNT-9771 fix */
this.behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); this.behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE);
@@ -99,32 +116,32 @@ public class CommentsPost extends AbstractCommentsWebScript
{ {
// fetch the parent to add the node to // fetch the parent to add the node to
NodeRef commentsFolder = getOrCreateCommentsFolder(nodeRef); NodeRef commentsFolder = getOrCreateCommentsFolder(nodeRef);
// get a unique name // get a unique name
String name = getUniqueChildName("comment"); String name = getUniqueChildName("comment");
// create the comment // create the comment
NodeRef commentNodeRef = nodeService.createNode(commentsFolder, NodeRef commentNodeRef = nodeService.createNode(commentsFolder,
ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(name)), QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(name)),
ForumModel.TYPE_POST).getChildRef(); ForumModel.TYPE_POST).getChildRef();
// fetch the title required to create a comment // fetch the title required to create a comment
String title = getOrNull(json, JSON_KEY_TITLE); String title = getOrNull(json, JSON_KEY_TITLE);
HashMap<QName, Serializable> props = new HashMap<QName, Serializable>(1, 1.0f); HashMap<QName, Serializable> props = new HashMap<QName, Serializable>(1, 1.0f);
props.put(ContentModel.PROP_TITLE, title != null ? title : ""); props.put(ContentModel.PROP_TITLE, title != null ? title : "");
nodeService.addProperties(commentNodeRef, props); nodeService.addProperties(commentNodeRef, props);
ContentWriter writer = contentService.getWriter(commentNodeRef, ContentModel.PROP_CONTENT, true); ContentWriter writer = contentService.getWriter(commentNodeRef, ContentModel.PROP_CONTENT, true);
// fetch the content of a comment // fetch the content of a comment
String contentString = getOrNull(json, JSON_KEY_CONTENT); String contentString = getOrNull(json, JSON_KEY_CONTENT);
writer.setMimetype(MimetypeMap.MIMETYPE_HTML); writer.setMimetype(MimetypeMap.MIMETYPE_HTML);
writer.putContent(contentString); writer.putContent(contentString);
return commentNodeRef; return commentNodeRef;
} }
/** /**
* generates an comment item value * generates an comment item value
* *
@@ -134,34 +151,34 @@ public class CommentsPost extends AbstractCommentsWebScript
private Map<String, Object> generateItemValue(NodeRef commentNodeRef) private Map<String, Object> generateItemValue(NodeRef commentNodeRef)
{ {
Map<String, Object> result = new HashMap<String, Object>(4, 1.0f); Map<String, Object> result = new HashMap<String, Object>(4, 1.0f);
String creator = (String)this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_CREATOR); String creator = (String) this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_CREATOR);
Serializable created = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_CREATED); Serializable created = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_CREATED);
Serializable modified = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_MODIFIED); Serializable modified = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_MODIFIED);
boolean isUpdated = false; boolean isUpdated = false;
if (created instanceof Date && modified instanceof Date) if (created instanceof Date && modified instanceof Date)
{ {
isUpdated = ((Date)modified).getTime() - ((Date)created).getTime() > 5000; isUpdated = ((Date) modified).getTime() - ((Date) created).getTime() > 5000;
} }
// TODO refactor v0 Comments API to use CommentService (see ACE-5437) // TODO refactor v0 Comments API to use CommentService (see ACE-5437)
Serializable owner = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_OWNER); Serializable owner = this.nodeService.getProperty(commentNodeRef, ContentModel.PROP_OWNER);
String currentUser = this.serviceRegistry.getAuthenticationService().getCurrentUserName(); String currentUser = this.serviceRegistry.getAuthenticationService().getCurrentUserName();
boolean isSiteManager = this.permissionService.hasPermission(commentNodeRef, SiteModel.SITE_MANAGER) == (AccessStatus.ALLOWED); boolean isSiteManager = this.permissionService.hasPermission(commentNodeRef, SiteModel.SITE_MANAGER) == (AccessStatus.ALLOWED);
boolean isCoordinator = this.permissionService.hasPermission(commentNodeRef, PermissionService.COORDINATOR) == (AccessStatus.ALLOWED); boolean isCoordinator = this.permissionService.hasPermission(commentNodeRef, PermissionService.COORDINATOR) == (AccessStatus.ALLOWED);
boolean canEditComment = isSiteManager || isCoordinator || currentUser.equals(creator) || currentUser.equals(owner); boolean canEditComment = isSiteManager || isCoordinator || currentUser.equals(creator) || currentUser.equals(owner);
result.put("node", commentNodeRef); result.put("node", commentNodeRef);
result.put("author", this.personService.getPerson(creator)); result.put("author", this.personService.getPerson(creator));
result.put("isUpdated", isUpdated); result.put("isUpdated", isUpdated);
result.put("canEditComment", canEditComment); result.put("canEditComment", canEditComment);
return result; return result;
} }
/** /**
* generates the response model for adding a comment * generates the response model for adding a comment
* *
@@ -194,7 +211,7 @@ public class CommentsPost extends AbstractCommentsWebScript
} }
return commentsFolder; return commentsFolder;
} }
/** /**
* returns the nodeRef of the existing one * returns the nodeRef of the existing one
* *
@@ -207,7 +224,7 @@ public class CommentsPost extends AbstractCommentsWebScript
{ {
List<ChildAssociationRef> assocs = nodeService.getChildAssocs(nodeRef, ForumModel.ASSOC_DISCUSSION, RegexQNamePattern.MATCH_ALL); List<ChildAssociationRef> assocs = nodeService.getChildAssocs(nodeRef, ForumModel.ASSOC_DISCUSSION, RegexQNamePattern.MATCH_ALL);
ChildAssociationRef firstAssoc = assocs.get(0); ChildAssociationRef firstAssoc = assocs.get(0);
return nodeService.getChildByName(firstAssoc.getChildRef(), ContentModel.ASSOC_CONTAINS, COMMENTS_TOPIC_NAME); return nodeService.getChildByName(firstAssoc.getChildRef(), ContentModel.ASSOC_CONTAINS, COMMENTS_TOPIC_NAME);
} }
else else
@@ -220,7 +237,7 @@ public class CommentsPost extends AbstractCommentsWebScript
{ {
return prefix + "-" + System.currentTimeMillis(); return prefix + "-" + System.currentTimeMillis();
} }
/** /**
* creates the comments folder if it does not exists * creates the comments folder if it does not exists
* *
@@ -229,35 +246,34 @@ public class CommentsPost extends AbstractCommentsWebScript
*/ */
private NodeRef createCommentsFolder(final NodeRef nodeRef) private NodeRef createCommentsFolder(final NodeRef nodeRef)
{ {
NodeRef commentsFolder = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<NodeRef>() NodeRef commentsFolder = AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<NodeRef>() {
{
public NodeRef doWork() throws Exception public NodeRef doWork() throws Exception
{ {
NodeRef commentsFolder = null; NodeRef commentsFolder = null;
AuthenticationUtil.pushAuthentication(); AuthenticationUtil.pushAuthentication();
// ALF-5240: turn off auditing round the discussion node creation to prevent // ALF-5240: turn off auditing round the discussion node creation to prevent
// the source document from being modified by the first user leaving a comment // the source document from being modified by the first user leaving a comment
behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); behaviourFilter.disableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE);
try try
{ {
// MNT-12082: set System user for creating forumFolder and commentsFolder nodes // MNT-12082: set System user for creating forumFolder and commentsFolder nodes
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName()); AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());
nodeService.addAspect(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussable"), null); nodeService.addAspect(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussable"), null);
nodeService.addAspect(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "commentsRollup"), null); nodeService.addAspect(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "commentsRollup"), null);
List<ChildAssociationRef> assocs = nodeService.getChildAssocs(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussion"), RegexQNamePattern.MATCH_ALL); List<ChildAssociationRef> assocs = nodeService.getChildAssocs(nodeRef, QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "discussion"), RegexQNamePattern.MATCH_ALL);
if (assocs.size() != 0) if (assocs.size() != 0)
{ {
NodeRef forumFolder = assocs.get(0).getChildRef(); NodeRef forumFolder = assocs.get(0).getChildRef();
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1, 1.0f); Map<QName, Serializable> props = new HashMap<QName, Serializable>(1, 1.0f);
props.put(ContentModel.PROP_NAME, COMMENTS_TOPIC_NAME); props.put(ContentModel.PROP_NAME, COMMENTS_TOPIC_NAME);
commentsFolder = nodeService.createNode( commentsFolder = nodeService.createNode(
forumFolder, forumFolder,
ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, COMMENTS_TOPIC_NAME), QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, COMMENTS_TOPIC_NAME),
QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "topic"), QName.createQName(NamespaceService.FORUMS_MODEL_1_0_URI, "topic"),
props).getChildRef(); props).getChildRef();
} }
@@ -267,12 +283,12 @@ public class CommentsPost extends AbstractCommentsWebScript
AuthenticationUtil.popAuthentication(); AuthenticationUtil.popAuthentication();
behaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE); behaviourFilter.enableBehaviour(nodeRef, ContentModel.ASPECT_AUDITABLE);
} }
return commentsFolder; return commentsFolder;
} }
}, AuthenticationUtil.getSystemUserName()); }, AuthenticationUtil.getSystemUserName());
return commentsFolder; return commentsFolder;
} }

View File

@@ -40,7 +40,6 @@
"items": "items":
[ [
<#list results as row> <#list results as row>
<#if row.item.hasPermission("Read")>
{ {
"type": "${row.item.typeShort}", "type": "${row.item.typeShort}",
"parentType": "${row.item.parentTypeShort!""}", "parentType": "${row.item.parentTypeShort!""}",
@@ -76,7 +75,6 @@
"nodeRef": "${row.item.nodeRef}"<#if row.selectable?exists>, "nodeRef": "${row.item.nodeRef}"<#if row.selectable?exists>,
"selectable" : ${row.selectable?string}</#if> "selectable" : ${row.selectable?string}</#if>
}<#if row_has_next>,</#if> }<#if row_has_next>,</#if>
</#if>
</#list> </#list>
] ]
} }

View File

@@ -7,7 +7,7 @@
<parent> <parent>
<groupId>org.alfresco</groupId> <groupId>org.alfresco</groupId>
<artifactId>alfresco-community-repo</artifactId> <artifactId>alfresco-community-repo</artifactId>
<version>23.6.0.23</version> <version>23.7.0.1</version>
</parent> </parent>
<dependencies> <dependencies>

View File

@@ -2,7 +2,7 @@
* #%L * #%L
* Alfresco Repository * Alfresco Repository
* %% * %%
* Copyright (C) 2005 - 2023 Alfresco Software Limited * Copyright (C) 2005 - 2025 Alfresco Software Limited
* %% * %%
* This file is part of the Alfresco software. * This file is part of the Alfresco software.
* If the software was purchased under a paid Alfresco license, the terms of * If the software was purchased under a paid Alfresco license, the terms of
@@ -39,8 +39,10 @@ import org.alfresco.service.namespace.QName;
/** /**
* Encapsulates events occurred in a single transaction. * Encapsulates events occurred in a single transaction.
* *
* @param <REF> entity (e.g. node, child association, peer association) reference type * @param <REF>
* @param <RES> entity resource type * entity (e.g. node, child association, peer association) reference type
* @param <RES>
* entity resource type
*/ */
public abstract class EventConsolidator<REF extends EntityRef, RES extends Resource> public abstract class EventConsolidator<REF extends EntityRef, RES extends Resource>
{ {
@@ -90,23 +92,31 @@ public abstract class EventConsolidator<REF extends EntityRef, RES extends Resou
/** /**
* Builds and returns the {@link RepoEvent} instance. * Builds and returns the {@link RepoEvent} instance.
* *
* @param eventInfo the object holding the event information * @param eventInfo
* the object holding the event information
* @return the {@link RepoEvent} instance * @return the {@link RepoEvent} instance
*/ */
public RepoEvent<DataAttributes<RES>> getRepoEvent(EventInfo eventInfo) public RepoEvent<DataAttributes<RES>> getRepoEvent(EventInfo eventInfo)
{
final RepoEvent.Builder<DataAttributes<RES>> builder = RepoEvent.builder();
configureRepoEventBuilder(builder, eventInfo);
return builder.build();
}
protected void configureRepoEventBuilder(RepoEvent.Builder<DataAttributes<RES>> builder, EventInfo eventInfo)
{ {
EventType eventType = getDerivedEvent(); EventType eventType = getDerivedEvent();
DataAttributes<RES> eventData = buildEventData(eventInfo, resource, eventType); DataAttributes<RES> eventData = buildEventData(eventInfo, resource, eventType);
return RepoEvent.<DataAttributes<RES>>builder() builder.setId(eventInfo.getId())
.setId(eventInfo.getId()) .setSource(eventInfo.getSource())
.setSource(eventInfo.getSource()) .setTime(eventInfo.getTimestamp())
.setTime(eventInfo.getTimestamp()) .setType(eventType.getType())
.setType(eventType.getType()) .setData(eventData)
.setData(eventData) .setDataschema(EventJSONSchema.getSchemaV1(eventType));
.setDataschema(EventJSONSchema.getSchemaV1(eventType))
.build();
} }
/** /**
@@ -114,9 +124,9 @@ public abstract class EventConsolidator<REF extends EntityRef, RES extends Resou
*/ */
protected DataAttributes<RES> buildEventData(EventInfo eventInfo, RES resource, EventType eventType) protected DataAttributes<RES> buildEventData(EventInfo eventInfo, RES resource, EventType eventType)
{ {
return EventData.<RES>builder() return EventData.<RES> builder()
.setEventGroupId(eventInfo.getTxnId()) .setEventGroupId(eventInfo.getTxnId())
.setResource(resource) .setResource(resource)
.build(); .build();
} }
} }

View File

@@ -3,7 +3,7 @@
repository.name=Main Repository repository.name=Main Repository
# Schema number # Schema number
version.schema=19500 version.schema=19600
# Directory configuration # Directory configuration