a
    Ig                     @   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
    Zdjango_debug_toolbarT)requiredZwidgetc                    s8   | dd }|rd| |i}t j|d|i| d S )Ninitialsigned)popsignsuper__init__)selfargskwargsr	   	__class__ O/var/www/html/django/DPS/env/lib/python3.9/site-packages/debug_toolbar/forms.pyr      s    zSignedDataForm.__init__c              
   C   s\   z&t tj| jd| jd }|W S  tjyV } ztd|W Y d }~n
d }~0 0 d S )Nsaltr
   zBad signature)	jsonloadsr   Signerr   Zunsigncleaned_dataZBadSignaturer   )r   Zverifiedexcr   r   r   clean_signed#   s    zSignedDataForm.clean_signedc                 C   s   |   o| jd S )Nr
   )Z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       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   Z	CharFieldZHiddenInputr
   r   r   r   classmethodr   __classcell__r   r   r   r   r   	   s   	r   )r   djangor   Zdjango.corer   Zdjango.core.exceptionsr   Zdjango.utils.encodingr   ZFormr   r   r   r   r   <module>   s
   