NIHVIVO-2848 The controller side of external-only accounts.
This commit is contained in:
parent
4fe086df6d
commit
c8ba30dce6
14 changed files with 171 additions and 22 deletions
|
@ -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) + "]";
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,8 +79,13 @@ public abstract class UserAccountsAddPageStrategy extends UserAccountsPage {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setAdditionalProperties(UserAccount u) {
|
protected void setAdditionalProperties(UserAccount u) {
|
||||||
u.setPasswordLinkExpires(figureExpirationDate().getTime());
|
if (page.isExternalAuthOnly()) {
|
||||||
u.setStatus(Status.INACTIVE);
|
u.setPasswordLinkExpires(0L);
|
||||||
|
u.setStatus(Status.ACTIVE);
|
||||||
|
} else {
|
||||||
|
u.setPasswordLinkExpires(figureExpirationDate().getTime());
|
||||||
|
u.setStatus(Status.INACTIVE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -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.setPasswordChangeRequired(true);
|
u.setMd5Password(Authenticator
|
||||||
|
.applyMd5Encoding(initialPassword));
|
||||||
|
u.setPasswordChangeRequired(true);
|
||||||
|
}
|
||||||
u.setStatus(Status.ACTIVE);
|
u.setStatus(Status.ACTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,12 +129,16 @@ public abstract class UserAccountsMyAccountPageStrategy extends
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String additionalValidations() {
|
public String additionalValidations() {
|
||||||
if (newPassword.isEmpty() && confirmPassword.isEmpty()) {
|
if (!page.isExternalAuthOnly()) {
|
||||||
return "";
|
if (newPassword.isEmpty() && confirmPassword.isEmpty()) {
|
||||||
} else if (!newPassword.equals(confirmPassword)) {
|
return "";
|
||||||
return ERROR_PASSWORDS_DONT_MATCH;
|
} else if (!newPassword.equals(confirmPassword)) {
|
||||||
} else if (!checkPasswordLength(newPassword)) {
|
return ERROR_PASSWORDS_DONT_MATCH;
|
||||||
return ERROR_WRONG_PASSWORD_LENGTH;
|
} else if (!checkPasswordLength(newPassword)) {
|
||||||
|
return ERROR_WRONG_PASSWORD_LENGTH;
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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 />
|
Loading…
Add table
Reference in a new issue