
    ]j~                     f    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ej                        Z
y)    N)forms)signing)ValidationError)	force_strc                   ~     e Zd ZdZdZ ej                  dej                        Z fdZ	d Z
d Zed        Z x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
    Or wrap the FBV with ``debug_toolbar.decorators.signed_data_view``
    django_debug_toolbarT)requiredwidgetc                 v    |j                  dd       }|rd| j                  |      i}t        |   |d|i| y )Ninitialsigned)popsignsuper__init__)selfargskwargsr   	__class__s       =/root/env/lib/python3.12/site-packages/debug_toolbar/forms.pyr   zSignedDataForm.__init__   s@    **Y-7!34G$::6:    c                     	 t        j                  t        j                  | j                        j                  | j                  d               }|S # t        j                  $ r t        d      w xY w)Nsaltr   zBad signature)	jsonloadsr   Signerr   unsigncleaned_dataBadSignaturer   )r   verifieds     r   clean_signedzSignedDataForm.clean_signed$   sb    	3zzDII.55d6G6G6QRH O## 	3!/22	3s   AA A2c                 D    | j                         xr | j                  d   S )Nr   )is_validr    )r   s    r   verified_datazSignedDataForm.verified_data-   s    }}>4#4#4X#>>r   c                    t        |j                         d       }t        j                  | j                        j                  t        j                  |D ci c]  \  }}|t        |       c}}            S c c}}w )Nc                     | d   S )Nr    )items    r   <lambda>z%SignedDataForm.sign.<locals>.<lambda>2   s
    d1g r   )keyr   )	sorteditemsr   r   r   r   r   dumpsr   )clsdatar.   r,   values        r   r   zSignedDataForm.sign0   s]    tzz|)=>~~388,11JJF*#uYu--FG
 	
Fs   A<)__name__
__module____qualname____doc__r   r   	CharFieldHiddenInputr   r   r#   r&   classmethodr   __classcell__)r   s   @r   r   r   	   sJ    " "DU__d53D3DEF;3? 
 
r   r   )r   djangor   django.corer   django.core.exceptionsr   django.utils.encodingr   Formr   r)   r   r   <module>r@      s$       2 +,
UZZ ,
r   