a
    W̸f>                     @   s  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlZd dlZd d	lmZ d dlmZ d d
lT d dlmZ d dlmZmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dlmZ d dlmZ d dlmZmZ d dlZej e_!d dl"Z"d dl#Z#d dl$Z$d dl%m&Z& d dlZd dl'm(Z( d dl)m*Z* d dl+m,Z, e-e-e-e.dddZ/e"0dZ1e"0dZ2dd Z3dd Z4edd Z5ed d! Z6ed"d# Z7d$d% Z8d&d' Z9G d(d) d)e	Z:dS )*    N)login)reverse)HttpResponseRedirect)View)settings)redirectrender)JsonResponse)
SignupForm)*)csrf_exempt)statuspermissions)Response)APIView)r   )HttpResponser   )PermissionDenied)SimpleNamespace)Web3)loader)body	signaturesigning_keyreturnc                 C   s*   t jt|dt| dtjd }||kS )Nutf-8)msg	digestmod)hmacnewbyteshashlibsha256	hexdigest)r   r   r   digest r$   /Users/christophesurbier/Dropbox/Mon Mac (MacBook-Air-de-christophe.local)/Documents/Programmation/SellTix/tixsellbackend/backoffice/views.py"is_valid_signature_for_string_body%   s    
r&   djangostripec                 C   sf   t jj|d}|j}| tdd|jjid}| tdd|jjid}tj	j
|||dd}t|jS )NZuser__idstripe-refresh-account-urluuidkwargsstripe-return-account-urlaccount_onboardingaccountrefresh_url
return_urltype)Sellerobjectsgetstripe_user_idbuild_absolute_urir   useridr(   AccountLinkcreater   url)requestr;   sellerZacct_idr2   r3   Z	acct_linkr$   r$   r%   "StripeShifterAccountURLRefreshViewS   s    rA   c                 C   s   t | di S )Nz	home.html)r   )r?   r$   r$   r%   homed   s    rB   c                  C   s  | j dkrt| j| jpd}td t| td dd l}|d td t	|}d}|d	 }|d
 }t
jj|d }|dkrd}nt
 }||_||_|  |dkr|r|d }	d|	v r|	d d }
|
d dkr|
d }|
d }t|
d d}|
d }|
d }tdt| d | d |  tjj|d}| r|dkrrtd tddS |D ]}|jdkr|jtjkr|jd krt||_||_|  qv|j|krvd}|jr|jj | krtd! d}n
td" |rvd }td#|   z(tjj| d$}td%|  |}W n: t y } z t| td& W Y d }~n
d }~0 0 t! }|j|_|j|_"|j#|_#|  ||_||_ztj$}tj%| }d'd(|gd)d*}d+d+d,}t&j'|||d-}|j(dkr>t	|j)}|d. r>|d. d/ }t*+|}t,-|d0}||_#W n0 t yp } zt| W Y d }~n
d }~0 0 |j./| |  qvn.td1 dd2l0m1} d3||f }|d4d5| tddS td6dS d S )7NPOSTr   z===On recoit webhook z===On recoit attend 5 secondesr      z===On se reveille et on checkeTr;   r4   )	webhookIdFNFT_ACTIVITYeventactivitycategoryZerc721fromAddress	toAddresserc721TokenIdcontractAddresshashz[WebHook] Doit trouver toekn z pour contrat z
 newOwner )Z/refTicketType__refEvent__ticketContract__iexact*0x0000000000000000000000000000000000000000z ==== Nouveau mint de NFT on stop   r   Z	TO_BE_SETz[WebHook] Same owner do nothingz[WebHook] Different ownerzH[WebHook] ====Do assignement chercher un user dont walletAddress vaut %s)ZwalletAddress__iexactz-[WebHook]user trouve on change association %sz[WebHook] ===Pas de user   z2.0eth_getTransactionByHash)r;   jsonrpcparamsmethodzapplication/json)acceptzcontent-type)jsonheadersresultvalueetheru*   ==== Ticket non trouvé sur le backend !!!	sendEmailuP   Billet minté sur blockchain non trouvé dans backend  contrat<b>%s</b> Token %dcsurbier@idevotion.fru3   [SellTix] Ticket miné mais creation backend failed  )2rW   strr   encodingloggerinfotimesleeprY   loadsWebHookr6   filtercountrE   payloadsaveintTicketexistsr   ticketId	lastOwnerr   SELLTIX_WALLEThashedTickettransactionHashrefUserwalletAddresslowerUserr7   	ExceptionTicketHistorywallet	pricePaidALCHEMY_ACCESS_KEYALCHEMY_API_ENDPOINTrequestspoststatus_codetextfloatfromhexr   from_weiownersaddbackoffice.helpersr_   ) r?   rl   rf   dataZcanCheckrE   r4   ZnbTrouveZwebhookrG   rH   rJ   rK   rL   rM   ZtxHashtokensticketZdoAssignementZuserToAssignr:   eZticketHistoryapi_keyr>   rZ   responseZvalueHexr\   
finalPricer_   messager$   r$   r%   webhookAlchemyg   s    






"




&



 



 

r   c              
   C   s   dd l }tj|_| jdkr| j}| jd }d }ddlm} |}z|j	
|||}W nr ty } z t| tddW  Y d }~S d }~0  |jjy } z t| tddW  Y d }~S d }~0 0 t| tddS tddS d S 	Nr   rC   ZHTTP_STRIPE_SIGNATURE)STRIPE_ENDPOINTi  rQ   rP   ra   r(   r   STRIPE_API_KEYr   rW   r   METAtixsell.settingsr   ZWebhookZconstruct_event
ValueErrorrd   errorr   ZSignatureVerificationErrorlogger_stripere   r?   r(   rl   Z
sig_headerrG   r   Zendpoint_secretr   r$   r$   r%   webhookStripe   s&    



 

r   c              
   C   s   dd l }tj|_| jdkr| j}| jd }d }ddlm} |}z|j	
|||}W nr ty } z t| tddW  Y d }~S d }~0  |jjy } z t| tddW  Y d }~S d }~0 0 t| tddS tddS d S r   r   r   r$   r$   r%   webhookStripeTest  s&    



 

r   c           	      C   s  | j dkrt| j}| r| }t }||_tjj	ddddiddidd}t
d t
| |d	 |_t||_|  | td
d|jid}| tdd|jid}t
d|  t
d|  tjj	|d	 ||dd}t
| |d }t|S nt }t| dd|iS )NrC   FRZexpress	requestedT)Zcard_paymentsZ	transfers)countryr4   capabilitiesz===On recoit de stripe r;   r*   r+   r,   r.   zReturn url %szrefresh_url url %sr/   r0   r>   zsignup.htmlform)rW   r
   rC   is_validrm   r5   r:   r(   Accountr=   rd   re   r8   rY   dumpsstripe_account_jsonr9   r   r;   r<   r   r   )	r?   r   r:   Zseller_profiler1   r2   r3   ZaccountLinkZurlToRedirectr$   r$   r%   signup  s>    






r   c                 C   sT   | j dkrPtjj|d}tj|j}|d rD|d rDd|_|	  t
tdS d S )NGETr)   Zdetails_submittedZcharges_enabledTrB   )rW   r5   r6   r7   r(   r   retriever8   stripe_charges_enabledrm   r   r   )r?   r;   ZmerchantAccountZacctr$   r$   r%   !StripeShifterAccountReturnURLViewE  s    
r   c                   @   s   e Zd Zdd ZdS )invoicec              
   O   s   zLt jj|d d}|r$td}ntddW S d|i}t|||}|W S  ty } zNt	| ddl
m}	 d	|j }
|
t|7 }
|	d
d|
 tddW  Y d }~S d }~0 0 d S )Nr+   )pkzinvoice/invoice.htmlra   rQ   r   r   r^   u0   Création de la facture <b>%s</b>   a échoué !r`   z[SellTix] Facturation failedi  )Invoicer6   r7   r   get_templater   r   rz   rd   re   r   r_   r;   rb   )selfr?   argsr-   r   templatecontexthtmlr   r_   r   r$   r$   r%   r7   R  s     

zinvoice.getN)__name__
__module____qualname__r7   r$   r$   r$   r%   r   Q  s   r   );urllibr   django.contrib.authr   django.urlsr   django.httpr   Zdjango.viewsr   django.confr   Zdjango.shortcutsr   r   r	   r(   rY   Zbackoffice.forms.signupr
   tixsellbackoffice.modelsdjango.views.decorators.csrfr   rest_frameworkr   r   Zrest_framework.responser   Zrest_framework.viewsr   r   r   r   loggingr   r    django.core.exceptionsr   typesr   web3r   django.templater   rb   boolr&   	getLoggerrd   r   rA   rB   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s`   

"


'