1 21 package org.jsmtpd.plugins.filters.builtin; 22 23 import java.util.Iterator ; 24 import java.util.LinkedList ; 25 import java.util.List ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.jsmtpd.core.common.PluginInitException; 30 import org.jsmtpd.core.common.filter.FilterTreeFailureException; 31 import org.jsmtpd.core.common.filter.FilterTreeSuccesException; 32 import org.jsmtpd.core.common.filter.IFilter; 33 import org.jsmtpd.core.mail.Email; 34 import org.jsmtpd.core.mail.EmailAddress; 35 import org.jsmtpd.core.mail.InvalidAddress; 36 import org.jsmtpd.core.mail.Rcpt; 37 38 49 public class RcptMatcher implements IFilter { 50 51 private boolean orOperator = false; 52 53 private List <EmailAddress> rcptToMatch = new LinkedList <EmailAddress>(); 54 private Log log = LogFactory.getLog(RcptMatcher.class); 55 private boolean failOnError = false; 56 private boolean validateOnSucces = false; 57 58 61 public boolean doFilter(Email input) throws FilterTreeFailureException, FilterTreeSuccesException { 62 List <Rcpt> rcptInMail = input.getRcpt(); 63 boolean res; 64 if (orOperator) { 65 for (Iterator iterator = rcptInMail.iterator(); iterator.hasNext();) { 66 Rcpt element = (Rcpt) iterator.next(); 67 EmailAddress oneRcptInMail = element.getEmailAddress(); 68 for (Iterator iter = rcptToMatch.iterator(); iter.hasNext();) { 69 EmailAddress oneRcptToMatch = (EmailAddress) iter.next(); 70 if (oneRcptToMatch.isEqual(oneRcptInMail)) { 71 res = true; 72 break; 73 } 74 } 75 } 76 77 res = false; 78 } else { 79 for (Iterator iter = rcptToMatch.iterator(); iter.hasNext();) { 80 EmailAddress oneRcptToMatch = (EmailAddress) iter.next(); 81 boolean found = false; 82 for (Iterator iterator = rcptInMail.iterator(); iterator.hasNext();) { 83 Rcpt element = (Rcpt) iterator.next(); 84 EmailAddress oneRcptInMail = element.getEmailAddress(); 85 if (oneRcptToMatch.isEqual(oneRcptInMail)) { 86 found = true; 87 break; 88 } 89 } 90 if (!found) { 91 res = false; 92 } 93 } 94 res = true; 95 } 96 if (failOnError && (!res)) { 97 throw new FilterTreeFailureException(); 98 } 99 100 if (validateOnSucces && res) 101 throw new FilterTreeSuccesException(); 102 103 return res; 104 } 105 106 109 public String getPluginName() { 110 return "Recipient filter matcher for Jsmtp"; 111 } 112 113 116 public void initPlugin() throws PluginInitException { 117 118 } 119 120 123 public void shutdownPlugin() { 124 125 } 126 127 public void setRcpt(String rcpt) { 128 try { 129 EmailAddress rcptToAdd = EmailAddress.parseAddress(rcpt); 130 rcptToMatch.add(rcptToAdd); 131 } catch (InvalidAddress e) { 132 log.error("Plugin: " + getPluginName() + " can't add rcpt to matching list, " + rcpt + " is not a valid email adress"); 133 } 134 } 135 136 public void setOrOperator(boolean cond) { 137 orOperator = cond; 138 } 139 140 public void setFailOnError(boolean op) { 141 failOnError = op; 142 } 143 144 public void setValidateOnSucces(boolean op) { 145 validateOnSucces = op; 146 } 147 } | Popular Tags |