U
    rRdk                     @   sn   d dl mZ d dlT ddlmZ d dlmZmZmZmZmZ d dl	m
Z
 d dlZd dlZG dd	 d	ejZdS )
    )fields)*   )cmf_session)datedatetime	timedeltatimezonetime)AESNc                   @   s8   e Zd Zedd ZedddZeedddZdS )	
CmfSessionc                  C   s6   t jd\} }}t|}t|}t|tj|S )N:)ZconfigZSESSION_CRYPT_KEYsplitbinasciiZ	unhexlifyr   newZMODE_CBC)_Ziv_hexZkey_hexkeyZiv r   ./models/cmf_session.py_get_cipher
   s    

zCmfSession._get_cipher)returnc                 C   sN   |   }| jjdd }|dtjt|tj    }|| }t	
|S )Nr       )r   idvaluer   r   Z
block_sizelenZencryptencodebase64Z	b64encode)selfciphermessageZpadded_messageZencrypted_messager   r   r   	get_token   s
    zCmfSession.get_tokenc                 C   s   z$|   }|t|  }W n   td Y d S X tj	j
d| ddgd}|rttj}||jt|jjd kr|dg |j|}|rtjdd	}|jj|_|jj|_|jj|_d|_d|_td
|j d|j d|j  |S d S )NuD   Не удалось расшифровать токен сессииzCmfSession:Fr   )r   Zexpiredr   )Zsecondszplugin.plugin.*T)emptyzfrom_jwt: jwt is ok, z, z, is_local=)r   Zdecryptr   Z	b64decodedecodestripgdebugZmodelsr   getr   nowr	   ZutcZreauth_dater   Zaccess_token_expires_inr   Zload_fieldsZpluginZrefresh_tokenZCmfAuthZ
user_loginZloginZ
user_emailZemailZ
user_scopeZscopeZjwt_is_supportZjwt_is_match_org)clsZsession_tokenr   Zdecrypted_tokenZsessionr(   objr   r   r   
from_token   s*    



"zCmfSession.from_tokenN)	__name__
__module____qualname__staticmethodr   strr!   classmethodr+   r   r   r   r   r      s
   
	r   )Zcmfr   Zcmf.includer   r   r   r   r	   r
   ZCrypto.Cipherr   r   r   r   r   r   r   r   <module>   s   