Implemented sending mail using spring injection and removed jetty jndi.
Change-Id: Ie88772800a380f488aaf958fdd49398d32898aa8
diff --git a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index 39e9961..904e04e 100644
--- a/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/core/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -1,17 +1,12 @@
package de.ids_mannheim.korap.web;
-import javax.naming.InitialContext;
import javax.servlet.ServletContextListener;
import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.webapp.WebAppContext;
-import org.eclipse.jetty.webapp.Configuration.ClassList;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoaderListener;
@@ -67,8 +62,6 @@
return kargs;
}
- protected void setupJndi (Server server, WebAppContext webapp){}
-
protected void start(){
if (kargs.port == -1){
@@ -98,26 +91,9 @@
server.setHandler(contextHandler);
-// ClassList classlist = ClassList.setServerDefault(server);
-// classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
-// "org.eclipse.jetty.plus.webapp.EnvConfiguration",
-// "org.eclipse.jetty.plus.webapp.PlusConfiguration");
-
-// WebAppContext webapp = new WebAppContext();
-// webapp.setDescriptor(KustvaktBaseServer.class.getResource("/WEB-INF/web.xml").toString());
-// webapp.setContextPath("/");
-// webapp.setWar("./kustvakt.war");
-// server.setHandler(webapp);
-// setupJndi(server, webapp);
-// HandlerList handlerList = new HandlerList();
-// handlerList.setHandlers(new Handler[]{webapp,contextHandler});
-// server.setHandler(handlerList);
-
server.setConnectors(new Connector[] { connector });
try {
server.start();
-// InitialContext ic = new InitialContext();
-// Object object = ic.lookup("mail/Session");
server.join();
}
catch (Exception e) {
diff --git a/full/Changes b/full/Changes
index e3dc087..be40c69 100644
--- a/full/Changes
+++ b/full/Changes
@@ -1,5 +1,5 @@
version 0.59.10
-07/02/2018
+20/02/2018
- added sort VC by id (margaretha)
- added test cases regarding VC sharing (margaretha)
- implemented withdraw VC from publication (margaretha)
@@ -15,6 +15,9 @@
- moved .properties files (margaretha)
- merged changelog file to Changes (margaretha)
- updated status codes and error messages to be more detailed (margaretha)
+ - testing mail implementation using embedded jetty jndi (margaretha)
+ - fixed collection rewrite regarding OR operation with other fields (margaretha)
+ - implemented sending mail using spring injection and removed jetty jndi (margaretha)
version 0.59.9
19/01/2018
diff --git a/full/notification.vm b/full/notification.vm
new file mode 100644
index 0000000..02cf5c6
--- /dev/null
+++ b/full/notification.vm
@@ -0,0 +1,13 @@
+<html>
+ <body>
+ <h3>Hi ${username}, you are invited to group {$group} by ${inviter}!</h3>
+ <p>
+ Login to KorAP to accept or reject the invitation.
+ <br />
+ The invitation is valid for 30 minutes.
+ </p>
+ <p>
+ Do not reply! This is an automated generated email.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
index ad6aaab..4d51c4e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
+++ b/full/src/main/java/de/ids_mannheim/korap/config/FullConfiguration.java
@@ -17,10 +17,7 @@
// mail configuration
private boolean isMailEnabled;
private String testEmail;
- private String mailUsername;
- private String mailPassword;
- private String mailSmtp;
- private String mailPort;
+ private String noReply;
private String ldapConfig;
@@ -63,13 +60,10 @@
private void setMailConfiguration (Properties properties) {
setMailEnabled(Boolean.valueOf(properties.getProperty("mail.enabled", "false")));
- setTestEmail(properties.getProperty("mail.receiver"));
if (isMailEnabled){
// other properties must be set in the kustvakt.conf
- setMailUsername(properties.getProperty("mail.username"));
- setMailPassword(properties.getProperty("mail.password"));
- setMailSmtp(properties.getProperty("mail.smtp"));
- setMailPort(properties.getProperty("mail.port"));
+ setTestEmail(properties.getProperty("mail.receiver"));
+ setNoReply(properties.getProperty("mail.sender"));
}
}
@@ -248,38 +242,6 @@
this.testEmail = testEmail;
}
- public String getMailUsername () {
- return mailUsername;
- }
-
- public void setMailUsername (String mailUsername) {
- this.mailUsername = mailUsername;
- }
-
- public String getMailPassword () {
- return mailPassword;
- }
-
- public void setMailPassword (String mailPassword) {
- this.mailPassword = mailPassword;
- }
-
- public String getMailSmtp () {
- return mailSmtp;
- }
-
- public void setMailSmtp (String mailHost) {
- this.mailSmtp = mailHost;
- }
-
- public String getMailPort () {
- return mailPort;
- }
-
- public void setMailPort (String mailPort) {
- this.mailPort = mailPort;
- }
-
public boolean isMailEnabled () {
return isMailEnabled;
}
@@ -288,4 +250,12 @@
this.isMailEnabled = isMailEnabled;
}
+ public String getNoReply () {
+ return noReply;
+ }
+
+ public void setNoReply (String noReply) {
+ this.noReply = noReply;
+ }
+
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java b/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
index 6871205..b938904 100644
--- a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
+++ b/full/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
@@ -5,17 +5,6 @@
import java.net.URL;
import java.util.Properties;
-import javax.naming.NamingException;
-
-import org.eclipse.jetty.jndi.factories.MailSessionReference;
-import org.eclipse.jetty.plus.jndi.Resource;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.ContextHandler;
-import org.eclipse.jetty.server.handler.ResourceHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.webapp.Configuration.ClassList;
-import org.eclipse.jetty.webapp.WebAppContext;
-
import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.web.KustvaktBaseServer;
@@ -37,7 +26,7 @@
File f = new File("kustvakt.conf");
if (!f.exists()){
- URL url = KustvaktServer.class.getClassLoader().getResource("kustvakt.conf");
+ URL url = KustvaktServer.class.getResource("kustvakt.conf");
if (url!=null){
f = new File(url.toURI());
}
@@ -63,32 +52,4 @@
+ "de.ids_mannheim.korap.web.service.full";
server.start();
}
-
- @Override
- protected void setupJndi(Server server, WebAppContext webapp) {
-
-
-// ClassList classlist = ClassList.setServerDefault(server);
-// classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration",
-// "org.eclipse.jetty.plus.webapp.EnvConfiguration",
-// "org.eclipse.jetty.plus.webapp.PlusConfiguration");
-
- MailSessionReference mailref = new MailSessionReference();
- mailref.setUser(fullConfig.getMailUsername());
- mailref.setPassword(fullConfig.getMailPassword());
-
- Properties props = new Properties();
- props.put("mail.smtp.auth", "false");
- props.put("mail.smtp.host",fullConfig.getMailSmtp());
- props.put("mail.from",fullConfig.getMailUsername());
- props.put("mail.debug", "false");
- mailref.setProperties(props);
- try {
- new Resource(webapp, "mail/Session", mailref);
- }
- catch (NamingException e) {
- e.printStackTrace();
- }
- }
-
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
new file mode 100644
index 0000000..28e7660
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailAuthenticator.java
@@ -0,0 +1,20 @@
+package de.ids_mannheim.korap.service;
+
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
+
+public class MailAuthenticator extends Authenticator {
+
+ private PasswordAuthentication passwordAuthentication;
+
+ public MailAuthenticator (String username, String password) {
+ passwordAuthentication = new PasswordAuthentication(username, password);
+
+ }
+
+ @Override
+ protected PasswordAuthentication getPasswordAuthentication () {
+ return passwordAuthentication;
+ }
+
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
index 74164d5..75d5176 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/MailService.java
@@ -9,6 +9,8 @@
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
@@ -20,15 +22,19 @@
@Service
public class MailService {
+
+ private static Logger jlog =
+ LoggerFactory.getLogger(MailService.class);
+
@Autowired
private AuthenticationManagerIface authManager;
-// @Autowired
+ @Autowired
private JavaMailSender mailSender;
-// @Autowired
+ @Autowired
private VelocityEngine velocityEngine;
public void sendMemberInvitationNotification (String inviteeName,
- String groupName, String inviter) {
+ String sender, String groupName, String inviter) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@@ -38,7 +44,7 @@
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(new InternetAddress(invitee.getEmail()));
- message.setFrom("noreply-korap-notification@ids-mannheim.de");
+ message.setFrom(sender);
message.setSubject("Invitation to join group");
message.setText(prepareText(inviteeName, groupName, inviter),
true);
@@ -52,12 +58,20 @@
String inviter) {
Context context = new VelocityContext();
context.put("username", username);
- context.put("groupName", groupName);
+ context.put("group", groupName);
context.put("inviter", inviter);
-
+
StringWriter stringWriter = new StringWriter();
- velocityEngine.mergeTemplate("invitationNotification.vm",
- StandardCharsets.UTF_16.name(), context, stringWriter);
- return stringWriter.toString();
+// URL url = getClass().getClassLoader().getResource("notification.vm");
+// System.out.println(url);
+// Template t = velocityEngine.getTemplate(url.toString());
+// System.out.println(t);
+
+ velocityEngine.mergeTemplate("notification.vm",
+ StandardCharsets.UTF_8.name(), context, stringWriter);
+
+ String message = stringWriter.toString();
+ jlog.debug(message);
+ return message;
}
}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
index e05053e..d1c9c84 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
@@ -252,7 +252,7 @@
if (config.isMailEnabled()) {
mailService.sendMemberInvitationNotification(username,
- userGroup.getName(), createdBy);
+ config.getNoReply(), userGroup.getName(), createdBy);
}
}
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index 8466d6a..5d3f9e9 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -41,9 +41,12 @@
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<array>
- <value>classpath:*/jdbc.properties</value>
+ <value>classpath:properties/jdbc.properties</value>
<value>file:./jdbc.properties</value>
- <value>classpath:*/hibernate.properties</value>
+ <value>classpath:properties/mail.properties</value>
+ <value>file:./mail.properties</value>
+ <value>classpath:properties/hibernate.properties</value>
+
<value>classpath:kustvakt.conf</value>
<value>file:./kustvakt.conf</value>
</array>
@@ -313,19 +316,34 @@
</bean>
<!-- mail -->
- <!-- <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="java:comp/env/mail/jetty" />
+ <bean id="authenticator" class="de.ids_mannheim.korap.service.MailAuthenticator">
+ <constructor-arg index="0" value="${mail.username}"/>
+ <constructor-arg index="1" value="${mail.password}"/>
+ </bean>
+ <bean id="smtpSession" class="javax.mail.Session" factory-method="getInstance">
+ <constructor-arg index="0">
+ <props>
+ <prop key="mail.smtp.submitter">${mail.username}</prop>
+ <prop key="mail.smtp.auth">${mail.auth}</prop>
+ <prop key="mail.smtp.host">${mail.host}</prop>
+ <prop key="mail.smtp.port">${mail.port}</prop>
+ <prop key="mail.smtp.starttls.enable">${mail.starttls.enable}</prop>
+ <prop key="mail.smtp.connectiontimeout">${mail.connectiontimeout}</prop>
+ </props>
+ </constructor-arg>
+ <constructor-arg index="1" ref="authenticator"/>
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
+ <property name="username" value="${mail.username}" />
+ <property name="password" value="${mail.password}" />
<property name="session" ref="smtpSession" />
</bean>
<bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
<constructor-arg index="0">
<props>
<prop key="resource.loader">class</prop>
- <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
- </prop>
+ <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
</props>
</constructor-arg>
- </bean> -->
+ </bean>
</beans>
\ No newline at end of file
diff --git a/full/src/main/resources/kustvakt.conf b/full/src/main/resources/kustvakt.conf
index 2e29c02..edb1bce 100644
--- a/full/src/main/resources/kustvakt.conf
+++ b/full/src/main/resources/kustvakt.conf
@@ -10,8 +10,14 @@
ldap.config = file-path-to-ldap-config
# Kustvakt
+## server
+server.port=8089
+server.host=localhost
+
## mail settings
mail.enabled = false
+mail.receiver = test-email
+mail.sender = noreply@ids-mannheim.de
## default layers
default.layer.p = tt
diff --git a/full/src/main/resources/properties/mail.properties b/full/src/main/resources/properties/mail.properties
new file mode 100644
index 0000000..492b322
--- /dev/null
+++ b/full/src/main/resources/properties/mail.properties
@@ -0,0 +1,7 @@
+mail.host = smtp.host
+mail.port = 25
+mail.connectiontimeout = 3000
+mail.auth = true
+mail.starttls.enable = true
+mail.username = username
+mail.password = password
\ No newline at end of file
diff --git a/full/src/test/resources/kustvakt-test.conf b/full/src/test/resources/kustvakt-test.conf
index 7b19a51..aa76a83 100644
--- a/full/src/test/resources/kustvakt-test.conf
+++ b/full/src/test/resources/kustvakt-test.conf
@@ -12,6 +12,8 @@
# Kustvakt
## mail settings
mail.enabled = false
+mail.receiver = test-email
+mail.sender = noreply@ids-mannheim.de
## server
server.port=8089
diff --git a/full/src/test/resources/test-config.xml b/full/src/test/resources/test-config.xml
index 01a5ba8..22da89a 100644
--- a/full/src/test/resources/test-config.xml
+++ b/full/src/test/resources/test-config.xml
@@ -36,6 +36,8 @@
<array>
<value>classpath:test-jdbc.properties</value>
<value>file:./test-jdbc.properties</value>
+ <value>classpath:properties/mail.properties</value>
+ <value>file:./mail.properties</value>
<value>classpath:test-hibernate.properties</value>
<value>classpath:kustvakt-test.conf</value>
</array>
@@ -306,8 +308,22 @@
</bean>
<!-- mail -->
- <!-- <bean id="smtpSession" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="java:comp/env/mail/jetty" />
+ <bean id="authenticator" class="de.ids_mannheim.korap.service.MailAuthenticator">
+ <constructor-arg index="0" value="${mail.username}"/>
+ <constructor-arg index="1" value="${mail.password}"/>
+ </bean>
+ <bean id="smtpSession" class="javax.mail.Session" factory-method="getInstance">
+ <constructor-arg index="0">
+ <props>
+ <prop key="mail.smtp.submitter">${mail.username}</prop>
+ <prop key="mail.smtp.auth">${mail.auth}</prop>
+ <prop key="mail.smtp.host">${mail.host}</prop>
+ <prop key="mail.smtp.port">${mail.port}</prop>
+ <prop key="mail.smtp.starttls.enable">${mail.starttls.enable}</prop>
+ <prop key="mail.smtp.connectiontimeout">${mail.connectiontimeout}</prop>
+ </props>
+ </constructor-arg>
+ <constructor-arg index="1" ref="authenticator"/>
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="session" ref="smtpSession" />
@@ -320,5 +336,5 @@
</prop>
</props>
</constructor-arg>
- </bean> -->
+ </bean>
</beans>
\ No newline at end of file