o
    l>jY                     @   s   d dl mZ ddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZ 	 edddd	G d
d de	ZeddddG dd deZG dd deZdS )    )	dataclass   )DefaultClientDataCollector)%AuthenticationExtensionsPaymentInputsPaymentCredentialInstrumentPaymentCurrencyAmount)_JsonDataObject)AuthenticatorAttachmentCollectedClientData"PublicKeyCredentialCreationOptions!PublicKeyCredentialRequestOptionsResidentKeyRequirementUserVerificationRequirementFT)eqfrozenkw_onlyc                   @   sN   e Zd ZU eed< eed< dZedB ed< dZedB ed< eed< eed< dS )$CollectedClientAdditionalPaymentDatarp_id
top_originN
payee_namepayee_origintotal
instrument)	__name__
__module____qualname__str__annotations__r   r   r   r    r   r   B/home/thesage/.local/lib/python3.10/site-packages/fido2/payment.pyr   5   s   
 r   )initr   r   c                       sZ   e Zd ZU eed< def fddZe	ddedeeB ded	e	d
e
f
 fddZ  ZS )CollectedClientPaymentDatapayment
serializedc                    s.   t  | t| jd }t| d| d S )Nr"   )super__init__r   	from_dict_dataobject__setattr__)selfr#   r"   	__class__r   r   r%   C   s   z#CollectedClientPaymentData.__init__Ftype	challengeorigincross_originreturnc              
      s(   t  jd||||t|dd|S )Nr"   )r-   r.   r/   r0   r"   r   )r$   createdictpop)clsr-   r.   r/   r0   kwargsr+   r   r   r2   I   s   	z!CollectedClientPaymentData.create)F)r   r   r   r   r   bytesr%   classmethodr   boolr
   r2   __classcell__r   r   r+   r   r!   ?   s    
 r!   c                       s    e Zd ZdZ fddZ  ZS )PaymentClientDataCollectora  ClientDataCollector for the WebAuthn "payment" extension.

    This class can be used together with the CTAP2 "thirdPartyPayment" extension to
    enable third-party payment confirmation. It collects the necessary client data and
    validates the options provided by the client.
    c                    s   |  || j}|jpi }t|d}|r`|jr`t|tr@|j	}|r;|j
tjtjfvs;|jtjtjfvs;|jtjkr?tdn t|tr`tjd| j|jt|j|j|j|j|j|jdd|fS |  || j t! "|S )Nr"   z%Invalid options for payment extensionzpayment.get)r   r   r   r   r   r   )r-   r/   r.   r"   )#	get_rp_id_origin
extensionsr   r&   get
is_payment
isinstancer   authenticator_selectionauthenticator_attachmentr	   PLATFORMCROSS_PLATFORMresident_keyr   REQUIRED	PREFERREDuser_verificationr   
ValueErrorr   r!   r2   r.   r   r   r   r   r   r   r   verify_rp_idr$   collect_client_data)r*   optionsr   inputsdataselr+   r   r   rL   d   sN   



z.PaymentClientDataCollector.collect_client_data)r   r   r   __doc__rL   r:   r   r   r+   r   r;   \   s    r;   N)dataclassesr   clientr   ctap2.extensionsr   r   r   utilsr   webauthnr	   r
   r   r   r   r   r   r!   r;   r   r   r   r   <module>   s    		