U
    -dc                     @   sP   d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 G dd de	Z
dS )    )	urlencodeN)configgrun_bash_command)BaseOauthHandlerc                   @   s`   e Zd Zdej d Zedd Zedd Zedd Z	ee
e
gd	d
dZedd ZdS )MailRuHandlerzhttps://accountz/oauthc              	   C   sd   t  \}}td||| t jdd}|jdkrNt|jd|jd|j t	dtd||j
 | S )	u    После того как получили подтверждение из гугла - превращаем его в токены zhttps://oauth.mail.ru/tokenauthorization_code)	client_idclient_secretcoderedirect_uriZ
grant_type   u   вернулu   с пояснениемu0   Не удалось авторизоватьсяu0   Что же мы получили в ответ?)r   get_mail_ru_client_credsrequestsZpostredirect_urlZstatus_codeprintZurltext
ValueErrorZcontentZjson)r   r	   r
   response r   !./modules/oauth/models/mail_ru.pyauthorize_tokens   s    
zMailRuHandler.authorize_tokensc                 C   s   t jjstdttdd t jjdD }|s<td|d }d| tj }t	
 \}}|d }d	tj d
| tj d| d| d| d}t|\}	}
|	rt|
d td|	 tddS )u4    TODO: Прокинуть параметры в CRM u9   Неавторизованный пользовательc                 s   s$   | ]}d |kr| dd V  qdS )Zadmin:r   N)split).0sr   r   r   	<genexpr>$   s      z8MailRuHandler.send_credentials_to_crm.<locals>.<genexpr> uG   Не совсем авторизованный пользовательr   zhttps://refresh_tokenzssh supervisorz' /opt/fox_acrm/cloud/cloud_api_call.sh z9 /opt/fox_acrm/contrib/setup_mailbox.json refresh_token='z' client_id='z' client_secret='z' mailbox_type='mail.ru'zutf-8zexited withur   Не получилось передать полученные авторизационные данные в CRMN)r   ZauthscopePermissionErrorlistsetr   r   AUTH_SESSION_COOKIE_DOMAINr   r   r   r   decoder   )Zrequestr   Z	org_namesZorg_nameZcrmr	   r
   r   cmdresoutr   r   r   send_credentials_to_crm   s     ,
z%MailRuHandler.send_credentials_to_crmc               
   C   s,   t d} |   W  5 Q R  S Q R X d S )Nz%/opt/account/custom/mail.ru_client_id)openreadlinestrip)fdr   r   r   _get_client_id:   s    
zMailRuHandler._get_client_id)returnc               	   C   sR   z,t  } td}|  }W 5 Q R X W n tk
rH   tdY nX | |fS )u  
        TODO: Когда-нибудь исправить на пул клиентских ID и хранение в БД
        TODO: Их, вероятно будет несколько, нужно будет сделать хранение маппинга g.auth.scope = [id, secret]
        TODO:   для использования в gmail_authorize_tokens
        :return: [client_id, client_secret]
        z)/opt/account/custom/mail.ru_client_secretu   Не указаны учётные данные веб-клиента к Mail.ru, обратитесь в тех.поддержку)r   r-   r)   r*   r+   FileNotFoundError)r	   r,   r
   r   r   r   r   ?   s    
z&MailRuHandler.get_mail_ru_client_credsc                  C   s@   t  } | t jddtt ddd}t|dd}d| S )	u   
        :returns URL для перенаправления пользователя на экран согласия.
        zuserinfo mail.imapr   - )r	   r   r   Zresponse_typestatez~-._)Zsafezhttps://oauth.mail.ru/login?)r   r-   r   struuidZuuid4replacer   )r	   paramsZ
url_paramsr   r   r   make_urlP   s    	zMailRuHandler.make_urlN)__name__
__module____qualname__r   r#   r   staticmethodr   r(   r-   r3   r   r7   r   r   r   r   r   
   s   


r   )Zurllib.parser   r   r4   Zcmf.includer   r   r   Zmodules.oauth.modelsr   r   r   r   r   r   <module>   s
   