blob: 1aaebc55eabcf318784cbdd05c8f3ae8fdff4d52 [file] [log] [blame]
margaretha58e18632018-02-15 13:04:42 +01001package de.ids_mannheim.korap.service;
2
3import java.io.StringWriter;
4import java.nio.charset.StandardCharsets;
5
6import javax.mail.internet.InternetAddress;
7import javax.mail.internet.MimeMessage;
8
margaretha49cb6882018-07-04 04:19:54 +02009import org.apache.logging.log4j.LogManager;
10import org.apache.logging.log4j.Logger;
margaretha58e18632018-02-15 13:04:42 +010011import org.apache.velocity.VelocityContext;
12import org.apache.velocity.app.VelocityEngine;
13import org.apache.velocity.context.Context;
14import org.springframework.beans.factory.annotation.Autowired;
15import org.springframework.mail.javamail.JavaMailSender;
16import org.springframework.mail.javamail.MimeMessageHelper;
17import org.springframework.mail.javamail.MimeMessagePreparator;
18import org.springframework.stereotype.Service;
19
margaretha34954472018-10-24 20:05:17 +020020import de.ids_mannheim.korap.authentication.AuthenticationManager;
margarethaa86b1412018-02-21 20:40:35 +010021import de.ids_mannheim.korap.config.FullConfiguration;
margaretha18533fd2018-03-28 16:01:06 +020022import de.ids_mannheim.korap.exceptions.KustvaktException;
margaretha58e18632018-02-15 13:04:42 +010023import de.ids_mannheim.korap.user.User;
margaretha18533fd2018-03-28 16:01:06 +020024import de.ids_mannheim.korap.utils.ParameterChecker;
margaretha58e18632018-02-15 13:04:42 +010025
margaretha49cb6882018-07-04 04:19:54 +020026/**
27 * Manages mail related services, such as sending group member
margaretha34954472018-10-24 20:05:17 +020028 * invitations per email.
margaretha6b3ecdd2018-03-01 18:23:56 +010029 *
30 * @author margaretha
31 *
32 */
margaretha58e18632018-02-15 13:04:42 +010033@Service
34public class MailService {
margarethaa86b1412018-02-21 20:40:35 +010035
margarethadda4ef72018-12-06 14:20:51 +010036 public static Logger jlog = LogManager.getLogger(MailService.class);
37 public static boolean DEBUG = false;
38
margaretha58e18632018-02-15 13:04:42 +010039 @Autowired
margaretha34954472018-10-24 20:05:17 +020040 private AuthenticationManager authenticationManager;
margarethaaecee1b2018-02-20 14:44:21 +010041 @Autowired
margaretha58e18632018-02-15 13:04:42 +010042 private JavaMailSender mailSender;
margarethaaecee1b2018-02-20 14:44:21 +010043 @Autowired
margaretha58e18632018-02-15 13:04:42 +010044 private VelocityEngine velocityEngine;
margarethaa86b1412018-02-21 20:40:35 +010045 @Autowired
46 private FullConfiguration config;
margaretha58e18632018-02-15 13:04:42 +010047
48 public void sendMemberInvitationNotification (String inviteeName,
margaretha18533fd2018-03-28 16:01:06 +020049 String groupName, String inviter) throws KustvaktException {
margaretha58e18632018-02-15 13:04:42 +010050
margaretha18533fd2018-03-28 16:01:06 +020051 ParameterChecker.checkStringValue(inviteeName, "inviteeName");
52 ParameterChecker.checkStringValue(groupName, "groupName");
53 ParameterChecker.checkStringValue(inviter, "inviter");
margaretha49cb6882018-07-04 04:19:54 +020054
margaretha58e18632018-02-15 13:04:42 +010055 MimeMessagePreparator preparator = new MimeMessagePreparator() {
56
57 public void prepare (MimeMessage mimeMessage) throws Exception {
58
margaretha34954472018-10-24 20:05:17 +020059 User invitee = authenticationManager.getUser(inviteeName,
margaretha7d0165c2018-02-26 15:31:37 +010060 config.getEmailAddressRetrieval());
margaretha58e18632018-02-15 13:04:42 +010061
62 MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
63 message.setTo(new InternetAddress(invitee.getEmail()));
margarethaa86b1412018-02-21 20:40:35 +010064 message.setFrom(config.getNoReply());
65 message.setSubject("Invitation to join " + groupName);
66 message.setText(prepareGroupInvitationText(inviteeName,
67 groupName, inviter), true);
margaretha58e18632018-02-15 13:04:42 +010068 }
69
70 };
71 mailSender.send(preparator);
72 }
73
margarethaa86b1412018-02-21 20:40:35 +010074 private String prepareGroupInvitationText (String username,
75 String groupName, String inviter) {
margaretha58e18632018-02-15 13:04:42 +010076 Context context = new VelocityContext();
77 context.put("username", username);
margarethaaecee1b2018-02-20 14:44:21 +010078 context.put("group", groupName);
margaretha58e18632018-02-15 13:04:42 +010079 context.put("inviter", inviter);
margarethaa86b1412018-02-21 20:40:35 +010080
margaretha58e18632018-02-15 13:04:42 +010081 StringWriter stringWriter = new StringWriter();
margarethaa86b1412018-02-21 20:40:35 +010082
83 velocityEngine.mergeTemplate(
84 "templates/" + config.getGroupInvitationTemplate(),
margarethaaecee1b2018-02-20 14:44:21 +010085 StandardCharsets.UTF_8.name(), context, stringWriter);
margarethaa86b1412018-02-21 20:40:35 +010086
margarethaaecee1b2018-02-20 14:44:21 +010087 String message = stringWriter.toString();
margarethadda4ef72018-12-06 14:20:51 +010088 if (DEBUG) jlog.debug(message);
margarethaaecee1b2018-02-20 14:44:21 +010089 return message;
margaretha58e18632018-02-15 13:04:42 +010090 }
91}