| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 1 | package de.ids_mannheim.korap.service; |
| 2 | |
| 3 | import java.io.StringWriter; |
| 4 | import java.nio.charset.StandardCharsets; |
| 5 | |
| 6 | import javax.mail.internet.InternetAddress; |
| 7 | import javax.mail.internet.MimeMessage; |
| 8 | |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 9 | import org.apache.logging.log4j.LogManager; |
| 10 | import org.apache.logging.log4j.Logger; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 11 | import org.apache.velocity.VelocityContext; |
| 12 | import org.apache.velocity.app.VelocityEngine; |
| 13 | import org.apache.velocity.context.Context; |
| 14 | import org.springframework.beans.factory.annotation.Autowired; |
| 15 | import org.springframework.mail.javamail.JavaMailSender; |
| 16 | import org.springframework.mail.javamail.MimeMessageHelper; |
| 17 | import org.springframework.mail.javamail.MimeMessagePreparator; |
| 18 | import org.springframework.stereotype.Service; |
| 19 | |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 20 | import de.ids_mannheim.korap.authentication.AuthenticationManager; |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 21 | import de.ids_mannheim.korap.config.FullConfiguration; |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 22 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 23 | import de.ids_mannheim.korap.user.User; |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 24 | import de.ids_mannheim.korap.utils.ParameterChecker; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 25 | |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 26 | /** |
| 27 | * Manages mail related services, such as sending group member |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 28 | * invitations per email. |
| margaretha | 6b3ecdd | 2018-03-01 18:23:56 +0100 | [diff] [blame] | 29 | * |
| 30 | * @author margaretha |
| 31 | * |
| 32 | */ |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 33 | @Service |
| 34 | public class MailService { |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 35 | |
| margaretha | dda4ef7 | 2018-12-06 14:20:51 +0100 | [diff] [blame] | 36 | public static Logger jlog = LogManager.getLogger(MailService.class); |
| 37 | public static boolean DEBUG = false; |
| 38 | |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 39 | @Autowired |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 40 | private AuthenticationManager authenticationManager; |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 41 | @Autowired |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 42 | private JavaMailSender mailSender; |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 43 | @Autowired |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 44 | private VelocityEngine velocityEngine; |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 45 | @Autowired |
| 46 | private FullConfiguration config; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 47 | |
| 48 | public void sendMemberInvitationNotification (String inviteeName, |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 49 | String groupName, String inviter) throws KustvaktException { |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 50 | |
| margaretha | 18533fd | 2018-03-28 16:01:06 +0200 | [diff] [blame] | 51 | ParameterChecker.checkStringValue(inviteeName, "inviteeName"); |
| 52 | ParameterChecker.checkStringValue(groupName, "groupName"); |
| 53 | ParameterChecker.checkStringValue(inviter, "inviter"); |
| margaretha | 49cb688 | 2018-07-04 04:19:54 +0200 | [diff] [blame] | 54 | |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 55 | MimeMessagePreparator preparator = new MimeMessagePreparator() { |
| 56 | |
| 57 | public void prepare (MimeMessage mimeMessage) throws Exception { |
| 58 | |
| margaretha | 3495447 | 2018-10-24 20:05:17 +0200 | [diff] [blame] | 59 | User invitee = authenticationManager.getUser(inviteeName, |
| margaretha | 7d0165c | 2018-02-26 15:31:37 +0100 | [diff] [blame] | 60 | config.getEmailAddressRetrieval()); |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 61 | |
| 62 | MimeMessageHelper message = new MimeMessageHelper(mimeMessage); |
| 63 | message.setTo(new InternetAddress(invitee.getEmail())); |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 64 | message.setFrom(config.getNoReply()); |
| 65 | message.setSubject("Invitation to join " + groupName); |
| 66 | message.setText(prepareGroupInvitationText(inviteeName, |
| 67 | groupName, inviter), true); |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 68 | } |
| 69 | |
| 70 | }; |
| 71 | mailSender.send(preparator); |
| 72 | } |
| 73 | |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 74 | private String prepareGroupInvitationText (String username, |
| 75 | String groupName, String inviter) { |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 76 | Context context = new VelocityContext(); |
| 77 | context.put("username", username); |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 78 | context.put("group", groupName); |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 79 | context.put("inviter", inviter); |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 80 | |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 81 | StringWriter stringWriter = new StringWriter(); |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 82 | |
| 83 | velocityEngine.mergeTemplate( |
| 84 | "templates/" + config.getGroupInvitationTemplate(), |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 85 | StandardCharsets.UTF_8.name(), context, stringWriter); |
| margaretha | a86b141 | 2018-02-21 20:40:35 +0100 | [diff] [blame] | 86 | |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 87 | String message = stringWriter.toString(); |
| margaretha | dda4ef7 | 2018-12-06 14:20:51 +0100 | [diff] [blame] | 88 | if (DEBUG) jlog.debug(message); |
| margaretha | aecee1b | 2018-02-20 14:44:21 +0100 | [diff] [blame] | 89 | return message; |
| margaretha | 58e1863 | 2018-02-15 13:04:42 +0100 | [diff] [blame] | 90 | } |
| 91 | } |