o
    >h                     @   sN   d dl 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j	Z
dS )    N)forms)signing)ValidationError	force_strc                       sP   e Zd ZdZdZejdejdZ fddZ	dd Z
d	d
 Zedd Z  ZS )SignedDataForma  Helper form that wraps a form to validate its contents on post.

    class PanelForm(forms.Form):
        # fields

    On render:
        form = SignedDataForm(initial=PanelForm(initial=data).initial)

    On POST:
        signed_form = SignedDataForm(request.POST)
        if signed_form.is_valid():
            panel_form = PanelForm(signed_form.verified_data)
            if panel_form.is_valid():
                # Success
    django_debug_toolbarT)requiredwidgetc                    s8   | dd }|rd| |i}t j|d|i| d S )Ninitialsigned)popsignsuper__init__)selfargskwargsr   	__class__ s/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/debug_toolbar/forms.pyr      s   zSignedDataForm.__init__c              
   C   sL   zt tj| jd| jd }|W S  tjy% } ztd|d }~ww )Nsaltr   zBad signature)	jsonloadsr   Signerr   unsigncleaned_dataBadSignaturer   )r   verifiedexcr   r   r   clean_signed#   s   
zSignedDataForm.clean_signedc                 C   s   |   o| jd S )Nr   )is_validr   )r   r   r   r   verified_data,   s   zSignedDataForm.verified_datac                 C   s(   t j| jdtdd | D S )Nr   c                 S   s   i | ]	\}}|t |qS r   r   ).0keyvaluer   r   r   
<dictcomp>2   s    z'SignedDataForm.sign.<locals>.<dictcomp>)r   r   r   r   r   dumpsitems)clsdatar   r   r   r   /   s   zSignedDataForm.sign)__name__
__module____qualname____doc__r   r   	CharFieldHiddenInputr   r   r"   r$   classmethodr   __classcell__r   r   r   r   r   	   s    	r   )r   djangor   django.corer   django.core.exceptionsr   django.utils.encodingr   Formr   r   r   r   r   <module>   s    