use of cz.metacentrum.perun.core.api.exceptions.PasswordDoesntMatchException in project perun by CESNET.
the class UsersManagerBlImpl method changePasswordRandom.
@Override
public String changePasswordRandom(PerunSession session, User user, String namespace) throws PasswordOperationTimeoutException, LoginNotExistsException, PasswordChangeFailedException, InvalidLoginException, PasswordStrengthException {
// first check if user has login in specified namespace!
String userLogin;
try {
Attribute userLoginAttribute = getPerunBl().getAttributesManagerBl().getAttribute(session, user, AttributesManager.NS_USER_ATTR_DEF + ":login-namespace:" + namespace);
userLogin = (String) userLoginAttribute.getValue();
} catch (WrongAttributeAssignmentException | AttributeNotExistsException e) {
// should not happen since the changePassword method passed
log.error("Unexpected exception when re-seting password to randomly generated for user {} in {}", user, namespace, e);
throw new InternalErrorException(e);
}
if (userLogin == null) {
log.warn("User {} has no login in {} namespace.", user, namespace);
throw new LoginNotExistsException("User has no login in " + namespace + " namespace.");
}
// generate and change password
PasswordManagerModule module = getPasswordManagerModule(session, namespace);
String newRandomPassword = module.generateRandomPassword(session, userLogin);
try {
changePassword(session, user, namespace, null, newRandomPassword, false);
} catch (PasswordDoesntMatchException | PasswordStrengthFailedException e) {
// should not happen when we are not using the old password and have good password generated
log.error("Unexpected exception when re-seting password to randomly generated for login {} in {}", userLogin, namespace, e);
throw new InternalErrorException(e);
}
// create template to return
String template = getPasswordResetTemplate(session, namespace);
return template.replace("{password}", StringEscapeUtils.escapeHtml4(newRandomPassword)).replace("{login}", StringEscapeUtils.escapeHtml4(userLogin));
}
use of cz.metacentrum.perun.core.api.exceptions.PasswordDoesntMatchException in project perun by CESNET.
the class UsersManagerBlImpl method changeNonAuthzPassword.
@Override
public void changeNonAuthzPassword(PerunSession sess, String token, String password, String lang) throws LoginNotExistsException, PasswordChangeFailedException, PasswordOperationTimeoutException, PasswordStrengthFailedException, InvalidLoginException, PasswordStrengthException, PasswordResetLinkExpiredException, PasswordResetLinkNotValidException, UserNotExistsException {
Map<String, Object> request = getUsersManagerImpl().loadPasswordResetRequest(sess, UUID.fromString(token));
User user = perunBl.getUsersManagerBl().getUserById(sess, (Integer) request.get("user_id"));
String namespace = (String) request.get("namespace");
String mail = (String) request.get("mail");
List<Attribute> logins = perunBl.getAttributesManagerBl().getLogins(sess, user);
String login = null;
for (Attribute a : logins) {
if (a.getFriendlyNameParameter().equals(namespace)) {
login = a.valueAsString();
break;
}
}
if (login == null)
throw new InternalErrorException(user.toString() + " doesn't have login in namespace: " + namespace);
// reset password without checking old
try {
changePassword(sess, user, namespace, "", password, false);
} catch (PasswordDoesntMatchException ex) {
// shouldn't happen
throw new InternalErrorException(ex);
}
// was changed - send notification to all member's emails
Set<String> emails = new HashSet<>();
// add mail used for reset request
if (mail != null && !mail.isEmpty())
emails.add(mail);
try {
Attribute a = perunBl.getAttributesManagerBl().getAttribute(sess, user, AttributesManager.NS_USER_ATTR_DEF + ":preferredMail");
if (a != null && a.getValue() != null) {
emails.add((String) a.getValue());
}
} catch (WrongAttributeAssignmentException | AttributeNotExistsException ex) {
throw new InternalErrorException(ex);
}
List<Member> members = getPerunBl().getMembersManagerBl().getMembersByUser(sess, user);
for (Member member : members) {
try {
Attribute a = perunBl.getAttributesManagerBl().getAttribute(sess, member, AttributesManager.NS_MEMBER_ATTR_DEF + ":mail");
if (a != null && a.getValue() != null) {
emails.add((String) a.getValue());
}
} catch (WrongAttributeAssignmentException | AttributeNotExistsException ex) {
throw new InternalErrorException(ex);
}
}
// get template
String subject;
try {
Attribute subjectTemplateAttribute = perunBl.getAttributesManagerBl().getAttribute(sess, lang, AttributesManager.NS_ENTITYLESS_ATTR_DEF + ":nonAuthzPwdResetConfirmMailSubject:" + namespace);
subject = (String) subjectTemplateAttribute.getValue();
if (subject == null) {
subjectTemplateAttribute = perunBl.getAttributesManagerBl().getAttribute(sess, "en", AttributesManager.NS_ENTITYLESS_ATTR_DEF + ":nonAuthzPwdResetConfirmMailSubject:" + namespace);
subject = (String) subjectTemplateAttribute.getValue();
}
} catch (AttributeNotExistsException | WrongAttributeAssignmentException ex) {
throw new InternalErrorException(ex);
}
String message;
try {
Attribute messageTemplateAttribute = perunBl.getAttributesManagerBl().getAttribute(sess, lang, AttributesManager.NS_ENTITYLESS_ATTR_DEF + ":nonAuthzPwdResetConfirmMailTemplate:" + namespace);
message = (String) messageTemplateAttribute.getValue();
if (message == null) {
messageTemplateAttribute = perunBl.getAttributesManagerBl().getAttribute(sess, "en", AttributesManager.NS_ENTITYLESS_ATTR_DEF + ":nonAuthzPwdResetConfirmMailTemplate:" + namespace);
message = (String) messageTemplateAttribute.getValue();
}
} catch (AttributeNotExistsException | WrongAttributeAssignmentException ex) {
throw new InternalErrorException(ex);
}
for (String email : emails) {
Utils.sendPasswordResetConfirmationEmail(user, email, namespace, login, subject, message);
}
}
use of cz.metacentrum.perun.core.api.exceptions.PasswordDoesntMatchException in project perun by CESNET.
the class UsersManagerBlImpl method changePassword.
@Override
public void changePassword(PerunSession sess, User user, String loginNamespace, String oldPassword, String newPassword, boolean checkOldPassword) throws LoginNotExistsException, PasswordDoesntMatchException, PasswordChangeFailedException, PasswordOperationTimeoutException, PasswordStrengthFailedException, InvalidLoginException, PasswordStrengthException {
log.info("Changing password for {} in login-namespace {}.", user, loginNamespace);
// Get User login in loginNamespace
Attribute userLogin;
try {
userLogin = getPerunBl().getAttributesManagerBl().getAttribute(sess, user, AttributesManager.NS_USER_ATTR_DEF + ":login-namespace:" + loginNamespace);
} catch (AttributeNotExistsException e) {
throw new LoginNotExistsException(e);
} catch (WrongAttributeAssignmentException e) {
throw new InternalErrorException(e);
}
PasswordManagerModule module = getPasswordManagerModule(sess, loginNamespace);
// Check password if it was requested
if (checkOldPassword) {
try {
module.checkPassword(sess, userLogin.valueAsString(), oldPassword);
} catch (PasswordDoesntMatchRuntimeException e) {
throw new PasswordDoesntMatchException(e);
} catch (PasswordOperationTimeoutRuntimeException e) {
throw new PasswordOperationTimeoutException(e);
} catch (Exception ex) {
// fallback for exception compatibility
throw new PasswordDoesntMatchException("Old password doesn't match for " + loginNamespace + ":" + userLogin + ".", ex);
}
}
// Change the password
try {
module.changePassword(sess, userLogin.valueAsString(), newPassword);
} catch (PasswordChangeFailedRuntimeException e) {
throw new PasswordChangeFailedException(e);
} catch (PasswordOperationTimeoutRuntimeException e) {
throw new PasswordOperationTimeoutException(e);
} catch (PasswordStrengthFailedRuntimeException e) {
throw new PasswordStrengthFailedException(e);
} catch (InvalidLoginException | PasswordStrengthException e) {
throw e;
} catch (Exception ex) {
// fallback for exception compatibility
throw new PasswordChangeFailedException("Password change failed for " + loginNamespace + ":" + userLogin + ".", ex);
}
// validate and set user ext sources
try {
this.validatePassword(sess, user, loginNamespace);
} catch (PasswordCreationFailedException ex) {
throw new PasswordChangeFailedException(ex);
}
}
Aggregations