NIHVIVO-2848 The controller side of external-only accounts.

This commit is contained in:
j2blake 2011-07-12 16:25:47 +00:00
parent 4fe086df6d
commit c8ba30dce6
14 changed files with 171 additions and 22 deletions

View file

@ -58,6 +58,9 @@ public class UserAccount {
private Status status = Status.INACTIVE; // Might be null. private Status status = Status.INACTIVE; // Might be null.
private String externalAuthId = ""; // Never null. private String externalAuthId = ""; // Never null.
/** If this is true, the User Interface will not allow setting a password. */
private boolean externalAuthOnly = false;
/** This may be empty, but should never be null. */ /** This may be empty, but should never be null. */
private Set<String> permissionSetUris = Collections.emptySet(); private Set<String> permissionSetUris = Collections.emptySet();
@ -136,6 +139,14 @@ public class UserAccount {
Boolean.FALSE); Boolean.FALSE);
} }
public boolean isExternalAuthOnly() {
return externalAuthOnly;
}
public void setExternalAuthOnly(Boolean externalAuthOnly) {
this.externalAuthOnly = nonNull(externalAuthOnly, Boolean.FALSE);
}
public int getLoginCount() { public int getLoginCount() {
return loginCount; return loginCount;
} }
@ -213,7 +224,9 @@ public class UserAccount {
+ (", oldPassword=" + oldPassword) + (", oldPassword=" + oldPassword)
+ (", passwordLinkExpires=" + passwordLinkExpires) + (", passwordLinkExpires=" + passwordLinkExpires)
+ (", passwordChangeRequired=" + passwordChangeRequired) + (", passwordChangeRequired=" + passwordChangeRequired)
+ (", externalAuthOnly=" + externalAuthOnly)
+ (", loginCount=" + loginCount) + (", status=" + status) + (", loginCount=" + loginCount) + (", status=" + status)
+ (", lastLoginTime=" + lastLoginTime)
+ (", externalAuthId=" + externalAuthId) + (", externalAuthId=" + externalAuthId)
+ (", rootUser=" + rootUser) + (", rootUser=" + rootUser)
+ (", permissionSetUris=" + permissionSetUris) + "]"; + (", permissionSetUris=" + permissionSetUris) + "]";

View file

@ -28,6 +28,7 @@ public class UserAccountsAddPage extends UserAccountsPage {
private static final String PARAMETER_SUBMIT = "submitAdd"; private static final String PARAMETER_SUBMIT = "submitAdd";
private static final String PARAMETER_EMAIL_ADDRESS = "emailAddress"; private static final String PARAMETER_EMAIL_ADDRESS = "emailAddress";
private static final String PARAMETER_EXTERNAL_AUTH_ID = "externalAuthId"; private static final String PARAMETER_EXTERNAL_AUTH_ID = "externalAuthId";
private static final String PARAMETER_EXTERNAL_AUTH_ONLY = "externalAuthOnly";
private static final String PARAMETER_FIRST_NAME = "firstName"; private static final String PARAMETER_FIRST_NAME = "firstName";
private static final String PARAMETER_LAST_NAME = "lastName"; private static final String PARAMETER_LAST_NAME = "lastName";
private static final String PARAMETER_ROLE = "role"; private static final String PARAMETER_ROLE = "role";
@ -51,6 +52,7 @@ public class UserAccountsAddPage extends UserAccountsPage {
private boolean submit; private boolean submit;
private String emailAddress = ""; private String emailAddress = "";
private String externalAuthId = ""; private String externalAuthId = "";
private boolean externalAuthOnly;
private String firstName = ""; private String firstName = "";
private String lastName = ""; private String lastName = "";
private String selectedRoleUri = ""; private String selectedRoleUri = "";
@ -83,6 +85,7 @@ public class UserAccountsAddPage extends UserAccountsPage {
submit = isFlagOnRequest(PARAMETER_SUBMIT); submit = isFlagOnRequest(PARAMETER_SUBMIT);
emailAddress = getStringParameter(PARAMETER_EMAIL_ADDRESS, ""); emailAddress = getStringParameter(PARAMETER_EMAIL_ADDRESS, "");
externalAuthId = getStringParameter(PARAMETER_EXTERNAL_AUTH_ID, ""); externalAuthId = getStringParameter(PARAMETER_EXTERNAL_AUTH_ID, "");
externalAuthOnly = isFlagOnRequest(PARAMETER_EXTERNAL_AUTH_ONLY);
firstName = getStringParameter(PARAMETER_FIRST_NAME, ""); firstName = getStringParameter(PARAMETER_FIRST_NAME, "");
lastName = getStringParameter(PARAMETER_LAST_NAME, ""); lastName = getStringParameter(PARAMETER_LAST_NAME, "");
selectedRoleUri = getStringParameter(PARAMETER_ROLE, ""); selectedRoleUri = getStringParameter(PARAMETER_ROLE, "");
@ -144,6 +147,7 @@ public class UserAccountsAddPage extends UserAccountsPage {
u.setFirstName(firstName); u.setFirstName(firstName);
u.setLastName(lastName); u.setLastName(lastName);
u.setExternalAuthId(externalAuthId); u.setExternalAuthId(externalAuthId);
u.setExternalAuthOnly(externalAuthOnly);
u.setMd5Password(""); u.setMd5Password("");
u.setOldPassword(""); u.setOldPassword("");
u.setPasswordChangeRequired(false); u.setPasswordChangeRequired(false);
@ -195,6 +199,10 @@ public class UserAccountsAddPage extends UserAccountsPage {
body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri); body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri);
body.put("formUrls", buildUrlsMap()); body.put("formUrls", buildUrlsMap());
if (externalAuthOnly) {
body.put(PARAMETER_EXTERNAL_AUTH_ONLY, Boolean.TRUE);
}
if (!associatedProfileUri.isEmpty()) { if (!associatedProfileUri.isEmpty()) {
body.put("associatedProfileInfo", body.put("associatedProfileInfo",
buildProfileInfo(associatedProfileUri)); buildProfileInfo(associatedProfileUri));
@ -221,4 +229,8 @@ public class UserAccountsAddPage extends UserAccountsPage {
return this.strategy.wasPasswordEmailSent(); return this.strategy.wasPasswordEmailSent();
} }
boolean isExternalAuthOnly() {
return externalAuthOnly;
}
} }

View file

@ -57,7 +57,8 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
private static class EmailStrategy extends UserAccountsAddPageStrategy { private static class EmailStrategy extends UserAccountsAddPageStrategy {
public static final String CREATE_PASSWORD_URL = "/accounts/createPassword"; public static final String CREATE_PASSWORD_URL = "/accounts/createPassword";
private static final String EMAIL_TEMPLATE = "userAccounts-acctCreatedEmail.ftl"; private static final String EMAIL_TEMPLATE_WITH_PASSWORD = "userAccounts-acctCreatedEmail.ftl";
private static final String EMAIL_TEMPLATE_NO_PASSWORD = "userAccounts-acctCreatedExternalOnlyEmail.ftl";
private boolean sentEmail; private boolean sentEmail;
@ -78,9 +79,14 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
@Override @Override
protected void setAdditionalProperties(UserAccount u) { protected void setAdditionalProperties(UserAccount u) {
if (page.isExternalAuthOnly()) {
u.setPasswordLinkExpires(0L);
u.setStatus(Status.ACTIVE);
} else {
u.setPasswordLinkExpires(figureExpirationDate().getTime()); u.setPasswordLinkExpires(figureExpirationDate().getTime());
u.setStatus(Status.INACTIVE); u.setStatus(Status.INACTIVE);
} }
}
@Override @Override
protected void addMoreBodyValues(Map<String, Object> body) { protected void addMoreBodyValues(Map<String, Object> body) {
@ -98,7 +104,11 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
.createNewMessage(vreq); .createNewMessage(vreq);
email.addRecipient(TO, page.getAddedAccount().getEmailAddress()); email.addRecipient(TO, page.getAddedAccount().getEmailAddress());
email.setSubject("Your VIVO account has been created."); email.setSubject("Your VIVO account has been created.");
email.setTemplate(EMAIL_TEMPLATE); if (page.isExternalAuthOnly()) {
email.setTemplate(EMAIL_TEMPLATE_NO_PASSWORD);
} else {
email.setTemplate(EMAIL_TEMPLATE_WITH_PASSWORD);
}
email.setBodyMap(body); email.setBodyMap(body);
email.processTemplate(); email.processTemplate();
email.send(); email.send();
@ -156,6 +166,11 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
@Override @Override
protected String additionalValidations() { protected String additionalValidations() {
if (page.isExternalAuthOnly()) {
// No need to check the password info on external-only accounts
return "";
}
if (initialPassword.isEmpty()) { if (initialPassword.isEmpty()) {
return ERROR_NO_PASSWORD; return ERROR_NO_PASSWORD;
} else if (!checkPasswordLength()) { } else if (!checkPasswordLength()) {
@ -182,8 +197,11 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
@Override @Override
protected void setAdditionalProperties(UserAccount u) { protected void setAdditionalProperties(UserAccount u) {
u.setMd5Password(Authenticator.applyMd5Encoding(initialPassword)); if (!page.isExternalAuthOnly()) {
u.setMd5Password(Authenticator
.applyMd5Encoding(initialPassword));
u.setPasswordChangeRequired(true); u.setPasswordChangeRequired(true);
}
u.setStatus(Status.ACTIVE); u.setStatus(Status.ACTIVE);
} }

View file

@ -33,6 +33,7 @@ public class UserAccountsEditPage extends UserAccountsPage {
private static final String PARAMETER_USER_URI = "editAccount"; private static final String PARAMETER_USER_URI = "editAccount";
private static final String PARAMETER_EMAIL_ADDRESS = "emailAddress"; private static final String PARAMETER_EMAIL_ADDRESS = "emailAddress";
private static final String PARAMETER_EXTERNAL_AUTH_ID = "externalAuthId"; private static final String PARAMETER_EXTERNAL_AUTH_ID = "externalAuthId";
private static final String PARAMETER_EXTERNAL_AUTH_ONLY = "externalAuthOnly";
private static final String PARAMETER_FIRST_NAME = "firstName"; private static final String PARAMETER_FIRST_NAME = "firstName";
private static final String PARAMETER_LAST_NAME = "lastName"; private static final String PARAMETER_LAST_NAME = "lastName";
private static final String PARAMETER_ROLE = "role"; private static final String PARAMETER_ROLE = "role";
@ -57,6 +58,7 @@ public class UserAccountsEditPage extends UserAccountsPage {
private String userUri = ""; private String userUri = "";
private String emailAddress = ""; private String emailAddress = "";
private String externalAuthId = ""; private String externalAuthId = "";
private boolean externalAuthOnly;
private String firstName = ""; private String firstName = "";
private String lastName = ""; private String lastName = "";
private String selectedRoleUri = ""; private String selectedRoleUri = "";
@ -93,6 +95,7 @@ public class UserAccountsEditPage extends UserAccountsPage {
userUri = getStringParameter(PARAMETER_USER_URI, ""); userUri = getStringParameter(PARAMETER_USER_URI, "");
emailAddress = getStringParameter(PARAMETER_EMAIL_ADDRESS, ""); emailAddress = getStringParameter(PARAMETER_EMAIL_ADDRESS, "");
externalAuthId = getStringParameter(PARAMETER_EXTERNAL_AUTH_ID, ""); externalAuthId = getStringParameter(PARAMETER_EXTERNAL_AUTH_ID, "");
externalAuthOnly = isFlagOnRequest(PARAMETER_EXTERNAL_AUTH_ONLY);
firstName = getStringParameter(PARAMETER_FIRST_NAME, ""); firstName = getStringParameter(PARAMETER_FIRST_NAME, "");
lastName = getStringParameter(PARAMETER_LAST_NAME, ""); lastName = getStringParameter(PARAMETER_LAST_NAME, "");
selectedRoleUri = getStringParameter(PARAMETER_ROLE, ""); selectedRoleUri = getStringParameter(PARAMETER_ROLE, "");
@ -190,6 +193,10 @@ public class UserAccountsEditPage extends UserAccountsPage {
body.put("selectedRole", selectedRoleUri); body.put("selectedRole", selectedRoleUri);
body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri); body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri);
if (externalAuthOnly) {
body.put(PARAMETER_EXTERNAL_AUTH_ONLY, Boolean.TRUE);
}
if (!associatedProfileUri.isEmpty()) { if (!associatedProfileUri.isEmpty()) {
body.put("associatedProfileInfo", body.put("associatedProfileInfo",
buildProfileInfo(associatedProfileUri)); buildProfileInfo(associatedProfileUri));
@ -202,6 +209,10 @@ public class UserAccountsEditPage extends UserAccountsPage {
body.put("selectedRole", getExistingRoleUri()); body.put("selectedRole", getExistingRoleUri());
body.put(PARAMETER_NEW_PROFILE_CLASS_URI, ""); body.put(PARAMETER_NEW_PROFILE_CLASS_URI, "");
if (userAccount.isExternalAuthOnly()) {
body.put(PARAMETER_EXTERNAL_AUTH_ONLY, Boolean.TRUE);
}
List<Individual> associatedInds = SelfEditingConfiguration.getBean( List<Individual> associatedInds = SelfEditingConfiguration.getBean(
vreq).getAssociatedIndividuals(indDao, userAccount); vreq).getAssociatedIndividuals(indDao, userAccount);
if (!associatedInds.isEmpty()) { if (!associatedInds.isEmpty()) {
@ -252,11 +263,20 @@ public class UserAccountsEditPage extends UserAccountsPage {
userAccount.setLastName(lastName); userAccount.setLastName(lastName);
userAccount.setExternalAuthId(externalAuthId); userAccount.setExternalAuthId(externalAuthId);
if (externalAuthOnly) {
userAccount.setMd5Password("");
userAccount.setOldPassword("");
userAccount.setPasswordChangeRequired(false);
userAccount.setPasswordLinkExpires(0L);
}
if (isRootUser()) { if (isRootUser()) {
userAccount.setPermissionSetUris(Collections.<String> emptySet()); userAccount.setPermissionSetUris(Collections.<String> emptySet());
userAccount.setExternalAuthOnly(false);
} else { } else {
userAccount.setPermissionSetUris(Collections userAccount.setPermissionSetUris(Collections
.singleton(selectedRoleUri)); .singleton(selectedRoleUri));
userAccount.setExternalAuthOnly(externalAuthOnly);
} }
strategy.setAdditionalProperties(userAccount); strategy.setAdditionalProperties(userAccount);
@ -295,4 +315,7 @@ public class UserAccountsEditPage extends UserAccountsPage {
return userAccount; return userAccount;
} }
boolean isExternalAuthOnly() {
return externalAuthOnly;
}
} }

View file

@ -9,7 +9,6 @@ import java.net.URL;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount; import edu.cornell.mannlib.vitro.webapp.beans.UserAccount;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.accounts.UserAccountsPage; import edu.cornell.mannlib.vitro.webapp.controller.accounts.UserAccountsPage;
@ -81,7 +80,7 @@ public abstract class UserAccountsEditPageStrategy extends UserAccountsPage {
@Override @Override
protected void setAdditionalProperties(UserAccount u) { protected void setAdditionalProperties(UserAccount u) {
if (resetPassword) { if (resetPassword && !page.isExternalAuthOnly()) {
u.setPasswordLinkExpires(figureExpirationDate().getTime()); u.setPasswordLinkExpires(figureExpirationDate().getTime());
} }
} }
@ -99,6 +98,9 @@ public abstract class UserAccountsEditPageStrategy extends UserAccountsPage {
if (!resetPassword) { if (!resetPassword) {
return; return;
} }
if (page.isExternalAuthOnly()) {
return;
}
Map<String, Object> body = new HashMap<String, Object>(); Map<String, Object> body = new HashMap<String, Object>();
body.put("userAccount", page.getUpdatedAccount()); body.put("userAccount", page.getUpdatedAccount());
@ -165,6 +167,11 @@ public abstract class UserAccountsEditPageStrategy extends UserAccountsPage {
@Override @Override
protected String additionalValidations() { protected String additionalValidations() {
if (page.isExternalAuthOnly()) {
// No need to check the password info on external-only accounts
return "";
}
if (newPassword.isEmpty() && confirmPassword.isEmpty()) { if (newPassword.isEmpty() && confirmPassword.isEmpty()) {
return ""; return "";
} else if (!checkPasswordLength(newPassword)) { } else if (!checkPasswordLength(newPassword)) {
@ -186,7 +193,7 @@ public abstract class UserAccountsEditPageStrategy extends UserAccountsPage {
@Override @Override
protected void setAdditionalProperties(UserAccount u) { protected void setAdditionalProperties(UserAccount u) {
if (!newPassword.isEmpty()) { if (!page.isExternalAuthOnly() && !newPassword.isEmpty()) {
u.setMd5Password(Authenticator.applyMd5Encoding(newPassword)); u.setMd5Password(Authenticator.applyMd5Encoding(newPassword));
u.setPasswordChangeRequired(true); u.setPasswordChangeRequired(true);
} }

View file

@ -192,6 +192,7 @@ public class UserAccountsFirstTimeExternalPage extends UserAccountsPage {
u.setExternalAuthId(externalAuthId); u.setExternalAuthId(externalAuthId);
u.setPasswordChangeRequired(false); u.setPasswordChangeRequired(false);
u.setPasswordLinkExpires(0); u.setPasswordLinkExpires(0);
u.setExternalAuthOnly(true);
u.setLoginCount(0); u.setLoginCount(0);
u.setStatus(Status.ACTIVE); u.setStatus(Status.ACTIVE);
u.setPermissionSetUris(Collections u.setPermissionSetUris(Collections

View file

@ -134,6 +134,9 @@ public class UserAccountsMyAccountPage extends UserAccountsPage {
} }
body.put("formUrls", buildUrlsMap()); body.put("formUrls", buildUrlsMap());
if (userAccount.isExternalAuthOnly()) {
body.put("externalAuthOnly", Boolean.TRUE);
}
if (!errorCode.isEmpty()) { if (!errorCode.isEmpty()) {
body.put(errorCode, Boolean.TRUE); body.put(errorCode, Boolean.TRUE);
} }
@ -159,4 +162,7 @@ public class UserAccountsMyAccountPage extends UserAccountsPage {
confirmationCode = strategy.getConfirmationCode(); confirmationCode = strategy.getConfirmationCode();
} }
boolean isExternalAuthOnly() {
return (userAccount != null) && userAccount.isExternalAuthOnly();
}
} }

View file

@ -129,6 +129,7 @@ public abstract class UserAccountsMyAccountPageStrategy extends
@Override @Override
public String additionalValidations() { public String additionalValidations() {
if (!page.isExternalAuthOnly()) {
if (newPassword.isEmpty() && confirmPassword.isEmpty()) { if (newPassword.isEmpty() && confirmPassword.isEmpty()) {
return ""; return "";
} else if (!newPassword.equals(confirmPassword)) { } else if (!newPassword.equals(confirmPassword)) {
@ -138,6 +139,9 @@ public abstract class UserAccountsMyAccountPageStrategy extends
} else { } else {
return ""; return "";
} }
} else {
return "";
}
} }
@Override @Override
@ -150,7 +154,7 @@ public abstract class UserAccountsMyAccountPageStrategy extends
@Override @Override
public void setAdditionalProperties(UserAccount userAccount) { public void setAdditionalProperties(UserAccount userAccount) {
if (!newPassword.isEmpty()) { if (!newPassword.isEmpty() && !page.isExternalAuthOnly()) {
userAccount.setMd5Password(Authenticator userAccount.setMd5Password(Authenticator
.applyMd5Encoding(newPassword)); .applyMd5Encoding(newPassword));
userAccount.setPasswordChangeRequired(false); userAccount.setPasswordChangeRequired(false);

View file

@ -81,15 +81,22 @@ public abstract class UserAccountsPasswordBasePage extends UserAccountsPage {
} }
if (userAccount.getPasswordLinkExpires() == 0L) { if (userAccount.getPasswordLinkExpires() == 0L) {
log.warn("Password request for '" + userEmail log.info("Password request for '" + userEmail
+ "' is bogus: password change is not pending."); + "' is bogus: password change is not pending.");
bogusMessage = passwordChangeNotPendingMessage(); bogusMessage = passwordChangeNotPendingMessage();
return; return;
} }
if (userAccount.isExternalAuthOnly()) {
log.info("Password request for '" + userEmail
+ "' is bogus: account is external auth only.");
bogusMessage = passwordChangeNotPendingMessage();
return;
}
Date expirationDate = new Date(userAccount.getPasswordLinkExpires()); Date expirationDate = new Date(userAccount.getPasswordLinkExpires());
if (expirationDate.before(new Date())) { if (expirationDate.before(new Date())) {
log.warn("Password request for '" + userEmail log.info("Password request for '" + userEmail
+ "' is bogus: expiration date has passed."); + "' is bogus: expiration date has passed.");
bogusMessage = BOGUS_STANDARD_MESSAGE; bogusMessage = BOGUS_STANDARD_MESSAGE;
return; return;
@ -146,5 +153,6 @@ public abstract class UserAccountsPasswordBasePage extends UserAccountsPage {
} }
protected abstract String passwordChangeNotPendingMessage(); protected abstract String passwordChangeNotPendingMessage();
protected abstract String templateName(); protected abstract String templateName();
} }

View file

@ -163,6 +163,7 @@ public class VitroVocabulary {
public static final String USERACCOUNT_PASSWORD_LINK_EXPIRES = VITRO_AUTH + "passwordLinkExpires"; 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_PASSWORD_CHANGE_REQUIRED = VITRO_AUTH + "passwordChangeRequired";
public static final String USERACCOUNT_EXTERNAL_AUTH_ID = VITRO_AUTH + "externalAuthId"; public static final String USERACCOUNT_EXTERNAL_AUTH_ID = VITRO_AUTH + "externalAuthId";
public static final String USERACCOUNT_EXTERNAL_AUTH_ONLY = VITRO_AUTH + "externalAuthOnly";
public static final String USERACCOUNT_HAS_PERMISSION_SET = VITRO_AUTH + "hasPermissionSet"; public static final String USERACCOUNT_HAS_PERMISSION_SET = VITRO_AUTH + "hasPermissionSet";
public static final String PERMISSIONSET = VITRO_AUTH + "PermissionSet"; public static final String PERMISSIONSET = VITRO_AUTH + "PermissionSet";

View file

@ -137,6 +137,7 @@ public class JenaBaseDaoCon {
protected DatatypeProperty USERACCOUNT_PASSWORD_LINK_EXPIRES = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_PASSWORD_LINK_EXPIRES); 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_PASSWORD_CHANGE_REQUIRED = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_PASSWORD_CHANGE_REQUIRED);
protected DatatypeProperty USERACCOUNT_EXTERNAL_AUTH_ID = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_EXTERNAL_AUTH_ID); protected DatatypeProperty USERACCOUNT_EXTERNAL_AUTH_ID = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_EXTERNAL_AUTH_ID);
protected DatatypeProperty USERACCOUNT_EXTERNAL_AUTH_ONLY = _constModel.createDatatypeProperty(VitroVocabulary.USERACCOUNT_EXTERNAL_AUTH_ONLY);
protected ObjectProperty USERACCOUNT_HAS_PERMISSION_SET = _constModel.createObjectProperty(VitroVocabulary.USERACCOUNT_HAS_PERMISSION_SET); protected ObjectProperty USERACCOUNT_HAS_PERMISSION_SET = _constModel.createObjectProperty(VitroVocabulary.USERACCOUNT_HAS_PERMISSION_SET);
protected OntClass PERMISSIONSET = _constModel.createClass(VitroVocabulary.PERMISSIONSET); protected OntClass PERMISSIONSET = _constModel.createClass(VitroVocabulary.PERMISSIONSET);

View file

@ -97,8 +97,11 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
USERACCOUNT_PASSWORD_LINK_EXPIRES)); USERACCOUNT_PASSWORD_LINK_EXPIRES));
u.setPasswordChangeRequired(getPropertyBooleanValue(r, u.setPasswordChangeRequired(getPropertyBooleanValue(r,
USERACCOUNT_PASSWORD_CHANGE_REQUIRED)); USERACCOUNT_PASSWORD_CHANGE_REQUIRED));
u.setExternalAuthOnly(getPropertyBooleanValue(r,
USERACCOUNT_EXTERNAL_AUTH_ONLY));
u.setLoginCount(getPropertyIntValue(r, USERACCOUNT_LOGIN_COUNT)); u.setLoginCount(getPropertyIntValue(r, USERACCOUNT_LOGIN_COUNT));
u.setLastLoginTime(getPropertyLongValue(r, USERACCOUNT_LAST_LOGIN_TIME)); u.setLastLoginTime(getPropertyLongValue(r,
USERACCOUNT_LAST_LOGIN_TIME));
u.setStatusFromString(getPropertyStringValue(r, USERACCOUNT_STATUS)); u.setStatusFromString(getPropertyStringValue(r, USERACCOUNT_STATUS));
u.setExternalAuthId(getPropertyStringValue(r, u.setExternalAuthId(getPropertyStringValue(r,
USERACCOUNT_EXTERNAL_AUTH_ID)); USERACCOUNT_EXTERNAL_AUTH_ID));
@ -189,6 +192,8 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
userAccount.getPasswordLinkExpires(), model); userAccount.getPasswordLinkExpires(), model);
addPropertyBooleanValue(res, USERACCOUNT_PASSWORD_CHANGE_REQUIRED, addPropertyBooleanValue(res, USERACCOUNT_PASSWORD_CHANGE_REQUIRED,
userAccount.isPasswordChangeRequired(), model); userAccount.isPasswordChangeRequired(), model);
addPropertyBooleanValue(res, USERACCOUNT_EXTERNAL_AUTH_ONLY,
userAccount.isExternalAuthOnly(), model);
addPropertyIntValue(res, USERACCOUNT_LOGIN_COUNT, addPropertyIntValue(res, USERACCOUNT_LOGIN_COUNT,
userAccount.getLoginCount(), model); userAccount.getLoginCount(), model);
addPropertyLongValue(res, USERACCOUNT_LAST_LOGIN_TIME, addPropertyLongValue(res, USERACCOUNT_LAST_LOGIN_TIME,
@ -248,6 +253,8 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
updatePropertyBooleanValue(res, updatePropertyBooleanValue(res,
USERACCOUNT_PASSWORD_CHANGE_REQUIRED, USERACCOUNT_PASSWORD_CHANGE_REQUIRED,
userAccount.isPasswordChangeRequired(), model, true); userAccount.isPasswordChangeRequired(), model, true);
updatePropertyBooleanValue(res, USERACCOUNT_EXTERNAL_AUTH_ONLY,
userAccount.isExternalAuthOnly(), model, true);
updatePropertyIntValue(res, USERACCOUNT_LOGIN_COUNT, updatePropertyIntValue(res, USERACCOUNT_LOGIN_COUNT,
userAccount.getLoginCount(), model); userAccount.getLoginCount(), model);
updatePropertyLongValue(res, USERACCOUNT_LAST_LOGIN_TIME, updatePropertyLongValue(res, USERACCOUNT_LAST_LOGIN_TIME,

View file

@ -84,6 +84,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
assertEquals("oldPassword", "", u.getOldPassword()); assertEquals("oldPassword", "", u.getOldPassword());
assertEquals("linkExpires", 0L, u.getPasswordLinkExpires()); assertEquals("linkExpires", 0L, u.getPasswordLinkExpires());
assertEquals("changeRequired", false, u.isPasswordChangeRequired()); assertEquals("changeRequired", false, u.isPasswordChangeRequired());
assertEquals("externalOnly", false, u.isExternalAuthOnly());
assertEquals("loginCount", 5, u.getLoginCount()); assertEquals("loginCount", 5, u.getLoginCount());
assertEquals("loginTime", 12345678L, u.getLastLoginTime()); assertEquals("loginTime", 12345678L, u.getLastLoginTime());
assertEquals("status", Status.ACTIVE, u.getStatus()); assertEquals("status", Status.ACTIVE, u.getStatus());
@ -140,6 +141,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
in.setOldPassword("oldHash"); in.setOldPassword("oldHash");
in.setPasswordLinkExpires(999966663333L); in.setPasswordLinkExpires(999966663333L);
in.setPasswordChangeRequired(true); in.setPasswordChangeRequired(true);
in.setExternalAuthOnly(true);
in.setLoginCount(42); in.setLoginCount(42);
in.setLastLoginTime(8877665544332211L); in.setLastLoginTime(8877665544332211L);
in.setStatus(Status.INACTIVE); in.setStatus(Status.INACTIVE);
@ -157,6 +159,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
assertEquals("oldPassword", "oldHash", u.getOldPassword()); assertEquals("oldPassword", "oldHash", u.getOldPassword());
assertEquals("linkExpires", 999966663333L, u.getPasswordLinkExpires()); assertEquals("linkExpires", 999966663333L, u.getPasswordLinkExpires());
assertEquals("changeRequired", true, u.isPasswordChangeRequired()); assertEquals("changeRequired", true, u.isPasswordChangeRequired());
assertEquals("externalOnly", true, u.isExternalAuthOnly());
assertEquals("loginCount", 42, u.getLoginCount()); assertEquals("loginCount", 42, u.getLoginCount());
assertEquals("lastLoginTime", 8877665544332211L, u.getLastLoginTime()); assertEquals("lastLoginTime", 8877665544332211L, u.getLastLoginTime());
assertEquals("status", Status.INACTIVE, u.getStatus()); assertEquals("status", Status.INACTIVE, u.getStatus());
@ -189,6 +192,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
up.setOldPassword("oldHash"); up.setOldPassword("oldHash");
up.setPasswordLinkExpires(1L); up.setPasswordLinkExpires(1L);
up.setPasswordChangeRequired(false); up.setPasswordChangeRequired(false);
up.setExternalAuthOnly(false);
up.setLoginCount(43); up.setLoginCount(43);
up.setLastLoginTime(1020304050607080L); up.setLastLoginTime(1020304050607080L);
up.setStatus(Status.ACTIVE); up.setStatus(Status.ACTIVE);
@ -206,6 +210,7 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
assertEquals("oldPassword", "oldHash", u.getOldPassword()); assertEquals("oldPassword", "oldHash", u.getOldPassword());
assertEquals("changeExpires", 1L, u.getPasswordLinkExpires()); assertEquals("changeExpires", 1L, u.getPasswordLinkExpires());
assertEquals("changeRequired", false, u.isPasswordChangeRequired()); assertEquals("changeRequired", false, u.isPasswordChangeRequired());
assertEquals("externalOnly", false, u.isExternalAuthOnly());
assertEquals("loginCount", 43, u.getLoginCount()); assertEquals("loginCount", 43, u.getLoginCount());
assertEquals("lastLoginTime", 1020304050607080L, u.getLastLoginTime()); assertEquals("lastLoginTime", 1020304050607080L, u.getLastLoginTime());
assertEquals("status", Status.ACTIVE, u.getStatus()); assertEquals("status", Status.ACTIVE, u.getStatus());

View file

@ -0,0 +1,43 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- Confirmation that an account has been created. -->
<#assign subject = "Your ${siteName} account has been created." />
<#assign html>
<html>
<head>
<title>${subject}</title>
</head>
<body>
<p>
${userAccount.firstName} ${userAccount.lastName}
</p>
<p>
<strong>Congratulations!</strong>
</p>
<p>
We have created your new VIVO account associated with ${userAccount.emailAddress}.
</p>
<p>
Thanks!
</p>
</body>
</html>
</#assign>
<#assign text>
${userAccount.firstName} ${userAccount.lastName}
Congratulations!
We have created your new VIVO account associated with
${userAccount.emailAddress}.
Thanks!
</#assign>
<@email subject=subject html=html text=text />