
    >Tfl@                        d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZmZ d d
lmZmZ d dlmZ d dlm Z m!Z! d dl"T d dl#T dZ$ G d de          Z% G d dee          Z& G d de&          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d de          Z, G d d e          Z- G d! d"ee          Z. G d# d$e          Z/d%S )&    )forms)ValidationError)gettext_lazy)Device	Interface)	IPAddressRouteTargetVLAN)NetBoxModelForm)TenancyForm)CommentFieldDynamicModelChoiceFieldDynamicModelMultipleChoiceField	SlugField)FieldSetTabbedGroups)add_blank_choiceget_field_value)
HTMXSelect)VirtualMachineVMInterface)*)IKEPolicyFormIKEProposalFormIPSecPolicyFormIPSecProfileFormIPSecProposalForm	L2VPNFormL2VPNTerminationFormTunnelCreateForm
TunnelFormTunnelGroupFormTunnelTerminationFormc            	       p    e Zd Z e            Z edddd ed                    fZ G d d          Zd	S )
r"   nameslugdescriptiontagsTunnel Groupr%   c                       e Zd ZeZg dZdS )TunnelGroupForm.Meta)r%   r&   r'   r(   N)__name__
__module____qualname__TunnelGroupmodelfields     :/var/www/html/netbox-4.1.3/netbox/vpn/forms/model_forms.pyMetar,   '   $        
 
 
r4   r6   N)	r-   r.   r/   r   r&   r   _	fieldsetsr6   r3   r4   r5   r"   r"       sr        9;;D 	QQ~=N=NOOOI
 
 
 
 
 
 
 
 
 
r4   r"   c                      e Zd Z eej                                         ed          d          Z ee	j                                         ed          d          Z
 e            Z eddddd	d
d ed                     ed ed                     edd ed                    fZ G d d          ZdS )r!   r)   F)querysetlabelrequiredzIPSec Profiler%   statusgroupencapsulationr'   	tunnel_idr(   Tunnelr*   ipsec_profileSecuritytenant_grouptenantTenancyc                       e Zd ZeZg dZdS )TunnelForm.Meta)r%   r>   r?   r@   r'   rA   rC   rE   rF   commentsr(   N)r-   r.   r/   rB   r1   r2   r3   r4   r5   r6   rI   A   s$        
 
 
r4   r6   N)r-   r.   r/   r   r0   objectsallr8   r?   IPSecProfilerC   r   rJ   r   r9   r6   r3   r4   r5   r!   r!   .   s(       ##$((**a  E
 ,+%))++a    M
 |~~H 	7O]KY_fgfghpfqfqrrrqq}}555)===I
 
 
 
 
 
 
 
 
 
r4   r!   c                       e Zd Z ej         ee          d ed                    Z ej        e	d e
             ed                    Z eej                                        dd ed                    Z eej                                        d ed	          d
di          Z eej                                         ed          dd
di          Z ej         ee          d ed                    Z ej        e	d e
             ed                    Z eej                                        dd ed                    Z eej                                        d ed	          d
di          Z eej                                        d ed          d
di          Z eddddddd ed                     ed ed                     edd ed                     eddd d!d" ed#                     ed$d%d&d'd( ed)                    fZd*d+ fd,
Z fd-Z fd.Z xZS )/r    FRole)choicesr=   r<   Type)rP   r=   widgetr<   Tr   r;   r=   selectorr<   Tunnel interface	device_id$termination1_parent)r;   r=   r<   query_params
Outside IPr;   r<   r=   rX   $termination2_parentr%   r>   r?   r@   r'   rA   r(   rB   r*   rC   rD   rE   rF   rG   termination1_roletermination1_typetermination1_parenttermination1_terminationtermination1_outside_ipzFirst Terminationtermination2_roletermination2_typetermination2_parenttermination2_terminationtermination2_outside_ipzSecond TerminationNinitialc                    t                      j        |d|i| t          | d          t          j        k    rt          d          | j        d         _        t          j	        
                                | j        d         _        t          j	        
                                | j        d         _        | j        d         j                            ddi           | j        d         j                            ddi           t          | d	          t          j        k    rt          d          | j        d
         _        t          j	        
                                | j        d
         _        t          j	        
                                | j        d         _        | j        d         j                            ddi           | j        d         j                            ddi           d S d S )Nrg   r]   Virtual Machiner^   r_   virtual_machine_idrW   r`   rb   rc   rd   r[   re   )super__init__r   TunnelTerminationTypeChoicesTYPE_VIRTUALMACHINEr8   r2   r<   r   rK   rL   r;   r   rR   add_query_paramsselfrg   argskwargs	__class__s       r5   rl   zTunnelCreateForm.__init__   s   $::6:::4!4559U9iii789J7K7KDK-.4:H:P:T:T:V:VDK-.7?J?R?V?V?X?XDK23<K23:KK$&<M    K129JJ$&<L    4!4559U9iii789J7K7KDK-.4:H:P:T:T:V:VDK-.7?J?R?V?V?X?XDK23<K23:KK$&<M    K129JJ$&<L      jir4   c                 (    t                                                       dD ]}| d| d| df}g || dR }t           fd|D                       r5|D ]4} j        |         s#t	          j        |t          d          i          3d S d S )N)termination1termination2_role_parent_termination_outside_ipc                 *    g | ]}j         |         S r3   )cleaned_data).0paramrq   s     r5   
<listcomp>z*TunnelCreateForm.clean.<locals>.<listcomp>   s!    AAAU!%(AAAr4   z7This parameter is required when defining a termination.)rk   cleananyr}   r   r   r8   )rq   termrequired_parameters
parametersr   rt   s   `    r5   r   zTunnelCreateForm.clean   s     5 	 	D4 0 0 0T2G2G2G#$$$$ JJ AAAAjAAABB 	,  (/ /q!Z[[1   	 	 r4   c                     t                      j        |i |}| j        d         rDt          j                            || j        d         | j        d         | j        d                    | j        d         rQt          j                            || j        d         | j        d         | j                            d                     |S )Nr_   r\   r`   )tunnelroletermination
outside_iprd   ra   re   )rk   saver}   TunnelTerminationrK   createget)rq   rr   rs   instancert   s       r5   r   zTunnelCreateForm.save   s    577<000 78 	%,,&':; -.HI,-FG	 -    78 	%,,&':; -.HI,001JKK	 -    r4   ) r-   r.   r/   r   ChoiceFieldr   TunnelTerminationRoleChoicesr8   r\   rm   r   r]   r   r   rK   rL   r^   r   r_   r   r`   ra   rb   rc   rd   re   r   r9   rl   r   r   __classcell__rt   s   @r5   r    r    I   s       ))  !=>>aii  
 *),z||aii	   21##%%akk	    76"&&((a"##/
	      65"&&((aoo/
	   *)  !=>>aii  
 *),z||aii	   21##%%akk	    76"&&((a"##/
	      65"&&((aoo/
	   	7O]KY_fgfghpfqfqrrrqq}}555)===!46KMg%AA.A,B,B	D 	D 	D 	!46KMg%AA.B,C,C	E 	E 	E
I '+       2    &        r4   r    c            	           e Zd Z eej                                                  Z ej	        e
 e             ed                    Z eej                                        d ed                    Z eej                                         ed          dd	i
          Z eej                                         ed          ddd	i          Z eddddddd          fZ G d d          Zdd fd
Z fdZ xZS )r#   )r;   rQ   )rP   rR   r<   Tr   )r;   rT   r<   rU   rV   $parent)r;   r<   rX   rY   FrZ   r   r   typeparentr   r   r(   c                       e Zd ZeZg dZdS )TunnelTerminationForm.Meta)r   r   r   r   r(   N)r-   r.   r/   r   r1   r2   r3   r4   r5   r6   r     s$        !
 
 
r4   r6   Nrf   c                    t                      j        |d|i| t          | d          L| j        j        r@t          | j        j        j        t                    rt          j
        | j        d         _        t          | d          t          j
        k    rt          d          | j        d         _        t          j                                        | j        d         _        d| j        d         j        j        d<   t(          j                                        | j        d         _        | j        d         j                            dd	i           | j        d
         j                            dd	i           | j        j        r?| j        j        j        | j        d         _        | j        j        | j        d         _        d S d S )Nrg   r   ri   r   zvirtualization.virtualmachinerT   r   rj   r   r   )rk   rl   r   r   pk
isinstancer   parent_objectr   rm   rn   r2   rg   r8   r<   rK   rL   r;   rR   attrsr   ro   rp   s       r5   rl   zTunnelTerminationForm.__init__  s   $::6:::D&))1  2%/0I0WYg%h%h 2*F*ZDK' 4((,H,\\\*+,=*>*>DK!'-;-C-G-G-I-IDK!*=\DK!(.z:2=2E2I2I2K2KDK&/K&->>$i@    K%,==$i?    = 	K,0M,E,SDK!)151JDK&...	K 	Kr4   c                     t                                                       | j                            d          | j        _        d S )Nr   )rk   r   r}   r   r   r   )rq   rt   s    r5   r   zTunnelTerminationForm.clean   s7     %)$5$9$9-$H$H!!!r4   )r-   r.   r/   r   rB   rK   rL   r   r   r   rm   r   r8   r   r   r   r   r   r   r   r   r9   r6   rl   r   r   r   s   @r5   r#   r#      s       $$##%%  F 5,z||aii  D
 %$##%%akk  F
 *)"&&((a"##
  K )("&&((aoo
	  J 	668]LRXYYI
 
 
 
 
 
 
 
 '+ K K K K K K K0I I I I I I I I Ir4   r#   c                       e Zd Z eddd ed                     edddd	d
 ed                    fZ G d d          ZdS )r   r%   r'   r(   Proposalr*   authentication_methodencryption_algorithmauthentication_algorithmr?   sa_lifetime
Parametersc                       e Zd ZeZg dZdS )IKEProposalForm.Meta)	r%   r'   r   r   r   r?   r   rJ   r(   N)r-   r.   r/   IKEProposalr1   r2   r3   r4   r5   r6   r   1  s$        
 
 
r4   r6   Nr-   r.   r/   r   r8   r9   r6   r3   r4   r5   r   r   '  s         	QQz]]CCC#%;=WY`bo<	
 	
 	
I
 
 
 
 
 
 
 
 
 
r4   r   c            
           e Zd Z eej                                         ed                    Z e	ddd ed                     e	dd	d
d ed                    fZ
 G d d          ZdS )r   	Proposalsr;   r<   r%   r'   r(   Policyr*   versionmode	proposalspreshared_keyr   c                       e Zd ZeZg dZdS )IKEPolicyForm.Meta)r%   r'   r   r   r   r   rJ   r(   N)r-   r.   r/   	IKEPolicyr1   r2   r3   r4   r5   r6   r   D  s$        
 
 
r4   r6   N)r-   r.   r/   r   r   rK   rL   r8   r   r   r9   r6   r3   r4   r5   r   r   9  s        //$((**ann  I 	QQx[[AAAFKqqWWWI

 
 
 
 
 
 
 
 
 
r4   r   c            
           e Zd Z eddd ed                     edddd	 ed
                    fZ G d d          ZdS )r   r%   r'   r(   r   r*   r   r   sa_lifetime_secondssa_lifetime_datar   c                       e Zd ZeZg dZdS )IPSecProposalForm.Meta)r%   r'   r   r   r   r   rJ   r(   N)r-   r.   r/   IPSecProposalr1   r2   r3   r4   r5   r6   r   U  s$        
 
 
r4   r6   Nr   r3   r4   r5   r   r   K  s         	QQz]]CCC"$>@UWi<	
 	
 	
I
 
 
 
 
 
 
 
 
 
r4   r   c                       e Zd Z eej                                         ed                    Z e	ddd ed                     e	dd	 ed
                    fZ
 G d d          ZdS )r   r   r   r%   r'   r(   r   r*   r   	pfs_groupr   c                       e Zd ZeZg dZdS )IPSecPolicyForm.Meta)r%   r'   r   r   rJ   r(   N)r-   r.   r/   IPSecPolicyr1   r2   r3   r4   r5   r6   r   h  r7   r4   r6   N)r-   r.   r/   r   r   rK   rL   r8   r   r   r9   r6   r3   r4   r5   r   r   ]  s        //&**,,ann  I 	QQx[[AAAk,@@@I

 
 
 
 
 
 
 
 
 
r4   r   c            	       P   e Zd Z eej                                         ed                    Z ee	j                                         ed                    Z
 e            Z eddd ed                     ed	d
d ed                    fZ G d d          ZdS )r   z
IKE policyr   zIPSec policyr%   r'   r(   Profiler*   r   
ike_policyipsec_policyr   c                       e Zd ZeZg dZdS )IPSecProfileForm.Meta)r%   r'   r   r   r   r'   rJ   r(   N)r-   r.   r/   rM   r1   r2   r3   r4   r5   r6   r     s$        
 
 
r4   r6   N)r-   r.   r/   r   r   rK   rL   r8   r   r   r   r   rJ   r   r9   r6   r3   r4   r5   r   r   o  s        (("&&((aoo  J +*$((**a  L |~~H 	QQy\\BBB~AAlOOLLLI

 
 
 
 
 
 
 
 
 
r4   r   c                      e Zd Z e            Z e ed          ej        	                                d          Z
 e ed          ej        	                                d          Z e            Z eddddd	d
 ed                     edd ed                     edd ed                    fZ G d d          ZdS )r   zImport targetsF)r<   r;   r=   zExport targetsr%   r&   r   
identifierr'   r(   L2VPNr*   import_targetsexport_targetszRoute TargetsrE   rF   rG   c                       e Zd ZeZdZdS )L2VPNForm.Meta)
r%   r&   r   r   r   r   rF   r'   rJ   r(   N)r-   r.   r/   r   r1   r2   r3   r4   r5   r6   r     s        
r4   r6   N)r-   r.   r/   r   r&   r   r8   r	   rK   rL   r   r   r   rJ   r   r9   r6   r3   r4   r5   r   r     s8       9;;D44a !!$((**  N
 54a !!$((**  N
 |~~H 	}fSTSTU\S]S]^^^!#3!!O:L:LMMM)===I
 
 
 
 
 
 
 
 
 
r4   r   c                   d    e Zd Z eej                                        di  ed                    Z ee	j                                        dd ed                    Z
 e ed          ej                                        dd          Z eej                                        dd ed                    Z ed	 e ed
 ed                     ed ed                     ed ed                              d          fZ G d d          Z fdZ fdZ xZS )r   Tr   )r;   r=   rX   r<   Fr
   rS   r   )r<   r;   r=   rT   l2vpnvlanr*   	interfacer   vminterfaceri   r(   c                       e Zd ZeZdZdS )L2VPNTerminationForm.Meta)r   r(   N)r-   r.   r/   L2VPNTerminationr1   r2   r3   r4   r5   r6   r     s         "r4   r6   c                    |                     d          }|                     di                                           }|rvt          |j                  t          u r|j        |d<   nKt          |j                  t
          u r|j        |d<   n%t          |j                  t          u r
|j        |d<   ||d<    t                      j        |i | d S )Nr   rg   r   r   r   )	r   copyr   assigned_objectr   r
   r   rk   rl   )rq   rr   rs   r   rg   rt   s        r5   rl   zL2VPNTerminationForm.__init__  s    ::j))**Y++0022 	(H,--::'/'?$$h.//477"*":h.//;>>)1)A& 'F9$)&)))))r4   c                    t                                                       | j                            d          }| j                            d          }| j                            d          }|s |s|st	          t          d                    t          d |||fD                       dk    rt	          t          d                    |p|p|| j        _        d S )Nr   r   r   z0A termination must specify an interface or VLAN.c                     g | ]}||S r3   r3   )r~   xs     r5   r   z.L2VPNTerminationForm.clean.<locals>.<listcomp>  s    ???aQ????r4      zJA termination can only have one terminating object (an interface or VLAN).)	rk   r   r}   r   r   r8   lenr   r   )rq   r   r   r   rt   s       r5   r   zL2VPNTerminationForm.clean  s    %))+66	'++M:: $$V,, 	Y[ 	YD 	Y!!$V"W"WXXX??I{D9???@@1DD!!$p"q"qrrr(1(H[(HD%%%r4   )r-   r.   r/   r   r   rK   rL   r8   r   r
   r   r   r   r   r   r   r   r9   r6   rl   r   r   r   s   @r5   r   r     s       ##""$$ajj	  E #"!!##aii	  D ('ann"&&((	  I *)$((**ann	  K 	Laaii00011X;;777QQ/@-A-ABBB 
 	
 	

I# # # # # # # #* * * * *I I I I I I I I Ir4   r   N)0djangor   django.core.exceptionsr   django.utils.translationr   r8   dcim.modelsr   r   ipam.modelsr   r	   r
   netbox.formsr   tenancy.formsr   utilities.forms.fieldsr   r   r   r   utilities.forms.renderingr   r   utilities.forms.utilsr   r   utilities.forms.widgetsr   virtualization.modelsr   r   vpn.choices
vpn.models__all__r"   r!   r    r#   r   r   r   r   r   r   r   r3   r4   r5   <module>r      s<         2 2 2 2 2 2 6 6 6 6 6 6 ) ) ) ) ) ) ) ) 4 4 4 4 4 4 4 4 4 4 ( ( ( ( ( ( % % % % % % t t t t t t t t t t t t < < < < < < < < C C C C C C C C . . . . . . = = = = = = = =        
 
 
 
 
o 
 
 

 
 
 
 
o 
 
 
6T T T T Tz T T TnDI DI DI DI DIO DI DI DIN
 
 
 
 
o 
 
 
$
 
 
 
 
O 
 
 
$
 
 
 
 
 
 
 
$
 
 
 
 
o 
 
 
$
 
 
 
 
 
 
 
6
 
 
 
 
_ 
 
 
8EI EI EI EI EI? EI EI EI EI EIr4   