U
    
,_+                     @   s\  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
j4Z6G d)d* d*e
j/Z7G d+d, d,e
j8Z9G d-d. d.e
j8Z:G d/d0 d0e
j/Z;ed1gd2d3 Z<ed1gd4d5 Z=d6d7 Z>d8d9 Z?ed1gd:d; Z@ed<d= ZAd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,   l/home/christophe/Documents/Programmation/CleverCloud/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.   Nr/   r,   r,   r,   r-   r0   )   s   r0   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.   Nr/   r,   r,   r,   r-   r3   0   s   r3   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.   Nr/   r,   r,   r,   r-   r6   7   s   r6   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_classesr8   objectsallquerysetZAppleSignInSerializerserializer_classr6   filter_classorderingr,   r,   r,   r-   r9   @   s   
r9   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)   rK   r      g       @OKzno-cachezCache-ControlZKO)method_datasplitr   r>   getr   r   rF   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nhrG   imageprnrtwlthtresponser,   r,   r-   postR   sL    



zUploadUserPhotoBase64.post)N)r'   r(   r)   rr   r,   r,   r,   r-   rD   P   s   rD   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)   r;   r   r<   r=   r   r>   filterr@   AppUserSerializerrA   r   rB   search_fieldsrC   r,   r,   r,   r-   rs      s   rs   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)   r;   r   r<   r=   r   r>   r?   r@   rv   rA   r,   r,   r,   r-   rx      s   
rx   c                   @   s"   e Zd ZejgZej Z	e
ZdS )SearchResultsDetailViewN)r'   r(   r)   r   r<   r=   r5   r>   r?   r@   SearchResultsSerializerrA   r,   r,   r,   r-   ry      s   
ry   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.


    Trt   rI   N)r'   r(   r)   r;   r   r<   r=   VTCr>   ru   r@   ZVTCSerializerrA   rC   r,   r,   r,   r-   r{      s
   r{   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)   r;   r   r<   r=   Redirectionr>   r?   r@   ZRedirectionSerializerrA   r,   r,   r,   r-   r}      s   
r}   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
    r1   r:   N)r'   r(   r)   r;   r   r<   r=   r2   r>   r?   r@   ZSearchSerializerrA   r0   rB   rw   rC   r,   r,   r,   r-   r      s   
r   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

    r:   N)r'   r(   r)   r;   r   r<   r=   r5   r>   r?   r@   rz   rA   r3   rB   rC   r,   r,   r,   r-   r      s   
r   GETc                 C   s   ddi}t |S )uu   
            get:
                Permet de vérifier que l'API est opérationnelle.
                Renvoi 'OK'
    statusrM   r   )r`   jsonr,   r,   r-   checkAPI   s    r   c                 C   sL   ddl m} | jd }| jd }td||f  |||\}}tt|S )Nr   )callFluctuoAPIlatitude	longitudez==On va chercher avec %s et %s)bo.partners.fluctuor   r   r^   r   r   dumps)r`   r   r   r   vehiclesrb   r,   r,   r-   getFluctuoAround   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subjectFlipApp <jab12121@live.com>z	text/htmlz<strong>z	</strong>)typevalue)personalizationsfromcontenttemplate_idrequest_body)	sendgridSendGridAPIClientsettingsSENDGRID_API_KEYZMESSAGE_TEMPLATE_IDclientmailsendrr   )r   messager   sgrb   rq   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 )	Nr   r   pseudo)r   dynamic_template_datar   )r   r   r   r   zon envoi data %sr   )
r   r   r   r   loggerinfor   r   r   rr   )TEMPLATE_IDr   r   r   rb   rq   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_silentlyrK   r   )r   r   r   django.core.mailr   r   )r`   r   r   r   r   r,   r,   r-   sendMessageEmail5  s    



r   c           	   
   C   s  t d | jdkrz| 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|W S  tk
r } zt | tdd W Y S d }~X Y nX tddS )Nz==== Sign in with ApplerE   codeid_tokenr7   rd   z$Code %s id_token %s state %s user %sr   )r8    zX<html><body><h1>Merci vous pouvez retourner sur l'application Swiitch</h1></body></html>i  r   i  )r   r   rN   rE   	bo.modelsr8   r   tokenr7   jsonUserrR   r   	Exception)	r`   r   r   r7   rd   r8   Zsigninhtmler,   r,   r-   signinAppleC  s:    








 r   )B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   r0   r3   r6   ListAPIViewr9   ListCreateAPIViewrD   rs   RetrieveUpdateDestroyAPIViewrx   ry   r{   CreateAPIViewr}   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   sX   	5
	

