diff --git a/account/src/main/java/de/muehlencord/shared/account/business/account/AccountControl.java b/account/src/main/java/de/muehlencord/shared/account/business/account/AccountControl.java index 06389c3..6212f84 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/account/AccountControl.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/account/AccountControl.java @@ -164,7 +164,7 @@ public class AccountControl { account.setPasswordResetOngoing(true); account.setPasswordResetValidTo(validTo); - mailService.sendPasswortResetStartEmail(account, randomString); + mailService.sendPasswortResetStartEmail(account,randomString); em.merge(account); return true; diff --git a/account/src/main/java/de/muehlencord/shared/account/business/mail/MailService.java b/account/src/main/java/de/muehlencord/shared/account/business/mail/MailService.java index db8e589..acec882 100644 --- a/account/src/main/java/de/muehlencord/shared/account/business/mail/MailService.java +++ b/account/src/main/java/de/muehlencord/shared/account/business/mail/MailService.java @@ -1,15 +1,13 @@ package de.muehlencord.shared.account.business.mail; +import de.muehlencord.shared.account.configuration.AccountConfigurationKey; import de.muehlencord.shared.account.entity.AccountEntity; -import java.net.MalformedURLException; -import java.net.URL; import java.util.Date; import java.util.UUID; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.Stateless; -import javax.faces.context.ExternalContext; -import javax.faces.context.FacesContext; +import javax.inject.Inject; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; @@ -21,6 +19,7 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import de.muehlencord.shared.account.configuration.AccountConfigurationValue; /** * @@ -34,6 +33,15 @@ public class MailService { @EJB private MailTemplateService mailTemplateService; + @Inject + @AccountConfigurationValue(key = AccountConfigurationKey.BaseUrl) + private String baseUrl; + + @Inject + @AccountConfigurationValue(key = AccountConfigurationKey.PasswordResetUrl) + private String passwordResetUrl; + + // TODO make this configurable by injection from the application it uses it, fall back to defaul mail setup if not available @Resource(lookup = "java:jboss/mail/ssgMail") private Session mailSession; @@ -87,8 +95,8 @@ public class MailService { } multipart.addBodyPart(htmlBodyPart); message.setContent(multipart); - - return transportMail(message); + + return transportMail(message); } catch (MessagingException | MailTemplateException ex) { throw new MailException("Error while sending email.", ex); } @@ -97,7 +105,8 @@ public class MailService { public String sendPasswortResetStartEmail(AccountEntity account, String token) throws MailException { MailDatamodel model = new MailDatamodel(account); - try { + /* old aproach via FacesContext - add this back as fallback if injection point if not configured + try { // String absoluteWebPath = FacesContext.getCurrentInstance().getExternalContext().getApplicationContextPath(); ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); String resetPage = "/login.xhtml?token=" + token; @@ -113,14 +122,20 @@ public class MailService { } catch (MalformedURLException ex) { throw new MailException("Error while sending email.", ex); } - + String baseUrl = configService.getConfigValue(configKey); + String resetUrlWithToken = baseUrl + "/login.xhtml?token=" + token; + */ + + String resetUrlWithToken = passwordResetUrl + "?token=" + token; + model.addParameter("url", baseUrl); + model.addParameter("resetUrl", resetUrlWithToken); return sendHTMLMail(account.getEmailaddress(), "Reset your password", model, "password_reset_html"); } private String transportMail(Message message) throws MessagingException { - message.setSentDate(new Date()); + message.setSentDate(new Date()); Transport.send(message); - String messageId = message.getHeader("Message-ID")[0]; + String messageId = message.getHeader("Message-ID")[0]; LOGGER.info("Mail sent to {}, messageid = {}", message.getAllRecipients()[0].toString(), messageId); return messageId; diff --git a/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationKey.java b/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationKey.java new file mode 100644 index 0000000..242962b --- /dev/null +++ b/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationKey.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.account.configuration; + +/** + * + * @author Joern Muehlencord + */ +public enum AccountConfigurationKey { + // the base path of the application + BaseUrl, + // the full pass to the reset password page + PasswordResetUrl, + // injection handler + Producer; +} diff --git a/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationValue.java b/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationValue.java new file mode 100644 index 0000000..ca5fac6 --- /dev/null +++ b/account/src/main/java/de/muehlencord/shared/account/configuration/AccountConfigurationValue.java @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package de.muehlencord.shared.account.configuration; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; + +/** + * + * @author Joern Muehlencord + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +public @interface AccountConfigurationValue { + + @Nonbinding + AccountConfigurationKey key(); +} + + + +