B
    !_                 @   s   d dl Z d dlmZ d dlmZmZ d dlmZmZ d dlm	Z	 dd Z
dd	 Zd
d Zdd Zdd Zdd ZdddZdd ZdddZdd Zdd Zdd ZdS )     N)check_output)datetime	timedelta)parsedate_tz	mktime_tz)LicenseModelc             C   sH   xB| dD ]4}x.| D ]&\}}t||}|r|||  qW qW d S )N
)splitrematchgroups)pattern2actionoutputlinepatternactionm r   )/var/www/html/tbcc-django/licenses/cli.pyparseOutput   s
    r   c             C   s   t | }|d }|d}|d}|rytjj| d}W n  tjk
rZ   t| d}Y nX d }|rv|rv|t|d }||_||_|d k|_|	  |S )NfoundactivationDatedaysLeft)pk)serial)days)

serialInfogetr   objectsDoesNotExistr   expiration_dateactivation_date	activatedsave)r   infor   r!   Z	days_leftlicenseZ
expirationr   r   r   updateModelFromNode   s"    


r&   c             C   s   t ddddd| gdd d S )Nz*/opt/cellframe-node/bin/cellframe-node-clivpn_cdbr   
deactivatez-serialT)text)r   )serialStringr   r   r   serialDeactivate$   s    r+   c             C   s   t |  t|  d S )N)r+   r&   )r*   r   r   r   serialDeactivateWithORM'   s    r,   c             C   s   t ddddd| gdd d S )Nz*/opt/cellframe-node/bin/cellframe-node-clir'   r   deletez-serialT)r)   )r   )r*   r   r   r   serialDelete,   s    r.   c             C   s>   t |  ytjj| d}|  W n tjk
r8   Y nX d S )N)r   )r.   r   r   r   r-   r   )r*   r%   r   r   r   serialDeleteWithORM/   s    r/   c             C   sz   t | } dddddt| g}|d k	r@|d |tt | t|dd}| d	krh|d
d  gS |dd	d S )Nz*/opt/cellframe-node/bin/cellframe-node-clir'   r   Zgeneratez-nz-acive_daysT)r)          r   )intstrappendr   r	   strip)numberOfSerialsZlimitInDaysargsr   r   r   r   serialGenerate8   s    
r:   c              O   s(   t | |}tdd |}tj| |S )Nc             S   s   t | d d ddS )NF)r   r    r!   r"   )r   )sr   r   r   <lambda>E   s   z'serialGenerateWithORM.<locals>.<lambda>)r:   mapr   r   bulk_create)lkvserialsr   r   r   r   serialGenerateWithORMC   s
    
rB   c                s
  d}d}d}d}d}dg i | fddf| fd	df| fd
dfg}	ddddg}
| d k	rv|
 d |
 t|  |d k	r|
 d |
 t| |d k	r|r|
 d n
|
 d |d k	r|dkr|
 d n|dkr|
 d ntdt|
dd}t|	|  S )NzRserial key: ([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}) (inactive|activated)zserial keys:zF([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}) (inactive|activated)ztotal (\d+) keyszkeys not foundrA   c                s    d  |d S )NrA   r   )r6   )stringr   )resultr   r   r<   Y       zserialList.<locals>.<lambda>c                s    d  |d S )NrA   r   )r6   )rC   r   )rD   r   r   r<   Z   rE   c                s     dt|d S )Ntotalr   )__setitem__r4   )rC   r   )rD   r   r   r<   [   rE   z*/opt/cellframe-node/bin/cellframe-node-clir'   r   listz-nz-shiftz-activated_onlyz-inactive_onlyZ
total_onlyz-total_onlyZnototalz-nototalz8totalState is invalid. Must be 'total_only' or 'nototal'T)r)   )r6   r5   	Exceptionr   r   )r8   offsetZonlyActivatedZ
totalStateZserial_patternZserial_start_patternZserial_key_patternZtotal_patternZempty_patternr   r9   r   r   )rD   r   
serialListM   s:    



rK   c          	   C   s(   ddddd| dt |g}t|dd d S )	Nz*/opt/cellframe-node/bin/cellframe-node-clir'   r   updatez-serialz-active_daysT)r)   )r5   r   )r*   newLimitInDaysr9   r   r   r   serialUpdatex   s    rN   c             C   s   t | | t|  d S )N)rN   r&   )r*   rM   r   r   r   serialUpdateWithORM|   s    
rO   c                s   d}d}d}d}d}ddi  fdd	|fd
df|fddf| fddf| fddfg}t ddddd| gdd}t||  S )NzIserial ([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}) not acti[vt]atedzJserial ([A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}) acti[vt]ated (.+)z)(?:license length|expired): no time limitz&(?:license length|expired): (\d+) dayszserial '[^']*' not foundr   Tc                s0   |  d< |r$t tt| d< n| d< d S )Nr   r   )r   fromtimestampr   r   )Z	serialStrZadate)rD   r   r   rL      s    zserialInfo.<locals>.updatec                s    |d d S )Nr   r   )rC   r   )rL   r   r   r<      rE   zserialInfo.<locals>.<lambda>c                s    |d |d S )Nr   r0   r   )rC   r   )rL   r   r   r<      rE   c                s     dt|d S )Nr   r   )rG   r4   )rC   r   )rD   r   r   r<      rE   c                s     ddS )Nr   F)rG   )rC   r   )rD   r   r   r<      rE   z*/opt/cellframe-node/bin/cellframe-node-clir'   r   r$   z-serial)r)   )r   r   )r*   Znot_activated_patternZactivated_patternZno_limit_patternZdays_left_patternZnot_found_patternr   r   r   )rD   rL   r   r      s    	
r   )N)NNNN)r
   
subprocessr   r   r   email.utilsr   r   Zlicenses.modelsr   r   r&   r+   r,   r.   r/   r:   rB   rK   rN   rO   r   r   r   r   r   <module>   s    	


+