Al-HUWAITI Shell
Al-huwaiti


Server : LiteSpeed
System : Linux in-mum-web1949.main-hosting.eu 5.14.0-503.40.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Mon May 5 06:06:04 EDT 2025 x86_64
User : u595547767 ( 595547767)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /opt/alt/python27/lib/python2.7/site-packages/postomaat/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python27/lib/python2.7/site-packages/postomaat/addrcheck.py
# -*- coding: utf-8 -*-
#   Copyright 2012-2018 Fumail Project
#
# Licensed 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.
#
#
import re
import logging

class AddrException(Exception):
    pass


# Singleton implementation for Addrcheck
class Addrcheck(object):
    """
    Singleton implementation for Addrcheck. Note it is important not
    to initialise "self._method" by creating a "__init__" function
    since this would be called whenever asking for the singleton...
    (Addrcheck() would call __init__).
    """
    __instance = None

    def __new__(cls):
        """
        Returns Singleton of Addrcheck (create if not yet existing)

        Returns:
            (Addrcheck) The singleton of Addrcheck
        """
        if Addrcheck.__instance is None:
            Addrcheck.__instance = object.__new__(cls)
            Addrcheck.__instance.set("Default")
        return Addrcheck.__instance

    def set(self, name):
        """
        Sets method to be used in valid - function to validate an address
        Args:
            name (String): String with name of validator
        """
        logger = logging.getLogger("%s.Addrcheck"%__package__)
        if name == "Default":
            logger.info("Set default address checker method")
            self._method = Default()
        elif name == "LazyLocalPart":
            logger.info("Set LazyLocalPart address checker method")
            self._method = LazyLocalPart()
        else:
            logger.warning("Mail address check \"%s\" not valid, using default..."%name)
            self._method = Default()

    def valid(self, address):
        """

        Args:
            address (String): Address to be checked

        Returns:
            (Boolean) True if address is valid using internal validation method

        """
        return self._method(address)


class Addrcheckint(object):
    """
    Functor interface for method called by Addrcheck
    """
    def __init__(self):
        pass
    def __call__(self, mailAddress):
        raise NotImplemented


class Default(Addrcheckint):
    """
    Default implementation (and backward compatible) which does not allow more than one '@'
    """
    def __init__(self):
        super(Default, self).__init__()
    def __call__(self,mailAddress):
        leg = mailAddress !='' and re.match(r"[^@]+@[^@]+$", mailAddress)
        if not leg and mailAddress !='':
            logger = logging.getLogger("postomaat.Addrcheck.Default")
            logger.warning("Address validation check failed for: %s" % mailAddress)
        return leg


class LazyLocalPart(Addrcheckint):
    """
    Allows '@' in local part.

    Note:
    In fuglu the original envelope address is received. For the policy daemon protocol the
    address is not quoted anymore. If there are quotes around the local part it is removed
    by Postfix before passed to Postomaat.
    Knowing:
    - there is only one mail address in the string
    - address has been RFC compliant because it was received by Postomaat
    So to make LazyLocalPart consistent with fuglu's version there's no need to check
    distinguis a quoted and an unquoted localpart.
    """
    def __init__(self):
        super(LazyLocalPart, self).__init__()
    def __call__(self,mailAddress):
        leg = mailAddress !='' and  ( re.match(r"^[\x00-\x7f]+@[^@]+$", mailAddress) )
        # here, the address received does not contain quotes. quoted local parts can
        # contain more characters than unquoted according.
        if not leg and mailAddress !='':
            logger = logging.getLogger("postomaat.Addrcheck.LazyLocalPart")
            logger.warning("Address validation check failed for: %s"%mailAddress)
        return leg


Al-HUWAITI Shell