NIHVIVO-1430 When a user logs in, change what is viewed. Consolidate the logic so an external user is more like an internal user.

This commit is contained in:
jeb228 2010-11-29 20:08:34 +00:00
parent 0740e57749
commit 5d4625d421
9 changed files with 225 additions and 183 deletions

View file

@ -71,6 +71,7 @@ public class AuthenticatorStub extends Authenticator {
private final Map<String, User> usersByName = new HashMap<String, User>();
private final Map<String, List<String>> editingPermissions = new HashMap<String, List<String>>();
private final Map<String, String> associatedUris = new HashMap<String, String>();
private final List<String> recordedLogins = new ArrayList<String>();
private final Map<String, String> newPasswords = new HashMap<String, String>();
@ -84,11 +85,15 @@ public class AuthenticatorStub extends Authenticator {
usersByName.put(user.getUsername(), user);
}
public void addEditingPermission(String userUri, String personUri) {
if (!editingPermissions.containsKey(userUri)) {
editingPermissions.put(userUri, new ArrayList<String>());
public void addEditingPermission(String username, String personUri) {
if (!editingPermissions.containsKey(username)) {
editingPermissions.put(username, new ArrayList<String>());
}
editingPermissions.get(userUri).add(personUri);
editingPermissions.get(username).add(personUri);
}
public void setAssociatedUri(String username, String individualUri) {
associatedUris.put(username, individualUri);
}
public List<String> getRecordedLoginUsernames() {
@ -113,6 +118,11 @@ public class AuthenticatorStub extends Authenticator {
return usersByName.get(username);
}
@Override
public String getAssociatedIndividualUri(String username) {
return associatedUris.get(username);
}
@Override
public boolean isCurrentPassword(String username, String clearTextPassword) {
if (!isExistingUser(username)) {
@ -129,10 +139,9 @@ public class AuthenticatorStub extends Authenticator {
}
@Override
public List<String> asWhomMayThisUserEdit(User user) {
String userUri = user.getURI();
if (editingPermissions.containsKey(userUri)) {
return editingPermissions.get(userUri);
public List<String> asWhomMayThisUserEdit(String username) {
if (editingPermissions.containsKey(username)) {
return editingPermissions.get(username);
} else {
return Collections.emptyList();
}

View file

@ -29,6 +29,7 @@ import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
import edu.cornell.mannlib.vitro.webapp.beans.User;
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
import edu.cornell.mannlib.vitro.webapp.controller.authenticate.AuthenticatorStub;
import edu.cornell.mannlib.vitro.webapp.controller.authenticate.LoginRedirector;
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean;
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State;
@ -96,26 +97,26 @@ public class AuthenticateTest extends AbstractTestClass {
}
private User createNewDbaUser() {
User dbaUser = new User();
dbaUser.setUsername(USER_DBA_NAME);
dbaUser.setURI(USER_DBA_URI);
dbaUser.setRoleURI("50");
dbaUser.setMd5password(Authenticate.applyMd5Encoding(USER_DBA_PASSWORD));
dbaUser.setFirstTime(null);
dbaUser.setLoginCount(0);
return dbaUser;
User user = new User();
user.setUsername(USER_DBA_NAME);
user.setURI(USER_DBA_URI);
user.setRoleURI("50");
user.setMd5password(Authenticate.applyMd5Encoding(USER_DBA_PASSWORD));
user.setFirstTime(null);
user.setLoginCount(0);
return user;
}
private User createOldHandUser() {
User ohUser = new User();
ohUser.setUsername(USER_OLDHAND_NAME);
ohUser.setURI(USER_OLDHAND_URI);
ohUser.setRoleURI("1");
ohUser.setMd5password(Authenticate
User user = new User();
user.setUsername(USER_OLDHAND_NAME);
user.setURI(USER_OLDHAND_URI);
user.setRoleURI("1");
user.setMd5password(Authenticate
.applyMd5Encoding(USER_OLDHAND_PASSWORD));
ohUser.setLoginCount(USER_OLDHAND_LOGIN_COUNT);
ohUser.setFirstTime(new Date(0));
return ohUser;
user.setLoginCount(USER_OLDHAND_LOGIN_COUNT);
user.setFirstTime(new Date(0));
return user;
}
// ----------------------------------------------------------------------
@ -201,7 +202,7 @@ public class AuthenticateTest extends AbstractTestClass {
auth.doPost(request, response);
assertNoProcessBean();
assertExpectedRedirect(URL_SITE_ADMIN_PAGE);
assertExpectedRedirect(URL_HOME_PAGE);
assertExpectedLoginSessions(USER_OLDHAND_NAME);
}
@ -291,14 +292,35 @@ public class AuthenticateTest extends AbstractTestClass {
// ----------------------------------------------------------------------
@Test
public void redirectOnSession() {
session.setAttribute("postLoginRequest", URL_SESSION_REDIRECT);
public void redirectReturnToRestrictedPage() {
LoginRedirector.setReturnUrlFromForcedLogin(request,
URL_SESSION_REDIRECT);
loginNotFirstTime();
assertExpectedLiteralRedirect(URL_SESSION_REDIRECT);
}
@Test
public void redirectOnServletContext() {
public void redirectDbaToSiteAdmin() {
authenticator.getUserByUsername(USER_OLDHAND_NAME).setRoleURI("50");
loginNotFirstTime();
assertExpectedRedirect(URL_SITE_ADMIN_PAGE);
}
@Test
public void redirectSelfEditor() {
authenticator.setAssociatedUri(USER_OLDHAND_NAME, "selfEditorURI");
loginNotFirstTime();
assertExpectedRedirect(URL_SELF_EDITOR_PAGE);
}
@Test
public void redirectUnrecognizedUserToHome() {
loginNotFirstTime();
assertExpectedRedirect(URL_HOME_PAGE);
}
@Test
public void redirectUnrecognizedUserToApplicationHome() {
servletContext.setAttribute("postLoginRequest",
URL_CONTEXT_REDIRECT_LOCAL);
loginNotFirstTime();
@ -306,26 +328,13 @@ public class AuthenticateTest extends AbstractTestClass {
}
@Test
public void redirectOnServletContextToExternalUrl() {
public void redirectUnrecognizedUserToApplicationExternalHome() {
servletContext.setAttribute("postLoginRequest",
URL_CONTEXT_REDIRECT_REMOTE);
loginNotFirstTime();
assertExpectedLiteralRedirect(URL_CONTEXT_REDIRECT_REMOTE);
}
@Test
public void redirectSelfEditor() {
authenticator.addEditingPermission(USER_OLDHAND_URI, "selfEditorURI");
loginNotFirstTime();
assertExpectedRedirect(URL_SELF_EDITOR_PAGE);
}
@Test
public void redirectNoneOfTheAbove() {
loginNotFirstTime();
assertExpectedRedirect(URL_SITE_ADMIN_PAGE);
}
// ----------------------------------------------------------------------
// helper methods
// ----------------------------------------------------------------------
@ -384,7 +393,8 @@ public class AuthenticateTest extends AbstractTestClass {
LoginProcessBean bean = LoginProcessBean.getBean(request);
assertEquals("state", state, bean.getState());
assertEquals("info message", infoMessage, bean.getInfoMessageAndClear());
assertEquals("error message", errorMessage, bean.getErrorMessageAndClear());
assertEquals("error message", errorMessage,
bean.getErrorMessageAndClear());
assertEquals("username", username, bean.getUsername());
}
@ -412,7 +422,7 @@ public class AuthenticateTest extends AbstractTestClass {
assertEquals("recorded logins", expected, actualRecorded);
}
/** Boilerplate login process for the rediret tests. */
/** Boilerplate login process for the redirect tests. */
private void loginNotFirstTime() {
setProcessBean(LOGGING_IN);
setLoginNameAndPassword(USER_OLDHAND_NAME, USER_OLDHAND_PASSWORD);