o
    `oi                     @   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__ [/var/www/html/kuke-dev/django-kuke/venv/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   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   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   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    