B
    i])                 @   s8  d dl mZ d dlmZ d dlT d dlmZmZmZm	Z	 d dlm
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
lmZ d dlmZ d dlZd dlmZmZ d dlmZ d dlm Z  d dlm!Z! d dlm
Z
mZmZ d dl"m#Z#m$Z$ d dlm%Z% d dl&m'Z' d dlm(Z( d dl)m*Z* G dd deZ+G dd deZ,G dd deZ-G dd deZ.G dd  d e
j/Z0G d!d" d"e
j1Z2G d#d$ d$e
j1Z3G d%d& d&e
j4Z5G d'd( d(e
j/Z6G d)d* d*e
j7Z8G d+d, d,e
j7Z9G d-d. d.e
j/Z:ed/gd0d1 Z;d2d3 Z<d4d5 Z=ed/gd6d7 Z>ed8d9 Z?dS ):    )csrf_exempt)AppUser)*)permissionsroutersserializersviewsets)generics)api_view)FQ)renderHttpResponse)	FilterSet)	b64decode)ContentFileN)urlsafe_base64_encodeurlsafe_base64_decode)force_bytes)timezone)redirect)r	   r   r   )TokenHasReadWriteScopeTokenHasScope)Max)JsonResponse)filters)Imagec               @   s   e Zd ZG dd dZdS )AppUserFilterc               @   s$   e Zd ZeZddddddddgZd	S )
zAppUserFilter.Metaemailid	firstNamepasswordvalid
facebookIdgoogleIdappleIdN)__name__
__module____qualname__r   modelfields r+   r+   h/Users/christophesurbier/Documents/Programmation/app_d1f616fd-1494-4ace-aea9-746b5a24efbf/api/content.pyMeta   s   r-   N)r&   r'   r(   r-   r+   r+   r+   r,   r      s   r   c               @   s   e Zd ZG dd dZdS )SearchFilterc               @   s   e Zd ZeZdgZdS )zSearchFilter.MetarefUserN)r&   r'   r(   Searchr)   r*   r+   r+   r+   r,   r-   *   s   r-   N)r&   r'   r(   r-   r+   r+   r+   r,   r.   )   s   r.   c               @   s   e Zd ZG dd dZdS )SearchResultsFilterc               @   s   e Zd ZeZdgZdS )zSearchResultsFilter.Meta	refSearchN)r&   r'   r(   SearchResultsr)   r*   r+   r+   r+   r,   r-   1   s   r-   N)r&   r'   r(   r-   r+   r+   r+   r,   r1   0   s   r1   c               @   s   e Zd ZG dd dZdS )AppleSignInFilterc               @   s   e Zd ZeZdgZdS )zAppleSignInFilter.MetastateN)r&   r'   r(   AppleSignInr)   r*   r+   r+   r+   r,   r-   8   s   r-   N)r&   r'   r(   r-   r+   r+   r+   r,   r4   7   s   r4   c               @   s.   e Zd ZdZejgZej	 Z
eZeZdZdS )AppleSignInListViewz
            get:
                Permet de rechercher (ou de voir) les apple sign in existants.
                Il est possible de rechercher via le champs:

                :param state: state
    )z-createdDateN)r&   r'   r(   __doc__r   IsAuthenticatedpermission_classesr6   objectsallquerysetZAppleSignInSerializerserializer_classr4   filter_classorderingr+   r+   r+   r,   r7   @   s   
r7   c               @   s   e Zd ZdddZdS )UploadUserPhotoBase64Nc             C   s  |j dkr|j}|d }|d }|d }|d\}}tjj|d}tt||d|_|	  d}	|jj
}
|jj}|	d	 }|	d
 }|
|f||fkrt|jj}t|}t|
t| }t|t| }||kr$tt|| }|||ftj}tt|| d }||d	|| |f}nz||k rtt|| }|||ftj}tt|| d }td	|||| f |d	|||| f}n||	tj}|	| td}d|d< |S td}d|d< |S d S )NPOSTr   picturefilenamez;base64,)pk)name)   rG   r      g       @OKzno-cachezCache-ControlZKO)method_datasplitr   r;   getr   r   rC   savewidthheightstrpathr   openfloatintroundresize	ANTIALIAScropprintr   )selfrequestformatdataZuserIdZimage_base64fileNameZimgstrusersizepwphnwnhrD   imageprnrtwlthtresponser+   r+   r,   postR   sL    



zUploadUserPhotoBase64.post)N)r&   r'   r(   rn   r+   r+   r+   r,   rA   P   s   rA   c               @   s6   e Zd ZdZejgZejj	ddZ
eZeZdZdZdS )AppUserListViewuF  
            post:
                Permet de créer un utilisateur (voir la liste des champs ci dessous).

            get:
                Permet de rechercher (ou de voir) les utilisateurs existants.
                Il est possible de rechercher un utilisateur via les champs:

                :param id: L'identifiant de l'utilisateur
                :param email et password: recherche par email et mot de passe (permet de vérifier une connexion)
                :param pseudo et valid: recherche par pseudo et valid (true ou false) permet de checker si pseudo pris ou non
    T)r"   r    )r    N)r&   r'   r(   r8   r   r9   r:   r   r;   filterr=   AppUserSerializerr>   r   r?   search_fieldsr@   r+   r+   r+   r,   ro      s   ro   c               @   s&   e Zd ZdZejgZej	 Z
eZdS )AppUserDetailViewa&  
            get:
                Permet d'obtenir les infos sur un utilisateur en particulier

            delete:
                Remove an existing user.

            patch:
                Update one or more fields on an existing user.

            put:
                Update a user.

    N)r&   r'   r(   r8   r   r9   r:   r   r;   r<   r=   rq   r>   r+   r+   r+   r,   rs      s   
rs   c               @   s.   e Zd ZdZejgZejj	ddZ
eZdZdS )VTCListViewuZ   
            get:
                Permet de récupérer la liste des VTC existants.


    T)r"   )rF   N)r&   r'   r(   r8   r   r9   r:   VTCr;   rp   r=   ZVTCSerializerr>   r@   r+   r+   r+   r,   rt      s
   rt   c               @   s&   e Zd ZdZejgZej	 Z
eZdS )RedirectionCreateViewuI   
            post:
                Permet de créer une redirection

    N)r&   r'   r(   r8   r   r9   r:   Redirectionr;   r<   r=   ZRedirectionSerializerr>   r+   r+   r+   r,   rv      s   
rv   c               @   s2   e Zd ZdZejgZej	 Z
eZeZdZdZdS )SearchListViewuF   
            post:
                Permet de créer une recherche
    r/   )z-createdDateN)r&   r'   r(   r8   r   r9   r:   r0   r;   r<   r=   ZSearchSerializerr>   r.   r?   rr   r@   r+   r+   r+   r,   rx      s   
rx   c               @   s.   e Zd ZdZejgZej	 Z
eZeZdZdS )SearchResultsListViewu   
            get:
                Permet de rechercher/voir les résultats d'une recherche.


                :param refSearch: L'identifiant de la recherche dont on veut obtenir les résultats

    )z-createdDateN)r&   r'   r(   r8   r   r9   r:   r3   r;   r<   r=   ZSearchResultsSerializerr>   r1   r?   r@   r+   r+   r+   r,   ry      s   
ry   GETc             C   s   ddi}t |S )uu   
            get:
                Permet de vérifier que l'API est opérationnelle.
                Renvoi 'OK'
    statusrI   )r   )r\   jsonr+   r+   r,   checkAPI   s    r}   c             C   sV   t jtjd}d| ig|dgddidd| d dgtjd	}|jjjj|d
}d S )N)apikeyr   )tosubjectzFlipApp <jab12121@live.com>z	text/htmlz<strong>z	</strong>)typevalue)personalizationsfromcontenttemplate_id)request_body)	sendgridSendGridAPIClientsettingsSENDGRID_API_KEYMESSAGE_TEMPLATE_IDclientmailsendrn   )r   messager   sgr^   rm   r+   r+   r,   envoiMessageMail   s    
r   c             C   sZ   t jtjd}d|igd|idgddid|i| d}td|  |jjjj	|d}|S )	N)r~   r   pseudo)r   dynamic_template_datazFlipApp <jab12121@live.com>)r   r   r   r   zon envoi data %s)r   )
r   r   r   r   loggerinfor   r   r   rn   )TEMPLATE_IDr   r   r   r^   rm   r+   r+   r,   envoiMessageMailGenerique  s    r   c             C   sR   | j d }| j d }| j d }td ddlm} |||d|gdd	 td
dS )Nr   r   r   zOn va intialiser sendgrid r   )	send_mailzdev.flipapp@gmail.comF)fail_silentlyrG   )r{   )rz   r   r   django.core.mailr   r   )r\   r   r   r   r   r+   r+   r,   sendMessageEmail*  s    



r   c       	   
   C   s  t d | jdkry| jd }| jd }| jd }d| jkr| jd }t d||||f  dd	lm} | }||_||_||_||_	|
  n2dd	lm} | }||_||_||_d
|_	|
  d}t|S  tk
r } zt | tddS d }~X Y nX tddS )Nz==== Sign in with ApplerB   codeid_tokenr5   r`   z$Code %s id_token %s state %s user %sr   )r6    zX<html><body><h1>Merci vous pouvez retourner sur l'application Swiitch</h1></body></html>i  )r{   i  )r   r   rJ   rB   	bo.modelsr6   r   tokenr5   jsonUserrN   r   	Exception)	r\   r   r   r5   r`   r6   Zsigninhtmler+   r+   r,   signinApple8  s:    







r   )@django.views.decorators.csrfr   r   r   Zapi.serializersrest_frameworkr   r   r   r   r	   Zrest_framework.decoratorsr
   django.db.modelsr   r   django.shortcutsr   r   Zrest_framework_filtersr   base64r   django.core.files.baser   r   django.utils.httpr   r   django.utils.encodingr   django.utilsr   r   Z&oauth2_provider.contrib.rest_frameworkr   r   r   django.httpr   r   PILr   r   r.   r1   r4   ListAPIViewr7   ListCreateAPIViewrA   ro   RetrieveUpdateDestroyAPIViewrs   rt   CreateAPIViewrv   rx   ry   r}   r   r   r   r   r+   r+   r+   r,   <module>   sL   	5