--- /dev/null
+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);
+ }
+ }
+}
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;
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) {
@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 {
@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");
out.writeUTF(to);
}
}
-
- @Override
- protected void init(Certificate c, Key k) {
- super.init(c, k);
- if (target != null) {
- target.init(c, k);
- }
- }
}
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;
return instance;
}
- public static class MailFetcher extends EmailProvider {
+ public static class MailFetcher extends DelegateMailProvider {
- public MailFetcher(Properties p) {}
+ public MailFetcher(Properties props) {
+ super(props, props.getProperty("emailProvider.manager.target"));
+ }
@Override
public String checkEmailServer(int forUid, String address) throws IOException {
mails.put(to, hismails = new LinkedList<>());
}
hismails.addFirst(subject + "\n" + message);
+ super.sendMail(to, subject, message, from, replyto, toname, fromname, errorsto, extra);
}
}