This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0a50f833b36f199140ac0f7d865aa072dd4bbae6
Author: Benoit Tellier <[email protected]>
AuthorDate: Tue Sep 10 10:07:01 2019 +0700

    JAMES-2703 Remove AbstractRecipientRewriteTable
---
 .../mailets/AbstractRecipientRewriteTable.java     | 282 ---------------------
 1 file changed, 282 deletions(-)

diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java
deleted file mode 100755
index 63659b2..0000000
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTable.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.transport.mailets;
-
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Optional;
-import java.util.StringTokenizer;
-import java.util.regex.PatternSyntaxException;
-
-import javax.inject.Inject;
-import javax.mail.MessagingException;
-import javax.mail.internet.ParseException;
-
-import org.apache.james.core.MailAddress;
-import org.apache.james.core.User;
-import org.apache.james.dnsservice.api.DNSService;
-import org.apache.james.domainlist.api.DomainList;
-import org.apache.james.domainlist.api.DomainListException;
-import org.apache.james.rrt.api.RecipientRewriteTable;
-import org.apache.james.rrt.lib.Mapping;
-import org.apache.james.rrt.lib.UserRewritter;
-import org.apache.james.server.core.MailImpl;
-import org.apache.mailet.Attribute;
-import org.apache.mailet.AttributeName;
-import org.apache.mailet.AttributeValue;
-import org.apache.mailet.Experimental;
-import org.apache.mailet.Mail;
-import org.apache.mailet.base.GenericMailet;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Provides an abstraction of common functionality needed for implementing a
- * Virtual User Table. Override the <code>mapRecipients</code> method to map
- * virtual recipients to real recipients.
- * 
- * @deprecated use the definitions in virtualusertable-store.xml instead
- *
- * JAMES-2703 This class is deprecated and will be removed straight after 
upcoming James 3.4.0 release
- */
-@Deprecated
-@Experimental
-public abstract class AbstractRecipientRewriteTable extends GenericMailet {
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractRecipientRewriteTable.class);
-    private static final AttributeName MARKER = 
AttributeName.of("org.apache.james.transport.mailets.AbstractRecipientRewriteTable.mapped");
-    private DNSService dns;
-    private DomainList domainList;
-
-    @Inject
-    public void setDNSService(DNSService dns) {
-        this.dns = dns;
-    }
-
-    @Inject
-    public void setDomainList(DomainList domainList) {
-        this.domainList = domainList;
-    }
-
-    /**
-     * Checks the recipient list of the email for user mappings. Maps 
recipients
-     * as appropriate, modifying the recipient list of the mail and sends mail
-     * to any new non-local recipients.
-     * 
-     * @param mail
-     *            the mail to process
-     */
-    @Override
-    public void service(Mail mail) throws MessagingException {
-        if (mail.getAttribute(MARKER).isPresent()) {
-            mail.removeAttribute(MARKER);
-            return;
-        }
-
-        Collection<MailAddress> recipientsToRemove = new HashSet<>();
-        Collection<MailAddress> recipientsToAddLocal = new ArrayList<>();
-        Collection<MailAddress> recipientsToAddForward = new ArrayList<>();
-
-        Collection<MailAddress> recipients = mail.getRecipients();
-        Map<MailAddress, String> recipientsMap = new 
HashMap<>(recipients.size());
-
-        for (MailAddress address : recipients) {
-            // Assume all addresses are non-virtual at start
-            recipientsMap.put(address, null);
-        }
-
-        mapRecipients(recipientsMap);
-
-        for (MailAddress source : recipientsMap.keySet()) {
-            String targetString = recipientsMap.get(source);
-
-            // Only non-null mappings are translated
-            if (targetString != null) {
-                if (targetString.startsWith("error:")) {
-                    // Mark this source address as an address to remove from 
the
-                    // recipient list
-                    recipientsToRemove.add(source);
-                    processDSN(mail, source, targetString);
-                } else {
-                    StringTokenizer tokenizer = new 
StringTokenizer(targetString, getSeparator(targetString));
-
-                    while (tokenizer.hasMoreTokens()) {
-                        String targetAddress = tokenizer.nextToken().trim();
-
-                        if (targetAddress.startsWith("regex:")) {
-                            try {
-                                Optional<String> maybeTarget = new 
UserRewritter.RegexRewriter()
-                                    
.generateUserRewriter(Mapping.Type.Regex.withoutPrefix(targetAddress))
-                                    
.rewrite(User.fromUsername(source.asString()))
-                                    .map(User::asString);
-                                if (!maybeTarget.isPresent()) {
-                                    continue;
-                                }
-                                targetAddress = maybeTarget.get();
-                            } catch (PatternSyntaxException e) {
-                                LOGGER.error("Exception during regexMap 
processing: ", e);
-                            } catch 
(RecipientRewriteTable.ErrorMappingException e) {
-                                LOGGER.error("Regex mapping should not throw 
ErrorMappingException", e);
-                            }
-                        }
-
-                        try {
-                            MailAddress target = (targetAddress.indexOf('@') < 
0) ?
-                                new MailAddress(targetAddress, 
domainList.getDefaultDomain().asString()) : new MailAddress(targetAddress);
-
-                            // Mark this source address as an address to remove
-                            // from the recipient list
-                            recipientsToRemove.add(source);
-
-                            // We need to separate local and remote
-                            // recipients. This is explained below.
-                            if 
(getMailetContext().isLocalServer(target.getDomain())) {
-                                recipientsToAddLocal.add(target);
-                            } else {
-                                recipientsToAddForward.add(target);
-                            }
-
-                            String buf = "Translating virtual user " + source 
+ " to " + target;
-                            LOGGER.info(buf);
-
-                        } catch (ParseException pe) {
-                            // Don't map this address... there's an invalid
-                            // address mapping here
-                            String exceptionBuffer = "There is an invalid map 
from " + source + " to " + targetAddress;
-                            LOGGER.error(exceptionBuffer);
-                        } catch (DomainListException e) {
-                            LOGGER.error("Unable to access DomainList", e);
-                        }
-                    }
-                }
-            }
-        }
-
-        // Remove mapped recipients
-        recipients.removeAll(recipientsToRemove);
-
-        // Add mapped recipients that are local
-        recipients.addAll(recipientsToAddLocal);
-
-        // We consider an address that we map to be, by definition, a
-        // local address. Therefore if we mapped to a remote address,
-        // then we want to make sure that the mail can be relayed.
-        // However, the original e-mail would typically be subjected to
-        // relay testing. By posting a new mail back through the
-        // system, we have a locally generated mail, which will not be
-        // subjected to relay testing.
-
-        // Forward to mapped recipients that are remote
-        if (recipientsToAddForward.size() != 0) {
-            // Can't use this ... some mappings could lead to an infinite loop
-            // getMailetContext().sendMail(mail.getSender(),
-            // recipientsToAddForward, mail.getMessage());
-
-            // duplicates the Mail object, to be able to modify the new mail
-            // keeping the original untouched
-            MailImpl newMail = MailImpl.duplicate(mail);
-            try {
-                try {
-                    newMail.setRemoteAddr(dns.getLocalHost().getHostAddress());
-                } catch (UnknownHostException e) {
-                    newMail.setRemoteAddr("127.0.0.1");
-                }
-                try {
-                    newMail.setRemoteHost(dns.getLocalHost().getHostName());
-                } catch (UnknownHostException e) {
-                    newMail.setRemoteHost("localhost");
-                }
-
-                newMail.setRecipients(recipientsToAddForward);
-                newMail.setAttribute(new Attribute(MARKER, 
AttributeValue.of(Boolean.TRUE)));
-                getMailetContext().sendMail(newMail);
-            } finally {
-                newMail.dispose();
-            }
-        }
-
-        // If there are no recipients left, Ghost the message
-        if (recipients.size() == 0) {
-            mail.setState(Mail.GHOST);
-        }
-    }
-
-    /**
-     * Override to map virtual recipients to real recipients, both local and
-     * non-local. Each key in the provided map corresponds to a potential
-     * virtual recipient, stored as a <code>MailAddress</code> object.
-     * 
-     * Translate virtual recipients to real recipients by mapping a string
-     * containing the address of the real recipient as a value to a key. Leave
-     * the value <code>null<code>
-     * if no mapping should be performed. Multiple recipients may be specified 
by delineating
-     * the mapped string with commas, semi-colons or colons.
-     * 
-     * @param recipientsMap
-     *            the mapping of virtual to real recipients, as
-     *            <code>MailAddress</code>es to <code>String</code>s.
-     */
-    protected abstract void mapRecipients(Map<MailAddress, String> 
recipientsMap) throws MessagingException;
-
-    /**
-     * Sends the message for DSN processing
-     * 
-     * @param mail
-     *            the Mail instance being processed
-     * @param address
-     *            the MailAddress causing the DSN
-     * @param error
-     *            a String in the form "error:<code> <msg>"
-     */
-    private void processDSN(Mail mail, MailAddress address, String error) {
-        // parse "error:<code> <msg>"
-        int msgPos = error.indexOf(' ');
-        try {
-            @SuppressWarnings("unused")
-            Integer code = Integer.valueOf(error.substring("error:".length(), 
msgPos));
-        } catch (NumberFormatException e) {
-            LOGGER.error("Cannot send DSN.  Exception parsing DSN code from: 
{}", error, e);
-            return;
-        }
-        @SuppressWarnings("unused")
-        String msg = error.substring(msgPos + 1);
-        // process bounce for "source" address
-        try {
-            getMailetContext().bounce(mail, error);
-        } catch (MessagingException me) {
-            LOGGER.error("Cannot send DSN.  Exception during DSN processing: 
", me);
-        }
-    }
-
-    /**
-     * Returns the character used to delineate multiple addresses.
-     * 
-     * @param targetString
-     *            the string to parse
-     * @return the character to tokenize on
-     */
-    private String getSeparator(String targetString) {
-        return (targetString.indexOf(',') > -1 ? "," : 
(targetString.indexOf(';') > -1 ? ";" : (targetString.contains("regex:") ? "" : 
":")));
-    }
-
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to