U
    pVc4                     @   sD   d dl T d dlmZ d dlmZ d dlmZ G dd dejj	Z
dS )    )*)GmailHandler)MailRuHandler)YandexHandlerc                   @   sP   e Zd ZdZdZeeedZdd Z	e
jjdd Zdd	 Ze
jjd
d ZdS )	OauthViewu  
    Клиент должен быть авторизован. Из его куки мы сможем извлечь scope, по scope определить CRM
    Разрешим настраивать таким образом почту только для пользователей в группе admin
    TODO: проверить, нужны ли все эти ручные проверки авторизации
    /)zmail.ruz	yandex.ruz	gmail.comc                 C   s8   t jd}|dkrtS dt jkr4ttdt jS tS )Nscopezhttps://mail.google.com/ZReferer)zhttps://oauth.mail.ru/zhttps://oauth.yandex.ru/)requestargsgetr   headersr   r   Zreferrer)selfr    r   ./modules/oauth/views/index.pyget_handler_by_referer   s    
z OauthView.get_handler_by_refererc                 C   sp   t js
dS tjd}|  }|s<tdtjdtj tdtd| td |	|}td |
t| d	S )
u   
        URL для редиректа с подключаемого сервиса. Можно сделать один единственный-проксю.
        u?   Что-то пошло не так с авторизацией.coder
   ZrefererzWe do not support this API yetu   Обработчик: u"   Авторизуем токен...u,   Отправляем данные в EvaTeamu   Авторизация прошла успешно. Можно закрыть эту вкладку и вренуться в EvaTeam.)gauthr	   r
   r   r   printr   NotImplementedErrorZauthorize_tokensZsend_credentials_to_crm)r   r   handlerZresponser   r   r   r   "   s    

zOauthView.getc                 C   s   | j |dd S )N@)handlersr   split)r   emailr   r   r   get_handler_by_email8   s    zOauthView.get_handler_by_emailc                 C   s   t jd}|stdtjs&tdS tjjs6tdt	dd tjj
dD sZtd| |}|sld	S z&|tkr||}n| }t|W S  tk
r   td
 Y dS X dS )u   
        Необязательная точка входа, на которую нас перекидывает CRM.
        Редиректит куда надо в зависимости от пользовательского ввода.
        r   u2   Где-то по пути потерялся emailz/auth/signinuC   У вас есть учётная запись, но нет EvaTeamc                 s   s   | ]}| d r|V  qdS )z:AdminsN)endswith).0sr   r   r   	<genexpr>H   s     
 z"OauthView.start.<locals>.<genexpr> uY   Вы должны обладать правами администратора в EvaTeam)uR   Данный почтовый провайдер не поддерживаетсяi  u   Нет client_id)um   Не настроена oauth-авторизация с данным почтовым провайдером.i  N)r	   r
   r   
ValueErrorr   r   Zredirectr   PermissionErroranyr   r   r   Zmake_urlFileNotFoundErrorZloggingZ	exception)r   r   r   Zurlr   r   r   start;   s(    


zOauthView.startN)__name__
__module____qualname____doc__Z__url__r   r   r   r   r   cmfviewsactionr   r   r&   r   r   r   r   r      s   
r   N)Zcmf.includeZmodules.oauth.models.gmailr   Zmodules.oauth.models.mail_rur   Zmodules.oauth.models.yandexr   r+   r,   ZBaseViewr   r   r   r   r   <module>   s   