diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/UserAccount.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/UserAccount.java index 79a7542e7..27de0ffc1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/UserAccount.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/UserAccount.java @@ -11,6 +11,10 @@ import java.util.Set; * Information about the account of a user. URI, email, password, etc. */ public class UserAccount { + + public final static int MIN_PASSWORD_LENGTH = 6; + public final static int MAX_PASSWORD_LENGTH = 12; + public enum Status { ACTIVE, INACTIVE; @@ -30,36 +34,20 @@ public class UserAccount { } - /** Should never be null. */ - private String uri = ""; + private String uri = ""; // Never null. + private String emailAddress = ""; // Never null. + private String firstName = ""; // Never null. + private String lastName = ""; // Never null. - /** Should never be null. */ - private String emailAddress = ""; - - /** Should never be null. */ - private String firstName = ""; - - /** Should never be null. */ - private String lastName = ""; - - - /** Should never be null. */ - private String md5Password = ""; - - /** Should never be null. */ - private String oldPassword = ""; - - /** Should never be negative. */ - private long passwordLinkExpires = 0L; - + private String md5Password = ""; // Never null. + private String oldPassword = ""; // Never null. + private long passwordLinkExpires = 0L; // Never negative. private boolean passwordChangeRequired = false; - /** Should never be negative. */ - private int loginCount = 0; - - /** Might be null. */ - private Status status = Status.INACTIVE; + private int loginCount = 0; // Never negative. + private Status status = Status.INACTIVE; // Might be null. + private String externalAuthId = ""; // Never null. /** This may be empty, but should never be null. */ private Set permissionSetUris = Collections.emptySet(); @@ -128,7 +116,8 @@ public class UserAccount { } public void setPasswordChangeRequired(Boolean passwordChangeRequired) { - this.passwordChangeRequired = nonNull(passwordChangeRequired, Boolean.FALSE); + this.passwordChangeRequired = nonNull(passwordChangeRequired, + Boolean.FALSE); } public int getLoginCount() { @@ -151,6 +140,14 @@ public class UserAccount { this.status = Status.fromString(statusString); } + public String getExternalAuthId() { + return externalAuthId; + } + + public void setExternalAuthId(String externalAuthId) { + this.externalAuthId = nonNull(externalAuthId, ""); + } + public Set getPermissionSetUris() { return new HashSet(permissionSetUris); } @@ -161,19 +158,21 @@ public class UserAccount { } this.permissionSetUris = new HashSet(permissionSetUris); } - + private T nonNull(T value, T defaultValue) { return (value == null) ? defaultValue : value; } @Override public String toString() { - return "UserAccount[uri=" + uri + ", emailAddress=" + emailAddress - + ", firstName=" + firstName + ", lastName=" + lastName - + ", md5password=" + md5Password + ", passwordChangeExpires=" - + passwordLinkExpires + ", loginCount=" + loginCount - + ", status=" + status + ", permissionSetUris=" - + permissionSetUris + "]"; + return "UserAccount[uri=" + uri + (", emailAddress=" + emailAddress) + + (", firstName=" + firstName) + (", lastName=" + lastName) + + (", md5password=" + md5Password) + + (", oldPassword=" + oldPassword) + + (", passwordLinkExpires=" + passwordLinkExpires) + + (", passwordChangeRequired=" + passwordChangeRequired) + + (", loginCount=" + loginCount) + (", status=" + status) + + (", externalAuthId=" + externalAuthId) + + (", permissionSetUris=" + permissionSetUris) + "]"; } - } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/VitroVocabulary.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/VitroVocabulary.java index 53fc1f43b..c35eccd51 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/VitroVocabulary.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/VitroVocabulary.java @@ -193,6 +193,7 @@ public class VitroVocabulary { public static final String USERACCOUNT_STATUS = VITRO_AUTH + "status"; public static final String USERACCOUNT_PASSWORD_LINK_EXPIRES = VITRO_AUTH + "passwordLinkExpires"; public static final String USERACCOUNT_PASSWORD_CHANGE_REQUIRED = VITRO_AUTH + "passwordChangeRequired"; + public static final String USERACCOUNT_EXTERNAL_AUTH_ID = VITRO_AUTH + "externalAuthId"; public static final String USERACCOUNT_HAS_PERMISSION_SET = VITRO_AUTH + "hasPermissionSet"; public static final String PERMISSIONSET = VITRO_AUTH + "PermissionSet"; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDaoCon.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDaoCon.java index dcf86672d..7d82223b3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDaoCon.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/JenaBaseDaoCon.java @@ -167,6 +167,7 @@ public class JenaBaseDaoCon { protected DatatypeProperty USERACCOUNT_STATUS = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_STATUS); protected DatatypeProperty USERACCOUNT_PASSWORD_LINK_EXPIRES = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_PASSWORD_LINK_EXPIRES); protected DatatypeProperty USERACCOUNT_PASSWORD_CHANGE_REQUIRED = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_PASSWORD_CHANGE_REQUIRED); + protected DatatypeProperty USERACCOUNT_EXTERNAL_AUTH_ID = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_EXTERNAL_AUTH_ID); protected ObjectProperty USERACCOUNT_HAS_PERMISSION_SET = _constModel.createObjectProperty(VitroVocabulary.USERACCOUNT_HAS_PERMISSION_SET); protected OntClass PERMISSIONSET = _constModel.createClass(VitroVocabulary.PERMISSIONSET); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJena.java index bc6aa5560..fd28ece40 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJena.java @@ -61,6 +61,8 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao USERACCOUNT_PASSWORD_CHANGE_REQUIRED)); u.setLoginCount(getPropertyIntValue(r, USERACCOUNT_LOGIN_COUNT)); u.setStatusFromString(getPropertyStringValue(r, USERACCOUNT_STATUS)); + u.setExternalAuthId(getPropertyStringValue(r, + USERACCOUNT_EXTERNAL_AUTH_ID)); u.setPermissionSetUris(getPropertyResourceURIValues(r, USERACCOUNT_HAS_PERMISSION_SET)); return u; @@ -105,6 +107,8 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao addPropertyStringValue(res, USERACCOUNT_STATUS, userAccount .getStatus().toString(), model); } + addPropertyStringValue(res, USERACCOUNT_EXTERNAL_AUTH_ID, + userAccount.getExternalAuthId(), model); updatePropertyResourceURIValues(res, USERACCOUNT_HAS_PERMISSION_SET, userAccount.getPermissionSetUris(), model); @@ -158,6 +162,8 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao updatePropertyStringValue(res, USERACCOUNT_STATUS, userAccount .getStatus().toString(), model); } + updatePropertyStringValue(res, USERACCOUNT_EXTERNAL_AUTH_ID, + userAccount.getExternalAuthId(), model); updatePropertyResourceURIValues(res, USERACCOUNT_HAS_PERMISSION_SET, userAccount.getPermissionSetUris(), model); diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJenaTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJenaTest.java index e2214ae64..33399e2d9 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJenaTest.java +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/UserAccountsDaoJenaTest.java @@ -83,6 +83,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { assertEquals("changeRequired", false, u.isPasswordChangeRequired()); assertEquals("loginCount", 5, u.getLoginCount()); assertEquals("status", Status.ACTIVE, u.getStatus()); + assertEquals("externalAuthId", "user1", u.getExternalAuthId()); assertEquals("permissionSetUris", Collections.singleton(URI_ROLE1), u.getPermissionSetUris()); } @@ -112,6 +113,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { in.setPasswordChangeRequired(true); in.setLoginCount(42); in.setStatus(Status.INACTIVE); + in.setExternalAuthId("newUser"); in.setPermissionSetUris(buildSet(URI_ROLE1, URI_ROLE2)); String newUri = dao.insertUserAccount(in); @@ -127,6 +129,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { assertEquals("changeRequired", true, u.isPasswordChangeRequired()); assertEquals("loginCount", 42, u.getLoginCount()); assertEquals("status", Status.INACTIVE, u.getStatus()); + assertEquals("externalAuthId", "newUser", u.getExternalAuthId()); assertEquals("permissionSetUris", buildSet(URI_ROLE1, URI_ROLE2), u.getPermissionSetUris()); } @@ -157,6 +160,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { up.setPasswordChangeRequired(false); up.setLoginCount(43); up.setStatus(Status.ACTIVE); + up.setExternalAuthId("updatedUser1"); up.setPermissionSetUris(buildSet(URI_ROLE1, URI_ROLE3)); dao.updateUserAccount(up); @@ -172,6 +176,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { assertEquals("changeRequired", false, u.isPasswordChangeRequired()); assertEquals("loginCount", 43, u.getLoginCount()); assertEquals("status", Status.ACTIVE, u.getStatus()); + assertEquals("externalAuthId", "updatedUser1", u.getExternalAuthId()); assertEquals("permissionSetUris", buildSet(URI_ROLE1, URI_ROLE3), u.getPermissionSetUris()); } @@ -257,6 +262,10 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass { assertCorrectPermissionSets(expected, dao.getAllPermissionSets()); } + // ---------------------------------------------------------------------- + // helper methods + // ---------------------------------------------------------------------- + private void assertCorrectPermissionSets(Set expected, Collection actual) { Set> expectedMaps = new HashSet>(); diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/resources/UserAccountsDaoJenaTest.n3 b/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/resources/UserAccountsDaoJenaTest.n3 index 23ccced76..56d26e55c 100644 --- a/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/resources/UserAccountsDaoJenaTest.n3 +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/dao/jena/resources/UserAccountsDaoJenaTest.n3 @@ -17,6 +17,7 @@ mydomain:user01 auth:passwordChangeExpires 0 ; auth:loginCount 5 ; auth:status "ACTIVE" ; + auth:externalAuthId "user1"; auth:hasPermissionSet mydomain:role1 ; .