3
6Hleވ                 @   s  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 d dlmZ d dlmZ d d	lmZ d d
lT d dlmZmZ d dlmZmZ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"Z"d dl#m$Z$ d dl%m&Z&m'Z' d dl(Z(d dl)Z)d dl*Z*d dlm+Z+ d dlm,Z, d dl-m.Z. e"j/dZ0e1e1e1dddZ2e1e1e1dddZ3G dd dej4Z5G d d! d!ej4Z6G d"d# d#ej4Z7G d$d% d%ej4Z8G d&d' d'ej4Z9G d(d) d)ej4Z:G d*d+ d+ej4Z;G d,d- d-ej4Z<d.d/ Z=G d0d1 d1ej4Z>G d2d3 d3ej4Z?G d4d5 d5ej4Z@G d6d7 d7ejAZBG d8d9 d9ej4ZCG d:d; d;ejDZEG d<d= d=ej4ZFG d>d? d?ejGZHG d@dA dAejDZIG dBdC dCejJZKG dDdE dEejAZLG dFdG dGejDZMG dHdI dIejAZNG dJdK dKejDZOG dLdM dMej4ZPG dNdO dOejGZQG dPdQ dQejDZRG dRdS dSejDZSG dTdU dUej4ZTG dVdW dWejAZUG dXdY dYejDZVG dZd[ d[ejDZWe&d\ge'e$gd]d^ ZXe&d\ge'e$gd_d` ZYe&d\ge'e$gdadb ZZdS )c    )	Paginator)JsonResponse)reverse)defunct_hash_message)settings)Web3)&construct_sign_and_send_raw_middleware)Account)LocalAccount)*)renderHttpResponse)genericspermissionsserializers)Image)DjangoFilterBackend)Mnemonic)signingN)IsAuthenticated)api_viewpermission_classes)redirect)geth_poa_middleware)
TICKET_ABIdjango)raw_strencryption_keyreturnc             C   s   t j|d}|j| S )N)salt)r   Signersign_object)r   r   signer r#   D/home/csurbier/selltix_backend/SellTix/tixsellbackend/api/content.pyencrypt    s    r%   )encoded_strr   r   c             C   s@   t j|d}y
|j| S  t jk
r:   td|  Y nX d S )N)r   zUnable to decode hash )r   r    unsign_objectBadSignature
ValueError)r&   r   r"   r#   r#   r$   decrypt&   s
    
r*   c               @   s   e Zd ZdddZdS )findOrCreateUserNc             C   s   |j dkr|j}|d }|d }d}ytjj||d}W nV tk
r } z:|jd}	|	d }
tjj||
|ddd	}|j  d
}W Y d d }~X nX ddl	m
} |j|}dt|ddj|t|t|jd}t|ddS tddS d S )NPOSTemailsignInTokenF)r-   r.   @r   NONE)r-   usernamer.   isOrganizerstripeCustomerIdT)RefreshTokenOK)many)statusrefUsercreatedrefreshaccess)safei  )r7   )methoddataUserobjectsget	Exceptionsplitcreate_usersaverest_framework_simplejwt.tokensr4   for_userUserSerializerstraccess_tokenr   r   )selfrequestformatr>   r-   r.   r9   useretokensr1   r4   r:   jsonToReturnr#   r#   r$   post/   s,    


zfindOrCreateUser.post)N)__name__
__module____qualname__rR   r#   r#   r#   r$   r+   .   s   r+   c               @   s   e Zd ZdddZdS )ticketCreatedNc       !      C   s8  |j dkr*|j}|d }|d }|d }|d }|d }ytjj||d}	ttjtj}
dd	l	m
} |
j|}|
j|}|
jj||d
}|jj|j }tjj|	d}x0|D ]&}|d }|d }t|}djdd |D }d| }|d }|
j|d}|d }dd l}|jj|}d}x\|D ]T}tjd|	|j|jjj|j|f  |j|kr(|jjj|kr(d}tjd P q(W tjd| |dkrt }|	|_||_t ||_!||_"||_#||_$||_%||_&d|_'|j(  qW d|d}t)|ddS  t*k
r& }  ztj|  t+ddS d } ~ X nX n
t+ddS d S ) Nr,   transactionHashr8   walletticketContractrefTicketType)idZwalletAddress__icontainsr   )r   )addressabi)r8       c             S   s   g | ]}d j |qS )z{:02x})rM   ).0vr#   r#   r$   
<listcomp>t   s    z&ticketCreated.post.<locals>.<listcomp>0x   ether   Tz:====Ticket utilisateur %s %s Contrat %s Compare %d avec %dFu   === Trouve pas besoin de créerzNeedToCreate ?   r5   )r7   r9   )r<   i  )r7   i  ),r=   r>   r?   r@   rA   r   HTTPProviderr   CONTRACT_NODE_URLtixsell.settingsr   to_checksum_addressethcontract	functionsfetchTicketsForOwnercallTicketfilter	bytearrayjoinfrom_weidatetimefromtimestamploggerinfor[   rZ   refEventrY   ticketIdr8   rI   refTicketType_id	lastOwnerhashedTicket	pricePaid	createdAtrW   r7   rE   r   rB   r   )!rK   rL   rM   r>   rW   r8   rX   rY   rZ   rN   w3r   checkedWalletAddresscheckedTicketAddressrm   ticketsZuserTicketsZticketBlockchainr{   r~   resulthxstrfinalTicketCoder   
finalPriceZpurchasedDaterv   r   ZneedToCreateticketZ	newTicketrQ   rO   r#   r#   r$   rR   O   sj    


"



zticketCreated.post)N)rS   rT   rU   rR   r#   r#   r#   r$   rV   N   s   rV   c               @   s   e Zd ZdddZdS )getUserNonceNc             C   s   |j dkr|j}|d }dd l}|jdd}d }y&tjj|d}||_|j}|j	  W nB t
k
r }	 z&tjj||dd}||_|j	  W Y d d }	~	X nX d	|j||d
}
t|
ddS tdd d S )Nr,   walletAddressr   i  i'  )r1   T)r1   passwordr2   r5   )r7   r8   organizerContractnonceF)r<   i  )r7   )r=   r>   randomrandintr?   r@   rA   r   r   rE   rB   rD   r[   r   r   )rK   rL   rM   r>   r   r   r   r   rN   rO   rQ   r#   r#   r$   rR      s*    
zgetUserNonce.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r      s   r   c               @   s   e Zd ZdddZdS )stripeReturnAccountNc       	      C   s   |j dkr|j}|d }y^tjj|d}tjj|j}t	j
d t	j
| tj||_|d rl|d rld|_|j  W n, tk
r } zt	j
| W Y d d }~X nX dd	i}t|d
dS tddS d S )Nr,   r8   )user__idz===On recoit de stripe details_submittedcharges_enabledTr7   r5   F)r<   i  )r7   )r=   r>   Sellerr@   rA   striper	   retrievestripe_user_idrx   ry   jsondumpsstripe_account_jsonstripe_charges_enabledrE   rB   r   r   )	rK   rL   rM   r>   r8   merchantAccountaccountrO   rQ   r#   r#   r$   rR      s"    


zstripeReturnAccount.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r      s   r   c               @   s   e Zd ZejgZdddZdS )createStripeAccountLinkNc             C   s  |j dkr|j}|d }d }yrtjj|d}d| d }d| d }tjd|  tjd|  tjj	|j
||d	d
}	tj|	 |	d }d}
W nR tjk
r   d}
Y n: tk
r } zd}
tj| tdd W Y d d }~X nX |
|d}t|ddS tddS d S )Nr,   r8   )r   z%https://www.selltix.fr/striperefresh//z$https://www.selltix.fr/stripereturn/zReturn url %szrefresh_url url %saccount_onboarding)r   refresh_url
return_urltypeurlr5   NOTFOUNDERRORi  )r7   )r7   linkF)r<   i  )r=   r>   r   r@   rA   rx   ry   r   AccountLinkcreater   r?   DoesNotExistrB   errorr   r   )rK   rL   rM   r>   r8   r   seller_profiler   r   accountLinkr7   rO   rQ   r#   r#   r$   rR      s8    


zcreateStripeAccountLink.post)N)rS   rT   rU   r   r   r   rR   r#   r#   r#   r$   r      s   r   c               @   s   e Zd ZejgZdddZdS )createStripeAccountNc             C   sx  |j dkrj|j}|d }d }ytjj|d}t }||_tjj	ddddiddidd	}t
jd
 t
j| |d |_tj||_|j  dt|j d }	dt|j d }
t
jd|
  t
jd|	  tjj	|d |	|
dd}t
j| |d }d}W nV tjk
r   d}Y n< tk
rR } zd}t
j| tdd W Y d d }~X nX ||d}t|ddS tddS d S )Nr,   r8   )r[   FRexpress	requestedT)card_payments	transfers)countryr   capabilitiesz===On recoit de stripe r[   z%https://www.selltix.fr/striperefresh/r   z$https://www.selltix.fr/stripereturn/zReturn url %szrefresh_url url %sr   )r   r   r   r   r   r5   r   r   i  )r7   )r7   r   F)r<   i  )r=   r>   r?   r@   rA   r   rN   r   r	   r   rx   ry   r   r   r   r   rE   rI   r[   r   r   rB   r   r   r   )rK   rL   rM   r>   r8   r   rN   r   r   r   r   r   r7   rO   rQ   r#   r#   r$   rR      sN    




zcreateStripeAccount.post)N)rS   rT   rU   r   r   r   rR   r#   r#   r#   r$   r      s   r   c               @   s   e Zd ZdddZdS )createWalletNc             C   s`  |j dkrR|j}|d }|d }|d }td}|jdd}|j||d}	d }
d }yttjtj}|j	j
j|	d d	 }|j}|j}
tjj|d
}d|_|
|_|
|_t|j |}||_t|||_||_|j  d}W nT tjk
r   d}Y n< tk
r0 } zd}tj| tdd W Y d d }~X nX |t|ddjd}t|ddS tddS d S )Nr,   reponser8   questionChoisieenglish   )Zstrength)
passphrase    )r[   Tr5   r   r   i  )r7   F)r6   )r7   rN   )r<   i  ) r=   r>   r   generateto_seedr   rh   r   ri   rl   r   privateKeyToAccount
privateKeyr\   r?   r@   rA   generatedWalletr   	publicKeyr%   hexwordsr   rE   r   rB   rx   r   r   rH   r   )rK   rL   rM   r>   r   r8   r   Zmnemor   seed
public_keyprivate_keyr   r   rN   ZencryptedPrivateKeyr7   rO   rQ   r#   r#   r$   rR   1  sF    
zcreateWallet.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r   0  s   r   c               @   s   e Zd ZdddZdS )checkQRCodeNc             C   sn  |j dkr`|j}|d }|d }d }tjd|  ydd l}ddlm} |jd}	|j|	}
|
j	d}tjd| |j
d	}|d }|d
 }||jtj}d}d}|j|}|jj|td}|jj|j }xF|D ]>}|d }t|}djdd |D }d| }||krd}P qW W n. tk
rH } ztj| W Y d d }~X nX d|d}t|ddS tddS d S )Nr,   qrcoder   zOn va decrypter %sr   )r   asciiz	Valeur %s-rg   *0xf4f50f5d16a91980e8534872a0faf7ce4773c52aB0x3f37c414f762ddb08a5a604cc136bc9d6af37537f1429993c310fa83002ce901)r\   r]   r^   r_   c             S   s   g | ]}d j |qS )z{:02x})rM   )r`   ra   r#   r#   r$   rb     s    z$checkQRCode.post.<locals>.<listcomp>rc   FOUNDr5   )r7   valeurF)r<   i  )r7   )r=   r>   rx   ry   base64web3r   encode	b64decodedecoderC   rh   r   ri   rk   rl   rm   r   rn   ro   rp   rs   rt   rB   r   r   r   )rK   rL   rM   r>   ZqrCoderY   r   r   r   ZconvertbytesZconvertedbytesZdecodedsamplexZwalletAddresr~   r   callerr   r   rm   r   r   
ticketCoder   r   r   rO   rQ   r#   r#   r$   rR   `  sH    






zcheckQRCode.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r   _  s   r   c             C   s   t j }| j|dd |j S )NPNG)rM   )ioBytesIOrE   getvalue)imageZimg_byte_arrr#   r#   r$   get_bytes_value  s    r   c               @   s   e Zd ZdddZdS )createQRCodeNc             C   s  |j dkr|jjd}|jjd}y:dd l}ddlm} ||jtj}d}d}	|j	|}
|j
j|
td}|jjt|j }|j	|}|jjt|j }|d	 }t|}d
jdd |D }d| }dd l}|d | d t|j  }|jd}|j|}dd l}ddlm} |jd|jjddd}|j| |jdd |j |dd}t!t"|ddS  t#k
r } z>t$j%| dd l&}|j'ddd	g|j(d}|j)d t!|ddS d }~X nX n4dd l&}|j'ddd	g|j(d}|j)d t!|ddS d S )NGETZticketAddresstokenIdr   )r   r   r   )r\   r]   r^   r_   c             S   s   g | ]}d j |qS )z{:02x})rM   )r`   ra   r#   r#   r$   rb     s    z$createQRCode.get.<locals>.<listcomp>rc   r   r   )StyledPilImagerg      rd   )versionZerror_correctionZbox_sizeZborderT)Zfitz$static/assets/images/logoTixsell.png)Zimage_factoryZembeded_image_pathz	image/png)content_typed   )dtype   )*r=   r   rA   r   r   r   rh   r   ri   rk   rl   rm   r   rn   ZownerOfintrp   r   rs   rt   timerI   r   	b64encoder   Zqrcode.image.styledpilr   ZQRCode	constantsZERROR_CORRECT_Ladd_datamakeZ
make_imager   r   rB   rx   r   numpyzerosuint8fill)rK   rL   rM   rY   r   r   r   r   r   r   r   rm   ZownerAddressZcheckedOwnerAddressr   r   r   r   r   r   ZqrCodeStringmessage_bytesZbase64QrCodeStringr   r   ZqrimgrO   npr#   r#   r$   rA     sV    







zcreateQRCode.get)N)rS   rT   rU   rA   r#   r#   r#   r$   r     s   r   c               @   s   e Zd ZdddZdS )verifySignatureNc             C   sd  |j dkrV|j}|d }|d }tjd||f  d }d }yttjtj}tj	j
|d}	|	j}
d|
 }t|d}|jjj||d}tjd	|j |j f  |j |j krtjd
 d}ddlm} |j|	}ntjd d}W n< tk
r" } zd}tj| tdd W Y d d }~X nX |rB|t|t|jd}nd|i}t|ddS tddS d S )Nr,   r   	signaturez"===On verifie signature %s pour %s)r1   z9Merci de signer ce message. Le code d'authentication est:)text)r   z===Compare %s avec %sz==Singature okr5   r   )r4   z==Singature koKOi  )r7   )r7   r:   r;   r7   F)r<   i  )r=   r>   rx   ry   r   rh   r   ri   r?   r@   rA   r   r   rl   r   recoverHashlowerrF   r4   rG   rB   r   r   rI   rJ   r   )rK   rL   rM   r>   r   r   Z
walletUsedr:   r   rN   r   ZmessageToSignmessage_hashr7   r4   rO   rQ   r#   r#   r$   rR     sB    



zverifySignature.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r     s   r   c               @   s   e Zd ZdddZdS )deployOrganizerContractNc       	      C   s~   |j dkrp|j}|d }yttjtj}i }W n2 tk
rb } zd}t| tddS d }~X nX t	|ddS tddS d S )	Nr,   r   r   i  )r7   F)r<   i  )
r=   r>   r   rh   r   ri   rB   printr   r   )	rK   rL   rM   r>   r   r   rQ   rO   r7   r#   r#   r$   rR      s    
zdeployOrganizerContract.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r     s   r   c               @   s0   e Zd ZejgZejj Z	e
ZdZefZdZdS )UserListViewr[   r-   N)r[   r-   )rS   rT   rU   r   r   r   r?   r@   allquerysetrH   serializer_classfilterset_fieldsr   filter_backendsswagger_schemar#   r#   r#   r$   r     s   
r   c               @   s   e Zd ZdddZdS )	UserLoginNc             C   s   |j dkr|j}|d }|d }yTtjj||d}ddlm} |j|}dt|dd	jt	|t	|j
d
}	t|	ddS  tk
r }
 zd}tj|
 tddS d }
~
X qX n
tddS d S )Nr,   r1   r   )r1   r   r   )r4   r5   F)r6   )r7   r8   r:   r;   )r<   r   i  )r7   i  )r=   r>   r?   r@   rA   rF   r4   rG   rH   rI   rJ   r   rB   rx   ry   r   )rK   rL   rM   r>   r1   r   rN   r4   r:   rQ   rO   r7   r#   r#   r$   rR     s$    


zUserLogin.post)N)rS   rT   rU   rR   r#   r#   r#   r$   r    s   r  c               @   s&   e Zd ZejgZejj Z	e
ZdZdS )UserDetailViewN)rS   rT   rU   r   r   r   r?   r@   r   r  rH   r  r  r#   r#   r#   r$   r  3  s   
r  c               @   s>   e Zd Zejj jdjdjdZd
Ze	fZ
ddgZeZd	S )EventListViewrefOrganiserrefCategoryrefEventPageTemplater7   	eventDateslugeventContractpaymentContractN)r	  r7   r  r  r  r  )rS   rT   rU   Eventr@   r   select_relatedr  r  r   r  ordering_fieldsEventSerializerr  r#   r#   r#   r$   r  ;  s
   r  c               @   s4   e Zd ZejgZejj j	dj	dj	dZ
eZdS )EventCreateViewr	  r
  r  N)rS   rT   rU   r   r   r   r  r@   r   r  r  r  r  r#   r#   r#   r$   r  B  s   r  c               @   s4   e Zd ZejgZejj j	dj	dj	dZ
eZdS )EventDetailViewr	  r
  r  N)rS   rT   rU   r   r   r   r  r@   r   r  r  r  r  r#   r#   r#   r$   r  H  s   r  c               @   s,   e Zd Zejj jdjdjdZeZ	dS )EventDetailByIdViewr	  r
  r  N)
rS   rT   rU   r  r@   r   r  r  r  r  r#   r#   r#   r$   r  M  s   r  c               @   s2   e Zd ZejgZejj j	dZ
dZefZeZdS )EventPayeesListViewrz   N)rz   )rS   rT   rU   r   r   r   EventPayeesr@   r   r  r  r  r   r  EventPayeesSerializerr  r#   r#   r#   r$   r  Q  s
   r  c               @   s(   e Zd ZejgZejj j	dZ
eZdS )EventPayeesDetailViewrz   N)rS   rT   rU   r   r   r   r  r@   r   r  r  r  r  r#   r#   r#   r$   r  Y  s   r  c               @   s:   e Zd ZejgZejj j	dZ
dZefZeZdd ZdS )ScanUsersListViewrN   c             C   s   | j j}tjj|jd}|S )N)rN   )rL   rN   	ScanUsersr@   rr   r[   )rK   rN   r  r#   r#   r$   get_querysetf  s    zScanUsersListView.get_querysetN)rN   )rS   rT   rU   r   r   r   r  r@   r   r  r  r  r   r  ScanUsersSerializerr  r  r#   r#   r#   r$   r  _  s   r  c               @   s0   e Zd ZejgZejj j	dZ
eZdd ZdS )ScanUsersDetailViewrN   c             C   s   | j j}tjj|jd}|S )N)rN   )rL   rN   r  r@   rr   r[   )rK   rN   r  r#   r#   r$   r  o  s    z ScanUsersDetailView.get_querysetN)rS   rT   rU   r   r   r   r  r@   r   r  r  r  r  r  r#   r#   r#   r$   r  k  s   r  c               @   s&   e Zd Zejj jdjdZeZ	dS )TicketTypeListViewrz   refTicketTypeTemplateN)
rS   rT   rU   
TicketTyper@   r   r  r  TicketTypeSerializerr  r#   r#   r#   r$   r   t  s   r   c               @   s.   e Zd ZejgZejj j	dj	dZ
eZdS )TicketTypeCreateViewrz   r!  N)rS   rT   rU   r   r   r   r"  r@   r   r  r  TicketTypeCreateSerializerr  r#   r#   r#   r$   r$  z  s   r$  c               @   s.   e Zd ZejgZejj j	dj	dZ
eZdS )TicketTypeUpdateViewrz   r!  N)rS   rT   rU   r   r   r   r"  r@   r   r  r  r%  r  r#   r#   r#   r$   r&    s   r&  c               @   s.   e Zd ZejgZejj j	dj	dZ
eZdS )TicketTypeDetailViewrz   r!  N)rS   rT   rU   r   r   r   r"  r@   r   r  r  r#  r  r#   r#   r#   r$   r'    s   r'  c               @   s&   e Zd Zejj jdjdZeZ	dS )TicketTypeForEventViewrz   r!  N)
rS   rT   rU   r"  r@   r   r  r  r#  r  r#   r#   r#   r$   r(    s   r(  c               @   s(   e Zd ZejgZejj j	dZ
eZdS )TicketAPIListViewrZ   N)rS   rT   rU   r   r   r   rq   r@   r   r  r  TicketSerializerr  r#   r#   r#   r$   r)    s   r)  c               @   s(   e Zd ZejgZejj j	dZ
eZdS )TicketDetailViewrZ   N)rS   rT   rU   r   r   r   rq   r@   r   r  r  r#  r  r#   r#   r#   r$   r+    s   r+  c               @   s"   e Zd ZejgZejj Z	e
ZdS )TicketTypeTemplateDetailViewN)rS   rT   rU   r   r   r   TicketTypeTemplater@   r   r  TicketTypeTemplateSerializerr  r#   r#   r#   r$   r,    s   
r,  r,   c             C   s  | j dkr| jd }| jd }| jd }| jd }yFttjtj}tjd}|rf|jj	t
dd |jtj}|j|}|jj|td	}	|jj|}
|	jj|t|t|j }tjd
|  |	jj|t|t|j||
d}tj}|jjj||d}|jj|j}tjd|j|j|j |jj|}tjd| |d }|dkrfddi}t |ddS ddi}t |ddS W n< t!k
r } ztj"| ddi}t |ddS d }~X nX n
t#ddS d S )Nr,   reservationIdrY   amountticketTypeIdDEBUGr   )layer)r\   r]   z1Gas estimate to transact with createReservation: )fromr   )r   z1preview trx hash (trx could be in pending status)z4receipt with confirmed trx hash (after trx executed)r7   rg   r5   F)r<   r   i  )r7   )$r=   r>   r   rh   r   ri   osgetenvmiddleware_onioninjectr   rk   SELLTIX_WALLETrl   rm   r   getTransactionCountrn   createReservationr   estimate_gasrx   ry   buildTransactionSELLTIX_PRIVATE_KEYr   signTransactionsendRawTransactionrawTransactiontoHexkeccakwaitForTransactionReceiptr   rB   r   r   )rL   r/  rY   r0  r1  r   r2  r   r   rm   r   gas_estimatetransactionr   Z
signed_txnZreceiptZresultTxr7   newdictrO   r#   r#   r$   r;    sH    








r;  c             C   s  | j dkr| jd }| jd }tjt_| jd }| jd }| jd }| jd }| jd }ytjj|d	}| j	j
}	tjj|	d	}
|
jd
krtjj|
jd}tjd|  |d |
_|
j  tjdt|  tjd|
j  tjjt|dddid||
j|jjt|d}t }d|_||_||_||_|d |_t|d |_||_|j  d||j
d}tj| t|ddS  tk
r } ztj | ddi}t|ddS d }~X nX n
t!ddS d S )Nr,   r0  descriptionZfeesrefOrganizerrZ   toUser	nbTickets)r[   r0   )r-   zon creer customer %sr[   z0on va creer payment intent pour un montant de %dzet stripe customer %sZeurenabledT
on_session)r0  currencyautomatic_payment_methodssetup_future_usagerH  receipt_emailstripe_accountapplication_fee_amountr   r   r5   )r7   intent
refPaymentF)r<   r7   r   i  )r7   )"r=   r>   r   STRIPE_API_KEYr   api_keyr?   r@   rA   rN   r[   r3   Customerr   r-   rx   ry   rE   r   PaymentIntentsellerr   Paymentr7   
refUser_idr|   
jsonStripepaymentIntentr0  rK  r   rB   r   r   )rL   r0  rH  Zselltix_feesrI  rZ   rJ  rK  ZtheOrganizerr8   ZtheUsercustomerrT  paymentrG  rO   r#   r#   r$   createpaymentintent  s\    











ra  c       	      C   s   | j dkr| jd }| jd }| jd }| jd }| jd }tjj|d}||_d|_|j  t }||_	d	|_||_
||_||_|j  d
di}t|ddS tddS d S )Nr,   r/  rJ  rY   rZ   rU  )r[   rg   r   r7   r5   F)r<   i  )r7   )r=   r>   r[  r@   rA   r\  r7   rE   TicketToMintrefPayment_idr/  r|   r   r   )	rL   r/  rJ  rY   rZ   rU  r`  ZticketToMintrG  r#   r#   r$   askMintTicket	  s(    





rd  )[django.core.paginatorr   django.httpr   django.urlsr   eth_account.messagesr   tixsellr   r   r   web3.middlewarer   eth_accountr	   eth_account.signers.localr
   api.serializersdjango.shortcutsr   r   rest_frameworkr   r   r   PILr   Zdjango_filters.rest_frameworkr   mnemonicr   django.corer   loggingZrest_framework.permissionsr   rest_framework.decoratorsr   r   r   r   r   r   r   rj   r   	getLoggerrx   rI   r%   r*   ListAPIViewr+   rV   r   r   r   r   r   r   r   r   r   r   ListCreateAPIViewr   r  RetrieveUpdateDestroyAPIViewr  r  CreateAPIViewr  r  RetrieveAPIViewr  r  r  r  r  r   r$  r&  r'  r(  r)  r+  r,  r;  ra  rd  r#   r#   r#   r$   <module>   s   
 N'7/4;-	19