
_W	                 @   s   d  Z  d d l Z d d l Z d d l Z d d l m Z d d   Z d d d d  Z Gd d	   d	 e  Z	 Gd
 d   d e  Z
 e
   Z e j g Z i e j g d 6Z d S)z
Infobot Authentication Module
    N)partialc             C   s%   t  j j |  d  t  j j   d  S)N
)sys
__stdout__writeflush)stuff r	   ./plugins/auth.pyprintish
   s    r   c             C   sU   | j    t j d | d  r0 | j d  n | j d  | j   | j   d  S)Nz	ACC\s[32]argTF)acquireresearchappendnotifyrelease)botmsg	conditionauthedr	   r	   r
   auth_notify_fn   s    

r   c               @   s:   e  Z d  Z d d   Z e d d    Z d d   Z d S)Userc             C   s   | |  _  | |  _ | |  _ d  S)N)nickuserhost)selfr   r   r   r	   r	   r
   __init__   s    		zUser.__init__c             C   s"   t  j d |   j   } t |   S)Nz^:?(.+?)!(.+?)@(.+))r   r   groupsr   )r   msr	   r	   r
   	from_host    s    zUser.from_hostc             C   s   d |  j  |  j |  j f S)Nz%s!%s@%s)r   r   r   )r   r	   r	   r
   __repr__%   s    zUser.__repr__N)__name__
__module____qualname__r   staticmethodr    r!   r	   r	   r	   r
   r      s   r   c               @   sd   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d S)Authenticatorc             C   s%   i  |  _  d  |  _ t j   |  _ d  S)N)adminsr   	threading	Condition
wakeupCond)r   r	   r	   r
   r   )   s    		zAuthenticator.__init__c             C   s6   | j  |  j k r2 |  j | j  j | j k r2 d Sd S)NTF)r   r'   r   )r   personr	   r	   r
   isadmin/   s    zAuthenticator.isadminc             G   s    t  |   } | |  j | j <d  S)N)r   r'   r   )r   r+   Zas_userr	   r	   r
   addadmin2   s    zAuthenticator.addadminc             C   s   |  j  | j =d  S)N)r'   r   )r   r+   r	   r	   r
   rmadmin6   s    zAuthenticator.rmadminc             C   s   | d j  d  d } | d d d  } | |  j k rM | |  j k rM d S| |  j k r |  j | |  j | <|  j | =| |  j | _ n  d S)z Handles nickchanges r   !r   r      N)splitr'   r   )r   r   r   ZoldnickZnewnickr	   r	   r
   r   9   s    
zAuthenticator.nickc             C   s   g  } t  d  |  j  t  d  t t d |  j d | } d | _ |  j j d |  |  j j d d |  x! | s t  d	  |  j j   qu W|  j j	 d j
 |  Wd  QX| d
 S)Nzcalled, acquiring condition
zacquired conditionr   r   TNOTICEZNickServzACC %szNot authed yet.r   )r   r*   r   r   __core__r   register_callback_msgwait__irccallbacks__remove)r   r   r   Zp_fnr	   r	   r
   	is_authedG   s    


		
zAuthenticator.is_authedc             C   s   |  | _  | |  _ d  S)N)authr   )r   r   r	   r	   r
   initV   s    	zAuthenticator.initN)
r"   r#   r$   r   r,   r-   r.   r   r9   r;   r	   r	   r	   r
   r&   (   s   r&   ZNICK)__doc__r   r(   r   	functoolsr   r   r   objectr   r&   r:   r;   	__inits__r   __callbacks__r	   r	   r	   r
   <module>   s   2	