Package mireka.filter.local

Source Code of mireka.filter.local.ProhibitRelaying

package mireka.filter.local;

import java.util.ArrayList;
import java.util.List;

import mireka.address.GlobalPostmaster;
import mireka.address.Recipient;
import mireka.address.RemotePart;
import mireka.address.RemotePartContainingRecipient;
import mireka.filter.FilterReply;
import mireka.filter.RecipientContext;
import mireka.filter.StatelessFilterType;
import mireka.filter.local.table.RemotePartSpecification;

import org.subethamail.smtp.RejectException;

/**
* This filter rejects recipient addresses of which remote part is not a local
* domain (or address literal). It does not rejects the special, global
* postmaster address.
*/
public class ProhibitRelaying extends StatelessFilterType {
    private List<RemotePartSpecification> localDomainSpecifications =
            new ArrayList<RemotePartSpecification>();

    @Override
    public FilterReply verifyRecipient(RecipientContext recipientContext)
            throws RejectException {
        Recipient recipient = recipientContext.recipient;
        if (recipient instanceof GlobalPostmaster)
            return FilterReply.NEUTRAL;
        else if (recipient instanceof RemotePartContainingRecipient)
            return verifyRemotePartContainingRecipient((RemotePartContainingRecipient) recipient);
        else
            throw new IllegalArgumentException();
    }

    private FilterReply verifyRemotePartContainingRecipient(
            RemotePartContainingRecipient recipient) throws RejectException {
        RemotePart remotePart = recipient.getMailbox().getRemotePart();
        for (RemotePartSpecification remotePartSpecification : localDomainSpecifications) {
            if (remotePartSpecification.isSatisfiedBy(remotePart))
                return FilterReply.NEUTRAL;
        }
        throw new RejectException(550,
                "Relaying prohibited, user is not local (" + recipient + ")");

    }

    public void addLocalDomainSpecification(
            RemotePartSpecification remotePartSpecification) {
        if (remotePartSpecification == null)
            throw new NullPointerException();
        localDomainSpecifications.add(remotePartSpecification);
    }
}
TOP

Related Classes of mireka.filter.local.ProhibitRelaying

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.