diff --git a/config/alfresco/authentication-services-context.xml b/config/alfresco/authentication-services-context.xml
index 2775dc41bd..75962dbec9 100644
--- a/config/alfresco/authentication-services-context.xml
+++ b/config/alfresco/authentication-services-context.xml
@@ -78,6 +78,15 @@
org.alfresco.repo.security.authentication.MutableAuthenticationDao
+
+
+
+
+
+
+
+
+
diff --git a/config/alfresco/invitation-service-context.xml b/config/alfresco/invitation-service-context.xml
index b3b898859d..135b1a8e61 100644
--- a/config/alfresco/invitation-service-context.xml
+++ b/config/alfresco/invitation-service-context.xml
@@ -8,7 +8,6 @@
-
diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml
index 51b528ac9d..ff7cfa0c13 100644
--- a/config/alfresco/public-services-context.xml
+++ b/config/alfresco/public-services-context.xml
@@ -612,7 +612,7 @@
- org.alfresco.service.cmr.security.AuthenticationService
+ org.alfresco.service.cmr.security.MutableAuthenticationService
diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml
index 1a87166940..b3fea8bbf7 100644
--- a/config/alfresco/public-services-security-context.xml
+++ b/config/alfresco/public-services-security-context.xml
@@ -747,11 +747,12 @@
- org.alfresco.service.cmr.security.AuthenticationService.createAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
- org.alfresco.service.cmr.security.AuthenticationService.updateAuthentication=ACL_ALLOW
- org.alfresco.service.cmr.security.AuthenticationService.setAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
- org.alfresco.service.cmr.security.AuthenticationService.deleteAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
- org.alfresco.service.cmr.security.AuthenticationService.setAuthenticationEnabled=ACL_METHOD.ROLE_ADMINISTRATOR
+ org.alfresco.service.cmr.security.MutableAuthenticationService.isAuthenticationMutable=ACL_ALLOW
+ org.alfresco.service.cmr.security.MutableAuthenticationService.createAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
+ org.alfresco.service.cmr.security.MutableAuthenticationService.updateAuthentication=ACL_ALLOW
+ org.alfresco.service.cmr.security.MutableAuthenticationService.setAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
+ org.alfresco.service.cmr.security.MutableAuthenticationService.deleteAuthentication=ACL_METHOD.ROLE_ADMINISTRATOR
+ org.alfresco.service.cmr.security.MutableAuthenticationService.setAuthenticationEnabled=ACL_METHOD.ROLE_ADMINISTRATOR
org.alfresco.service.cmr.security.AuthenticationService.getAuthenticationEnabled=ACL_METHOD.ROLE_ADMINISTRATOR
org.alfresco.service.cmr.security.AuthenticationService.authenticationExists=ACL_METHOD.ROLE_ADMINISTRATOR
org.alfresco.service.cmr.security.AuthenticationService.getCurrentUserName=ACL_ALLOW
diff --git a/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml b/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml
index 27398e0bdf..be86435f4c 100644
--- a/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml
+++ b/config/alfresco/subsystems/Authentication/alfrescoNtlm/alfresco-authentication-context.xml
@@ -104,7 +104,7 @@
-
+
diff --git a/config/alfresco/subsystems/Authentication/common-ldap-context.xml b/config/alfresco/subsystems/Authentication/common-ldap-context.xml
index 7b5292af23..6ca945e8f4 100644
--- a/config/alfresco/subsystems/Authentication/common-ldap-context.xml
+++ b/config/alfresco/subsystems/Authentication/common-ldap-context.xml
@@ -5,18 +5,6 @@
-->
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/config/alfresco/subsystems/Authentication/external/external-authentication-context.xml b/config/alfresco/subsystems/Authentication/external/external-authentication-context.xml
index 3de4e66109..02f0190872 100644
--- a/config/alfresco/subsystems/Authentication/external/external-authentication-context.xml
+++ b/config/alfresco/subsystems/Authentication/external/external-authentication-context.xml
@@ -37,18 +37,8 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/config/alfresco/subsystems/Authentication/kerberos/kerberos-authentication-context.xml b/config/alfresco/subsystems/Authentication/kerberos/kerberos-authentication-context.xml
index 77ccf8bd9d..2ba2255825 100644
--- a/config/alfresco/subsystems/Authentication/kerberos/kerberos-authentication-context.xml
+++ b/config/alfresco/subsystems/Authentication/kerberos/kerberos-authentication-context.xml
@@ -46,22 +46,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/config/alfresco/subsystems/Authentication/passthru/passthru-authentication-context.xml b/config/alfresco/subsystems/Authentication/passthru/passthru-authentication-context.xml
index b0417da58e..4835346417 100644
--- a/config/alfresco/subsystems/Authentication/passthru/passthru-authentication-context.xml
+++ b/config/alfresco/subsystems/Authentication/passthru/passthru-authentication-context.xml
@@ -3,14 +3,6 @@
-
-
-
-
-
-
-
-
@@ -94,9 +86,6 @@
-
-
-
diff --git a/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java b/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java
index dc0ddbe9c4..ff6a435763 100644
--- a/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java
+++ b/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java
@@ -45,7 +45,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.transaction.TransactionService;
@@ -89,7 +89,7 @@ public abstract class BaseCMISTest extends TestCase
protected CMISQueryService cmisQueryService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -121,7 +121,7 @@ public abstract class BaseCMISTest extends TestCase
permissionService = (PermissionService) ctx.getBean("permissionService");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authenticationDAO = (MutableAuthenticationDao) ctx.getBean("authenticationDao");
testTX = transactionService.getUserTransaction();
diff --git a/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java b/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java
index b5e826c51f..2ba89a31c6 100644
--- a/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java
+++ b/source/java/org/alfresco/repo/activities/ActivityServiceImplTest.java
@@ -33,7 +33,7 @@ import org.alfresco.service.cmr.activities.ActivityService;
import org.alfresco.service.cmr.activities.FeedControl;
import org.alfresco.service.cmr.repository.ScriptLocation;
import org.alfresco.service.cmr.repository.ScriptService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.util.BaseSpringTest;
@@ -47,7 +47,7 @@ public class ActivityServiceImplTest extends BaseSpringTest
{
private ActivityService activityService;
private ScriptService scriptService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private SiteService siteService;
private static final String ADMIN_PW = "admin";
@@ -64,7 +64,7 @@ public class ActivityServiceImplTest extends BaseSpringTest
this.scriptService = (ScriptService)this.applicationContext.getBean("ScriptService");
this.siteService = (SiteService)this.applicationContext.getBean("SiteService");
- this.authenticationService = (AuthenticationService)applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("authenticationService");
authenticationService.authenticate(AuthenticationUtil.getAdminUserName(), ADMIN_PW.toCharArray());
}
diff --git a/source/java/org/alfresco/repo/activities/SiteActivityTest.java b/source/java/org/alfresco/repo/activities/SiteActivityTest.java
index 5642d12e9e..5ca12610c4 100644
--- a/source/java/org/alfresco/repo/activities/SiteActivityTest.java
+++ b/source/java/org/alfresco/repo/activities/SiteActivityTest.java
@@ -38,7 +38,7 @@ import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.service.cmr.activities.ActivityService;
import org.alfresco.service.cmr.activities.FeedControl;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
@@ -62,7 +62,7 @@ public class SiteActivityTest extends TestCase
private SiteService siteService;
private ActivityService activityService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PersonService personService;
private PostLookup postLookup;
private FeedGenerator feedGenerator;
@@ -115,7 +115,7 @@ public class SiteActivityTest extends TestCase
// Get the required services
this.activityService = (ActivityService)applicationContext.getBean("activityService");
this.siteService = (SiteService)applicationContext.getBean("SiteService");
- this.authenticationService = (AuthenticationService)applicationContext.getBean("AuthenticationService");
+ this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("AuthenticationService");
this.personService = (PersonService)applicationContext.getBean("PersonService");
this.postLookup = (PostLookup)applicationContext.getBean("postLookup");
diff --git a/source/java/org/alfresco/repo/audit/AuditComponentTest.java b/source/java/org/alfresco/repo/audit/AuditComponentTest.java
index 7c74dc6b61..0b6f31a415 100644
--- a/source/java/org/alfresco/repo/audit/AuditComponentTest.java
+++ b/source/java/org/alfresco/repo/audit/AuditComponentTest.java
@@ -50,7 +50,7 @@ import org.alfresco.service.cmr.audit.AuditService.AuditQueryCallback;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ApplicationContextHelper;
import org.alfresco.util.EqualsHelper;
@@ -518,7 +518,7 @@ public class AuditComponentTest extends TestCase
logger.debug(sb.toString());
assertTrue("There should be no audit entries for the API test after a clear", results.isEmpty());
- final AuthenticationService authenticationService = serviceRegistry.getAuthenticationService();
+ final MutableAuthenticationService authenticationService = serviceRegistry.getAuthenticationService();
// Create a good authentication
RunAsWork createAuthenticationWork = new RunAsWork()
{
diff --git a/source/java/org/alfresco/repo/audit/AuditServiceTest.java b/source/java/org/alfresco/repo/audit/AuditServiceTest.java
index 39dcea826d..846bfabdd3 100644
--- a/source/java/org/alfresco/repo/audit/AuditServiceTest.java
+++ b/source/java/org/alfresco/repo/audit/AuditServiceTest.java
@@ -44,8 +44,8 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.NamespaceService;
@@ -67,7 +67,7 @@ public class AuditServiceTest extends BaseSpringTest
private NamespacePrefixResolver namespacePrefixResolver;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AuthenticationComponent authenticationComponent;
@@ -112,7 +112,7 @@ public class AuditServiceTest extends BaseSpringTest
permissionService = (PermissionServiceSPI) applicationContext.getBean("permissionService");
namespacePrefixResolver = (NamespacePrefixResolver) applicationContext
.getBean(ServiceRegistry.NAMESPACE_SERVICE.getLocalName());
- authenticationService = (AuthenticationService) applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
permissionModelDAO = (ModelDAO) applicationContext.getBean("permissionsModelDAO");
diff --git a/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java b/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java
index 25bb5c09fc..f8ebdc52fb 100644
--- a/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java
+++ b/source/java/org/alfresco/repo/avm/AVMServicePermissionsTest.java
@@ -59,6 +59,7 @@ import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
@@ -84,7 +85,7 @@ public class AVMServicePermissionsTest extends TestCase
protected PermissionServiceSPI permissionService;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -140,7 +141,7 @@ public class AVMServicePermissionsTest extends TestCase
dictionaryService = (DictionaryService) applicationContext.getBean(ServiceRegistry.DICTIONARY_SERVICE.getLocalName());
permissionService = (PermissionServiceSPI) applicationContext.getBean("permissionService");
namespacePrefixResolver = (NamespacePrefixResolver) applicationContext.getBean(ServiceRegistry.NAMESPACE_SERVICE.getLocalName());
- authenticationService = (AuthenticationService) applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
permissionModelDAO = (ModelDAO) applicationContext.getBean("permissionsModelDAO");
diff --git a/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java b/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java
index 3920f46efb..ef9c536899 100644
--- a/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java
+++ b/source/java/org/alfresco/repo/avm/locking/AVMLockingServiceTest.java
@@ -46,6 +46,7 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
@@ -68,7 +69,7 @@ public class AVMLockingServiceTest extends TestCase
private static AuthorityService fAuthorityService;
- private static AuthenticationService fAuthenticationService;
+ private static MutableAuthenticationService fAuthenticationService;
private static AuthenticationComponent fAuthenticationComponent;
@@ -93,7 +94,7 @@ public class AVMLockingServiceTest extends TestCase
fAttributeService = (AttributeService)fContext.getBean("AttributeService");
fPersonService = (PersonService)fContext.getBean("PersonService");
fAuthorityService = (AuthorityService)fContext.getBean("AuthorityService");
- fAuthenticationService = (AuthenticationService)fContext.getBean("AuthenticationService");
+ fAuthenticationService = (MutableAuthenticationService)fContext.getBean("AuthenticationService");
fAuthenticationComponent = (AuthenticationComponent)fContext.getBean("AuthenticationComponent");
fAuthenticationComponent.setSystemUserAsCurrentUser();
fNodeService = (NodeService)fContext.getBean("NodeService");
diff --git a/source/java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java b/source/java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
index e007023800..395bf58133 100644
--- a/source/java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
+++ b/source/java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
@@ -44,7 +44,7 @@ import org.alfresco.service.cmr.repository.CopyService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.version.Version;
import org.alfresco.service.cmr.version.VersionService;
@@ -70,7 +70,7 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
private CheckOutCheckInService cociService;
private ContentService contentService;
private VersionService versionService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private LockService lockService;
private TransactionService transactionService;
private PermissionService permissionService;
@@ -114,7 +114,7 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
this.cociService = (CheckOutCheckInService)this.applicationContext.getBean("checkOutCheckInService");
this.contentService = (ContentService)this.applicationContext.getBean("contentService");
this.versionService = (VersionService)this.applicationContext.getBean("versionService");
- this.authenticationService = (AuthenticationService)this.applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)this.applicationContext.getBean("authenticationService");
this.lockService = (LockService)this.applicationContext.getBean("lockService");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
this.permissionService = (PermissionService)this.applicationContext.getBean("permissionService");
diff --git a/source/java/org/alfresco/repo/i18n/MessageServiceImplTest.java b/source/java/org/alfresco/repo/i18n/MessageServiceImplTest.java
index e1131d8ea2..86ec2ff8b8 100644
--- a/source/java/org/alfresco/repo/i18n/MessageServiceImplTest.java
+++ b/source/java/org/alfresco/repo/i18n/MessageServiceImplTest.java
@@ -19,7 +19,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.ApplicationContextHelper;
@@ -37,7 +37,7 @@ public class MessageServiceImplTest extends TestCase implements MessageDeployer
private MessageService messageService;
private NodeService nodeService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private ContentService contentService;
private static final String BASE_BUNDLE_NAME = "testMessages";
@@ -72,7 +72,7 @@ public class MessageServiceImplTest extends TestCase implements MessageDeployer
// Get the services by name from the application context
messageService = (MessageService)applicationContext.getBean("messageService");
nodeService = (NodeService)applicationContext.getBean("NodeService");
- authenticationService = (AuthenticationService)applicationContext.getBean("AuthenticationService");
+ authenticationService = (MutableAuthenticationService)applicationContext.getBean("AuthenticationService");
contentService = (ContentService) applicationContext.getBean("ContentService");
// Re-set the current locale to be the default
diff --git a/source/java/org/alfresco/repo/imap/ImapServiceImplTest.java b/source/java/org/alfresco/repo/imap/ImapServiceImplTest.java
index c077a8303f..d0aa030e2e 100755
--- a/source/java/org/alfresco/repo/imap/ImapServiceImplTest.java
+++ b/source/java/org/alfresco/repo/imap/ImapServiceImplTest.java
@@ -27,7 +27,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.view.ImporterService;
@@ -60,7 +60,7 @@ public class ImapServiceImplTest extends TestCase
private NodeService nodeService;
private ImporterService importerService;
private PersonService personService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PermissionService permissionService;
private SearchService searchService;
private NamespaceService namespaceService;
diff --git a/source/java/org/alfresco/repo/imap/LoadTester.java b/source/java/org/alfresco/repo/imap/LoadTester.java
index def43f91ef..274da79da4 100755
--- a/source/java/org/alfresco/repo/imap/LoadTester.java
+++ b/source/java/org/alfresco/repo/imap/LoadTester.java
@@ -2,33 +2,33 @@ package org.alfresco.repo.imap;
import java.io.IOException;
import java.util.Date;
-import java.util.LinkedList;
+import java.util.LinkedList;
import java.util.List;
import javax.mail.Flags;
-import javax.transaction.UserTransaction;
+import javax.transaction.UserTransaction;
import junit.framework.TestCase;
-import org.alfresco.model.ContentModel;
+import org.alfresco.model.ContentModel;
import org.alfresco.repo.importer.ACPImportPackageHandler;
-import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory;
-import org.alfresco.repo.model.filefolder.FileFolderServiceImpl;
+import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory;
+import org.alfresco.repo.model.filefolder.FileFolderServiceImpl;
import org.alfresco.service.ServiceRegistry;
-import org.alfresco.service.cmr.model.FileFolderService;
+import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
-import org.alfresco.service.cmr.security.PermissionService;
-import org.alfresco.service.cmr.security.PersonService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
+import org.alfresco.service.cmr.security.PermissionService;
+import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.view.ImporterService;
import org.alfresco.service.cmr.view.Location;
import org.alfresco.service.namespace.NamespaceService;
-import org.alfresco.service.transaction.TransactionService;
+import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ApplicationContextHelper;
-import org.alfresco.util.PropertyMap;
+import org.alfresco.util.PropertyMap;
import org.alfresco.util.config.RepositoryFolderConfigBean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -46,7 +46,7 @@ public class LoadTester extends TestCase
private ImapService imapService;
private ImporterService importerService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AlfrescoImapUser user;
// DH: Do not assume the presence of any specific user or password. Create a new user for the test.
diff --git a/source/java/org/alfresco/repo/importer/FileImporterTest.java b/source/java/org/alfresco/repo/importer/FileImporterTest.java
index 378fc3c9eb..24bc04268a 100644
--- a/source/java/org/alfresco/repo/importer/FileImporterTest.java
+++ b/source/java/org/alfresco/repo/importer/FileImporterTest.java
@@ -49,7 +49,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.transaction.TransactionService;
@@ -64,7 +64,7 @@ public class FileImporterTest extends TestCase
private SearchService searchService;
private DictionaryService dictionaryService;
private ContentService contentService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AuthenticationComponent authenticationComponent;
private PermissionService permissionService;
private MimetypeService mimetypeService;
@@ -92,7 +92,7 @@ public class FileImporterTest extends TestCase
searchService = serviceRegistry.getSearchService();
dictionaryService = serviceRegistry.getDictionaryService();
contentService = serviceRegistry.getContentService();
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
permissionService = serviceRegistry.getPermissionService();
mimetypeService = serviceRegistry.getMimetypeService();
diff --git a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java
index adc686d55e..aa34f82cd7 100644
--- a/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java
+++ b/source/java/org/alfresco/repo/invitation/InvitationServiceImpl.java
@@ -32,19 +32,30 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.alfresco.model.ContentModel;
+import org.alfresco.repo.invitation.site.InviteHelper;
+import org.alfresco.repo.node.NodeServicePolicies;
+import org.alfresco.repo.policy.JavaBehaviour;
+import org.alfresco.repo.policy.PolicyComponent;
+import org.alfresco.repo.security.authentication.AuthenticationUtil;
+import org.alfresco.repo.security.authentication.PasswordGenerator;
+import org.alfresco.repo.security.authentication.UserNameGenerator;
+import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
+import org.alfresco.repo.site.SiteModel;
+import org.alfresco.repo.workflow.WorkflowModel;
import org.alfresco.service.cmr.invitation.Invitation;
+import org.alfresco.service.cmr.invitation.InvitationException;
import org.alfresco.service.cmr.invitation.InvitationExceptionForbidden;
import org.alfresco.service.cmr.invitation.InvitationExceptionNotFound;
import org.alfresco.service.cmr.invitation.InvitationExceptionUserError;
import org.alfresco.service.cmr.invitation.InvitationSearchCriteria;
+import org.alfresco.service.cmr.invitation.InvitationService;
import org.alfresco.service.cmr.invitation.ModeratedInvitation;
import org.alfresco.service.cmr.invitation.NominatedInvitation;
-import org.alfresco.service.cmr.invitation.InvitationService;
-import org.alfresco.service.cmr.invitation.InvitationException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.site.SiteService;
@@ -60,18 +71,6 @@ import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.GUID;
import org.springframework.extensions.surf.util.PropertyCheck;
-import org.alfresco.model.ContentModel;
-import org.alfresco.repo.invitation.site.*;
-import org.alfresco.repo.node.NodeServicePolicies;
-import org.alfresco.repo.policy.JavaBehaviour;
-import org.alfresco.repo.policy.PolicyComponent;
-import org.alfresco.repo.security.authentication.AuthenticationUtil;
-import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
-import org.alfresco.repo.security.authentication.PasswordGenerator;
-import org.alfresco.repo.security.authentication.UserNameGenerator;
-import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
-import org.alfresco.repo.site.SiteModel;
-import org.alfresco.repo.workflow.WorkflowModel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -94,9 +93,8 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
private WorkflowService workflowService;
private PersonService personService;
private SiteService siteService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PermissionService permissionService;
- private MutableAuthenticationDao mutableAuthenticationDao;
private NamespaceService namespaceService;
private NodeService nodeService;
// user name and password generation beans
@@ -132,7 +130,6 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
PropertyCheck.mandatory(this, "SiteService", siteService);
PropertyCheck.mandatory(this, "AuthenticationService", authenticationService);
PropertyCheck.mandatory(this, "PermissionService", permissionService);
- PropertyCheck.mandatory(this, "MutableAuthenticationDao", mutableAuthenticationDao);
PropertyCheck.mandatory(this, "NamespaceService", namespaceService);
PropertyCheck.mandatory(this, "NodeService", nodeService);
PropertyCheck.mandatory(this, "UserNameGenerator", usernameGenerator);
@@ -467,7 +464,6 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
if (invitation instanceof ModeratedInvitation) {
WorkflowTaskQuery wfModeratedTaskQuery = new WorkflowTaskQuery();
- HashMap wfQueryModifiedProps = new HashMap(3, 1.0f);
// Check rejecter is a site manager and throw and exception if not
String rejecterUserName = this.authenticationService.getCurrentUserName();
@@ -910,11 +906,11 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
}
public void setAuthenticationService(
- AuthenticationService authenticationService) {
+ MutableAuthenticationService authenticationService) {
this.authenticationService = authenticationService;
}
- public AuthenticationService getAuthenticationService() {
+ public MutableAuthenticationService getAuthenticationService() {
return authenticationService;
}
@@ -950,15 +946,6 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
return permissionService;
}
- public void setMutableAuthenticationDao(
- MutableAuthenticationDao mutableAuthenticationDao) {
- this.mutableAuthenticationDao = mutableAuthenticationDao;
- }
-
- public MutableAuthenticationDao getMutableAuthenticationDao() {
- return mutableAuthenticationDao;
- }
-
public void setNodeService(NodeService nodeService) {
this.nodeService = nodeService;
}
@@ -1038,11 +1025,9 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
char[] generatedPassword = passwordGenerator.generatePassword()
.toCharArray();
- // create disabled user account for invitee user name with generated
- // password
- this.mutableAuthenticationDao.createUser(inviteeUserName,
- generatedPassword);
- this.mutableAuthenticationDao.setEnabled(inviteeUserName, false);
+ // create disabled user account for invitee user name with generated password
+ this.authenticationService.createAuthentication(inviteeUserName, generatedPassword);
+ this.authenticationService.setAuthenticationEnabled(inviteeUserName, false);
return String.valueOf(generatedPassword);
}
@@ -1302,7 +1287,7 @@ public class InvitationServiceImpl implements InvitationService, NodeServicePoli
// user name, then local reference to invitee password will be "null"
//
String inviteePassword = null;
- if (this.mutableAuthenticationDao.userExists(inviteeUserName) == false) {
+ if (!this.authenticationService.authenticationExists(inviteeUserName)) {
if (logger.isDebugEnabled())
logger
.debug("Invitee user account does not exist, creating disabled account.");
diff --git a/source/java/org/alfresco/repo/jscript/People.java b/source/java/org/alfresco/repo/jscript/People.java
index 5e65db32d0..f88c387883 100644
--- a/source/java/org/alfresco/repo/jscript/People.java
+++ b/source/java/org/alfresco/repo/jscript/People.java
@@ -24,6 +24,8 @@
*/
package org.alfresco.repo.jscript;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
@@ -41,18 +43,21 @@ import org.alfresco.service.cmr.search.LimitBy;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.usage.ContentUsageService;
import org.alfresco.service.namespace.NamespaceService;
import org.springframework.extensions.surf.util.ParameterCheck;
import org.alfresco.util.PropertyMap;
+import org.alfresco.util.ValueDerivingMapFactory;
+import org.alfresco.util.ValueDerivingMapFactory.ValueDeriver;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
+import org.springframework.beans.factory.InitializingBean;
/**
* Scripted People service for describing and executing actions against People & Groups.
@@ -60,7 +65,7 @@ import org.mozilla.javascript.Scriptable;
* @author davidc
* @author kevinr
*/
-public final class People extends BaseScopableProcessorExtension
+public final class People extends BaseScopableProcessorExtension implements InitializingBean
{
private static Log logger = LogFactory.getLog(People.class);
@@ -69,13 +74,53 @@ public final class People extends BaseScopableProcessorExtension
private AuthorityDAO authorityDAO;
private AuthorityService authorityService;
private PersonService personService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private ContentUsageService contentUsageService;
private TenantService tenantService;
private UserNameGenerator usernameGenerator;
private StoreRef storeRef;
+ private ValueDerivingMapFactory valueDerivingMapFactory;
private int numRetries = 10;
+
+ public void afterPropertiesSet() throws Exception
+ {
+ Map > capabilityTesters = new HashMap>(5);
+ capabilityTesters.put("isAdmin", new ValueDeriver()
+ {
+ public Boolean deriveValue(ScriptNode source)
+ {
+ return isAdmin(source);
+ }
+ });
+ capabilityTesters.put("isGuest", new ValueDeriver()
+ {
+ public Boolean deriveValue(ScriptNode source)
+ {
+ return isGuest(source);
+ }
+ });
+ capabilityTesters.put("isMutable", new ValueDeriver()
+ {
+ public Boolean deriveValue(ScriptNode source)
+ {
+ // Check whether the account is mutable according to the authentication service
+ String sourceUser = (String) source.getProperties().get(ContentModel.PROP_USERNAME);
+ if (!authenticationService.isAuthenticationMutable(sourceUser))
+ {
+ return false;
+ }
+ // Only allow non-admin users to mutate their own accounts
+ String currentUser = authenticationService.getCurrentUserName();
+ if (currentUser.equals(sourceUser) || authorityService.isAdminAuthority(currentUser))
+ {
+ return true;
+ }
+ return false;
+ }
+ });
+ this.valueDerivingMapFactory = new ValueDerivingMapFactory(capabilityTesters);
+ }
/**
* Set the default store reference
@@ -98,7 +143,7 @@ public final class People extends BaseScopableProcessorExtension
* @param authenticationService
* the authentication service
*/
- public void setAuthenticationService(AuthenticationService authenticationService)
+ public void setAuthenticationService(MutableAuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
@@ -324,7 +369,7 @@ public final class People extends BaseScopableProcessorExtension
ParameterCheck.mandatoryString("userName", userName);
ParameterCheck.mandatoryString("password", password);
- AuthenticationService authService = this.services.getAuthenticationService();
+ MutableAuthenticationService authService = this.services.getAuthenticationService();
if (this.authorityService.hasAdminAuthority() && (userName.equalsIgnoreCase(authService.getCurrentUserName()) == false))
{
authService.setAuthentication(userName, password.toCharArray());
@@ -725,6 +770,21 @@ public final class People extends BaseScopableProcessorExtension
return this.authorityService.isGuestAuthority((String) person.getProperties().get(ContentModel.PROP_USERNAME));
}
+ /**
+ * Gets a map of capabilities (boolean assertions) for the given person.
+ *
+ * @param person
+ * the person
+ * @return the capability map
+ */
+ public Map getCapabilities(final ScriptNode person)
+ {
+ ParameterCheck.mandatory("Person", person);
+ Map retVal = new ScriptableHashMap();
+ retVal.putAll(this.valueDerivingMapFactory.getMap(person));
+ return retVal;
+ }
+
/**
* Get Contained Authorities
*
diff --git a/source/java/org/alfresco/repo/lock/LockBehaviourImplTest.java b/source/java/org/alfresco/repo/lock/LockBehaviourImplTest.java
index 2f0fc04b31..7373212c33 100644
--- a/source/java/org/alfresco/repo/lock/LockBehaviourImplTest.java
+++ b/source/java/org/alfresco/repo/lock/LockBehaviourImplTest.java
@@ -37,7 +37,7 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.namespace.QName;
@@ -69,7 +69,7 @@ public class LockBehaviourImplTest extends BaseSpringTest
/**
* The authentication service
*/
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PermissionService permissionService;
@@ -99,7 +99,7 @@ public class LockBehaviourImplTest extends BaseSpringTest
this.nodeService = (NodeService)applicationContext.getBean("dbNodeService");
this.lockService = (LockService)applicationContext.getBean("lockService");
this.versionService = (VersionService)applicationContext.getBean("versionService");
- this.authenticationService = (AuthenticationService)applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("authenticationService");
this.permissionService = (PermissionService)applicationContext.getBean("permissionService");
// Set the authentication
diff --git a/source/java/org/alfresco/repo/lock/LockServiceImplTest.java b/source/java/org/alfresco/repo/lock/LockServiceImplTest.java
index 4104f9eb89..24233e7a1b 100644
--- a/source/java/org/alfresco/repo/lock/LockServiceImplTest.java
+++ b/source/java/org/alfresco/repo/lock/LockServiceImplTest.java
@@ -38,7 +38,7 @@ import org.alfresco.service.cmr.lock.UnableToReleaseLockException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.BaseSpringTest;
import org.alfresco.util.TestWithUserUtils;
@@ -55,7 +55,7 @@ public class LockServiceImplTest extends BaseSpringTest
*/
private NodeService nodeService;
private LockService lockService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
/**
* Data used in tests
@@ -79,7 +79,7 @@ public class LockServiceImplTest extends BaseSpringTest
{
this.nodeService = (NodeService)applicationContext.getBean("dbNodeService");
this.lockService = (LockService)applicationContext.getBean("lockService");
- this.authenticationService = (AuthenticationService)applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("authenticationService");
// Set the authentication
AuthenticationComponent authComponent = (AuthenticationComponent)this.applicationContext.getBean("authenticationComponent");
diff --git a/source/java/org/alfresco/repo/model/filefolder/FileFolderPerformanceTester.java b/source/java/org/alfresco/repo/model/filefolder/FileFolderPerformanceTester.java
index b65b5af86d..acaf78beba 100644
--- a/source/java/org/alfresco/repo/model/filefolder/FileFolderPerformanceTester.java
+++ b/source/java/org/alfresco/repo/model/filefolder/FileFolderPerformanceTester.java
@@ -50,7 +50,7 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
@@ -421,7 +421,7 @@ public class FileFolderPerformanceTester extends TestCase
final NodeRef selectedFolderNodeRef = folderRefStr == null ? null : new NodeRef(folderRefStr);
ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY);
- final AuthenticationService authenticationService = serviceRegistry.getAuthenticationService();
+ final MutableAuthenticationService authenticationService = serviceRegistry.getAuthenticationService();
final PermissionService permissionService = serviceRegistry.getPermissionService();
final NodeService nodeService = serviceRegistry.getNodeService();
final TransactionService transactionService = serviceRegistry.getTransactionService();
diff --git a/source/java/org/alfresco/repo/node/archive/ArchiveAndRestoreTest.java b/source/java/org/alfresco/repo/node/archive/ArchiveAndRestoreTest.java
index 9dd7806192..478bdbc672 100644
--- a/source/java/org/alfresco/repo/node/archive/ArchiveAndRestoreTest.java
+++ b/source/java/org/alfresco/repo/node/archive/ArchiveAndRestoreTest.java
@@ -47,7 +47,7 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
@@ -80,7 +80,7 @@ public class ArchiveAndRestoreTest extends TestCase
private NodeService nodeService;
private PermissionService permissionService;
private AuthenticationComponent authenticationComponent;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private OwnableService ownableService;
private TransactionService transactionService;
diff --git a/source/java/org/alfresco/repo/ownable/impl/OwnableServiceTest.java b/source/java/org/alfresco/repo/ownable/impl/OwnableServiceTest.java
index fba17c25b3..743ff0d4ec 100644
--- a/source/java/org/alfresco/repo/ownable/impl/OwnableServiceTest.java
+++ b/source/java/org/alfresco/repo/ownable/impl/OwnableServiceTest.java
@@ -40,7 +40,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.AccessStatus;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
@@ -54,7 +54,7 @@ public class OwnableServiceTest extends TestCase
private NodeService nodeService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AuthenticationComponent authenticationComponent;
@@ -83,7 +83,7 @@ public class OwnableServiceTest extends TestCase
public void setUp() throws Exception
{
nodeService = (NodeService) ctx.getBean("nodeService");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
ownableService = (OwnableService) ctx.getBean("ownableService");
permissionService = (PermissionService) ctx.getBean("permissionService");
diff --git a/source/java/org/alfresco/repo/rule/RuleServiceImplTest.java b/source/java/org/alfresco/repo/rule/RuleServiceImplTest.java
index b8485051b5..5abda7628e 100644
--- a/source/java/org/alfresco/repo/rule/RuleServiceImplTest.java
+++ b/source/java/org/alfresco/repo/rule/RuleServiceImplTest.java
@@ -43,7 +43,7 @@ import org.alfresco.service.cmr.repository.CyclicChildRelationshipException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.rule.RuleType;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
@@ -55,7 +55,7 @@ import org.alfresco.service.namespace.QName;
*/
public class RuleServiceImplTest extends BaseRuleTest
{
- AuthenticationService authenticationService;
+ MutableAuthenticationService authenticationService;
PermissionService permissionService;
@Override
@@ -63,7 +63,7 @@ public class RuleServiceImplTest extends BaseRuleTest
{
super.onSetUpInTransaction();
this.permissionService = (PermissionService)this.applicationContext.getBean("permissionService");
- this.authenticationService = (AuthenticationService)this.applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)this.applicationContext.getBean("authenticationService");
}
/**
diff --git a/source/java/org/alfresco/repo/search/SearchServiceTest.java b/source/java/org/alfresco/repo/search/SearchServiceTest.java
index 118bed588c..e3fe0240c9 100644
--- a/source/java/org/alfresco/repo/search/SearchServiceTest.java
+++ b/source/java/org/alfresco/repo/search/SearchServiceTest.java
@@ -41,7 +41,7 @@ import org.alfresco.service.cmr.search.PermissionEvaluationMode;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
@@ -55,7 +55,7 @@ public class SearchServiceTest extends TestCase
private AuthenticationComponent authenticationComponent;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -98,7 +98,7 @@ public class SearchServiceTest extends TestCase
{
nodeService = (NodeService) ctx.getBean("dbNodeService");
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authenticationDAO = (MutableAuthenticationDao) ctx.getBean("authenticationDao");
pubSearchService = (SearchService) ctx.getBean("SearchService");
pubPermissionService = (PermissionService) ctx.getBean("PermissionService");
diff --git a/source/java/org/alfresco/repo/security/authentication/AbstractChainingAuthenticationService.java b/source/java/org/alfresco/repo/security/authentication/AbstractChainingAuthenticationService.java
index fd1a9dde63..87be816923 100644
--- a/source/java/org/alfresco/repo/security/authentication/AbstractChainingAuthenticationService.java
+++ b/source/java/org/alfresco/repo/security/authentication/AbstractChainingAuthenticationService.java
@@ -30,6 +30,7 @@ import java.util.Set;
import java.util.TreeSet;
import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
/**
* A base class for chaining authentication services. Where appropriate, methods will 'chain' across multiple
@@ -37,9 +38,8 @@ import org.alfresco.service.cmr.security.AuthenticationService;
*
* @author dward
*/
-public abstract class AbstractChainingAuthenticationService extends AbstractAuthenticationService
+public abstract class AbstractChainingAuthenticationService extends AbstractAuthenticationService implements MutableAuthenticationService
{
-
/**
* Instantiates a new abstract chaining authentication service.
*/
@@ -53,7 +53,7 @@ public abstract class AbstractChainingAuthenticationService extends AbstractAuth
*
* @return the mutable authentication service
*/
- public abstract AuthenticationService getMutableAuthenticationService();
+ public abstract MutableAuthenticationService getMutableAuthenticationService();
/**
* Gets the authentication services across which methods will chain.
@@ -130,6 +130,16 @@ public abstract class AbstractChainingAuthenticationService extends AbstractAuth
getMutableAuthenticationService().setAuthenticationEnabled(userName, enabled);
}
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isAuthenticationMutable(String userName)
+ {
+ MutableAuthenticationService mutableAuthenticationService = getMutableAuthenticationService();
+ return mutableAuthenticationService == null ? false : mutableAuthenticationService
+ .isAuthenticationMutable(userName);
+ }
+
/**
* {@inheritDoc}
*/
@@ -149,7 +159,7 @@ public abstract class AbstractChainingAuthenticationService extends AbstractAuth
// Ignore and chain
}
}
- return false;
+ return true;
}
/**
@@ -226,7 +236,7 @@ public abstract class AbstractChainingAuthenticationService extends AbstractAuth
// it doesn't exist in any of the authentication components
return false;
}
-
+
/**
* {@inheritDoc}
*/
@@ -529,5 +539,7 @@ public abstract class AbstractChainingAuthenticationService extends AbstractAuth
}
return defaultGuestUserNames;
}
+
+
}
\ No newline at end of file
diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationServiceImpl.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationServiceImpl.java
index da4c8cfcec..e3aaf81c3d 100644
--- a/source/java/org/alfresco/repo/security/authentication/AuthenticationServiceImpl.java
+++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationServiceImpl.java
@@ -32,8 +32,6 @@ import org.alfresco.repo.security.authentication.AuthenticationComponent.UserNam
public class AuthenticationServiceImpl extends AbstractAuthenticationService implements ActivateableBean
{
- MutableAuthenticationDao authenticationDao;
-
AuthenticationComponent authenticationComponent;
TicketComponent ticketComponent;
@@ -51,11 +49,6 @@ public class AuthenticationServiceImpl extends AbstractAuthenticationService imp
super();
}
- public void setAuthenticationDao(MutableAuthenticationDao authenticationDao)
- {
- this.authenticationDao = authenticationDao;
- }
-
public void setTicketComponent(TicketComponent ticketComponent)
{
this.ticketComponent = ticketComponent;
@@ -76,46 +69,6 @@ public class AuthenticationServiceImpl extends AbstractAuthenticationService imp
|| ((ActivateableBean) this.authenticationComponent).isActive();
}
- public void createAuthentication(String userName, char[] password) throws AuthenticationException
- {
- authenticationDao.createUser(userName, password);
- }
-
- public void updateAuthentication(String userName, char[] oldPassword, char[] newPassword)
- throws AuthenticationException
- {
- // Need to preserve the run-as user
- String currentUser = AuthenticationUtil.getRunAsUser();
- try
- {
- authenticate(userName, oldPassword);
- }
- finally
- {
- AuthenticationUtil.setRunAsUser(currentUser);
- }
- authenticationDao.updateUser(userName, newPassword);
- }
-
- public void setAuthentication(String userName, char[] newPassword) throws AuthenticationException
- {
- authenticationDao.updateUser(userName, newPassword);
- }
-
- public void deleteAuthentication(String userName) throws AuthenticationException
- {
- authenticationDao.deleteUser(userName);
- }
-
- public boolean getAuthenticationEnabled(String userName) throws AuthenticationException
- {
- return authenticationDao.getEnabled(userName);
- }
-
- public void setAuthenticationEnabled(String userName, boolean enabled) throws AuthenticationException
- {
- authenticationDao.setEnabled(userName, enabled);
- }
public void authenticate(String userName, char[] password) throws AuthenticationException
{
@@ -136,11 +89,6 @@ public class AuthenticationServiceImpl extends AbstractAuthenticationService imp
ticketComponent.getCurrentTicket(userName); // to ensure new ticket is created (even if client does not explicitly call getCurrentTicket)
}
- public boolean authenticationExists(String userName)
- {
- return authenticationDao.userExists(userName);
- }
-
public String getCurrentUserName() throws AuthenticationException
{
return authenticationComponent.getCurrentUserName();
@@ -327,4 +275,20 @@ public class AuthenticationServiceImpl extends AbstractAuthenticationService imp
{
return authenticationComponent.getDefaultGuestUserNames();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean authenticationExists(String userName)
+ {
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean getAuthenticationEnabled(String userName) throws AuthenticationException
+ {
+ return true;
+ }
}
diff --git a/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java b/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java
index e3a043353d..798947ad12 100644
--- a/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java
+++ b/source/java/org/alfresco/repo/security/authentication/AuthenticationTest.java
@@ -44,11 +44,9 @@ import net.sf.acegisecurity.DisabledException;
import net.sf.acegisecurity.LockedException;
import net.sf.acegisecurity.UserDetails;
import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken;
-import net.sf.acegisecurity.providers.dao.SaltSource;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.cache.SimpleCache;
-import org.alfresco.repo.management.subsystems.ApplicationContextFactory;
import org.alfresco.repo.management.subsystems.ChildApplicationContextManager;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.security.authentication.InMemoryTicketComponentImpl.ExpiryMode;
@@ -62,7 +60,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.DynamicNamespacePrefixResolver;
import org.alfresco.service.namespace.NamespacePrefixResolver;
@@ -103,9 +101,9 @@ public class AuthenticationTest extends TestCase
private SimpleCache ticketsCache;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
- private AuthenticationService pubAuthenticationService;
+ private MutableAuthenticationService pubAuthenticationService;
private AuthenticationComponent authenticationComponent;
@@ -140,8 +138,8 @@ public class AuthenticationTest extends TestCase
dictionaryService = (DictionaryService) ctx.getBean("dictionaryService");
passwordEncoder = (MD4PasswordEncoder) ctx.getBean("passwordEncoder");
ticketComponent = (TicketComponent) ctx.getBean("ticketComponent");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
- pubAuthenticationService = (AuthenticationService) ctx.getBean("AuthenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
+ pubAuthenticationService = (MutableAuthenticationService) ctx.getBean("AuthenticationService");
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
authenticationComponentImpl = (AuthenticationComponent) ctx.getBean("authenticationComponent");
pubPersonService = (PersonService) ctx.getBean("PersonService");
diff --git a/source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceImpl.java b/source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceImpl.java
index 3fb849d5dc..f12849f5ba 100644
--- a/source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceImpl.java
+++ b/source/java/org/alfresco/repo/security/authentication/ChainingAuthenticationServiceImpl.java
@@ -28,6 +28,7 @@ import java.util.ArrayList;
import java.util.List;
import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
/**
* This class implements a simple chaining authentication service. It chains together other authentication services so
@@ -47,7 +48,7 @@ public class ChainingAuthenticationServiceImpl extends AbstractChainingAuthentic
List authenticationServices;
- AuthenticationService mutableAuthenticationService;
+ MutableAuthenticationService mutableAuthenticationService;
public ChainingAuthenticationServiceImpl()
{
@@ -60,12 +61,12 @@ public class ChainingAuthenticationServiceImpl extends AbstractChainingAuthentic
}
@Override
- public AuthenticationService getMutableAuthenticationService()
+ public MutableAuthenticationService getMutableAuthenticationService()
{
return this.mutableAuthenticationService;
}
- public void setMutableAuthenticationService(AuthenticationService mutableAuthenticationService)
+ public void setMutableAuthenticationService(MutableAuthenticationService mutableAuthenticationService)
{
this.mutableAuthenticationService = mutableAuthenticationService;
}
diff --git a/source/java/org/alfresco/repo/security/authentication/MutableAuthenticationServiceImpl.java b/source/java/org/alfresco/repo/security/authentication/MutableAuthenticationServiceImpl.java
new file mode 100644
index 0000000000..140964d350
--- /dev/null
+++ b/source/java/org/alfresco/repo/security/authentication/MutableAuthenticationServiceImpl.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2005-2009 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.repo.security.authentication;
+
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
+
+/**
+ * The default implementation of {@link MutableAuthenticationService}.
+ *
+ * @author dward
+ */
+public class MutableAuthenticationServiceImpl extends AuthenticationServiceImpl implements MutableAuthenticationService
+{
+
+ /** The authentication dao. */
+ MutableAuthenticationDao authenticationDao;
+
+ /**
+ * Sets the authentication dao.
+ *
+ * @param authenticationDao
+ * the authentication dao
+ */
+ public void setAuthenticationDao(MutableAuthenticationDao authenticationDao)
+ {
+ this.authenticationDao = authenticationDao;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#createAuthentication(java.lang.String,
+ * char[])
+ */
+ public void createAuthentication(String userName, char[] password) throws AuthenticationException
+ {
+ this.authenticationDao.createUser(userName, password);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#updateAuthentication(java.lang.String,
+ * char[], char[])
+ */
+ public void updateAuthentication(String userName, char[] oldPassword, char[] newPassword)
+ throws AuthenticationException
+ {
+ // Need to preserve the run-as user
+ String currentUser = AuthenticationUtil.getRunAsUser();
+ try
+ {
+ authenticate(userName, oldPassword);
+ }
+ finally
+ {
+ AuthenticationUtil.setRunAsUser(currentUser);
+ }
+ this.authenticationDao.updateUser(userName, newPassword);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#setAuthentication(java.lang.String, char[])
+ */
+ public void setAuthentication(String userName, char[] newPassword) throws AuthenticationException
+ {
+ this.authenticationDao.updateUser(userName, newPassword);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#deleteAuthentication(java.lang.String)
+ */
+ public void deleteAuthentication(String userName) throws AuthenticationException
+ {
+ this.authenticationDao.deleteUser(userName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.alfresco.repo.security.authentication.AuthenticationServiceImpl#getAuthenticationEnabled(java.lang.String)
+ */
+ @Override
+ public boolean getAuthenticationEnabled(String userName) throws AuthenticationException
+ {
+ return this.authenticationDao.getEnabled(userName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#setAuthenticationEnabled(java.lang.String,
+ * boolean)
+ */
+ public void setAuthenticationEnabled(String userName, boolean enabled) throws AuthenticationException
+ {
+ this.authenticationDao.setEnabled(userName, enabled);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.repo.security.authentication.AuthenticationServiceImpl#authenticationExists(java.lang.String)
+ */
+ @Override
+ public boolean authenticationExists(String userName)
+ {
+ return this.authenticationDao.userExists(userName);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.alfresco.service.cmr.security.MutableAuthenticationService#isAuthenticationMutable(java.lang.String)
+ */
+ public boolean isAuthenticationMutable(String userName)
+ {
+ return authenticationExists(userName);
+ }
+
+}
diff --git a/source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java b/source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java
index d6f97e8062..d3298b9f06 100644
--- a/source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java
+++ b/source/java/org/alfresco/repo/security/authentication/TestAuthenticationServiceImpl.java
@@ -41,11 +41,11 @@ import net.sf.acegisecurity.context.security.SecureContextImpl;
import net.sf.acegisecurity.providers.UsernamePasswordAuthenticationToken;
import net.sf.acegisecurity.providers.dao.User;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.util.EqualsHelper;
import org.alfresco.util.GUID;
-public class TestAuthenticationServiceImpl implements AuthenticationService
+public class TestAuthenticationServiceImpl implements MutableAuthenticationService
{
private Map userNamesAndPasswords = new HashMap();
@@ -246,6 +246,11 @@ public class TestAuthenticationServiceImpl implements AuthenticationService
{
return userNamesAndPasswords.containsKey(userName);
}
+
+ public boolean isAuthenticationMutable(String userName)
+ {
+ return authenticationExists(userName);
+ }
public String getCurrentUserName() throws AuthenticationException
{
diff --git a/source/java/org/alfresco/repo/security/authentication/subsystems/SubsystemChainingAuthenticationService.java b/source/java/org/alfresco/repo/security/authentication/subsystems/SubsystemChainingAuthenticationService.java
index e808d1a22a..2e94bd21ae 100644
--- a/source/java/org/alfresco/repo/security/authentication/subsystems/SubsystemChainingAuthenticationService.java
+++ b/source/java/org/alfresco/repo/security/authentication/subsystems/SubsystemChainingAuthenticationService.java
@@ -31,6 +31,7 @@ import org.alfresco.repo.management.subsystems.ActivateableBean;
import org.alfresco.repo.management.subsystems.ChildApplicationContextManager;
import org.alfresco.repo.security.authentication.AbstractChainingAuthenticationService;
import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
@@ -77,7 +78,7 @@ public class SubsystemChainingAuthenticationService extends AbstractChainingAuth
* org.alfresco.repo.security.authentication.AbstractChainingAuthenticationService#getMutableAuthenticationService()
*/
@Override
- public AuthenticationService getMutableAuthenticationService()
+ public MutableAuthenticationService getMutableAuthenticationService()
{
for (String instance : this.applicationContextManager.getInstanceIds())
{
@@ -87,11 +88,12 @@ public class SubsystemChainingAuthenticationService extends AbstractChainingAuth
AuthenticationService authenticationService = (AuthenticationService) context.getBean(sourceBeanName);
// Only add active authentication services. E.g. we might have an ldap context that is only used for
// synchronizing
- if (!(authenticationService instanceof ActivateableBean)
- || ((ActivateableBean) authenticationService).isActive())
+ if (authenticationService instanceof MutableAuthenticationService
+ && (!(authenticationService instanceof ActivateableBean) || ((ActivateableBean) authenticationService)
+ .isActive()))
{
- return authenticationService;
+ return (MutableAuthenticationService) authenticationService;
}
}
catch (NoSuchBeanDefinitionException e)
diff --git a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java b/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java
index b7f45233e2..8c8b2f3a5a 100644
--- a/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java
+++ b/source/java/org/alfresco/repo/security/authority/AuthorityServiceTest.java
@@ -44,9 +44,9 @@ import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.QName;
@@ -62,7 +62,7 @@ public class AuthorityServiceTest extends TestCase
private AuthenticationComponent authenticationComponentImpl;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -88,7 +88,7 @@ public class AuthorityServiceTest extends TestCase
{
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
authenticationComponentImpl = (AuthenticationComponent) ctx.getBean("authenticationComponent");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authorityService = (AuthorityService) ctx.getBean("authorityService");
pubAuthorityService = (AuthorityService) ctx.getBean("AuthorityService");
personService = (PersonService) ctx.getBean("personService");
diff --git a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java
index 3426f1b72c..d648aa5e57 100644
--- a/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java
+++ b/source/java/org/alfresco/repo/security/authority/SimpleAuthorityServiceTest.java
@@ -32,9 +32,9 @@ import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
import org.alfresco.service.ServiceRegistry;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.transaction.TransactionService;
@@ -47,7 +47,7 @@ public class SimpleAuthorityServiceTest extends TestCase
private AuthenticationComponent authenticationComponent;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AuthorityService authorityService;
@@ -68,7 +68,7 @@ public class SimpleAuthorityServiceTest extends TestCase
public void setUp() throws Exception
{
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authorityService = (AuthorityService) ctx.getBean("authorityService");
pubAuthorityService = (AuthorityService) ctx.getBean("AuthorityService");
personService = (PersonService) ctx.getBean("personService");
diff --git a/source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java b/source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java
index f9ea1a5a08..2247e8cddd 100644
--- a/source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java
+++ b/source/java/org/alfresco/repo/security/permissions/dynamic/LockOwnerDynamicAuthorityTest.java
@@ -43,7 +43,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.AccessStatus;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.QName;
@@ -63,7 +63,7 @@ public class LockOwnerDynamicAuthorityTest extends TestCase
private NodeService nodeService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private AuthenticationComponent authenticationComponent;
@@ -102,7 +102,7 @@ public class LockOwnerDynamicAuthorityTest extends TestCase
public void setUp() throws Exception
{
nodeService = (NodeService) ctx.getBean("nodeService");
- authenticationService = (AuthenticationService) ctx.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent");
lockService = (LockService) ctx.getBean("lockService");
permissionService = (PermissionService) ctx.getBean("permissionService");
diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java b/source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java
index 638ed4cf28..e545e42bf2 100644
--- a/source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java
+++ b/source/java/org/alfresco/repo/security/permissions/impl/AbstractPermissionTest.java
@@ -42,8 +42,8 @@ import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.NamespaceService;
@@ -62,7 +62,7 @@ public class AbstractPermissionTest extends BaseSpringTest
protected PermissionServiceSPI permissionService;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -106,7 +106,7 @@ public class AbstractPermissionTest extends BaseSpringTest
permissionService = (PermissionServiceSPI) applicationContext.getBean("permissionService");
namespacePrefixResolver = (NamespacePrefixResolver) applicationContext
.getBean(ServiceRegistry.NAMESPACE_SERVICE.getLocalName());
- authenticationService = (AuthenticationService) applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
permissionModelDAO = (ModelDAO) applicationContext.getBean("permissionsModelDAO");
diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java b/source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java
index 270d36c5e2..17929612b5 100644
--- a/source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java
+++ b/source/java/org/alfresco/repo/security/permissions/impl/AclDaoComponentTest.java
@@ -31,11 +31,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.RollbackException;
import javax.transaction.Status;
-import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import junit.framework.TestCase;
@@ -59,8 +55,8 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.AccessStatus;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.NamespaceService;
@@ -81,7 +77,7 @@ public class AclDaoComponentTest extends TestCase
protected PermissionServiceSPI permissionService;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
@@ -125,7 +121,7 @@ public class AclDaoComponentTest extends TestCase
permissionService = (PermissionServiceSPI) applicationContext.getBean("permissionService");
namespacePrefixResolver = (NamespacePrefixResolver) applicationContext
.getBean(ServiceRegistry.NAMESPACE_SERVICE.getLocalName());
- authenticationService = (AuthenticationService) applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
serviceRegistry = (ServiceRegistry) applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
permissionModelDAO = (ModelDAO) applicationContext.getBean("permissionsModelDAO");
diff --git a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java
index 911e341a5c..0784856449 100644
--- a/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java
+++ b/source/java/org/alfresco/repo/security/person/PersonServiceImpl.java
@@ -64,9 +64,9 @@ import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.NoSuchPersonException;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespacePrefixResolver;
@@ -109,7 +109,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
private AuthorityService authorityService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private DictionaryService dictionaryService;
@@ -874,7 +874,7 @@ public class PersonServiceImpl extends TransactionListenerAdapter implements Per
this.authorityService = authorityService;
}
- public void setAuthenticationService(AuthenticationService authenticationService)
+ public void setAuthenticationService(MutableAuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
diff --git a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java b/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java
index dbb8cb3253..6ffa4f621f 100644
--- a/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java
+++ b/source/java/org/alfresco/repo/service/ServiceDescriptorRegistry.java
@@ -60,8 +60,8 @@ import org.alfresco.service.cmr.repository.TemplateService;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.search.CategoryService;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
@@ -152,9 +152,9 @@ public class ServiceDescriptorRegistry
/* (non-Javadoc)
* @see org.alfresco.repo.service.ServiceRegistry#getNodeService()
*/
- public AuthenticationService getAuthenticationService()
+ public MutableAuthenticationService getAuthenticationService()
{
- return (AuthenticationService)getService(AUTHENTICATION_SERVICE);
+ return (MutableAuthenticationService)getService(AUTHENTICATION_SERVICE);
}
/* (non-Javadoc)
diff --git a/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java b/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java
index e1f6c3964c..9a5e60022e 100644
--- a/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java
+++ b/source/java/org/alfresco/repo/tagging/TaggingServiceImplTest.java
@@ -41,14 +41,13 @@ import org.alfresco.repo.policy.PolicyComponent;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
-import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.ScriptLocation;
import org.alfresco.service.cmr.repository.ScriptService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.tagging.TagDetails;
import org.alfresco.service.cmr.tagging.TagScope;
import org.alfresco.service.cmr.tagging.TaggingService;
@@ -99,7 +98,7 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
this.taggingService = (TaggingService)this.applicationContext.getBean("TaggingService");
this.nodeService = (NodeService) this.applicationContext.getBean("NodeService");
this.contentService = (ContentService) this.applicationContext.getBean("ContentService");
- this.authenticationService = (AuthenticationService) this.applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService) this.applicationContext.getBean("authenticationService");
this.actionService = (ActionService)this.applicationContext.getBean("ActionService");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
this.scriptService = (ScriptService)this.applicationContext.getBean("scriptService");
diff --git a/source/java/org/alfresco/repo/template/People.java b/source/java/org/alfresco/repo/template/People.java
index bf528bd26c..c75ae8e31b 100644
--- a/source/java/org/alfresco/repo/template/People.java
+++ b/source/java/org/alfresco/repo/template/People.java
@@ -26,7 +26,9 @@ package org.alfresco.repo.template;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.alfresco.model.ContentModel;
@@ -35,28 +37,70 @@ import org.alfresco.repo.security.authority.AuthorityDAO;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.springframework.extensions.surf.util.ParameterCheck;
+import org.alfresco.util.ValueDerivingMapFactory;
+import org.alfresco.util.ValueDerivingMapFactory.ValueDeriver;
+import org.springframework.beans.factory.InitializingBean;
/**
* People and users support in FreeMarker templates.
*
* @author Kevin Roast
*/
-public class People extends BaseTemplateProcessorExtension
+public class People extends BaseTemplateProcessorExtension implements InitializingBean
{
/** Repository Service Registry */
private ServiceRegistry services;
private AuthorityDAO authorityDAO;
private AuthorityService authorityService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PersonService personService;
private StoreRef storeRef;
+ private ValueDerivingMapFactory valueDerivingMapFactory;
-
+ public void afterPropertiesSet() throws Exception
+ {
+ Map > capabilityTesters = new HashMap>(5);
+ capabilityTesters.put("isAdmin", new ValueDeriver()
+ {
+ public Boolean deriveValue(TemplateNode source)
+ {
+ return isAdmin(source);
+ }
+ });
+ capabilityTesters.put("isGuest", new ValueDeriver()
+ {
+ public Boolean deriveValue(TemplateNode source)
+ {
+ return isGuest(source);
+ }
+ });
+ capabilityTesters.put("isMutable", new ValueDeriver()
+ {
+ public Boolean deriveValue(TemplateNode source)
+ {
+ // Check whether the account is mutable according to the authentication service
+ String sourceUser = (String) source.getProperties().get(ContentModel.PROP_USERNAME);
+ if (!authenticationService.isAuthenticationMutable(sourceUser))
+ {
+ return false;
+ }
+ // Only allow non-admin users to mutate their own accounts
+ String currentUser = authenticationService.getCurrentUserName();
+ if (currentUser.equals(sourceUser) || authorityService.isAdminAuthority(currentUser))
+ {
+ return true;
+ }
+ return false;
+ }
+ });
+ this.valueDerivingMapFactory = new ValueDerivingMapFactory(capabilityTesters);
+ }
+
/**
* Set the default store reference
*
@@ -118,7 +162,7 @@ public class People extends BaseTemplateProcessorExtension
* @param authenticationService
* the new authentication service
*/
- public void setAuthenticationService(AuthenticationService authenticationService)
+ public void setAuthenticationService(MutableAuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
@@ -213,7 +257,7 @@ public class People extends BaseTemplateProcessorExtension
}
return parents;
}
-
+
/**
* Return true if the specified user is an Administrator authority.
*
@@ -239,6 +283,19 @@ public class People extends BaseTemplateProcessorExtension
ParameterCheck.mandatory("Person", person);
return this.authorityService.isGuestAuthority((String)person.getProperties().get(ContentModel.PROP_USERNAME));
}
+
+ /**
+ * Gets a map of capabilities (boolean assertions) for the given person.
+ *
+ * @param person
+ * the person
+ * @return the capability map
+ */
+ public Map getCapabilities(final TemplateNode person)
+ {
+ ParameterCheck.mandatory("Person", person);
+ return this.valueDerivingMapFactory.getMap(person);
+ }
/**
* Return true if the specified user account is enabled.
diff --git a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
index 3c40e7e6d2..67ece06469 100644
--- a/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
+++ b/source/java/org/alfresco/repo/tenant/MultiTDemoTest.java
@@ -57,9 +57,9 @@ import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.CategoryService;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
@@ -81,7 +81,7 @@ public class MultiTDemoTest extends TestCase
);
private NodeService nodeService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private PersonService personService;
private SearchService searchService;
private ContentService contentService;
@@ -141,7 +141,7 @@ public class MultiTDemoTest extends TestCase
super.setUp();
nodeService = (NodeService) ctx.getBean("NodeService");
- authenticationService = (AuthenticationService) ctx.getBean("AuthenticationService");
+ authenticationService = (MutableAuthenticationService) ctx.getBean("AuthenticationService");
tenantAdminService = (TenantAdminService) ctx.getBean("tenantAdminService");
tenantService = (TenantService) ctx.getBean("tenantService");
personService = (PersonService) ctx.getBean("PersonService");
diff --git a/source/java/org/alfresco/repo/tenant/TenantInterpreter.java b/source/java/org/alfresco/repo/tenant/TenantInterpreter.java
index 57532b7cd4..86ecffebdc 100755
--- a/source/java/org/alfresco/repo/tenant/TenantInterpreter.java
+++ b/source/java/org/alfresco/repo/tenant/TenantInterpreter.java
@@ -31,21 +31,21 @@ import java.io.InputStream;
import java.io.PrintStream;
import java.util.List;
-import org.springframework.extensions.surf.util.I18NUtil;
import org.alfresco.repo.admin.BaseInterpreter;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
-import org.springframework.extensions.surf.util.PropertyCheck;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.extensions.surf.util.I18NUtil;
+import org.springframework.extensions.surf.util.PropertyCheck;
/**
* An interactive console for Tenants.
@@ -61,7 +61,7 @@ public class TenantInterpreter extends BaseInterpreter implements ApplicationCon
private TenantAdminService tenantAdminService;
protected TenantService tenantService;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private String baseAdminUsername = null;
@@ -72,7 +72,7 @@ public class TenantInterpreter extends BaseInterpreter implements ApplicationCon
this.tenantAdminService = tenantAdminService;
}
- public void setAuthenticationService(AuthenticationService authenticationService)
+ public void setAuthenticationService(MutableAuthenticationService authenticationService)
{
this.authenticationService = authenticationService;
}
diff --git a/source/java/org/alfresco/repo/usage/UserUsageTest.java b/source/java/org/alfresco/repo/usage/UserUsageTest.java
index c93f93add2..2e7916d277 100644
--- a/source/java/org/alfresco/repo/usage/UserUsageTest.java
+++ b/source/java/org/alfresco/repo/usage/UserUsageTest.java
@@ -45,7 +45,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.usage.UsageService;
@@ -64,7 +64,7 @@ public class UserUsageTest extends TestCase
protected NodeService nodeService;
protected FileFolderService fileFolderService;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
private MutableAuthenticationDao authenticationDAO;
protected NodeRef rootNodeRef;
protected NodeRef systemNodeRef;
@@ -85,7 +85,7 @@ public class UserUsageTest extends TestCase
nodeService = (NodeService) applicationContext.getBean("nodeService");
fileFolderService = (FileFolderService) applicationContext.getBean("fileFolderService");
- authenticationService = (AuthenticationService) applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService) applicationContext.getBean("authenticationService");
authenticationComponent = (AuthenticationComponent) applicationContext.getBean("authenticationComponent");
authenticationComponent.setCurrentUser(authenticationComponent.getSystemUserName());
diff --git a/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java b/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java
index 8b7b486819..285a4e762d 100644
--- a/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java
+++ b/source/java/org/alfresco/repo/usage/UserUsageTrackingComponentTest.java
@@ -41,7 +41,7 @@ import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.usage.ContentUsageService;
import org.alfresco.service.namespace.NamespaceService;
@@ -59,7 +59,7 @@ public class UserUsageTrackingComponentTest extends TestCase
private boolean clean = true;
- private AuthenticationService authenticationService;
+ private MutableAuthenticationService authenticationService;
private ContentService contentService;
private TransactionService transactionService;
private PersonService personService;
@@ -80,7 +80,7 @@ public class UserUsageTrackingComponentTest extends TestCase
protected void setUp() throws Exception
{
nodeService = (NodeService)applicationContext.getBean("NodeService");
- authenticationService = (AuthenticationService)applicationContext.getBean("authenticationService");
+ authenticationService = (MutableAuthenticationService)applicationContext.getBean("authenticationService");
transactionService = (TransactionService)applicationContext.getBean("transactionComponent");
personService = (PersonService)applicationContext.getBean("PersonService");
contentService = (ContentService)applicationContext.getBean("ContentService");
diff --git a/source/java/org/alfresco/repo/version/BaseVersionStoreTest.java b/source/java/org/alfresco/repo/version/BaseVersionStoreTest.java
index f105aa409b..cf9333165e 100644
--- a/source/java/org/alfresco/repo/version/BaseVersionStoreTest.java
+++ b/source/java/org/alfresco/repo/version/BaseVersionStoreTest.java
@@ -24,7 +24,6 @@
*/
package org.alfresco.repo.version;
-import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
@@ -37,7 +36,6 @@ import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.dictionary.DictionaryBootstrap;
import org.alfresco.repo.dictionary.DictionaryDAO;
-import org.alfresco.repo.dictionary.M2Model;
import org.alfresco.repo.node.archive.NodeArchiveService;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
@@ -51,7 +49,7 @@ import org.alfresco.service.cmr.repository.MLText;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.version.Version;
import org.alfresco.service.cmr.version.VersionService;
@@ -69,7 +67,7 @@ public abstract class BaseVersionStoreTest extends BaseSpringTest
protected VersionCounterService versionCounterDaoService;
protected ContentService contentService;
protected DictionaryDAO dictionaryDAO;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
protected TransactionService transactionService;
protected RetryingTransactionHelper txnHelper;
protected MutableAuthenticationDao authenticationDAO;
@@ -159,7 +157,7 @@ public abstract class BaseVersionStoreTest extends BaseSpringTest
this.dbNodeService = (NodeService)applicationContext.getBean("dbNodeService");
this.versionCounterDaoService = (VersionCounterService)applicationContext.getBean("versionCounterService");
this.contentService = (ContentService)applicationContext.getBean("contentService");
- this.authenticationService = (AuthenticationService)applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("authenticationService");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
this.txnHelper = (RetryingTransactionHelper) applicationContext.getBean("retryingTransactionHelper");
this.authenticationDAO = (MutableAuthenticationDao) applicationContext.getBean("authenticationDao");
diff --git a/source/java/org/alfresco/service/ServiceRegistry.java b/source/java/org/alfresco/service/ServiceRegistry.java
index e5486cb5a5..42a0048a83 100644
--- a/source/java/org/alfresco/service/ServiceRegistry.java
+++ b/source/java/org/alfresco/service/ServiceRegistry.java
@@ -59,8 +59,8 @@ import org.alfresco.service.cmr.repository.TemplateService;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.search.CategoryService;
import org.alfresco.service.cmr.search.SearchService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
@@ -214,7 +214,7 @@ public interface ServiceRegistry
* @return the authentication service (or null, if one is not provided)
*/
@NotAuditable
- AuthenticationService getAuthenticationService();
+ MutableAuthenticationService getAuthenticationService();
/**
* @return the node service (or null, if one is not provided)
diff --git a/source/java/org/alfresco/service/cmr/security/AuthenticationService.java b/source/java/org/alfresco/service/cmr/security/AuthenticationService.java
index b9fb0d1858..a1c7129277 100644
--- a/source/java/org/alfresco/service/cmr/security/AuthenticationService.java
+++ b/source/java/org/alfresco/service/cmr/security/AuthenticationService.java
@@ -40,56 +40,6 @@ import org.alfresco.service.PublicService;
@PublicService
public interface AuthenticationService
{
- /**
- * Create an authentication for the given user.
- *
- * @param userName
- * @param password
- * @throws AuthenticationException
- */
- @Auditable(parameters = {"userName", "password"}, recordable = {true, false})
- public void createAuthentication(String userName, char[] password) throws AuthenticationException;
-
- /**
- * Update the login information for the user (typically called by the user)
- *
- * @param userName
- * @param oldPassword
- * @param newPassword
- * @throws AuthenticationException
- */
- @Auditable(parameters = {"userName", "oldPassword", "newPassword"}, recordable = {true, false, false})
- public void updateAuthentication(String userName, char[] oldPassword, char[] newPassword) throws AuthenticationException;
-
- /**
- * Set the login information for a user (typically called by an admin user)
- *
- * @param userName
- * @param newPassword
- * @throws AuthenticationException
- */
- @Auditable(parameters = {"userName", "newPassword"}, recordable = {true, false})
- public void setAuthentication(String userName, char[] newPassword) throws AuthenticationException;
-
-
- /**
- * Delete an authentication entry
- *
- * @param userName
- * @throws AuthenticationException
- */
- @Auditable(parameters = {"userName"})
- public void deleteAuthentication(String userName) throws AuthenticationException;
-
- /**
- * Enable or disable an authentication entry
- *
- * @param userName
- * @param enabled
- */
- @Auditable(parameters = {"userName", "enabled"})
- public void setAuthenticationEnabled(String userName, boolean enabled) throws AuthenticationException;
-
/**
* Is an authentication enabled or disabled?
*
diff --git a/source/java/org/alfresco/service/cmr/security/MutableAuthenticationService.java b/source/java/org/alfresco/service/cmr/security/MutableAuthenticationService.java
new file mode 100644
index 0000000000..16f1aa7dca
--- /dev/null
+++ b/source/java/org/alfresco/service/cmr/security/MutableAuthenticationService.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2005-2009 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.service.cmr.security;
+
+import org.alfresco.repo.security.authentication.AuthenticationException;
+import org.alfresco.service.Auditable;
+
+/**
+ * An extended {@link AuthenticationService} that allows mutation of some or all of its user accounts.
+ *
+ * @author dward
+ */
+public interface MutableAuthenticationService extends AuthenticationService
+{
+ /**
+ * Determines whether this user's authentication may be mutated via the other methods.
+ *
+ * @param userName the user ID
+ * @return true
if this user's authentication may be mutated via the other methods.
+ */
+ @Auditable(parameters = {"userName"}, recordable = {true})
+ public boolean isAuthenticationMutable(String userName);
+
+ /**
+ * Create an authentication for the given user.
+ *
+ * @param userName
+ * @param password
+ * @throws AuthenticationException
+ */
+ @Auditable(parameters = {"userName", "password"}, recordable = {true, false})
+ public void createAuthentication(String userName, char[] password) throws AuthenticationException;
+
+ /**
+ * Update the login information for the user (typically called by the user)
+ *
+ * @param userName
+ * @param oldPassword
+ * @param newPassword
+ * @throws AuthenticationException
+ */
+ @Auditable(parameters = {"userName", "oldPassword", "newPassword"}, recordable = {true, false, false})
+ public void updateAuthentication(String userName, char[] oldPassword, char[] newPassword) throws AuthenticationException;
+
+ /**
+ * Set the login information for a user (typically called by an admin user)
+ *
+ * @param userName
+ * @param newPassword
+ * @throws AuthenticationException
+ */
+ @Auditable(parameters = {"userName", "newPassword"}, recordable = {true, false})
+ public void setAuthentication(String userName, char[] newPassword) throws AuthenticationException;
+
+
+ /**
+ * Delete an authentication entry
+ *
+ * @param userName
+ * @throws AuthenticationException
+ */
+ @Auditable(parameters = {"userName"})
+ public void deleteAuthentication(String userName) throws AuthenticationException;
+
+ /**
+ * Enable or disable an authentication entry
+ *
+ * @param userName
+ * @param enabled
+ */
+ @Auditable(parameters = {"userName", "enabled"})
+ public void setAuthenticationEnabled(String userName, boolean enabled) throws AuthenticationException;
+
+
+}
diff --git a/source/java/org/alfresco/util/BaseAlfrescoSpringTest.java b/source/java/org/alfresco/util/BaseAlfrescoSpringTest.java
index 4119007511..1cfed2b0f6 100644
--- a/source/java/org/alfresco/util/BaseAlfrescoSpringTest.java
+++ b/source/java/org/alfresco/util/BaseAlfrescoSpringTest.java
@@ -30,7 +30,7 @@ import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.transaction.TransactionService;
/**
@@ -51,7 +51,7 @@ public abstract class BaseAlfrescoSpringTest extends BaseSpringTest
protected ContentService contentService;
/** The authentication service */
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
/** The store reference */
protected StoreRef storeRef;
@@ -74,7 +74,7 @@ public abstract class BaseAlfrescoSpringTest extends BaseSpringTest
// Get a reference to the node service
this.nodeService = (NodeService) this.applicationContext.getBean("nodeService");
this.contentService = (ContentService) this.applicationContext.getBean("contentService");
- this.authenticationService = (AuthenticationService) this.applicationContext.getBean("authenticationService");
+ this.authenticationService = (MutableAuthenticationService) this.applicationContext.getBean("authenticationService");
this.actionService = (ActionService)this.applicationContext.getBean("actionService");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
diff --git a/source/java/org/alfresco/util/TestWithUserUtils.java b/source/java/org/alfresco/util/TestWithUserUtils.java
index 6126c76e03..b54eb0a83c 100644
--- a/source/java/org/alfresco/util/TestWithUserUtils.java
+++ b/source/java/org/alfresco/util/TestWithUserUtils.java
@@ -32,6 +32,7 @@ import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
@@ -56,7 +57,7 @@ public abstract class TestWithUserUtils
String password,
NodeRef rootNodeRef,
NodeService nodeService,
- AuthenticationService authenticationService)
+ MutableAuthenticationService authenticationService)
{
// ignore if the user's authentication already exists
if (authenticationService.authenticationExists(userName))
@@ -105,7 +106,7 @@ public abstract class TestWithUserUtils
public static void authenticateUser(
String userName,
String password,
- AuthenticationService authenticationService,
+ MutableAuthenticationService authenticationService,
AuthenticationComponent authenticationComponent)
{
// go system
@@ -144,7 +145,7 @@ public abstract class TestWithUserUtils
}
- public static void deleteUser(String user_name, String pwd, NodeRef ref, NodeService service, AuthenticationService service2)
+ public static void deleteUser(String user_name, String pwd, NodeRef ref, NodeService service, MutableAuthenticationService service2)
{
service2.deleteAuthentication(user_name);
}
diff --git a/source/java/org/alfresco/util/ValueDerivingMapFactory.java b/source/java/org/alfresco/util/ValueDerivingMapFactory.java
new file mode 100644
index 0000000000..6f770dfac1
--- /dev/null
+++ b/source/java/org/alfresco/util/ValueDerivingMapFactory.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2005-2009 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program 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 General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have received a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.util;
+
+import java.util.AbstractMap;
+import java.util.AbstractSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A factory for maps that dynamically derive their looked up values from a given source object.
+ *
+ * @author dward
+ */
+public class ValueDerivingMapFactory
+{
+
+ /** A map of value derivers that derive the value of each entry from a given source. */
+ private final Map> valueDerivers;
+
+ /**
+ * Instantiates a new value deriving map factory.
+ *
+ * @param valueDerivers
+ * a map of value derivers that derive the value of each entry from a given source
+ */
+ public ValueDerivingMapFactory(Map> valueDerivers)
+ {
+ this.valueDerivers = valueDerivers;
+ }
+
+ /**
+ * Gets a map that derives its values from the given source.
+ *
+ * @param source
+ * the source
+ * @return the map
+ */
+ public Map getMap(final O source)
+ {
+ return new AbstractMap()
+ {
+
+ @Override
+ public V get(Object key)
+ {
+ ValueDeriver valueDeriver = ValueDerivingMapFactory.this.valueDerivers.get(key);
+ return valueDeriver == null ? null : valueDeriver.deriveValue(source);
+ }
+
+ @Override
+ public boolean containsKey(Object key)
+ {
+ return ValueDerivingMapFactory.this.valueDerivers.containsKey(key);
+ }
+
+ @Override
+ public Set keySet()
+ {
+ return ValueDerivingMapFactory.this.valueDerivers.keySet();
+ }
+
+ @Override
+ public int size()
+ {
+ return ValueDerivingMapFactory.this.valueDerivers.size();
+ }
+
+ @Override
+ public Set> entrySet()
+ {
+ final Set>> entries = ValueDerivingMapFactory.this.valueDerivers
+ .entrySet();
+ return new AbstractSet>()
+ {
+
+ @Override
+ public Iterator> iterator()
+ {
+ final Iterator>> i = entries.iterator();
+ return new Iterator>()
+ {
+
+ public boolean hasNext()
+ {
+ return i.hasNext();
+ }
+
+ public Map.Entry next()
+ {
+ final Map.Entry> next = i.next();
+ return new Map.Entry()
+ {
+
+ public K getKey()
+ {
+ return next.getKey();
+ }
+
+ public V getValue()
+ {
+ return get(next.getKey());
+ }
+
+ public V setValue(V value)
+ {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+
+ @Override
+ public int size()
+ {
+ return entries.size();
+ }
+ };
+ }
+ };
+ }
+
+ /**
+ * An interface for objects that derive the value for a specific entry in the map.
+ */
+ public interface ValueDeriver
+ {
+
+ /**
+ * Derives a value from the given source.
+ *
+ * @param source
+ * the source
+ * @return the derived value
+ */
+ public V deriveValue(O source);
+ }
+}
diff --git a/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java b/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java
index af10a05d04..7068f02355 100644
--- a/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java
+++ b/source/java/org/alfresco/wcm/AbstractWCMServiceImplTest.java
@@ -32,7 +32,7 @@ import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
-import org.alfresco.service.cmr.security.AuthenticationService;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.ApplicationContextHelper;
@@ -102,7 +102,7 @@ public class AbstractWCMServiceImplTest extends TestCase
protected SandboxService sbService;
protected AssetService assetService;
- protected AuthenticationService authenticationService;
+ protected MutableAuthenticationService authenticationService;
protected PersonService personService;
protected TransactionService transactionService;
@@ -115,7 +115,7 @@ public class AbstractWCMServiceImplTest extends TestCase
sbService = (SandboxService)ctx.getBean("SandboxService");
assetService = (AssetService)ctx.getBean("AssetService");
- authenticationService = (AuthenticationService)ctx.getBean("AuthenticationService");
+ authenticationService = (MutableAuthenticationService)ctx.getBean("AuthenticationService");
personService = (PersonService)ctx.getBean("PersonService");
transactionService = (TransactionService)ctx.getBean("TransactionService");
diff --git a/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java b/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java
index 979d38d8fb..fe74a5c5c4 100644
--- a/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java
+++ b/source/java/org/alfresco/wcm/webproject/WebProjectServiceImplTest.java
@@ -42,9 +42,9 @@ import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.DuplicateChildNodeNameException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
-import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.AuthorityType;
+import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.wcm.AbstractWCMServiceImplTest;
@@ -95,7 +95,7 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
super.setUp();
// Get the required services
- authenticationService = (AuthenticationService)ctx.getBean("AuthenticationService");
+ authenticationService = (MutableAuthenticationService)ctx.getBean("AuthenticationService");
personService = (PersonService)ctx.getBean("PersonService");
fileFolderService = (FileFolderService)ctx.getBean("FileFolderService");
authorityService = (AuthorityService)ctx.getBean("AuthorityService");