Merged V3.1 to HEAD

13424: ETHREEOH-1242: Sample LDAP authentication config breaks site invites in Share
   13427: Fixes for ETHREEOH-1157: Propagate exceptions using ReportedException
   13428: Fix ETHREEOH-1493: Upgrade from 2.1-A to 3.1 uses incorrect patch id and fixes_to_schema
   13429: Specific fix for ETHREEOH-1157: duplicate/triplicate users not properly prohibited
   13436: Merged V2.2 to V3.1
      13435: Merged V2.1 to V2.2  
         12307: Merged DEV/V2.1SP7 to 2.1 
            11927: ETWOONE-396 
            12112: ETWOONE-396
   13437: Fixed ETHREEOH-1498: Mismatched closing XML tag in ehcache-custom.xml.sample.cluster
   13439: Fix for ETHREEOH-1157: JSF Dialogs Absorbing Exceptions
   13456: Fixed ETHREEOH-1472: Changes to systemBootstrap cause bootstrapping ACP's not to work
   13469: Upgrade patch to update internal version2Store counter (follow-on fix for ETHREEOH-1540)
   13491: Chaining example for DOC-84
   13492: Fixed paths in zip file
   13494: Fixed GenericBootstrapPatch when overriding bootstrap views
   13495: Added @version javadoc
   13496: Minor logging updates
   13497: Fixed ETHREEOH-1431: Authentication case sensitivity switch doesn't work
   13500: Temporary fix for Sharepoint issue raised last week
   13502: ETHREEOH-1575: It's impossible to create Change Request task
   13511: Fix for ETHREEOH-1549: Impossible to create HTML web content
   13529: Fix for ETHREEOH-1595
   13531: Fix for ETHREEOH-1607: Error on chaining example xml - malformed comment
   13537: Build fix ... exclude the system user from auto creation
   13538: Build Fix - further contraints to aviod auto-creation of guest
   ___________________________________________________________________
   Modified: svn:mergeinfo
      Merged /alfresco/BRANCHES/V2.1:r12307
      Merged /alfresco/BRANCHES/V2.2:r13435
      Merged /alfresco/BRANCHES/V3.1:r
                   13424,13427-13429,13436-13437,13439,13442-13450,13452,13454-13456,
                   13469-13473,13475-13476,13479-13480,13491-13500,13502,13511,13529-13538


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13619 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2009-03-13 01:52:39 +00:00
parent fec1149d8c
commit 65b8cd4a8b
27 changed files with 1829 additions and 1548 deletions

View File

@@ -40,6 +40,7 @@ import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.transaction.TransactionService;
@@ -56,7 +57,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
* The abstract class keeps track of support for guest login
*/
private Boolean allowGuestLogin = null;
private TenantService tenantService;
private PersonService personService;
@@ -65,6 +66,8 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
private TransactionService transactionService;
private boolean autoCreatePeopleOnLogin = true;
public AbstractAuthenticationComponent()
{
super();
@@ -79,10 +82,10 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
{
this.allowGuestLogin = allowGuestLogin;
}
public void setTenantService(TenantService tenantService)
{
this.tenantService = tenantService;
this.tenantService = tenantService;
}
public void setPersonService(PersonService personService)
@@ -120,6 +123,16 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
return personService;
}
public boolean isAutoCreatePeopleOnLogin()
{
return autoCreatePeopleOnLogin;
}
public void setAutoCreatePeopleOnLogin(boolean autoCreatePeopleOnLogin)
{
this.autoCreatePeopleOnLogin = autoCreatePeopleOnLogin;
}
public void authenticate(String userName, char[] password) throws AuthenticationException
{
// Support guest login from the login screen
@@ -148,7 +161,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
public Authentication setCurrentUser(String userName, UserNameValidationMode validationMode)
{
switch(validationMode)
switch (validationMode)
{
case NONE:
return setCurrentUserImpl(userName);
@@ -157,7 +170,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
return setCurrentUser(userName);
}
}
public Authentication setCurrentUser(final String userName) throws AuthenticationException
{
if (isSystemUserName(userName))
@@ -232,8 +245,8 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
throw new AuthenticationException(ae.getMessage(), ae);
}
finally
{
// Support for logging tenantdomain / username (via log4j NDC)
{
// Support for logging tenantdomain / username (via log4j NDC)
AuthenticationUtil.logNDC(userName);
}
}
@@ -283,8 +296,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
}
/**
* Set the system user as the current user
* note: for MT, will set to default domain only
* Set the system user as the current user note: for MT, will set to default domain only
*
* @return Authentication
*/
@@ -294,8 +306,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
}
/**
* Get the name of the system user
* note: for MT, will get system for default domain only
* Get the name of the system user note: for MT, will get system for default domain only
*
* @return String
*/
@@ -303,20 +314,19 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
{
return AuthenticationUtil.SYSTEM_USER_NAME;
}
/**
* Is this the system user ?
*
*
* @return boolean
*/
*/
public boolean isSystemUserName(String userName)
{
return (getSystemUserName().equals(tenantService.getBaseNameUser(userName)));
return (getSystemUserName().equals(tenantService.getBaseNameUser(userName)));
}
/**
* Get the name of the Guest User
* note: for MT, will get guest for default domain only
* Get the name of the Guest User note: for MT, will get guest for default domain only
*
* @return String
*/
@@ -327,18 +337,17 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
private String getGuestUserName(String tenantDomain)
{
return tenantService.getDomainUser(getGuestUserName(), tenantDomain);
return tenantService.getDomainUser(getGuestUserName(), tenantDomain);
}
/**
* Set the guest user as the current user.
* note: for MT, will set to default domain only
* Set the guest user as the current user. note: for MT, will set to default domain only
*/
public Authentication setGuestUserAsCurrentUser() throws AuthenticationException
{
return setGuestUserAsCurrentUser(TenantService.DEFAULT_DOMAIN);
return setGuestUserAsCurrentUser(TenantService.DEFAULT_DOMAIN);
}
/**
* Set the guest user as the current user.
*/
@@ -359,7 +368,7 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
{
if (allowGuestLogin.booleanValue())
{
return setCurrentUser(getGuestUserName(tenantDomain));
return setCurrentUser(getGuestUserName(tenantDomain));
}
else
{
@@ -368,10 +377,10 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
}
}
private boolean isGuestUserName(String userName)
{
return (PermissionService.GUEST_AUTHORITY.equalsIgnoreCase(tenantService.getBaseNameUser(userName)));
return (PermissionService.GUEST_AUTHORITY.equalsIgnoreCase(tenantService.getBaseNameUser(userName)));
}
protected abstract boolean implementationAllowsGuestLogin();
@@ -447,7 +456,8 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
NodeRef userNode = personService.getPerson(userName);
if (userNode != null)
{
// Get the person name and use that as the current user to line up with permission checks
// Get the person name and use that as the current user to line up with permission
// checks
return (String) nodeService.getProperty(userNode, ContentModel.PROP_USERNAME);
}
else
@@ -458,12 +468,23 @@ public abstract class AbstractAuthenticationComponent implements AuthenticationC
}
else
{
if (autoCreatePeopleOnLogin && (userName != null) && !userName.equals(AuthenticationUtil.getSystemUserName()))
{
if (personService.createMissingPeople())
{
AuthorityType authorityType = AuthorityType.getAuthorityType(userName);
if (authorityType == AuthorityType.USER)
{
personService.getPerson(userName);
}
}
}
// Get user name
return userName;
}
}
}
}, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantService.getUserDomain(userName)));
}, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantService.getUserDomain(userName)));
return setCurrentUserImpl(name);
}
catch (AuthenticationException ae)

View File

@@ -245,7 +245,7 @@ public class AuthenticationTest extends TestCase
userName = pubAuthenticationService.getCurrentUserName();
assertEquals("andy", userName);
// get Person
assertFalse(pubPersonService.personExists(userName));
assertTrue(pubPersonService.personExists(userName));
AuthenticationUtil.runAs(new RunAsWork() {