Skip to content

Commit d69d544

Browse files
authored
Merge pull request #1166 from OpenConext/feature/998-environment-specific-emails
Fixes #998 environment specific emails
2 parents ae89895 + 9eba544 commit d69d544

5 files changed

Lines changed: 101 additions & 18 deletions

File tree

myconext-server/src/main/java/myconext/mail/MailBox.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class MailBox {
4646
private final EmailsSendRepository emailsSendRepository;
4747
private final long emailSpamThresholdSeconds;
4848
private final ObjectMapper objectMapper;
49+
private final String environmentName;
4950

5051
public MailBox(JavaMailSender mailSender,
5152
String emailFromDeprovisioning,
@@ -58,7 +59,8 @@ public MailBox(JavaMailSender mailSender,
5859
ObjectMapper objectMapper,
5960
Resource mailTemplatesDirectory,
6061
EmailsSendRepository emailsSendRepository,
61-
long emailSpamThresholdSeconds) throws IOException {
62+
long emailSpamThresholdSeconds,
63+
String environmentName) throws IOException {
6264
this.mailSender = mailSender;
6365
this.emailFromDeprovisioning = emailFromDeprovisioning;
6466
this.emailFromCode = emailFromCode;
@@ -79,6 +81,7 @@ public MailBox(JavaMailSender mailSender,
7981
this.subjects = objectMapper.readValue(inputStream(mailTemplatesDirectory), new TypeReference<>() {
8082
});
8183
this.objectMapper = objectMapper;
84+
this.environmentName = environmentName;
8285
}
8386

8487
public void sendOneTimeLoginCode(User user, String code) {
@@ -304,7 +307,11 @@ private String mailTemplate(String name, Map<String, Object> context) {
304307
}
305308

306309
private String getTitle(String templateName, User user) {
307-
return this.subjects.get(templateName).get(preferredLanguage(user));
310+
String title = this.subjects.get(templateName).get(preferredLanguage(user));
311+
if (StringUtils.hasText(this.environmentName)) {
312+
return String.format("[%s environment] %s", this.environmentName.toUpperCase(), title);
313+
}
314+
return title;
308315
}
309316

310317
private String preferredLanguage(User user) {

myconext-server/src/main/java/myconext/mail/MailConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,12 @@ public class MailConfiguration {
5353
@Autowired
5454
private EmailsSendRepository emailsSendRepository;
5555

56+
@Value("${gui.disclaimer.content}")
57+
private String environmentName;
58+
5659
@Bean
5760
public MailBox mailSenderProd() throws IOException {
5861
return new MailBox(mailSender, emailFromDeprovisioning, emailFromCode, emailFromAppNudge, emailFromNewDevice, errorEmail, mySURFconextURL, loginSURFconextURL, objectMapper, mailTemplatesDirectory,
59-
emailsSendRepository, emailSpamThresholdSeconds);
62+
emailsSendRepository, emailSpamThresholdSeconds, environmentName);
6063
}
6164
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package myconext.mail;
2+
3+
import jakarta.mail.internet.MimeMessage;
4+
import lombok.SneakyThrows;
5+
import myconext.AbstractMailBoxTest;
6+
import myconext.security.VerificationCodeGenerator;
7+
import org.junit.Test;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.test.context.TestPropertySource;
10+
11+
import static com.icegreen.greenmail.util.GreenMailUtil.getBody;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertTrue;
14+
15+
@TestPropertySource(properties = {
16+
"gui.disclaimer.content=SomeTestEnvironment",
17+
})
18+
public class MailBoxNotProductionEnvironmentTest extends AbstractMailBoxTest {
19+
20+
@Autowired
21+
private MailBox mailBox;
22+
23+
@Test
24+
@SneakyThrows
25+
public void mailBoxTest_emailSubjectUppercaseTestEnvironment() {
26+
String code = VerificationCodeGenerator.generateOneTimeLoginCode();
27+
mailBox.sendOneTimeLoginCode(user("jdoe@example.com", "en"), code);
28+
29+
MimeMessage mimeMessage = mailMessage();
30+
String subject = mimeMessage.getSubject();
31+
assertEquals("[SOMETESTENVIRONMENT environment] eduID login code", subject);
32+
33+
String body = getBody(mimeMessage);
34+
assertTrue(body.contains(code));
35+
}
36+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package myconext.mail;
2+
3+
import jakarta.mail.internet.MimeMessage;
4+
import lombok.SneakyThrows;
5+
import myconext.AbstractMailBoxTest;
6+
import myconext.security.VerificationCodeGenerator;
7+
import org.junit.Test;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.test.context.TestPropertySource;
10+
11+
import static com.icegreen.greenmail.util.GreenMailUtil.getBody;
12+
import static org.junit.Assert.assertEquals;
13+
import static org.junit.Assert.assertTrue;
14+
15+
@TestPropertySource(properties = {
16+
"gui.disclaimer.content=",
17+
})
18+
public class MailBoxProductionEnvironmentTest extends AbstractMailBoxTest {
19+
20+
@Autowired
21+
private MailBox mailBox;
22+
23+
@Test
24+
@SneakyThrows
25+
public void mailBoxTest_emailSubjectProductionEnvironment() {
26+
String code = VerificationCodeGenerator.generateOneTimeLoginCode();
27+
mailBox.sendOneTimeLoginCode(user("jdoe@example.com", "en"), code);
28+
29+
MimeMessage mimeMessage = mailMessage();
30+
String subject = mimeMessage.getSubject();
31+
assertEquals("eduID login code", subject);
32+
33+
String body = getBody(mimeMessage);
34+
assertTrue(body.contains(code));
35+
}
36+
}

myconext-server/src/test/java/myconext/mail/MailBoxTest.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@
3030
})
3131
public class MailBoxTest extends AbstractMailBoxTest {
3232

33+
private static final String ENV_PREFIX = "[LOCAL environment] ";
34+
3335
@Autowired
3436
private MailBox mailBox;
3537

36-
3738
@Autowired
3839
ConfigurableEnvironment env;
3940

@@ -95,7 +96,7 @@ private void doSendOneTimeLoginCode(String expectedSubject, String lang) {
9596
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
9697

9798
String subject = mimeMessage.getSubject();
98-
assertEquals(String.format(expectedSubject, code), subject);
99+
assertEquals(ENV_PREFIX + expectedSubject, subject);
99100

100101
String body = getBody(mimeMessage);
101102
assertTrue(body.contains(code));
@@ -120,7 +121,7 @@ private void doSendOneTimeLoginCodeNewUser(String expectedSubject, String lang)
120121
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
121122

122123
String subject = mimeMessage.getSubject();
123-
assertEquals(expectedSubject, subject);
124+
assertEquals(ENV_PREFIX + expectedSubject, subject);
124125
}
125126

126127
@Test
@@ -140,7 +141,7 @@ private void doSendAccountConfirmation(String expectedSubject, String lang) {
140141
MimeMessage mimeMessage = mailMessage();
141142
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
142143
String subject = mimeMessage.getSubject();
143-
assertEquals(expectedSubject, subject);
144+
assertEquals(ENV_PREFIX + expectedSubject, subject);
144145
}
145146

146147
@Test
@@ -161,7 +162,7 @@ private void doSendInstitutionMailWarning(String expectedSubject, String lang) {
161162
MimeMessage mimeMessage = mailMessage();
162163
assertEquals("app-nudgeTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
163164
String subject = mimeMessage.getSubject();
164-
assertEquals(expectedSubject, subject);
165+
assertEquals(ENV_PREFIX + expectedSubject, subject);
165166
}
166167

167168
@Test
@@ -330,7 +331,7 @@ private void doSendAccountVerificationCreateFromInstitution(String expectedSubje
330331
MimeMessage mimeMessage = mailMessage();
331332
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
332333
String subject = mimeMessage.getSubject();
333-
assertEquals(expectedSubject, subject);
334+
assertEquals(ENV_PREFIX + expectedSubject, subject);
334335
}
335336

336337
@Test
@@ -351,7 +352,7 @@ private void doSendAccountVerificationMobileAPI(String expectedSubject, String l
351352
MimeMessage mimeMessage = mailMessage();
352353
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
353354
String subject = mimeMessage.getSubject();
354-
assertEquals(expectedSubject, subject);
355+
assertEquals(ENV_PREFIX + expectedSubject, subject);
355356
}
356357

357358
@Test
@@ -373,7 +374,7 @@ private void doSendAddPasswordOneTimeCode(String expectedSubject, String lang, S
373374
MimeMessage mimeMessage = mailMessage();
374375
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
375376
String subject = mimeMessage.getSubject();
376-
assertEquals(expectedSubject, subject);
377+
assertEquals(ENV_PREFIX + expectedSubject, subject);
377378
}
378379

379380
@Test
@@ -395,7 +396,7 @@ private void doSendResetPasswordOneTimeCode(String expectedSubject, String lang,
395396
MimeMessage mimeMessage = mailMessage();
396397
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
397398
String subject = mimeMessage.getSubject();
398-
assertEquals(expectedSubject, subject);
399+
assertEquals(ENV_PREFIX + expectedSubject, subject);
399400
}
400401

401402
@Test
@@ -418,7 +419,7 @@ private void doSendChangeEmailOneTimeCode(String expectedSubject, String lang, S
418419
MimeMessage mimeMessage = mailMessage();
419420
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
420421
String subject = mimeMessage.getSubject();
421-
assertEquals(expectedSubject, subject);
422+
assertEquals(ENV_PREFIX + expectedSubject, subject);
422423
}
423424

424425
@Test
@@ -439,7 +440,7 @@ private void doSendServiceDeskControlCode(String expectedSubject, String lang) {
439440
MimeMessage mimeMessage = mailMessage();
440441
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
441442
String subject = mimeMessage.getSubject();
442-
assertEquals(expectedSubject, subject);
443+
assertEquals(ENV_PREFIX + expectedSubject, subject);
443444
}
444445

445446
@Test
@@ -460,7 +461,7 @@ private void doSendUserInactivityMail(String expectedSubject, String lang) {
460461
MimeMessage mimeMessage = mailMessage();
461462
assertEquals("deprovisioningTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
462463
String subject = mimeMessage.getSubject();
463-
assertEquals(expectedSubject, subject);
464+
assertEquals(ENV_PREFIX + expectedSubject, subject);
464465
}
465466

466467
@Test
@@ -480,7 +481,7 @@ private void doSendNudgeAppMail(String expectedSubject, String lang) {
480481
MimeMessage mimeMessage = mailMessage();
481482
assertEquals("app-nudgeTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
482483
String subject = mimeMessage.getSubject();
483-
assertEquals(expectedSubject, subject);
484+
assertEquals(ENV_PREFIX + expectedSubject, subject);
484485
}
485486

486487
@Test
@@ -501,7 +502,7 @@ private void doSendVerificationCode(String expectedSubject, String lang) {
501502
MimeMessage mimeMessage = mailMessage();
502503
assertEquals("noreplyTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
503504
String subject = mimeMessage.getSubject();
504-
assertEquals(expectedSubject, subject);
505+
assertEquals(ENV_PREFIX + expectedSubject, subject);
505506
}
506507

507508
@Test
@@ -521,7 +522,7 @@ private void doSendNewDevice(String expectedSubject, String lang) {
521522
MimeMessage mimeMessage = mailMessage();
522523
assertEquals("new-deviceTest@surfconext.nl", mimeMessage.getFrom()[0].toString());
523524
String subject = mimeMessage.getSubject();
524-
assertEquals(expectedSubject, subject);
525+
assertEquals(ENV_PREFIX + expectedSubject, subject);
525526
}
526527

527528
}

0 commit comments

Comments
 (0)