diff --git a/amps/ags/pom.xml b/amps/ags/pom.xml
index fe81b69324..ee212dab9d 100644
--- a/amps/ags/pom.xml
+++ b/amps/ags/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo-amps
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/ags/rm-automation/pom.xml b/amps/ags/rm-automation/pom.xml
index 931ef5ce00..0c2930bcb6 100644
--- a/amps/ags/rm-automation/pom.xml
+++ b/amps/ags/rm-automation/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-governance-services-community-parent
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/ags/rm-automation/rm-automation-community-rest-api/pom.xml b/amps/ags/rm-automation/rm-automation-community-rest-api/pom.xml
index efc1be5744..42afdafb0a 100644
--- a/amps/ags/rm-automation/rm-automation-community-rest-api/pom.xml
+++ b/amps/ags/rm-automation/rm-automation-community-rest-api/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-governance-services-automation-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/ags/rm-community/pom.xml b/amps/ags/rm-community/pom.xml
index 46ed9825b9..96f3198cd5 100644
--- a/amps/ags/rm-community/pom.xml
+++ b/amps/ags/rm-community/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-governance-services-community-parent
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/ags/rm-community/rm-community-repo/pom.xml b/amps/ags/rm-community/rm-community-repo/pom.xml
index 28b66c2407..d094fac9b7 100644
--- a/amps/ags/rm-community/rm-community-repo/pom.xml
+++ b/amps/ags/rm-community/rm-community-repo/pom.xml
@@ -8,7 +8,7 @@
org.alfresco
alfresco-governance-services-community-repo-parent
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/ags/rm-community/rm-community-rest-api-explorer/pom.xml b/amps/ags/rm-community/rm-community-rest-api-explorer/pom.xml
index 31641273e1..a0262dd33b 100644
--- a/amps/ags/rm-community/rm-community-rest-api-explorer/pom.xml
+++ b/amps/ags/rm-community/rm-community-rest-api-explorer/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-governance-services-community-repo-parent
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/pom.xml b/amps/pom.xml
index f822d1b640..bb1677c669 100644
--- a/amps/pom.xml
+++ b/amps/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/amps/share-services/pom.xml b/amps/share-services/pom.xml
index 8485c0d45c..c7a2d46bd3 100644
--- a/amps/share-services/pom.xml
+++ b/amps/share-services/pom.xml
@@ -8,7 +8,7 @@
org.alfresco
alfresco-community-repo-amps
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/core/pom.xml b/core/pom.xml
index b8bacc5fe3..a786b11435 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/data-model/pom.xml b/data-model/pom.xml
index 656147dcb4..c8be6596c0 100644
--- a/data-model/pom.xml
+++ b/data-model/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/mmt/pom.xml b/mmt/pom.xml
index 04f071deb7..5856a9f7b3 100644
--- a/mmt/pom.xml
+++ b/mmt/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/distribution/pom.xml b/packaging/distribution/pom.xml
index 32dff3a8fc..2d26efb04d 100644
--- a/packaging/distribution/pom.xml
+++ b/packaging/distribution/pom.xml
@@ -9,6 +9,6 @@
org.alfresco
alfresco-community-repo-packaging
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/docker-alfresco/pom.xml b/packaging/docker-alfresco/pom.xml
index 83b40de3a7..41e334126a 100644
--- a/packaging/docker-alfresco/pom.xml
+++ b/packaging/docker-alfresco/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo-packaging
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/pom.xml b/packaging/pom.xml
index 571ce9b72b..a163d6ff56 100644
--- a/packaging/pom.xml
+++ b/packaging/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/pom.xml b/packaging/tests/pom.xml
index b7fb738a59..d0af3ffc6f 100644
--- a/packaging/tests/pom.xml
+++ b/packaging/tests/pom.xml
@@ -6,7 +6,7 @@
org.alfresco
alfresco-community-repo-packaging
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/tas-cmis/pom.xml b/packaging/tests/tas-cmis/pom.xml
index e161459338..b2a479fafd 100644
--- a/packaging/tests/tas-cmis/pom.xml
+++ b/packaging/tests/tas-cmis/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo-tests
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/tas-email/pom.xml b/packaging/tests/tas-email/pom.xml
index e78d74fed2..bf5cd82468 100644
--- a/packaging/tests/tas-email/pom.xml
+++ b/packaging/tests/tas-email/pom.xml
@@ -9,7 +9,7 @@
org.alfresco
alfresco-community-repo-tests
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/tas-integration/pom.xml b/packaging/tests/tas-integration/pom.xml
index af53a44ae5..3c18485b79 100644
--- a/packaging/tests/tas-integration/pom.xml
+++ b/packaging/tests/tas-integration/pom.xml
@@ -9,7 +9,7 @@
org.alfresco
alfresco-community-repo-tests
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/tas-restapi/pom.xml b/packaging/tests/tas-restapi/pom.xml
index 898481a6c7..134579edbf 100644
--- a/packaging/tests/tas-restapi/pom.xml
+++ b/packaging/tests/tas-restapi/pom.xml
@@ -8,7 +8,7 @@
org.alfresco
alfresco-community-repo-tests
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/requests/People.java b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/requests/People.java
index f50ed9ca6b..f043d9514f 100644
--- a/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/requests/People.java
+++ b/packaging/tests/tas-restapi/src/main/java/org/alfresco/rest/requests/People.java
@@ -437,6 +437,15 @@ public class People extends ModelRequest
restWrapper.processEmptyModel(request);
}
+ /**
+ * Deauthorize a user
+ */
+ public void deauthorizeUser()
+ {
+ RestRequest request = RestRequest.simpleRequest(HttpMethod.POST, "people/{personId}/deauthorize", this.person.getUsername(), restWrapper.getParameters());
+ restWrapper.processEmptyModel(request);
+ }
+
/**
* Update avatar image PUT call on 'people/{nodeId}/children
*/
@@ -514,4 +523,4 @@ public class People extends ModelRequest
return people.getFavorites();
}
}
-}
\ No newline at end of file
+}
diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/people/deauthorization/community/DeauthorizeSanityTests.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/people/deauthorization/community/DeauthorizeSanityTests.java
new file mode 100644
index 0000000000..ccd24345ea
--- /dev/null
+++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/people/deauthorization/community/DeauthorizeSanityTests.java
@@ -0,0 +1,40 @@
+package org.alfresco.rest.people.deauthorization.community;
+
+import org.springframework.http.HttpStatus;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.alfresco.rest.RestTest;
+import org.alfresco.utility.model.TestGroup;
+import org.alfresco.utility.model.UserModel;
+import org.alfresco.utility.testrail.ExecutionType;
+import org.alfresco.utility.testrail.annotation.TestRail;
+
+/**
+ * Verifies API behavior in community edition. Should be excluded in enterprise edition.
+ */
+@Test
+public class DeauthorizeSanityTests extends RestTest
+{
+ private UserModel userModel;
+ private UserModel adminUser;
+
+ @BeforeClass(alwaysRun = true)
+ public void dataPreparation()
+ {
+ adminUser = dataUser.getAdminUser();
+ userModel = dataUser.createRandomTestUser();
+ }
+
+ @Test(groups = {TestGroup.REST_API, TestGroup.PEOPLE, TestGroup.SANITY})
+ @TestRail(section = {TestGroup.REST_API, TestGroup.PEOPLE}, executionType = ExecutionType.SANITY,
+ description = "Check if de-authorization is not implemented in Community Edition")
+ public void deauthorizationIsNotImplementedInCommunityEdition()
+ {
+ restClient.authenticateUser(adminUser).withCoreAPI().usingUser(userModel).deauthorizeUser();
+ restClient.assertStatusCodeIs(HttpStatus.NOT_IMPLEMENTED);
+
+ restClient.authenticateUser(userModel).withCoreAPI().usingUser(userModel).deauthorizeUser();
+ restClient.assertStatusCodeIs(HttpStatus.NOT_IMPLEMENTED);
+ }
+}
diff --git a/packaging/tests/tas-webdav/pom.xml b/packaging/tests/tas-webdav/pom.xml
index 2a48ec2123..96e484920b 100644
--- a/packaging/tests/tas-webdav/pom.xml
+++ b/packaging/tests/tas-webdav/pom.xml
@@ -9,7 +9,7 @@
org.alfresco
alfresco-community-repo-tests
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/packaging/war/pom.xml b/packaging/war/pom.xml
index 1e7079e27f..87b1f68459 100644
--- a/packaging/war/pom.xml
+++ b/packaging/war/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo-packaging
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index 94e82d00f3..20a9b9d61b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
pom
Alfresco Community Repo Parent
@@ -57,11 +57,11 @@
1.0.2
1.9.22.1
- 6.2.1
+ 6.2.2
6.3.4
3.5.3
2.17.2
- 4.0.5
+ 4.1.0
1.0.0-jakarta-1
10.0
1.79
@@ -70,12 +70,12 @@
20240303
2.12.0
2.18.0
- 2.11.0
+ 2.12.1
33.3.1-jre
4.5.14
4.4.16
5.4.1
- 5.3
+ 5.3.3
3.1-HTTPCLIENT-1265
2.12.2
2.0.16
@@ -86,7 +86,7 @@
5.3.0
3.5.0.Final
4.6.0
- 4.1.113.Final
+ 4.1.117.Final
5.18.6
1.27.1
4.2.2
@@ -119,7 +119,7 @@
2.2.0
2.4.0
- 2.43.0
+ 2.44.2
NO_AUTOMATED_FORMATTING
@@ -704,7 +704,7 @@
com.networknt
json-schema-validator
- 1.5.4
+ 1.5.5
@@ -794,7 +794,7 @@
joda-time
joda-time
- 2.13.0
+ 2.13.1
diff --git a/remote-api/pom.xml b/remote-api/pom.xml
index 0f4436d319..976b9659f8 100644
--- a/remote-api/pom.xml
+++ b/remote-api/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT
diff --git a/remote-api/src/main/java/org/alfresco/rest/api/people/PeopleEntityResource.java b/remote-api/src/main/java/org/alfresco/rest/api/people/PeopleEntityResource.java
index e775642af7..cb2fb825f0 100644
--- a/remote-api/src/main/java/org/alfresco/rest/api/people/PeopleEntityResource.java
+++ b/remote-api/src/main/java/org/alfresco/rest/api/people/PeopleEntityResource.java
@@ -1,234 +1,248 @@
-/*
- * #%L
- * Alfresco Remote API
- * %%
- * Copyright (C) 2005 - 2023 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
-package org.alfresco.rest.api.people;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import jakarta.servlet.http.HttpServletResponse;
-
-import org.alfresco.model.ContentModel;
-import org.alfresco.rest.api.People;
-import org.alfresco.rest.api.model.Client;
-import org.alfresco.rest.api.model.PasswordReset;
-import org.alfresco.rest.api.model.Person;
-import org.alfresco.rest.framework.BinaryProperties;
-import org.alfresco.rest.framework.Operation;
-import org.alfresco.rest.framework.WebApiDescription;
-import org.alfresco.rest.framework.WebApiNoAuth;
-import org.alfresco.rest.framework.WebApiParam;
-import org.alfresco.rest.framework.core.ResourceParameter;
-import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
-import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
-import org.alfresco.rest.framework.resource.EntityResource;
-import org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction;
-import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
-import org.alfresco.rest.framework.resource.content.BasicContentInfo;
-import org.alfresco.rest.framework.resource.content.BinaryResource;
-import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
-import org.alfresco.rest.framework.resource.parameters.Parameters;
-import org.alfresco.rest.framework.webscripts.WithResponse;
-import org.alfresco.util.PropertyCheck;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.InitializingBean;
-
-/**
- * An implementation of an Entity Resource for a Person
- *
- * @author sglover
- * @author Gethin James
- */
-@EntityResource(name="people", title = "People")
-public class PeopleEntityResource implements EntityResourceAction.ReadById, EntityResourceAction.Create,
- EntityResourceAction.Update,EntityResourceAction.Read,
-
- BinaryResourceAction.Read, BinaryResourceAction.Update, BinaryResourceAction.Delete, InitializingBean
-{
- private static Log logger = LogFactory.getLog(PeopleEntityResource.class);
-
- private People people;
-
- public void setPeople(People people)
- {
- this.people = people;
- }
-
- @Override
- public void afterPropertiesSet()
- {
- PropertyCheck.mandatory(this, "people", people);
- }
-
- /**
- * Get a person by userName.
- *
- * @see org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction.ReadById#readById(String, org.alfresco.rest.framework.resource.parameters.Parameters)
- */
- @Override
- @WebApiDescription(title = "Get Person Information", description = "Get information for the person with id 'personId'")
- @WebApiParam(name = "personId", title = "The person's username")
- public Person readById(String personId, Parameters parameters)
- {
- Person person = people.getPerson(personId);
- return person;
- }
-
- @Override
- @WebApiDescription(title="Create person", description="Create a person")
- @WebApiParam(name="persons", title="A single person", description="A single person, multiple people are not supported.",
- kind= ResourceParameter.KIND.HTTP_BODY_OBJECT, allowMultiple=false, required = true)
- public List create(List persons, Parameters parameters)
- {
- Person p = persons.get(0);
-
- validateDerivedFieldsExistence(p);
-
- List result = new ArrayList<>(1);
- result.add(people.create(p));
- return result;
- }
-
- @Override
- @WebApiDescription(title="Update person", description="Update the given person's details")
- public Person update(String personId, Person person, Parameters parameters)
- {
- if (person.wasSet(ContentModel.PROP_USERNAME))
- {
- // REPO-1537
- throw new InvalidArgumentException("Unsupported field: id");
- }
-
- validateDerivedFieldsExistence(person);
-
- return people.update(personId, person);
- }
-
- /**
- * Explicitly test for the presence of system-maintained (derived) fields that are settable on Person (see also REPO-110).
- *
- * @param person
- */
- private void validateDerivedFieldsExistence(Person person)
- {
- if (person.wasSet(ContentModel.PROP_USER_STATUS_TIME))
- {
- throw new InvalidArgumentException("Unsupported field: statusUpdatedAt");
- }
-
- if (person.wasSet(Person.PROP_PERSON_AVATAR_ID))
- {
- throw new InvalidArgumentException("Unsupported field: avatarId");
- }
-
- if (person.wasSet(ContentModel.PROP_SIZE_QUOTA))
- {
- throw new InvalidArgumentException("Unsupported field: quota");
- }
-
- if (person.wasSet(ContentModel.PROP_SIZE_CURRENT))
- {
- throw new InvalidArgumentException("Unsupported field: quotaUsed");
- }
- }
-
- @Override
- @WebApiDescription(title = "Get List of People", description = "Get List of People")
- public CollectionWithPagingInfo readAll(Parameters params)
- {
- return people.getPeople(params);
- }
-
- @Deprecated
- @Operation("request-password-reset")
- @WebApiDescription(title = "Request Password Reset", description = "Request password reset",
- successStatus = HttpServletResponse.SC_ACCEPTED)
- @WebApiNoAuth
- public void requestPasswordReset(String personId, Client client, Parameters parameters, WithResponse withResponse)
- {
- people.requestPasswordReset(personId, client.getClient());
- }
-
- @Deprecated
- @Operation("reset-password")
- @WebApiDescription(title = "Reset Password", description = "Performs password reset", successStatus = HttpServletResponse.SC_ACCEPTED)
- @WebApiNoAuth
- public void resetPassword(String personId, PasswordReset passwordReset, Parameters parameters, WithResponse withResponse)
- {
- people.resetPassword(personId, passwordReset);
- }
-
- /**
- * Download avatar image content
- *
- * @param personId
- * @param parameters {@link Parameters}
- * @return
- * @throws EntityNotFoundException
- */
- @Override
- @WebApiDescription(title = "Download avatar", description = "Download avatar")
- @BinaryProperties({"avatar"})
- public BinaryResource readProperty(String personId, Parameters parameters) throws EntityNotFoundException
- {
- return people.downloadAvatarContent(personId, parameters);
- }
-
- /**
- * Upload avatar image content
- *
- * @param personId
- * @param contentInfo Basic information about the content stream
- * @param stream An inputstream
- * @param parameters
- * @return
- */
- @Override
- @WebApiDescription(title = "Upload avatar", description = "Upload avatar")
- @BinaryProperties({"avatar"})
- public Person updateProperty(String personId, BasicContentInfo contentInfo, InputStream stream, Parameters parameters)
- {
- return people.uploadAvatarContent(personId, contentInfo, stream, parameters);
- }
-
- /**
- * Delete avatar image content
- *
- * @param personId
- * @param parameters
- * @return
- */
- @Override
- @WebApiDescription(title = "Delete avatar image", description = "Delete avatar image")
- @BinaryProperties({ "avatar" })
- public void deleteProperty(String personId, Parameters parameters)
- {
- people.deleteAvatarContent(personId);
- }
-
-
-}
\ No newline at end of file
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2025 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
+package org.alfresco.rest.api.people;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import jakarta.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.InitializingBean;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.rest.api.People;
+import org.alfresco.rest.api.model.Client;
+import org.alfresco.rest.api.model.PasswordReset;
+import org.alfresco.rest.api.model.Person;
+import org.alfresco.rest.framework.BinaryProperties;
+import org.alfresco.rest.framework.Operation;
+import org.alfresco.rest.framework.WebApiDescription;
+import org.alfresco.rest.framework.WebApiNoAuth;
+import org.alfresco.rest.framework.WebApiParam;
+import org.alfresco.rest.framework.core.ResourceParameter;
+import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException;
+import org.alfresco.rest.framework.core.exceptions.InvalidArgumentException;
+import org.alfresco.rest.framework.resource.EntityResource;
+import org.alfresco.rest.framework.resource.actions.interfaces.BinaryResourceAction;
+import org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction;
+import org.alfresco.rest.framework.resource.content.BasicContentInfo;
+import org.alfresco.rest.framework.resource.content.BinaryResource;
+import org.alfresco.rest.framework.resource.parameters.CollectionWithPagingInfo;
+import org.alfresco.rest.framework.resource.parameters.Parameters;
+import org.alfresco.rest.framework.webscripts.WithResponse;
+import org.alfresco.util.PropertyCheck;
+
+/**
+ * An implementation of an Entity Resource for a Person
+ *
+ * @author sglover
+ * @author Gethin James
+ */
+@EntityResource(name = "people", title = "People")
+public class PeopleEntityResource implements EntityResourceAction.ReadById, EntityResourceAction.Create,
+ EntityResourceAction.Update, EntityResourceAction.Read,
+
+ BinaryResourceAction.Read, BinaryResourceAction.Update, BinaryResourceAction.Delete, InitializingBean
+{
+ private People people;
+
+ public void setPeople(People people)
+ {
+ this.people = people;
+ }
+
+ @Override
+ public void afterPropertiesSet()
+ {
+ PropertyCheck.mandatory(this, "people", people);
+ }
+
+ /**
+ * Get a person by userName.
+ *
+ * @see org.alfresco.rest.framework.resource.actions.interfaces.EntityResourceAction.ReadById#readById(String, org.alfresco.rest.framework.resource.parameters.Parameters)
+ */
+ @Override
+ @WebApiDescription(title = "Get Person Information", description = "Get information for the person with id 'personId'")
+ @WebApiParam(name = "personId", title = "The person's username")
+ public Person readById(String personId, Parameters parameters)
+ {
+ Person person = people.getPerson(personId);
+ return person;
+ }
+
+ @Override
+ @WebApiDescription(title = "Create person", description = "Create a person")
+ @WebApiParam(name = "persons", title = "A single person", description = "A single person, multiple people are not supported.",
+ kind = ResourceParameter.KIND.HTTP_BODY_OBJECT, allowMultiple = false, required = true)
+ public List create(List persons, Parameters parameters)
+ {
+ Person p = persons.get(0);
+
+ validateDerivedFieldsExistence(p);
+
+ List result = new ArrayList<>(1);
+ result.add(people.create(p));
+ return result;
+ }
+
+ @Override
+ @WebApiDescription(title = "Update person", description = "Update the given person's details")
+ public Person update(String personId, Person person, Parameters parameters)
+ {
+ if (person.wasSet(ContentModel.PROP_USERNAME))
+ {
+ // REPO-1537
+ throw new InvalidArgumentException("Unsupported field: id");
+ }
+
+ validateDerivedFieldsExistence(person);
+
+ return people.update(personId, person);
+ }
+
+ /**
+ * Explicitly test for the presence of system-maintained (derived) fields that are settable on Person (see also REPO-110).
+ *
+ * @param person
+ */
+ private void validateDerivedFieldsExistence(Person person)
+ {
+ if (person.wasSet(ContentModel.PROP_USER_STATUS_TIME))
+ {
+ throw new InvalidArgumentException("Unsupported field: statusUpdatedAt");
+ }
+
+ if (person.wasSet(Person.PROP_PERSON_AVATAR_ID))
+ {
+ throw new InvalidArgumentException("Unsupported field: avatarId");
+ }
+
+ if (person.wasSet(ContentModel.PROP_SIZE_QUOTA))
+ {
+ throw new InvalidArgumentException("Unsupported field: quota");
+ }
+
+ if (person.wasSet(ContentModel.PROP_SIZE_CURRENT))
+ {
+ throw new InvalidArgumentException("Unsupported field: quotaUsed");
+ }
+ }
+
+ @Override
+ @WebApiDescription(title = "Get List of People", description = "Get List of People")
+ public CollectionWithPagingInfo readAll(Parameters params)
+ {
+ return people.getPeople(params);
+ }
+
+ @Deprecated
+ @Operation("request-password-reset")
+ @WebApiDescription(title = "Request Password Reset", description = "Request password reset",
+ successStatus = HttpServletResponse.SC_ACCEPTED)
+ @WebApiNoAuth
+ public void requestPasswordReset(String personId, Client client, Parameters parameters, WithResponse withResponse)
+ {
+ people.requestPasswordReset(personId, client.getClient());
+ }
+
+ @Deprecated
+ @Operation("reset-password")
+ @WebApiDescription(title = "Reset Password", description = "Performs password reset", successStatus = HttpServletResponse.SC_ACCEPTED)
+ @WebApiNoAuth
+ public void resetPassword(String personId, PasswordReset passwordReset, Parameters parameters, WithResponse withResponse)
+ {
+ people.resetPassword(personId, passwordReset);
+ }
+
+ /**
+ * Download avatar image content
+ *
+ * @param personId
+ * @param parameters
+ * {@link Parameters}
+ * @return
+ * @throws EntityNotFoundException
+ */
+ @Override
+ @WebApiDescription(title = "Download avatar", description = "Download avatar")
+ @BinaryProperties({"avatar"})
+ public BinaryResource readProperty(String personId, Parameters parameters) throws EntityNotFoundException
+ {
+ return people.downloadAvatarContent(personId, parameters);
+ }
+
+ /**
+ * Upload avatar image content
+ *
+ * @param personId
+ * @param contentInfo
+ * Basic information about the content stream
+ * @param stream
+ * An inputstream
+ * @param parameters
+ * @return
+ */
+ @Override
+ @WebApiDescription(title = "Upload avatar", description = "Upload avatar")
+ @BinaryProperties({"avatar"})
+ public Person updateProperty(String personId, BasicContentInfo contentInfo, InputStream stream, Parameters parameters)
+ {
+ return people.uploadAvatarContent(personId, contentInfo, stream, parameters);
+ }
+
+ /**
+ * Delete avatar image content
+ *
+ * @param personId
+ * @param parameters
+ * @return
+ */
+ @Override
+ @WebApiDescription(title = "Delete avatar image", description = "Delete avatar image")
+ @BinaryProperties({"avatar"})
+ public void deleteProperty(String personId, Parameters parameters)
+ {
+ people.deleteAvatarContent(personId);
+ }
+
+ /**
+ * De-authorize user
+ *
+ * Not currently supported in community edition.
+ *
+ * @param personId
+ * @param body
+ * @param parameters
+ * @param withResponse
+ */
+ @Operation("deauthorize")
+ @WebApiDescription(title = "De-authorize user", description = "Performs user de-authorization", successStatus = HttpServletResponse.SC_NOT_IMPLEMENTED)
+ public void deauthorizeUser(String personId, Void body, Parameters parameters, WithResponse withResponse)
+ {
+ // functionality is not implemented in community edition
+ }
+}
diff --git a/remote-api/src/main/resources/alfresco/public-rest-context.xml b/remote-api/src/main/resources/alfresco/public-rest-context.xml
index c054b3b9de..511032322a 100644
--- a/remote-api/src/main/resources/alfresco/public-rest-context.xml
+++ b/remote-api/src/main/resources/alfresco/public-rest-context.xml
@@ -1116,7 +1116,7 @@
-
+
diff --git a/repository/pom.xml b/repository/pom.xml
index 86dbc2c850..1d516a0edd 100644
--- a/repository/pom.xml
+++ b/repository/pom.xml
@@ -7,7 +7,7 @@
org.alfresco
alfresco-community-repo
- 25.1.0.41-SNAPSHOT
+ 25.1.0.47-SNAPSHOT