more on password recovery

This commit is contained in:
Athou
2013-05-21 07:51:37 +02:00
parent 304218265f
commit b02bc67a4c
5 changed files with 29 additions and 12 deletions

View File

@@ -34,12 +34,6 @@ public class MailService implements Serializable {
final String username = settings.getSmtpUserName(); final String username = settings.getSmtpUserName();
final String password = settings.getSmtpPassword(); final String password = settings.getSmtpPassword();
log.info(username);
log.info(password);
log.info("" + settings.isSmtpTls());
log.info(settings.getSmtpHost());
log.info("" + settings.getSmtpPort());
String dest = user.getEmail(); String dest = user.getEmail();
Properties props = new Properties(); Properties props = new Properties();
@@ -59,7 +53,7 @@ public class MailService implements Serializable {
message.setRecipients(Message.RecipientType.TO, message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(dest)); InternetAddress.parse(dest));
message.setSubject("CommaFeed - " + subject); message.setSubject("CommaFeed - " + subject);
message.setText(content); message.setContent(content, "text/html; charset=utf-8");
Transport.send(message); Transport.send(message);

View File

@@ -1,5 +1,6 @@
package com.commafeed.backend.services; package com.commafeed.backend.services;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.spec.KeySpec; import java.security.spec.KeySpec;
@@ -15,7 +16,8 @@ import org.slf4j.LoggerFactory;
import com.commafeed.backend.dao.UserDAO; import com.commafeed.backend.dao.UserDAO;
// http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html // http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html
public class PasswordEncryptionService { @SuppressWarnings("serial")
public class PasswordEncryptionService implements Serializable {
private static final Logger log = LoggerFactory.getLogger(UserDAO.class); private static final Logger log = LoggerFactory.getLogger(UserDAO.class);

View File

@@ -6,10 +6,10 @@
<img src="images/logo_2.png" /> <img src="images/logo_2.png" />
<div wicket:id="feedback"></div> <div wicket:id="feedback"></div>
<form wicket:id="form"> <form wicket:id="form">
Password: New Password:
<input type="password" wicket:id="password" /> <input type="password" wicket:id="password" />
<br /> <br />
Password: Confirm:
<input type="password" wicket:id="confirm" /> <input type="password" wicket:id="confirm" />
<br /> <br />
<input type="submit" class="btn btn-primary" value="Submit" /> <input type="submit" class="btn btn-primary" value="Submit" />

View File

@@ -61,6 +61,8 @@ public class PasswordRecoveryCallbackPage extends BasePage {
passwd, user.getSalt()); passwd, user.getSalt());
user.setPassword(password); user.setPassword(password);
user.setApiKey(userService.generateApiKey(user)); user.setApiKey(userService.generateApiKey(user));
user.setRecoverPasswordToken(null);
user.setRecoverPasswordTokenDate(null);
userDAO.update(user); userDAO.update(user);
info("Password saved."); info("Password saved.");
} else { } else {

View File

@@ -4,6 +4,7 @@ import java.util.Calendar;
import java.util.UUID; import java.util.UUID;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.client.utils.URIBuilder;
import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator; import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.RequiredTextField;
@@ -65,7 +66,25 @@ public class PasswordRecoveryPage extends BasePage {
form.add(new BookmarkablePageLink<Void>("cancel", HomePage.class)); form.add(new BookmarkablePageLink<Void>("cancel", HomePage.class));
} }
private String buildEmailContent(User user) { private String buildEmailContent(User user) throws Exception {
return "cc";
String publicUrl = applicationSettingsService.get().getPublicUrl();
if (publicUrl.endsWith("/")) {
publicUrl = publicUrl.substring(0, publicUrl.length() - 1);
}
publicUrl += "/recover2";
return String
.format("You asked for password recovery, <a href='%s'>follow this link</a> to change your password. Ignore this if you didn't request a password recovery.",
callbackUrl(user, publicUrl));
}
private String callbackUrl(User user, String publicUrl) throws Exception {
return new URIBuilder(publicUrl)
.addParameter(PasswordRecoveryCallbackPage.PARAM_EMAIL,
user.getEmail())
.addParameter(PasswordRecoveryCallbackPage.PARAM_TOKEN,
user.getRecoverPasswordToken()).build().toURL()
.toString();
} }
} }