
#cc           @   s   d  Z  d d l Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m	 Z	 d d	 l
 m Z m Z e	 j Z d
 Z d Z d e j f d     YZ d S(   s
  Old style Mailman membership adaptor.

This adaptor gets and sets member information on the MailList object given to
the constructor.  It also equates member keys and lower-cased email addresses,
i.e. KEY is LCE.

This is the adaptor used by default in Mailman 2.1.
iN(   t
   StringType(   t   mm_cfg(   t   Utils(   t   Errors(   t   MemberAdaptor(   t   i18n(   t   ldap_auth_only_pt   ldap_auth_memberi   i   t   OldStyleMembershipsc           B   s=  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e j e j e j e j f d  Z d   Z d   Z d   Z d   Z d d  Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% RS(    c         C   s   | |  _  d  S(   N(   t   _OldStyleMemberships__mlist(   t   selft   mlist(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   __init__3   s    c         C   s    |  j  j j   |  j  j j   S(   N(   R	   t   memberst   keyst   digest_members(   R
   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt
   getMembers9   s    c         C   s   |  j  j j   S(   N(   R	   R   R   (   R
   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getRegularMemberKeys<   s    c         C   s   |  j  j j   S(   N(   R	   R   R   (   R
   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getDigestMemberKeys?   s    c         C   s   | j    } g  } |  j j j | |  } | | k	 r\ t | t  rO | t f S| t f Sn  |  j j j | |  } | | k	 r t | t  r | t f S| t f Sn  d S(   N(   NN(
   t   lowerR	   R   t   gett
   isinstanceR    t	   ISREGULARR   t   ISDIGESTt   None(   R
   t   membert   lcmembert   missingt   val(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   __get_cp_memberB   s    

c         C   s)   |  j  |  \ } } | d  k	 r% d Sd S(   Ni   i    (   t#   _OldStyleMemberships__get_cp_memberR   (   R
   R   t   cpaddrt   where(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   isMemberS   s    c         C   s:   |  j  |  \ } } | d  k r0 t j |  n  | j   S(   N(   R   R   R   t   NotAMemberErrorR   (   R
   R   R   R    (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberKeyY   s    c         C   s4   |  j  |  \ } } | d  k r0 t j |  n  | S(   N(   R   R   R   R"   (   R
   R   R   R    (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberCPAddress_   s    c         C   s$   g  | D] } |  j  |  d ^ q S(   Ni    (   R   (   R
   R   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberCPAddressese   s    c         C   sX   |  j  j j | j    } | d  k r6 t j |  n  t   rT t d  i | d 6S| S(   Ns)   (Use %(email)s's password in LDAP server)t   email(	   R	   t	   passwordsR   R   R   R   R"   R   t   _(   R
   R   t   secret(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberPasswordh   s    	c         C   s?   |  j  |  } t   r d S| | k r, | St |  j | |  S(   Ni    (   R*   R   R   R	   (   R
   R   t   responseR)   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   authenticateMemberp   s    	c         C   s"   |  j  |  s t j |  n  d  S(   N(   R!   R   R"   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   __assertIsMemberx   s    c         C   sG   |  j  j j | j   |  j  j  } | |  j  j   k r= | S|  j  j S(   N(   R	   t   languageR   R   t   preferred_languaget   GetAvailableLanguages(   R
   R   t   lang(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberLanguage|   s
    c         C   sc   |  j  |  | t j k r; |  j |  \ } } | t k S|  j j j | j   d  } | | @S(   Ni    (	   t$   _OldStyleMemberships__assertIsMemberR   t   DigestsR   R   R	   t   user_optionsR   R   (   R
   R   t   flagR   R    t   option(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberOption   s    
c         C   s&   |  j  |  |  j j j | j    S(   N(   R3   R	   t	   usernamesR   R   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberName   s    c         C   s)   |  j  |  |  j j j | j   g   S(   N(   R3   R	   t   topics_userinterestR   R   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getMemberTopics   s    c         C   s6   |  j  |  |  j j j | j   t j d f  d S(   Ni    (   R3   R	   t   delivery_statusR   R   R   t   ENABLED(   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getDeliveryStatus   s    	c         C   s6   |  j  |  |  j j j | j   t j d f  d S(   Ni    i   (   R3   R	   R=   R   R   R   R>   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getDeliveryStatusChangeTime   s    	c         C   s2   g  |  j    D]! } |  j |  | k r | ^ q S(   N(   R   R?   (   R
   t   statusR   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getDeliveryStatusMembers   s    c         C   s)   g  |  j  j j   D] } | j   ^ q S(   N(   R	   t   bounce_infoR   R   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getBouncingMembers   s    c         C   s&   |  j  |  |  j j j | j    S(   N(   R3   R	   RC   R   R   (   R
   R   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   getBounceInfo   s    c         K   s  |  j  j   s t  |  j |  r3 t j |  n  d } t j   } |  j  j } d  } | j
 d  rz | d } | d =n  | j
 d  r | d } | d =n  | j
 d  r | d } | d =n  | j
 d  r | d } | d =n  | r t | j    n  t j |  | j   k rd } n | } | j   } | rJ| |  j  j | <n | |  j  j | <|  j | |  |  j | |  | r|  j | |  n  |  j  j r|  j  j |  j  j | <n  d  S(   Ni    t   digestt   passwordR.   t   realname(   R	   t   Lockedt   AssertionErrorR!   R   t   MMAlreadyAMemberR   t   MakeRandomPasswordR/   R   t   has_keyt
   ValueErrorR   t   LCDomainR   R   R   t   setMemberPasswordt   setMemberLanguaget   setMemberNamet   new_member_optionsR5   (   R
   R   t   kwsRF   RG   R.   RH   t   value(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   addNewMember   sD    







	c      	   C   sn   |  j  j   s t  |  j |  | j   } x9 d
 D]1 } t |  j  |  } | j |  r5 | | =q5 q5 Wd  S(   NR'   R5   R   R   R.   R;   R9   RC   R=   (	   R'   R5   R   R   R.   R;   R9   RC   R=   (   R	   RI   RJ   R3   R   t   getattrRM   (   R
   R   t	   memberkeyt   attrt   dict(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   removeMember   s     
i    c      
   C   sX  |  j  j   s t  |  j |  | j   } |  j |  } |  j  j j | d  } |  j | t	 j
  } |  j  j j | t j    } |  j |  }	 |  j  j j | j   t j d f  }
 | s |  j |  n  |  j | d | d | d | d |	 | r| |  j  j | j   <n  |
 d t j t j f k rT| rT|
 |  j  j | j   <n  d  S(   Ni    RH   RF   RG   R.   (   R	   RI   RJ   R3   R   R:   R5   R   R8   R   R4   R'   R   RL   R2   R=   R   R>   R[   RV   t   BYUSERt   BYADMIN(   R
   R   t
   newaddresst   nodeleteRX   t   fullnamet   flagst   digestspRG   R1   t   delivery(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   changeMemberAddress   s(    c         C   s<   |  j  j   s t  |  j |  | |  j  j | j   <d  S(   N(   R	   RI   RJ   R3   R'   R   (   R
   RX   RG   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyRP     s    c         C   s<   |  j  j   s t  |  j |  | |  j  j | j   <d  S(   N(   R	   RI   RJ   R3   R.   R   (   R
   RX   R.   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyRQ     s    c         C   s  |  j  j   s t  |  j |  | j   } | t j k r| r |  j  j s[ t j	  n  |  j  j
 j |  r t j |  n  |  j  j j |  } | d  k r t j |  n  |  j  j | =| |  j  j
 | <|  j  j j |  r|  j  j | =qn |  j  j st j  n  |  j  j j |  r0t j |  n  |  j  j
 j |  } | d  k r`t j |  n  |  j  j
 | =| |  j  j | <| |  j  j | <d  S|  j  j j | d  | r|  j  j | c | O<n |  j  j | c | M<|  j  j | s|  j  j | =n  d  S(   Ni    (   R	   RI   RJ   R3   R   R   R4   t
   digestableR   t   CantDigestErrorR   RM   t   AlreadyReceivingDigestsR   R   R   R"   t   one_last_digestt   nondigestablet   MustDigestErrort!   AlreadyReceivingRegularDeliveriesR5   t
   setdefault(   R
   R   R6   RU   RX   t   cpuser(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   setMemberOption  sB    c         C   s<   |  j  j   s t  |  j |  | |  j  j | j   <d  S(   N(   R	   RI   RJ   R3   R9   R   (   R
   R   RH   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyRR   T  s    c         C   sp   |  j  j   s t  |  j |  | j   } | rG | |  j  j | <n% |  j  j j |  rl |  j  j | =n  d  S(   N(   R	   RI   RJ   R3   R   R;   RM   (   R
   R   t   topicsRX   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   setMemberTopicsY  s    c         C   s   | t  j t  j t  j t  j t  j f k s0 t  |  j j   sE t  |  j	 |  | j
   } | t  j k r |  j | d   n | t j   f |  j j | <d  S(   N(   R   R>   t   UNKNOWNR\   R]   t   BYBOUNCERJ   R	   RI   R3   R   t   setBounceInfoR   t   timeR=   (   R
   R   RA   (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   setDeliveryStatusc  s    c         C   s   |  j  j   s t  |  j |  | j   } | d  k r |  j  j j |  r_ |  j  j | =n  |  j  j j |  r |  j  j | =q n | |  j  j | <d  S(   N(	   R	   RI   RJ   R3   R   R   RC   RM   R=   (   R
   R   t   info(    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyRs   p  s    (&   t   __name__t
   __module__R   R   R   R   R   R!   R#   R$   R%   R*   R,   R3   R2   R8   R:   R<   R?   R@   R   Rq   R\   R]   Rr   RB   RD   RE   RV   R[   Rd   RP   RQ   Rn   RR   Rp   Ru   Rs   (    (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyR   2   sD   																					/				:		
	(   t   __doc__Rt   t   typesR    t   MailmanR   R   R   R   R   t   Mailman.LDAPR   R   R(   R   R   R   (    (    (    s/   /opt/osstech/lib/mailman/OldStyleMemberships.pyt   <module>   s   	
