From: Felix Dörre Date: Thu, 4 Aug 2016 20:49:24 +0000 (+0200) Subject: Merge changes I81e26418,Iaf50da91 X-Git-Url: https://code.wpia.club/?p=gigi.git;a=commitdiff_plain;h=9a6015ecc14fd10aaad4f25a5646ce94334887ba;hp=7243641e3fc1ded767f1070a7300a099ad98ecad Merge changes I81e26418,Iaf50da91 * changes: add: allow the test-manager to filter forwarded mails add: allow chaining mail providers after the "TestManager" provider --- diff --git a/util-testing/org/cacert/gigi/email/DelegateMailProvider.java b/util-testing/org/cacert/gigi/email/DelegateMailProvider.java new file mode 100644 index 00000000..c0143ebe --- /dev/null +++ b/util-testing/org/cacert/gigi/email/DelegateMailProvider.java @@ -0,0 +1,49 @@ +package org.cacert.gigi.email; + +import java.io.IOException; +import java.security.Key; +import java.security.cert.Certificate; +import java.util.Properties; + +public abstract class DelegateMailProvider extends EmailProvider { + + private EmailProvider target; + + public DelegateMailProvider(Properties props, String name) { + try { + if (name != null) { + Class c = Class.forName(name); + target = (EmailProvider) c.getDeclaredConstructor(Properties.class).newInstance(props); + } + } catch (ReflectiveOperationException e) { + e.printStackTrace(); + } + } + + public EmailProvider getTarget() { + return target; + } + + @Override + public void sendMail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException { + if (target != null) { + target.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); + } + } + + @Override + public String checkEmailServer(int forUid, String address) throws IOException { + if (target != null) { + return target.checkEmailServer(forUid, address); + } + return OK; + } + + @Override + protected void init(Certificate c, Key k) { + super.init(c, k); + if (target != null) { + target.init(c, k); + } + } +} diff --git a/util-testing/org/cacert/gigi/email/TestEmailProvider.java b/util-testing/org/cacert/gigi/email/TestEmailProvider.java index 8d47142d..ab1fa37b 100644 --- a/util-testing/org/cacert/gigi/email/TestEmailProvider.java +++ b/util-testing/org/cacert/gigi/email/TestEmailProvider.java @@ -7,15 +7,13 @@ import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; -import java.security.Key; -import java.security.cert.Certificate; import java.util.Properties; /** * This class intercepts emails so that the test cases can evaluate them * automatically. */ -public class TestEmailProvider extends EmailProvider { +public class TestEmailProvider extends DelegateMailProvider { private ServerSocket servs; @@ -25,18 +23,8 @@ public class TestEmailProvider extends EmailProvider { private DataInputStream in; - private EmailProvider target; - protected TestEmailProvider(Properties props) { - try { - String name = props.getProperty("emailProvider.test.target"); - if (name != null) { - Class c = Class.forName(name); - target = (EmailProvider) c.getDeclaredConstructor(Properties.class).newInstance(props); - } - } catch (ReflectiveOperationException e) { - e.printStackTrace(); - } + super(props, props.getProperty("emailProvider.test.target")); try { servs = new ServerSocket(Integer.parseInt(props.getProperty("emailProvider.port")), 10, InetAddress.getByName("127.0.0.1")); } catch (IOException e) { @@ -47,8 +35,8 @@ public class TestEmailProvider extends EmailProvider { @Override public synchronized void sendMail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException { while (true) { - if ( !assureLocalConnection() && target != null) { - target.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); + if ( !assureLocalConnection() && getTarget() != null) { + super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); return; } try { @@ -93,8 +81,8 @@ public class TestEmailProvider extends EmailProvider { @Override public synchronized String checkEmailServer(int forUid, String address) throws IOException { while (true) { - if ( !assureLocalConnection() && target != null) { - return target.checkEmailServer(forUid, address); + if ( !assureLocalConnection() && getTarget() != null) { + return super.checkEmailServer(forUid, address); } try { out.writeUTF("challengeAddrBox"); @@ -113,12 +101,4 @@ public class TestEmailProvider extends EmailProvider { out.writeUTF(to); } } - - @Override - protected void init(Certificate c, Key k) { - super.init(c, k); - if (target != null) { - target.init(c, k); - } - } } diff --git a/util-testing/org/cacert/gigi/pages/Manager.java b/util-testing/org/cacert/gigi/pages/Manager.java index f6de409b..8600785b 100644 --- a/util-testing/org/cacert/gigi/pages/Manager.java +++ b/util-testing/org/cacert/gigi/pages/Manager.java @@ -42,7 +42,7 @@ import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.NamePart; import org.cacert.gigi.dbObjects.NamePart.NamePartType; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.email.EmailProvider; +import org.cacert.gigi.email.DelegateMailProvider; import org.cacert.gigi.localisation.Language; import org.cacert.gigi.output.template.IterableDataset; import org.cacert.gigi.output.template.Template; @@ -140,9 +140,23 @@ public class Manager extends Page { return instance; } - public static class MailFetcher extends EmailProvider { + public static class MailFetcher extends DelegateMailProvider { - public MailFetcher(Properties p) {} + Pattern[] toForward; + + public MailFetcher(Properties props) { + super(props, props.getProperty("emailProvider.manager.target")); + String str = props.getProperty("emailProvider.manager.filter"); + if (str == null) { + toForward = new Pattern[0]; + } else { + String[] parts = str.split(" "); + toForward = new Pattern[parts.length]; + for (int i = 0; i < parts.length; i++) { + toForward[i] = Pattern.compile(parts[i]); + } + } + } @Override public String checkEmailServer(int forUid, String address) throws IOException { @@ -157,6 +171,12 @@ public class Manager extends Page { mails.put(to, hismails = new LinkedList<>()); } hismails.addFirst(subject + "\n" + message); + for (int i = 0; i < toForward.length; i++) { + if (toForward[i].matcher(to).matches()) { + super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra); + return; + } + } } }