[SECARSP-111] +Auth API [SECARSP-115 +Get Devices]
[platform/core/security/suspicious-activity-monitor.git] / server / src / main / java / com / samsung / samserver / service / impl / MailService.java
1 /*
2  * In Samsung Ukraine R&D Center (SRK under a contract between)
3  * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
5  */
6 package com.samsung.samserver.service.impl;
7
8 import com.samsung.samserver.domain.User;
9 import io.github.jhipster.config.JHipsterProperties;
10
11 import org.apache.commons.lang3.CharEncoding;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 import org.springframework.context.MessageSource;
15 import org.springframework.mail.javamail.JavaMailSender;
16 import org.springframework.mail.javamail.MimeMessageHelper;
17 import org.springframework.scheduling.annotation.Async;
18 import org.springframework.stereotype.Service;
19 import org.thymeleaf.context.Context;
20 import org.thymeleaf.spring4.SpringTemplateEngine;
21
22 import javax.mail.internet.MimeMessage;
23 import java.util.Locale;
24
25 /**
26  * Service for sending emails.
27  * <p>
28  * We use the @Async annotation to send emails asynchronously.
29  */
30 @Service
31 public class MailService {
32
33     private final Logger log = LoggerFactory.getLogger(MailService.class);
34
35     private static final String USER = "user";
36
37     private static final String BASE_URL = "baseUrl";
38
39     private final JHipsterProperties jHipsterProperties;
40
41     private final JavaMailSender javaMailSender;
42
43     private final MessageSource messageSource;
44
45     private final SpringTemplateEngine templateEngine;
46
47     public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender,
48             MessageSource messageSource, SpringTemplateEngine templateEngine) {
49
50         this.jHipsterProperties = jHipsterProperties;
51         this.javaMailSender = javaMailSender;
52         this.messageSource = messageSource;
53         this.templateEngine = templateEngine;
54     }
55
56     @Async
57     public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
58         log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
59             isMultipart, isHtml, to, subject, content);
60
61         // Prepare message using a Spring helper
62         MimeMessage mimeMessage = javaMailSender.createMimeMessage();
63         try {
64             MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, CharEncoding.UTF_8);
65             message.setTo(to);
66             message.setFrom(jHipsterProperties.getMail().getFrom());
67             message.setSubject(subject);
68             message.setText(content, isHtml);
69             javaMailSender.send(mimeMessage);
70             log.debug("Sent email to User '{}'", to);
71         } catch (Exception e) {
72             if (log.isDebugEnabled()) {
73                 log.warn("Email could not be sent to user '{}'", to, e);
74             } else {
75                 log.warn("Email could not be sent to user '{}': {}", to, e.getMessage());
76             }
77         }
78     }
79
80     @Async
81     public void sendEmailFromTemplate(User user, String templateName, String titleKey) {
82         Locale locale = Locale.forLanguageTag(user.getLangKey());
83         Context context = new Context(locale);
84         context.setVariable(USER, user);
85         context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl());
86         String content = templateEngine.process(templateName, context);
87         String subject = messageSource.getMessage(titleKey, null, locale);
88         sendEmail(user.getEmail(), subject, content, false, true);
89
90     }
91
92     @Async
93     public void sendActivationEmail(User user) {
94         log.debug("Sending activation email to '{}'", user.getEmail());
95         sendEmailFromTemplate(user, "activationEmail", "email.activation.title");
96     }
97
98     @Async
99     public void sendCreationEmail(User user) {
100         log.debug("Sending creation email to '{}'", user.getEmail());
101         sendEmailFromTemplate(user, "creationEmail", "email.activation.title");
102     }
103
104     @Async
105     public void sendPasswordResetMail(User user) {
106         log.debug("Sending password reset email to '{}'", user.getEmail());
107         sendEmailFromTemplate(user, "passwordResetEmail", "email.reset.title");
108     }
109 }