mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-QA to HEAD (4.2) (including moving test classes into separate folders)
51903 to 54309 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@54310 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.security.authentication;
|
||||
|
||||
import org.alfresco.util.ApplicationContextHelper;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* Checks that no residual authentications are left over after bootstrap. It is important that
|
||||
* this test run on its own and not part of a suite.
|
||||
*
|
||||
* @author Derek Hulley
|
||||
* @since 3.0.1
|
||||
*/
|
||||
public class AuthenticationBootstrapTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Creates the application context in the context of the test (not statically) and checks
|
||||
* that no residual authentication is left hanging around.
|
||||
*/
|
||||
public void testBootstrap()
|
||||
{
|
||||
// Start the context
|
||||
ApplicationContextHelper.getApplicationContext();
|
||||
|
||||
String user = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||
assertNull(
|
||||
"Found user '" + user + "' still authenticated after bootstrap.\n" +
|
||||
"Use AuthenticationUtil.runAs or AuthenticationUtil.pushAuthentication " +
|
||||
"and AuthenticationUtil.popAuthentication to keep the thread clean of unwanted authentication tokens.",
|
||||
user);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.security.authentication;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
||||
/**
|
||||
* Test Authorization
|
||||
*/
|
||||
public class AuthorizationTest extends TestCase
|
||||
{
|
||||
private static String USER = "user";
|
||||
private static String PASSWORD = "pass";
|
||||
|
||||
public void testInvalidAuthorization()
|
||||
{
|
||||
try
|
||||
{
|
||||
new Authorization(null);
|
||||
fail();
|
||||
}
|
||||
catch(IllegalArgumentException e)
|
||||
{
|
||||
}
|
||||
try
|
||||
{
|
||||
new Authorization("");
|
||||
fail();
|
||||
}
|
||||
catch(IllegalArgumentException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void testAuthorization()
|
||||
{
|
||||
Authorization auth1 = new Authorization(USER, PASSWORD);
|
||||
assertUserPass(USER, PASSWORD, auth1);
|
||||
Authorization auth2 = new Authorization("", PASSWORD);
|
||||
assertTicket("", PASSWORD, auth2);
|
||||
Authorization auth3 = new Authorization(null, PASSWORD);
|
||||
assertTicket(null, PASSWORD, auth3);
|
||||
Authorization auth4 = new Authorization(Authorization.TICKET_USERID, PASSWORD);
|
||||
assertTicket(Authorization.TICKET_USERID, PASSWORD, auth4);
|
||||
Authorization auth5 = new Authorization(Authorization.TICKET_USERID.toLowerCase(), PASSWORD);
|
||||
assertTicket(Authorization.TICKET_USERID.toLowerCase(), PASSWORD, auth5);
|
||||
}
|
||||
|
||||
public void testUserPass()
|
||||
{
|
||||
Authorization auth1 = new Authorization(USER + ":" + PASSWORD);
|
||||
assertUserPass(USER, PASSWORD, auth1);
|
||||
Authorization auth2 = new Authorization(":" + PASSWORD);
|
||||
assertTicket("", PASSWORD, auth2);
|
||||
Authorization auth3 = new Authorization(PASSWORD);
|
||||
assertTicket(null, PASSWORD, auth3);
|
||||
Authorization auth4 = new Authorization(Authorization.TICKET_USERID + ":" + PASSWORD);
|
||||
assertTicket(Authorization.TICKET_USERID, PASSWORD, auth4);
|
||||
Authorization auth5 = new Authorization(Authorization.TICKET_USERID.toLowerCase() + ":" + PASSWORD);
|
||||
assertTicket(Authorization.TICKET_USERID.toLowerCase(), PASSWORD, auth5);
|
||||
}
|
||||
|
||||
private void assertUserPass(String user, String pass, Authorization auth)
|
||||
{
|
||||
assertEquals(user, auth.getUserName());
|
||||
assertEquals(pass, auth.getPassword());
|
||||
assertFalse(auth.isTicket());
|
||||
assertNull(auth.getTicket());
|
||||
}
|
||||
|
||||
private void assertTicket(String user, String pass, Authorization auth)
|
||||
{
|
||||
assertEquals(user, auth.getUserName());
|
||||
assertEquals(pass, auth.getPassword());
|
||||
assertTrue(auth.isTicket());
|
||||
assertEquals(pass, auth.getTicket());
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,701 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.security.authentication;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport.TxnReadState;
|
||||
import org.alfresco.service.cmr.security.AuthenticationService;
|
||||
|
||||
public class ChainingAuthenticationServiceTest extends TestCase
|
||||
{
|
||||
private static final String EMPTY = "Empty";
|
||||
|
||||
private static final String FIVE_AND_MORE = "FiveAndMore";
|
||||
|
||||
private static final String FIVE = "Five";
|
||||
|
||||
private static final String LONELY_DISABLE = "LonelyDisable";
|
||||
|
||||
private static final String LONELY_ENABLED = "LonelyEnabled";
|
||||
|
||||
private static final String ALFRESCO = "Alfresco";
|
||||
|
||||
TestAuthenticationServiceImpl service1;
|
||||
|
||||
TestAuthenticationServiceImpl service2;
|
||||
|
||||
TestAuthenticationServiceImpl service3;
|
||||
|
||||
TestAuthenticationServiceImpl service4;
|
||||
|
||||
TestAuthenticationServiceImpl service5;
|
||||
|
||||
private TestAuthenticationServiceImpl service6;
|
||||
|
||||
public ChainingAuthenticationServiceTest()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
public ChainingAuthenticationServiceTest(String arg0)
|
||||
{
|
||||
super(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception
|
||||
{
|
||||
if (AlfrescoTransactionSupport.getTransactionReadState() != TxnReadState.TXN_NONE)
|
||||
{
|
||||
throw new AlfrescoRuntimeException(
|
||||
"A previous tests did not clean up transaction: " +
|
||||
AlfrescoTransactionSupport.getTransactionId());
|
||||
}
|
||||
|
||||
AuthenticationUtil authUtil = new AuthenticationUtil();
|
||||
authUtil.setDefaultAdminUserName("admin");
|
||||
authUtil.setDefaultGuestUserName("guest");
|
||||
authUtil.afterPropertiesSet();
|
||||
|
||||
service1 = new TestAuthenticationServiceImpl(ALFRESCO, true, true, true, false);
|
||||
service1.createAuthentication("andy", "andy".toCharArray());
|
||||
|
||||
HashMap<String, String> up = new HashMap<String, String>();
|
||||
HashSet<String> disabled = new HashSet<String>();
|
||||
up.put("lone", "lone");
|
||||
service2 = new TestAuthenticationServiceImpl(LONELY_ENABLED, false, false, false, true, up, disabled);
|
||||
|
||||
up.clear();
|
||||
disabled.clear();
|
||||
|
||||
up.put("ranger", "ranger");
|
||||
disabled.add("ranger");
|
||||
|
||||
service3 = new TestAuthenticationServiceImpl(LONELY_DISABLE, false, false, false, false, up, disabled);
|
||||
|
||||
service4 = new TestAuthenticationServiceImpl(EMPTY, true, true, true, false);
|
||||
|
||||
up.clear();
|
||||
disabled.clear();
|
||||
|
||||
up.put("A", "A");
|
||||
up.put("B", "B");
|
||||
up.put("C", "C");
|
||||
up.put("D", "D");
|
||||
up.put("E", "E");
|
||||
service5 = new TestAuthenticationServiceImpl(FIVE, false, false, false, false, up, disabled);
|
||||
|
||||
up.clear();
|
||||
disabled.clear();
|
||||
|
||||
up.put("A", "a");
|
||||
up.put("B", "b");
|
||||
up.put("C", "c");
|
||||
up.put("D", "d");
|
||||
up.put("E", "e");
|
||||
up.put("F", "f");
|
||||
up.put("G", "g");
|
||||
up.put("H", "h");
|
||||
up.put("I", "i");
|
||||
up.put("J", "j");
|
||||
up.put("K", "k");
|
||||
service6 = new TestAuthenticationServiceImpl(FIVE_AND_MORE, false, false, false, false, up, disabled);
|
||||
}
|
||||
|
||||
//
|
||||
// Single service test
|
||||
//
|
||||
|
||||
public void testServiceOne_Auth()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
assertEquals(as.getCurrentUserName(), "andy");
|
||||
}
|
||||
|
||||
public void testServiceOne_AuthFail()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
as.setAuthenticationServices(ases);
|
||||
try
|
||||
{
|
||||
as.authenticate("andy", "woof".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testServiceOne_GuestDenied()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
as.setAuthenticationServices(ases);
|
||||
try
|
||||
{
|
||||
as.authenticateAsGuest();
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void testServiceTwo_GuestAllowed()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.authenticateAsGuest();
|
||||
assertEquals(as.getCurrentUserName(), AuthenticationUtil.getGuestUserName());
|
||||
as.clearCurrentSecurityContext();
|
||||
assertNull(as.getCurrentUserName());
|
||||
}
|
||||
|
||||
public void testServiceOne_CRUD_Fails()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
as.setAuthenticationServices(ases);
|
||||
try
|
||||
{
|
||||
as.authenticate("bob", "bob".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
try
|
||||
{
|
||||
as.createAuthentication("bob", "bob".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testServiceOne_CRUD()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
as.setMutableAuthenticationService(service1);
|
||||
try
|
||||
{
|
||||
as.authenticate("bob", "bob".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
as.createAuthentication("bob", "bob".toCharArray());
|
||||
as.authenticate("bob", "bob".toCharArray());
|
||||
as.updateAuthentication("bob", "bob".toCharArray(), "carol".toCharArray());
|
||||
try
|
||||
{
|
||||
as.authenticate("bob", "bob".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
as.authenticate("bob", "carol".toCharArray());
|
||||
as.deleteAuthentication("bob");
|
||||
try
|
||||
{
|
||||
as.authenticate("bob", "carol".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testServiceOne_Enabled()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
assertTrue(as.getAuthenticationEnabled("andy"));
|
||||
|
||||
as.setAuthenticationEnabled("andy", false);
|
||||
assertFalse(as.getAuthenticationEnabled("andy"));
|
||||
|
||||
as.setAuthenticationEnabled("andy", true);
|
||||
assertTrue(as.getAuthenticationEnabled("andy"));
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
|
||||
as.setAuthenticationEnabled("andy", false);
|
||||
assertFalse(as.getAuthenticationEnabled("andy"));
|
||||
|
||||
try
|
||||
{
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testServiceOneDomains()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
HashSet<String> testDomains = new HashSet<String>();
|
||||
testDomains.add(ALFRESCO);
|
||||
|
||||
assertTrue(as.getDomains().equals(testDomains));
|
||||
assertTrue(as.getDomainsThatAllowUserCreation().equals(testDomains));
|
||||
assertTrue(as.getDomainsThatAllowUserDeletion().equals(testDomains));
|
||||
assertTrue(as.getDomiansThatAllowUserPasswordChanges().equals(testDomains));
|
||||
assertTrue(as.getDomains().equals(service1.getDomains()));
|
||||
assertTrue(as.getDomainsThatAllowUserCreation().equals(service1.getDomainsThatAllowUserCreation()));
|
||||
assertTrue(as.getDomainsThatAllowUserDeletion().equals(service1.getDomainsThatAllowUserDeletion()));
|
||||
assertTrue(as.getDomiansThatAllowUserPasswordChanges()
|
||||
.equals(service1.getDomiansThatAllowUserPasswordChanges()));
|
||||
|
||||
}
|
||||
|
||||
public void testServiceOneTickets()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
as.setMutableAuthenticationService(service1);
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
|
||||
String ticket = as.getCurrentTicket();
|
||||
assertTrue(ticket == as.getCurrentTicket());
|
||||
|
||||
as.validate(ticket);
|
||||
as.invalidateTicket(ticket);
|
||||
try
|
||||
{
|
||||
as.validate(ticket);
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ticket = as.getCurrentTicket();
|
||||
as.validate(ticket);
|
||||
as.invalidateUserSession("andy");
|
||||
try
|
||||
{
|
||||
as.validate(ticket);
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Multi service tests
|
||||
//
|
||||
|
||||
public void testAll_Auth()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
assertEquals(as.getCurrentUserName(), "andy");
|
||||
as.authenticate("lone", "lone".toCharArray());
|
||||
try
|
||||
{
|
||||
as.authenticate("ranger", "ranger".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
as.authenticate("A", "A".toCharArray());
|
||||
as.authenticate("B", "B".toCharArray());
|
||||
as.authenticate("C", "C".toCharArray());
|
||||
as.authenticate("D", "D".toCharArray());
|
||||
as.authenticate("E", "E".toCharArray());
|
||||
as.authenticate("A", "a".toCharArray());
|
||||
as.authenticate("B", "b".toCharArray());
|
||||
as.authenticate("C", "c".toCharArray());
|
||||
as.authenticate("D", "d".toCharArray());
|
||||
as.authenticate("E", "e".toCharArray());
|
||||
as.authenticate("F", "f".toCharArray());
|
||||
as.authenticate("G", "g".toCharArray());
|
||||
as.authenticate("H", "h".toCharArray());
|
||||
as.authenticate("I", "i".toCharArray());
|
||||
as.authenticate("J", "j".toCharArray());
|
||||
as.authenticate("K", "k".toCharArray());
|
||||
}
|
||||
|
||||
public void testAll_AuthOverLapReversed()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service6);
|
||||
ases.add(service5);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
assertEquals(as.getCurrentUserName(), "andy");
|
||||
as.authenticate("lone", "lone".toCharArray());
|
||||
try
|
||||
{
|
||||
as.authenticate("ranger", "ranger".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
as.authenticate("A", "B".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
as.authenticate("A", "A".toCharArray());
|
||||
as.authenticate("B", "B".toCharArray());
|
||||
as.authenticate("C", "C".toCharArray());
|
||||
as.authenticate("D", "D".toCharArray());
|
||||
as.authenticate("E", "E".toCharArray());
|
||||
as.authenticate("A", "a".toCharArray());
|
||||
as.authenticate("B", "b".toCharArray());
|
||||
as.authenticate("C", "c".toCharArray());
|
||||
as.authenticate("D", "d".toCharArray());
|
||||
as.authenticate("E", "e".toCharArray());
|
||||
as.authenticate("F", "f".toCharArray());
|
||||
as.authenticate("G", "g".toCharArray());
|
||||
as.authenticate("H", "h".toCharArray());
|
||||
as.authenticate("I", "i".toCharArray());
|
||||
as.authenticate("J", "j".toCharArray());
|
||||
as.authenticate("K", "k".toCharArray());
|
||||
}
|
||||
|
||||
public void testAll_MutAuth()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
assertEquals(as.getCurrentUserName(), "andy");
|
||||
as.authenticate("lone", "lone".toCharArray());
|
||||
try
|
||||
{
|
||||
as.authenticate("ranger", "ranger".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
as.authenticate("A", "A".toCharArray());
|
||||
as.authenticate("B", "B".toCharArray());
|
||||
as.authenticate("C", "C".toCharArray());
|
||||
as.authenticate("D", "D".toCharArray());
|
||||
as.authenticate("E", "E".toCharArray());
|
||||
as.authenticate("A", "a".toCharArray());
|
||||
as.authenticate("B", "b".toCharArray());
|
||||
as.authenticate("C", "c".toCharArray());
|
||||
as.authenticate("D", "d".toCharArray());
|
||||
as.authenticate("E", "e".toCharArray());
|
||||
as.authenticate("F", "f".toCharArray());
|
||||
as.authenticate("G", "g".toCharArray());
|
||||
as.authenticate("H", "h".toCharArray());
|
||||
as.authenticate("I", "i".toCharArray());
|
||||
as.authenticate("J", "j".toCharArray());
|
||||
as.authenticate("K", "k".toCharArray());
|
||||
|
||||
as.createAuthentication("A", "woof".toCharArray());
|
||||
as.authenticate("A", "woof".toCharArray());
|
||||
as.updateAuthentication("A", "woof".toCharArray(), "bark".toCharArray());
|
||||
as.authenticate("A", "bark".toCharArray());
|
||||
as.setAuthentication("A", "tree".toCharArray());
|
||||
as.authenticate("A", "tree".toCharArray());
|
||||
as.deleteAuthentication("A");
|
||||
as.authenticate("A", "A".toCharArray());
|
||||
as.authenticate("A", "a".toCharArray());
|
||||
try
|
||||
{
|
||||
as.authenticate("A", "woof".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
try
|
||||
{
|
||||
as.authenticate("A", "bark".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
try
|
||||
{
|
||||
as.authenticate("A", "tree".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testAll_AuthEnabled()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
assertTrue(as.getAuthenticationEnabled("andy"));
|
||||
assertTrue(as.getAuthenticationEnabled("lone"));
|
||||
assertFalse(as.getAuthenticationEnabled("ranger"));
|
||||
assertTrue(as.getAuthenticationEnabled("A"));
|
||||
assertTrue(as.getAuthenticationEnabled("B"));
|
||||
assertTrue(as.getAuthenticationEnabled("C"));
|
||||
assertTrue(as.getAuthenticationEnabled("D"));
|
||||
assertTrue(as.getAuthenticationEnabled("E"));
|
||||
assertTrue(as.getAuthenticationEnabled("F"));
|
||||
assertTrue(as.getAuthenticationEnabled("G"));
|
||||
assertTrue(as.getAuthenticationEnabled("H"));
|
||||
assertTrue(as.getAuthenticationEnabled("I"));
|
||||
assertTrue(as.getAuthenticationEnabled("J"));
|
||||
assertTrue(as.getAuthenticationEnabled("K"));
|
||||
|
||||
as.setAuthenticationEnabled("andy", false);
|
||||
assertFalse(as.getAuthenticationEnabled("andy"));
|
||||
as.setAuthenticationEnabled("andy", true);
|
||||
assertTrue(as.getAuthenticationEnabled("andy"));
|
||||
as.setAuthenticationEnabled("andy", false);
|
||||
|
||||
try
|
||||
{
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void testService_GuestDenied()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
try
|
||||
{
|
||||
as.authenticateAsGuest();
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void testService_GuestAllowed()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service1);
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.authenticateAsGuest();
|
||||
assertEquals(as.getCurrentUserName(), AuthenticationUtil.getGuestUserName());
|
||||
as.clearCurrentSecurityContext();
|
||||
assertNull(as.getCurrentUserName());
|
||||
}
|
||||
|
||||
public void testService_NoGuestConfigured() throws Exception
|
||||
{
|
||||
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
as.setAuthenticationServices(ases);
|
||||
|
||||
assertNotNull(AuthenticationUtil.getGuestUserName());
|
||||
as.authenticateAsGuest();
|
||||
assertEquals(as.getCurrentUserName(), AuthenticationUtil.getGuestUserName());
|
||||
as.clearCurrentSecurityContext();
|
||||
assertNull(as.getCurrentUserName());
|
||||
|
||||
AuthenticationUtil authUtil = new AuthenticationUtil();
|
||||
authUtil.setDefaultAdminUserName("admin");
|
||||
authUtil.setDefaultGuestUserName(null);
|
||||
authUtil.afterPropertiesSet();
|
||||
|
||||
try
|
||||
{
|
||||
as.authenticateAsGuest();
|
||||
fail("Guest authentication should not be supported");
|
||||
}
|
||||
catch (AuthenticationException ae)
|
||||
{
|
||||
// expected
|
||||
assertTrue(ae.getMessage().contains(AbstractAuthenticationService.GUEST_AUTHENTICATION_NOT_SUPPORTED));
|
||||
}
|
||||
assertNull(as.getCurrentUserName());
|
||||
}
|
||||
|
||||
public void testService_Domains()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
HashSet<String> testDomains = new HashSet<String>();
|
||||
testDomains.add(ALFRESCO);
|
||||
testDomains.add(LONELY_ENABLED);
|
||||
testDomains.add(LONELY_DISABLE);
|
||||
testDomains.add(EMPTY);
|
||||
testDomains.add(FIVE);
|
||||
testDomains.add(FIVE_AND_MORE);
|
||||
|
||||
HashSet<String> onlyAlfDomain = new HashSet<String>();
|
||||
onlyAlfDomain.add(ALFRESCO);
|
||||
|
||||
assertTrue(as.getDomains().equals(testDomains));
|
||||
assertTrue(as.getDomainsThatAllowUserCreation().equals(onlyAlfDomain));
|
||||
assertTrue(as.getDomainsThatAllowUserDeletion().equals(onlyAlfDomain));
|
||||
assertTrue(as.getDomiansThatAllowUserPasswordChanges().equals(onlyAlfDomain));
|
||||
|
||||
}
|
||||
|
||||
public void testServiceTickets()
|
||||
{
|
||||
ChainingAuthenticationServiceImpl as = new ChainingAuthenticationServiceImpl();
|
||||
ArrayList<AuthenticationService> ases = new ArrayList<AuthenticationService>();
|
||||
ases.add(service2);
|
||||
ases.add(service3);
|
||||
ases.add(service4);
|
||||
ases.add(service5);
|
||||
ases.add(service6);
|
||||
as.setAuthenticationServices(ases);
|
||||
as.setMutableAuthenticationService(service1);
|
||||
|
||||
as.authenticate("andy", "andy".toCharArray());
|
||||
|
||||
String ticket = as.getCurrentTicket();
|
||||
assertTrue(ticket == as.getCurrentTicket());
|
||||
|
||||
as.validate(ticket);
|
||||
as.invalidateTicket(ticket);
|
||||
try
|
||||
{
|
||||
as.validate(ticket);
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ticket = as.getCurrentTicket();
|
||||
as.validate(ticket);
|
||||
as.invalidateUserSession("andy");
|
||||
try
|
||||
{
|
||||
as.validate(ticket);
|
||||
fail();
|
||||
}
|
||||
catch (AuthenticationException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.security.authentication;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class NameBasedUserNameGeneratorTest extends TestCase
|
||||
{
|
||||
public void testGenerate()
|
||||
{
|
||||
NameBasedUserNameGenerator generator = new NameBasedUserNameGenerator();
|
||||
generator.setUserNameLength(10);
|
||||
generator.setNamePattern("%firstName%_%lastName%");
|
||||
|
||||
String firstName = "Buffy";
|
||||
String lastName = "Summers";
|
||||
String emailAddress = "buffy@sunnydale.com";
|
||||
|
||||
// should generate buffy_summers
|
||||
String userName = generator.generateUserName(firstName, lastName, emailAddress, 0);
|
||||
assertEquals("", (firstName + "_" + lastName).toLowerCase(), userName);
|
||||
|
||||
// should generate something different from above since seed > 0
|
||||
userName = generator.generateUserName(firstName, lastName, emailAddress, 1);
|
||||
assertEquals("", (firstName + "_" + lastName).toLowerCase().substring(0,7), userName.substring(0,7));
|
||||
assertTrue("", !(firstName + "_" + lastName).toLowerCase().equals(userName));
|
||||
|
||||
// should generate buffy_summers@sunnydale.com
|
||||
generator.setNamePattern("%emailAddress%");
|
||||
userName = generator.generateUserName(firstName, lastName, emailAddress, 0);
|
||||
assertEquals(emailAddress.toLowerCase(), userName);
|
||||
|
||||
// should generate buffy_s123
|
||||
userName = generator.generateUserName(firstName, lastName, emailAddress, 1);
|
||||
assertTrue("", !(emailAddress).toLowerCase().equals(userName));
|
||||
|
||||
// should generate summers.buffy
|
||||
generator.setNamePattern("%lastName%.%firstName%");
|
||||
userName = generator.generateUserName(firstName, lastName, emailAddress, 0);
|
||||
assertEquals("", (lastName + "." + firstName).toLowerCase(), userName);
|
||||
|
||||
// should generate bsummers
|
||||
generator.setNamePattern("%i%%lastName%");
|
||||
userName = generator.generateUserName(firstName, lastName, emailAddress, 0);
|
||||
assertEquals("", ("bsummers").toLowerCase(), userName);
|
||||
|
||||
}
|
||||
|
||||
public void testGenerateWhitespaceNames() throws Exception
|
||||
{
|
||||
NameBasedUserNameGenerator generator = new NameBasedUserNameGenerator();
|
||||
generator.setUserNameLength(10);
|
||||
generator.setNamePattern("%firstName%_%lastName%");
|
||||
String lastName = "bar";
|
||||
assertEquals("f_oo_bar", generator.generateUserName(" f oo ", lastName, "", 0));
|
||||
assertEquals("f_o_o_bar", generator.generateUserName("f o o", lastName, "", 0));
|
||||
assertEquals("f_o_o_bar", generator.generateUserName("f\to\t o", lastName, "", 0));
|
||||
assertEquals("f_o_o_bar", generator.generateUserName("f\no \no", lastName, "", 0));
|
||||
assertEquals("f_o_o_bar", generator.generateUserName("f\ro\r\no", lastName, "", 0));
|
||||
}
|
||||
|
||||
public void testAccentedCharsInNames() throws Exception
|
||||
{
|
||||
NameBasedUserNameGenerator generator = new NameBasedUserNameGenerator();
|
||||
generator.setUserNameLength(10);
|
||||
generator.setNamePattern("%firstName%_%lastName%");
|
||||
String firstName = "Çüéâäà çêëèï";
|
||||
String lastName = "îìÄÅÉæÆô öòû";
|
||||
|
||||
String username = generator.generateUserName(firstName, lastName, "", 0);
|
||||
assertEquals("cueaaa_ceeei_iiaaeo_oou", username);
|
||||
}
|
||||
}
|
@@ -0,0 +1,490 @@
|
||||
/*
|
||||
* Copyright (C) 2005-2010 Alfresco Software Limited.
|
||||
*
|
||||
* This file is part of Alfresco
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package org.alfresco.repo.security.authentication;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sf.acegisecurity.Authentication;
|
||||
import net.sf.acegisecurity.GrantedAuthority;
|
||||
import net.sf.acegisecurity.GrantedAuthorityImpl;
|
||||
import net.sf.acegisecurity.UserDetails;
|
||||
import net.sf.acegisecurity.context.Context;
|
||||
import net.sf.acegisecurity.context.ContextHolder;
|
||||
import net.sf.acegisecurity.context.security.SecureContext;
|
||||
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.MutableAuthenticationService;
|
||||
import org.alfresco.util.EqualsHelper;
|
||||
import org.alfresco.util.GUID;
|
||||
|
||||
public class TestAuthenticationServiceImpl implements MutableAuthenticationService
|
||||
{
|
||||
private Map<String, String> userNamesAndPasswords = new HashMap<String, String>();
|
||||
|
||||
private Set<String> disabledUsers = new HashSet<String>();
|
||||
|
||||
private Map<String, String> userToTicket = new HashMap<String, String>();
|
||||
|
||||
String domain;
|
||||
|
||||
boolean allowCreate;
|
||||
|
||||
boolean allowDelete;
|
||||
|
||||
boolean allowUpdate;
|
||||
|
||||
boolean allowGuest;
|
||||
|
||||
public TestAuthenticationServiceImpl(String domain, boolean allowCreate, boolean allowDelete, boolean allowUpdate, boolean allowGuest)
|
||||
{
|
||||
super();
|
||||
this.domain = domain;
|
||||
this.allowCreate = allowCreate;
|
||||
this.allowDelete = allowDelete;
|
||||
this.allowUpdate = allowUpdate;
|
||||
this.allowGuest = allowGuest;
|
||||
}
|
||||
|
||||
public TestAuthenticationServiceImpl(String domain, boolean allowCreate, boolean allowDelete, boolean allowUpdate, boolean allowGuest,
|
||||
Map<String, String> users, Set<String> disabled)
|
||||
{
|
||||
this(domain, allowCreate, allowDelete, allowUpdate, allowGuest);
|
||||
if (users != null)
|
||||
{
|
||||
userNamesAndPasswords.putAll(users);
|
||||
}
|
||||
if (disabled != null)
|
||||
{
|
||||
disabledUsers.addAll(disabled);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void createAuthentication(String userName, char[] password) throws AuthenticationException
|
||||
{
|
||||
if (!allowCreate)
|
||||
{
|
||||
throw new AuthenticationException("Create not allowed");
|
||||
}
|
||||
if (userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User exists");
|
||||
}
|
||||
else
|
||||
{
|
||||
userNamesAndPasswords.put(userName, new String(password));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void updateAuthentication(String userName, char[] oldPassword, char[] newPassword)
|
||||
throws AuthenticationException
|
||||
{
|
||||
if (!allowUpdate)
|
||||
{
|
||||
throw new AuthenticationException("Update not allowed");
|
||||
}
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User does not exist");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (userNamesAndPasswords.get(userName).equals(new String(oldPassword)))
|
||||
{
|
||||
userNamesAndPasswords.put(userName, new String(newPassword));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AuthenticationException("Password does not match existing");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setAuthentication(String userName, char[] newPassword) throws AuthenticationException
|
||||
{
|
||||
if (!allowUpdate)
|
||||
{
|
||||
throw new AuthenticationException("Update not allowed");
|
||||
}
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User does not exist");
|
||||
}
|
||||
else
|
||||
{
|
||||
userNamesAndPasswords.put(userName, new String(newPassword));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void deleteAuthentication(String userName) throws AuthenticationException
|
||||
{
|
||||
if (!allowDelete)
|
||||
{
|
||||
throw new AuthenticationException("Delete not allowed");
|
||||
}
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User does not exist");
|
||||
}
|
||||
else
|
||||
{
|
||||
userNamesAndPasswords.remove(userName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setAuthenticationEnabled(String userName, boolean enabled) throws AuthenticationException
|
||||
{
|
||||
if (!allowUpdate)
|
||||
{
|
||||
throw new AuthenticationException("Update not allowed");
|
||||
}
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User does not exist");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (enabled)
|
||||
{
|
||||
disabledUsers.remove(userName);
|
||||
}
|
||||
else
|
||||
{
|
||||
disabledUsers.add(userName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean getAuthenticationEnabled(String userName) throws AuthenticationException
|
||||
{
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return !disabledUsers.contains(userName);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void authenticate(String userName, char[] password) throws AuthenticationException
|
||||
{
|
||||
if (!userNamesAndPasswords.containsKey(userName))
|
||||
{
|
||||
throw new AuthenticationException("User does not exist");
|
||||
}
|
||||
else if (disabledUsers.contains(userName))
|
||||
{
|
||||
throw new AuthenticationException("User disabled0");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (userNamesAndPasswords.get(userName).equals(new String(password)))
|
||||
{
|
||||
setCurrentUser(userName);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AuthenticationException("Unknown user/password");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void authenticateAsGuest() throws AuthenticationException
|
||||
{
|
||||
if (allowGuest)
|
||||
{
|
||||
setCurrentUser(AuthenticationUtil.getGuestUserName());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AuthenticationException("Guest access denied");
|
||||
}
|
||||
}
|
||||
|
||||
public boolean guestUserAuthenticationAllowed()
|
||||
{
|
||||
return allowGuest;
|
||||
}
|
||||
|
||||
public boolean authenticationExists(String userName)
|
||||
{
|
||||
return userNamesAndPasswords.containsKey(userName);
|
||||
}
|
||||
|
||||
public boolean isAuthenticationMutable(String userName)
|
||||
{
|
||||
return authenticationExists(userName);
|
||||
}
|
||||
|
||||
public boolean isAuthenticationCreationAllowed()
|
||||
{
|
||||
return allowCreate;
|
||||
}
|
||||
|
||||
public String getCurrentUserName() throws AuthenticationException
|
||||
{
|
||||
Context context = ContextHolder.getContext();
|
||||
if ((context == null) || !(context instanceof SecureContext))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return getUserName(((SecureContext) context).getAuthentication());
|
||||
}
|
||||
|
||||
private String getUserName(Authentication authentication)
|
||||
{
|
||||
String username = authentication.getPrincipal().toString();
|
||||
|
||||
if (authentication.getPrincipal() instanceof UserDetails)
|
||||
{
|
||||
username = ((UserDetails) authentication.getPrincipal()).getUsername();
|
||||
}
|
||||
|
||||
return username;
|
||||
}
|
||||
|
||||
public void invalidateUserSession(String userName) throws AuthenticationException
|
||||
{
|
||||
userToTicket.remove(userName);
|
||||
}
|
||||
|
||||
public void invalidateTicket(String ticket) throws AuthenticationException
|
||||
{
|
||||
String userToRemove = null;
|
||||
for (String user : userToTicket.keySet())
|
||||
{
|
||||
String currentTicket = userToTicket.get(user);
|
||||
if (EqualsHelper.nullSafeEquals(currentTicket, ticket))
|
||||
{
|
||||
userToRemove = user;
|
||||
}
|
||||
}
|
||||
if (userToRemove != null)
|
||||
{
|
||||
userToTicket.remove(userToRemove);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void validate(String ticket) throws AuthenticationException
|
||||
{
|
||||
String userToSet = null;
|
||||
for (String user : userToTicket.keySet())
|
||||
{
|
||||
String currentTicket = userToTicket.get(user);
|
||||
if (EqualsHelper.nullSafeEquals(currentTicket, ticket))
|
||||
{
|
||||
userToSet = user;
|
||||
}
|
||||
}
|
||||
if (userToSet != null)
|
||||
{
|
||||
setCurrentUser(userToSet);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new AuthenticationException("Invalid ticket");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String getCurrentTicket()
|
||||
{
|
||||
String currentUser = getCurrentUserName();
|
||||
String ticket = userToTicket.get(currentUser);
|
||||
if (ticket == null)
|
||||
{
|
||||
ticket = GUID.generate();
|
||||
userToTicket.put(currentUser, ticket);
|
||||
}
|
||||
return ticket;
|
||||
}
|
||||
|
||||
public String getNewTicket()
|
||||
{
|
||||
String currentUser = getCurrentUserName();
|
||||
String ticket = userToTicket.get(currentUser);
|
||||
if (ticket == null)
|
||||
{
|
||||
ticket = GUID.generate();
|
||||
userToTicket.put(currentUser, ticket);
|
||||
}
|
||||
return ticket;
|
||||
}
|
||||
|
||||
public void clearCurrentSecurityContext()
|
||||
{
|
||||
ContextHolder.setContext(null);
|
||||
}
|
||||
|
||||
public boolean isCurrentUserTheSystemUser()
|
||||
{
|
||||
String userName = getCurrentUserName();
|
||||
if ((userName != null) && userName.equals(SYSTEM_USER_NAME))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public Set<String> getDomains()
|
||||
{
|
||||
return Collections.singleton(domain);
|
||||
}
|
||||
|
||||
public Set<String> getDomainsThatAllowUserCreation()
|
||||
{
|
||||
if (allowCreate)
|
||||
{
|
||||
return Collections.singleton(domain);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Collections.<String> emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
public Set<String> getDomainsThatAllowUserDeletion()
|
||||
{
|
||||
if (allowDelete)
|
||||
{
|
||||
return Collections.singleton(domain);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Collections.<String> emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
public Set<String> getDomiansThatAllowUserPasswordChanges()
|
||||
{
|
||||
if (allowUpdate)
|
||||
{
|
||||
return Collections.singleton(domain);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Collections.<String> emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Explicitly set the current user to be authenticated.
|
||||
*
|
||||
* @param userName
|
||||
* String
|
||||
* @return Authentication
|
||||
*/
|
||||
public Authentication setCurrentUser(String userName) throws AuthenticationException
|
||||
{
|
||||
if (userName == null)
|
||||
{
|
||||
throw new AuthenticationException("Null user name");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
UserDetails ud = null;
|
||||
if (userName.equals(SYSTEM_USER_NAME))
|
||||
{
|
||||
GrantedAuthority[] gas = new GrantedAuthority[1];
|
||||
gas[0] = new GrantedAuthorityImpl("ROLE_SYSTEM");
|
||||
ud = new User(SYSTEM_USER_NAME, "", true, true, true, true, gas);
|
||||
}
|
||||
else if (userName.equalsIgnoreCase(AuthenticationUtil.getGuestUserName()))
|
||||
{
|
||||
GrantedAuthority[] gas = new GrantedAuthority[0];
|
||||
ud = new User(AuthenticationUtil.getGuestUserName().toLowerCase(), "", true, true, true, true, gas);
|
||||
}
|
||||
else
|
||||
{
|
||||
ud = getUserDetails(userName);
|
||||
}
|
||||
|
||||
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(ud, "", ud
|
||||
.getAuthorities());
|
||||
auth.setDetails(ud);
|
||||
auth.setAuthenticated(true);
|
||||
return setCurrentAuthentication(auth);
|
||||
}
|
||||
catch (net.sf.acegisecurity.AuthenticationException ae)
|
||||
{
|
||||
throw new AuthenticationException(ae.getMessage(), ae);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default implementation that makes an ACEGI object on the fly
|
||||
*
|
||||
* @param userName
|
||||
* @return
|
||||
*/
|
||||
protected UserDetails getUserDetails(String userName)
|
||||
{
|
||||
GrantedAuthority[] gas = new GrantedAuthority[1];
|
||||
gas[0] = new GrantedAuthorityImpl("ROLE_AUTHENTICATED");
|
||||
UserDetails ud = new User(userName, "", true, true, true, true, gas);
|
||||
return ud;
|
||||
}
|
||||
|
||||
public Authentication setCurrentAuthentication(Authentication authentication)
|
||||
{
|
||||
Context context = ContextHolder.getContext();
|
||||
SecureContext sc = null;
|
||||
if ((context == null) || !(context instanceof SecureContext))
|
||||
{
|
||||
sc = new SecureContextImpl();
|
||||
ContextHolder.setContext(sc);
|
||||
}
|
||||
else
|
||||
{
|
||||
sc = (SecureContext) context;
|
||||
}
|
||||
authentication.setAuthenticated(true);
|
||||
sc.setAuthentication(authentication);
|
||||
return authentication;
|
||||
}
|
||||
|
||||
public Set<String> getDefaultAdministratorUserNames()
|
||||
{
|
||||
return Collections.singleton(AuthenticationUtil.getAdminUserName());
|
||||
}
|
||||
|
||||
public Set<String> getDefaultGuestUserNames()
|
||||
{
|
||||
return Collections.singleton(AuthenticationUtil.getGuestUserName());
|
||||
}
|
||||
|
||||
private static final String SYSTEM_USER_NAME = "System";
|
||||
|
||||
}
|
Reference in New Issue
Block a user