From ffe5edb13b7c8a786143bfdd394fda2fbac0a991 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Wed, 11 Jan 2017 10:35:44 +0000 Subject: [PATCH] Merged 5.2.0 (5.2.0) to HEAD (5.2) 133870 rmunteanu: REPO-1746: Merge fixes for 5.2 GA issues to 5.2.0 branch Merged 5.2.N (5.2.1) to 5.2.0 (5.2.0) 133310 mward: Merged mward/5.2.n-repo1636-contentinfo (5.2.1) to 5.2.N (5.2.1) 133306 mward: REPO-1636: Now filter the entire "usr" namespace, rather than just usr:enabled git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@134193 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- source/java/org/alfresco/rest/api/Nodes.java | 6 ++++-- .../org/alfresco/rest/api/impl/NodesImpl.java | 12 ++++++------ .../org/alfresco/rest/api/impl/PeopleImpl.java | 11 +++++++---- .../org/alfresco/rest/api/tests/TestPeople.java | 16 +++++++++------- 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/source/java/org/alfresco/rest/api/Nodes.java b/source/java/org/alfresco/rest/api/Nodes.java index 5a0d0c562f..582a2352fd 100644 --- a/source/java/org/alfresco/rest/api/Nodes.java +++ b/source/java/org/alfresco/rest/api/Nodes.java @@ -273,10 +273,11 @@ public interface Nodes * @param nodeProps * @param selectParam * @param mapUserInfo + * @param excludedNS * @param excludedProps * @return */ - Map mapFromNodeProperties(Map nodeProps, List selectParam, Map mapUserInfo, List excludedProps); + Map mapFromNodeProperties(Map nodeProps, List selectParam, Map mapUserInfo, List excludedNS, List excludedProps); /** * Map from the JSON API format of properties (String to Object) to @@ -293,10 +294,11 @@ public interface Nodes * by the API JSON response for get nodes, get person etc. * * @param nodeAspects + * @param excludedNS * @param excludedAspects * @return */ - List mapFromNodeAspects(Set nodeAspects, List excludedAspects); + List mapFromNodeAspects(Set nodeAspects, List excludedNS, List excludedAspects); /** * Add aspects to the specified NodeRef. Aspects that appear in the exclusions list diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 8d5def0ecb..aa771a0208 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -890,14 +890,14 @@ public class NodesImpl implements Nodes if (includeParam.size() > 0) { - node.setProperties(mapFromNodeProperties(properties, includeParam, mapUserInfo, EXCLUDED_PROPS)); + node.setProperties(mapFromNodeProperties(properties, includeParam, mapUserInfo, EXCLUDED_NS, EXCLUDED_PROPS)); } Set aspects = null; if (includeParam.contains(PARAM_INCLUDE_ASPECTNAMES)) { aspects = nodeService.getAspects(nodeRef); - node.setAspectNames(mapFromNodeAspects(aspects, EXCLUDED_ASPECTS)); + node.setAspectNames(mapFromNodeAspects(aspects, EXCLUDED_NS, EXCLUDED_ASPECTS)); } if (includeParam.contains(PARAM_INCLUDE_ISLINK)) @@ -1161,7 +1161,7 @@ public class NodesImpl implements Nodes return nodeProps; } - public Map mapFromNodeProperties(Map nodeProps, List selectParam, Map mapUserInfo, List excludedProps) + public Map mapFromNodeProperties(Map nodeProps, List selectParam, Map mapUserInfo, List excludedNS, List excludedProps) { List selectedProperties; @@ -1171,7 +1171,7 @@ public class NodesImpl implements Nodes selectedProperties = new ArrayList<>(nodeProps.size()); for (QName propQName : nodeProps.keySet()) { - if ((! EXCLUDED_NS.contains(propQName.getNamespaceURI())) && (! excludedProps.contains(propQName))) + if ((! excludedNS.contains(propQName.getNamespaceURI())) && (! excludedProps.contains(propQName))) { selectedProperties.add(propQName); } @@ -1209,13 +1209,13 @@ public class NodesImpl implements Nodes return props; } - public List mapFromNodeAspects(Set nodeAspects, List excludedAspects) + public List mapFromNodeAspects(Set nodeAspects, List excludedNS, List excludedAspects) { List aspectNames = new ArrayList<>(nodeAspects.size()); for (QName aspectQName : nodeAspects) { - if ((! EXCLUDED_NS.contains(aspectQName.getNamespaceURI())) && (! excludedAspects.contains(aspectQName))) + if ((! excludedNS.contains(aspectQName.getNamespaceURI())) && (! excludedAspects.contains(aspectQName))) { aspectNames.add(aspectQName.toPrefixString(namespaceService)); } diff --git a/source/java/org/alfresco/rest/api/impl/PeopleImpl.java b/source/java/org/alfresco/rest/api/impl/PeopleImpl.java index a0e2e951cc..cb58b3ee52 100644 --- a/source/java/org/alfresco/rest/api/impl/PeopleImpl.java +++ b/source/java/org/alfresco/rest/api/impl/PeopleImpl.java @@ -58,6 +58,7 @@ import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.thumbnail.ThumbnailService; import org.alfresco.service.cmr.usage.ContentUsageService; +import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.alfresco.util.Pair; @@ -79,6 +80,9 @@ import java.util.Set; */ public class PeopleImpl implements People { + private static final List EXCLUDED_NS = Arrays.asList( + NamespaceService.SYSTEM_MODEL_1_0_URI, + "http://www.alfresco.org/model/user/1.0"); private static final List EXCLUDED_ASPECTS = Arrays.asList(); private static final List EXCLUDED_PROPS = Arrays.asList( ContentModel.PROP_USERNAME, @@ -105,8 +109,7 @@ public class PeopleImpl implements People ContentModel.PROP_SIZE_QUOTA, ContentModel.PROP_SIZE_CURRENT, ContentModel.PROP_EMAIL_FEED_DISABLED, - ContentModel.PROP_PREFERENCE_VALUES, - ContentModel.PROP_ENABLED); + ContentModel.PROP_PREFERENCE_VALUES); protected Nodes nodes; protected Sites sites; @@ -409,14 +412,14 @@ public class PeopleImpl implements People if (include.contains(PARAM_INCLUDE_PROPERTIES)) { Map custProps = new HashMap<>(); - custProps.putAll(nodes.mapFromNodeProperties(nodeProps, new ArrayList<>(), new HashMap<>(), EXCLUDED_PROPS)); + custProps.putAll(nodes.mapFromNodeProperties(nodeProps, new ArrayList<>(), new HashMap<>(), EXCLUDED_NS, EXCLUDED_PROPS)); person.setProperties(custProps); } if (include.contains(PARAM_INCLUDE_ASPECTNAMES)) { // Expose aspect names Set aspects = nodeService.getAspects(personNode); - person.setAspectNames(nodes.mapFromNodeAspects(aspects, EXCLUDED_ASPECTS)); + person.setAspectNames(nodes.mapFromNodeAspects(aspects, EXCLUDED_NS, EXCLUDED_ASPECTS)); } // get avatar information diff --git a/source/test-java/org/alfresco/rest/api/tests/TestPeople.java b/source/test-java/org/alfresco/rest/api/tests/TestPeople.java index 6dd316af82..cc6eeddcfe 100644 --- a/source/test-java/org/alfresco/rest/api/tests/TestPeople.java +++ b/source/test-java/org/alfresco/rest/api/tests/TestPeople.java @@ -40,6 +40,7 @@ import org.alfresco.rest.api.tests.client.data.Person; import org.alfresco.service.cmr.preference.PreferenceService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.QName; import org.alfresco.util.GUID; @@ -495,7 +496,7 @@ public class TestPeople extends EnterpriseTestApi // Create the person directly using the Java services - we don't want to test // the REST API's "create person" function here, so we're isolating this test from it. PersonService personService = applicationContext.getBean("PersonService", PersonService.class); - NodeService nodeService = applicationContext.getBean("NodeService", NodeService.class); + MutableAuthenticationService authService = applicationContext.getBean("AuthenticationService", MutableAuthenticationService.class); PreferenceService prefService = applicationContext.getBean("PreferenceService", PreferenceService.class); Map nodeProps = new HashMap<>(); // The cm:titled aspect should be auto-added for the cm:title property @@ -530,10 +531,14 @@ public class TestPeople extends EnterpriseTestApi nodeProps.put(ContentModel.PROP_EMAIL_FEED_DISABLED, false); // TODO: PROP_PERSON_DESCRIPTION? - // Namespace that should be filtered + // Namespaces that should be filtered + nodeProps.put(ContentModel.PROP_ENABLED, true); nodeProps.put(ContentModel.PROP_SYS_NAME, "name-value"); + // Create a password and enable the user so that we can check the usr:* props aren't present later. AuthenticationUtil.setFullyAuthenticatedUser("admin@"+account1.getId()); + authService.createAuthentication(userName, "password".toCharArray()); + authService.setAuthenticationEnabled(userName, true); personService.createPerson(nodeProps); // Set a preference, so that we can test that we're filtering this property correctly. @@ -576,16 +581,13 @@ public class TestPeople extends EnterpriseTestApi assertFalse(person.getProperties().containsKey("cm:sizeCurrent")); assertFalse(person.getProperties().containsKey("cm:emailFeedDisabled")); assertFalse(person.getProperties().containsKey("cm:persondescription")); - assertFalse(person.getProperties().containsKey("usr:enabled")); - // TODO: others, e.g. usr:* ? // We also don't want cm:preferenceValues (see REPO-1636) assertFalse(person.getProperties().containsKey("cm:preferenceValues")); - - // Check that no properties are present that should have been filtered. + // Check that no properties are present that should have been filtered by namespace. for (String key : person.getProperties().keySet()) { - if (key.startsWith("sys:")) + if (key.startsWith("sys:") || key.startsWith("usr:")) { Object value = person.getProperties().get(key); String keyValueStr = String.format("(key=%s, value=%s)", key, value);