diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/login.post.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/login.post.desc.xml index 79ecb07943..31aad53af7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/login.post.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/login.post.desc.xml @@ -18,7 +18,7 @@ /api/login none - required + required limited_support Authentication diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.js b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.js index 3be7d00636..1bb3f72203 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.js +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.js @@ -1,12 +1,24 @@ +function main() +{ + // Get the args var filter = args["filter"]; var maxResults = args["maxResults"]; var sortBy = args["sortBy"]; var sortAsc = args["dir"] != "desc"; -// Get the collection of people -var paging = utils.createPaging(maxResults != null ? parseInt(maxResults) : 0, -1); -var peopleCollection = people.getPeoplePaging(filter, paging, sortBy, sortAsc); +// Get the sorted collection of people +var peopleCollection = people.getPeople(filter, maxResults != null ? parseInt(maxResults) : -1, sortBy, sortAsc); + +var skipCount = args["startIndex"] != null ? parseInt(args["startIndex"]) : 0; +var pageSize = args["pageSize"] != null ? parseInt(args["pageSize"]) : peopleCollection.length // Pass the queried sites to the template -model.peoplelist = peopleCollection; \ No newline at end of file +model.maxItems = pageSize; +model.totalItems = peopleCollection.length; +model.skipCount = skipCount; + +model.peoplelist = peopleCollection.slice(skipCount, skipCount + pageSize); + +} +main(); diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.json.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.json.ftl index 50ee3248d4..8b97f26d6b 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.json.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/people.get.json.ftl @@ -5,5 +5,11 @@ <@personLib.personJSON person=person/> <#if person_has_next>, -] +], +"paging": + { + "maxItems": ${maxItems?c}, + "totalItems": ${totalItems?c}, + "skipCount":${skipCount?c} + } } \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl index 602367cb4d..60ef32ff98 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/person/person.lib.ftl @@ -31,7 +31,10 @@ "quota": <#if p.sizeQuota??>${p.sizeQuota?c}<#else>-1, "sizeCurrent": <#if p.sizeCurrent??>${p.sizeCurrent?c}<#else>0, "emailFeedDisabled": <#if p.emailFeedDisabled??>${p.emailFeedDisabled?string("true","false")}<#else>false, - "persondescription": <#if p.persondescription??>"${stringUtils.stripUnsafeHTML(p.persondescription.content)}"<#else>null + "persondescription": <#if p.persondescription??>"${stringUtils.stripUnsafeHTML(p.persondescription.content)}"<#else>null, + "authorizationStatus": <#if p.authorizationStatus??>"${p.authorizationStatus}"<#else>null, + "isDeleted": <#if p.isDeleted??>"${p.isDeleted?string("true","false")}"<#else>false, + "isAdminAuthority": ${people.isAdmin(person)?string("true","false")} diff --git a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java index 742fd664af..2c71ba178e 100644 --- a/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java +++ b/source/java/org/alfresco/repo/web/scripts/RepositoryContainer.java @@ -39,6 +39,7 @@ import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.transaction.TooBusyException; +import org.alfresco.repo.web.scripts.bean.LoginPost; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.TemplateService; import org.alfresco.service.cmr.security.AuthorityService; @@ -570,7 +571,13 @@ public class RepositoryContainer extends AbstractRuntimeContainer try { - transactionService.getRetryingTransactionHelper().doInTransaction(work, readonly, requiresNew); + RetryingTransactionHelper transactionHelper = transactionService.getRetryingTransactionHelper(); + if(script instanceof LoginPost) + { + //login script requires read-write transaction because of authorization intercepter + transactionHelper.setForceWritable(true); + } + transactionHelper.doInTransaction(work, readonly, requiresNew); } catch (TooBusyException e) { diff --git a/source/test-java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java b/source/test-java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java index e8a7ff5ac1..7bc5e972fd 100644 --- a/source/test-java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java +++ b/source/test-java/org/alfresco/repo/remoteticket/RemoteAlfrescoTicketServiceTest.java @@ -24,6 +24,7 @@ import org.alfresco.repo.remoteconnector.LocalWebScriptConnectorServiceImpl; import org.alfresco.repo.remotecredentials.PasswordCredentialsInfoImpl; import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.service.cmr.remotecredentials.BaseCredentialsInfo; import org.alfresco.service.cmr.remotecredentials.RemoteCredentialsService; @@ -51,6 +52,7 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest private static final String INVALID_REMOTE_SYSTEM_ID = "testingInvalidRemoteSystem"; private MutableAuthenticationService authenticationService; + private RetryingTransactionHelper retryingTransactionHelper; private PersonService personService; private RemoteAlfrescoTicketService remoteAlfrescoTicketService; @@ -68,7 +70,8 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest protected void setUp() throws Exception { super.setUp(); - + + this.retryingTransactionHelper = (RetryingTransactionHelper)getServer().getApplicationContext().getBean("retryingTransactionHelper"); this.authenticationService = (MutableAuthenticationService)getServer().getApplicationContext().getBean("AuthenticationService"); this.personService = (PersonService)getServer().getApplicationContext().getBean("PersonService"); @@ -382,12 +385,22 @@ public class RemoteAlfrescoTicketServiceTest extends BaseWebScriptTest creds.setRemotePassword("INVALID"); remoteCredentialsService.updateCredentials(creds); - try + retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() { - remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID); - fail("Shouldn't be able to refetch with wrong details"); - } - catch(AuthenticationException e) {} + public Void execute() + + { + try + { + remoteAlfrescoTicketService.refetchAlfrescoTicket(TEST_REMOTE_SYSTEM_ID); + fail("Shouldn't be able to refetch with wrong details"); + } + catch (AuthenticationException e) + { + } + return null; + } + }, false, true); // after MNT-13871, POST api/login webscript now requires read-write transaction // Check it was still marked as invalid, despite a read only transaction creds = (PasswordCredentialsInfoImpl)remoteCredentialsService.getPersonCredentials(TEST_REMOTE_SYSTEM_ID);