3
؊[O
                 @   s   d Z ddlZddlZddlZddlmZ ddlZejdZdd Z	dddZ
G d	d
 d
eZG dd deZe ZejgZdejgiZdS )z
Infobot Authentication Module
    N)partialauthc             C   s   t jj| d  t jj  d S )N
)sys
__stdout__writeflush)stuff r
   /opt/Infobot/plugins/auth.pyprintish   s    r   c             C   sB   |j   tjd|d r$|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   s:   t jd| d |j| jkr6| j|j j|jkr6dS dS )NzChecking whether z is an admin.TF)loggerdebugr   r(   r   )r   personr
   r
   r   isadmin2   s    zAuthenticator.isadminc             G   s   t | }|| j|j< d S )N)r   r(   r   )r   r.   Zas_userr
   r
   r   addadmin6   s    zAuthenticator.addadminc             C   s   | j |j= d S )N)r(   r   )r   r.   r
   r
   r   rmadmin:   s    zAuthenticator.rmadminc             C   sl   |d j dd }|d dd }|| jkr:|| jkr:dS || jkrh| j| | j|< | j|= || j| _dS )z Handles nickchanges r   !r   r      N)splitr(   r   )r   r   r   ZoldnickZnewnickr
   r
   r   r   =   s    
zAuthenticator.nickc             C   s   g }t d | jr t d tt| j|d}d|_| jjd| | jjdd|  x|slt d | jj  qTW | jj	d j
| W d Q R X |d	 S )
Nzcalled, acquiring condition
zacquired condition)r   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_authedK   s    zAuthenticator.is_authedc             C   s2   | |_ || _x |jjdg D ]}| j|  qW d S )Nr(   )r   r   configgetr0   )r   r   adminr
   r
   r   initZ   s    zAuthenticator.initN)
r#   r$   r%   r   r/   r0   r1   r   r<   r@   r
   r
   r
   r   r'   +   s   r'   ZNICK)NN)__doc__r   r)   r   	functoolsr   logging	getLoggerr,   r   r   objectr   r'   r   r@   	__inits__r   __callbacks__r
   r
   r
   r   <module>   s   

6