
    >Tf5                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlT d dlT d dlmZ d dlmZmZ d dlmZ d dl m!Z! d dl"m#Z# dZ$ G d dej%        j&                  Z' G d dej(        e'          Z) G d dej(                  Z* G d de*          Z+ G d dej(                  Z, G d dej(                  Z- G d  d!ej(                  Z.d"S )#    )forms)settings)password_validation)SimpleArrayField)
FieldError)	mark_safe)gettext_lazy)
ObjectType)IPNetworkFormField)prefix_validator)PREFERENCES)*)flatten_dict)ContentTypeMultipleChoiceFieldDynamicModelMultipleChoiceField)FieldSet)DateTimePicker)qs_filter_from_constraints)	GroupFormObjectPermissionForm	TokenFormUserConfigFormUserFormUserTokenFormr   c                        e Zd Z fdZ xZS )UserConfigFormMetaclassc                    i }t          j                    D ]\  }}|j        r
|j         dnd}d| d}|j        r|j         d| }|j        x}	rd|	 d| }|j        |j        t          |          |j        dt          j	        d}
t          j
        d	i |
||<   |                    |           t                                          | |||          S )
Nz<br /> z<code>z</code>z8<span class="text-danger"><i class="mdi mdi-alert"></i> z</span><br />F)labelchoices	help_textcoercerequiredwidget )r   itemsdescriptionwarningr   r    r   r"   r   SelectTypedChoiceFieldupdatesuper__new__)mcsnamebasesattrspreference_fields
field_name
preferencer'   r!   r(   field_kwargs	__class__s              </var/www/html/netbox-4.1.3/netbox/users/forms/model_forms.pyr-   zUserConfigFormMetaclass.__new__"   s$    &1&7&9&9 	S 	S"J
?I?U]Z3;;;;[]K4444I% I)5HHYHH	$,,w yxW^xxmvxx	#)%-&y11$+!, L -2,B,R,R\,R,Rj))&'''wwsD%777    )__name__
__module____qualname__r-   __classcell__r6   s   @r7   r   r       s8        8 8 8 8 8 8 8 8 8r8   r   c            	            e Zd Z edddd ed                     ed ed                    fZ ej        g d	
          Z G d d          Z	dd fd
Z
 fdZed             Z xZS )r   zlocale.languagezpagination.per_pagezpagination.placementzui.htmx_navigationzUser Interfacer/   data_formatMiscellaneousF)r    r#   c                       e Zd ZeZdZdS )UserConfigForm.Metar%   N)r9   r:   r;   
UserConfigmodelfieldsr%   r8   r7   MetarC   I   s        r8   rG   N)instancec                    t          |j                  }||d<    t                      j        |d|i| d |j                            dg           D             | j        d         _        d S )NinitialrH   c              3   $   K   | ]}d | dfV  dS )ztables.r   Nr%   ).0
table_names     r7   	<genexpr>z*UserConfigForm.__init__.<locals>.<genexpr>V   sA       %
 %
-7#z##R(%
 %
 %
 %
 %
 %
r8   tablespk)r   datar,   __init__getrF   r    )selfrH   argskwargsinitial_datar6   s        r7   rR   zUserConfigForm.__init__M   s     $HM22(y$<<V<<<%
 %
;C=;L;LXWY;Z;Z%
 %
 %
D!!!r8   c                    | j                                         D ])\  }}|dk    r| j                            ||d           *| j         d         D ]}| j                            |            t                      j        |i |S )NrP   F)commit)cleaned_datar&   rH   setclearr,   save)rT   rU   rV   	pref_namevaluer4   r6   s         r7   r]   zUserConfigForm.saveZ   s     !% 1 7 7 9 9 	> 	>IuD  Miu==== +D1 	, 	,JM
++++uww|T,V,,,r8   c                 H    d | j                                         D             S )Nc                 <    g | ]}|                     d           |S )zplugins.)
startswith)rL   r/   s     r7   
<listcomp>z0UserConfigForm.plugin_fields.<locals>.<listcomp>j   s9     
 
 
4??:3N3N

 
 
r8   )rF   keysrT   s    r7   plugin_fieldszUserConfigForm.plugin_fieldsh   s1    
 
![--//
 
 
 	
r8   )r9   r:   r;   r   _	fieldsetsr   MultipleChoiceFieldrP   rG   rR   r]   propertyrf   r<   r=   s   @r7   r   r   ;   s       46LNb#$$	
 	
 	
 	QQ%7%7888I 
#	"
 
 
B
        (, 
 
 
 
 
 
 
- - - - - 
 
 X
 
 
 
 
r8   r   )	metaclassc                        e Zd Z ej         ed           ed           ej        ddi                    Z e e	e
g          d ed	           ed
                    Z G d d          Z fdZ xZS )r   KeyzKeys must be at least 40 characters in length. <strong>Be sure to record your key</strong> prior to submitting this form, as it may no longer be accessible once the token has been created.zdata-clipboardtruer1   )r   r!   r$   )
validatorsFzAllowed IPszAllowed IPv4/IPv6 networks from where the token can be used. Leave blank for no restrictions. Example: <code>10.1.1.0/24,192.168.10.16/32,2001:db8:1::/64</code>)
base_fieldr#   r   r!   c                   2    e Zd ZeZg dZd e            iZdS )UserTokenForm.Meta)keywrite_enabledexpiresr'   allowed_ipsrv   Nr9   r:   r;   TokenrE   rF   r   widgetsr%   r8   r7   rG   rs      :        
 
 
 ~~''
r8   rG   c                     t                      j        |i | | j        j        rt          j        s| j        d= | j        j        s=| j                            d          s%t          
                                | j        d<   d S d S d S )Nrt   )r,   rR   rH   rP   r   ALLOW_TOKEN_RETRIEVALrF   rJ   rS   ry   generate_keyrT   rU   rV   r6   s      r7   rR   zUserTokenForm.__init__   s    $)&))) = 	#H$B 	#E" } 	7(8(8(?(? 	7"'"4"4"6"6DL	7 	7 	7 	7r8   )r9   r:   r;   r   	CharFieldrg   	TextInputrt   r   r   r   rw   rG   rR   r<   r=   s   @r7   r   r   o   s       
%/ahh!g
 
 u#V,
 
 
	 	 	C #"%%2B1CDDDa!Q
 
	  K
 
 
 
 
 
 
 
	7 	7 	7 	7 	7 	7 	7 	7 	7r8   r   c                       e Zd Z ej        ej                            d           ed                    Z	 G d d          Z
dS )r   usernameUser)querysetr   c                   2    e Zd ZeZg dZd e            iZdS )TokenForm.Meta)userrt   ru   rv   r'   rw   rv   Nrx   r%   r8   r7   rG   r      r{   r8   rG   N)r9   r:   r;   r   ModelChoiceFieldr   objectsorder_byrg   r   rG   r%   r8   r7   r   r      ss        !5!&&z22aii  D

 
 
 
 
 
 
 
 
 
r8   r   c                   r    e Zd Z ej         ed           ej                    d          Z ej         ed           ej                    d ed                    Z e	 ed          de
j                                        	          Z e	d ed
          ej                                                  Z edddddd ed                     ed ed                     eddd ed                     ed ed
                    fZ G d d          Z fdZ fdZd Z xZS )r   PasswordT)r   r$   r#   zConfirm passwordz4Enter the same password as before, for verification.)r   r$   r#   r!   GroupsFr   r#   r   Permissionsr#   r   r   r   passwordconfirm_password
first_name	last_nameemailr   r?   groups	is_activeis_staffis_superuserStatusobject_permissionsc                       e Zd ZeZg dZdS )UserForm.Meta)	r   r   r   r   r   r   r   r   r   N)r9   r:   r;   r   rE   rF   r%   r8   r7   rG   r      s$        
 
 
r8   rG   c                      t                      j        |i | | j        j        r&d| j        d         _        d| j        d         _        d S d S )NFr   r   )r,   rR   rH   rP   rF   r#   r   s      r7   rR   zUserForm.__init__   s[    $)&)))= 	=/4DK
#,7<DK*+444	= 	=r8   c                      t                      j        |i |}| j                            d          rA|                    | j                            d                     |                                 |S )Nr   )r,   r]   rZ   rS   set_passwordrT   rU   rV   rH   r6   s       r7   r]   zUserForm.save   so    577<000   ,, 	!!$"3"7"7
"C"CDDDMMOOOr8   c                    | j         d         r=| j         d         | j         d         k    r!t          j        t          d                    | j         d         r't	          j        | j         d         | j                   d S d S )Nr   r   z>Passwords do not match! Please check your input and try again.)rZ   r   ValidationErrorrg   r   validate_passwordrH   re   s    r7   cleanzUserForm.clean   s     Z( 	mT->z-JdN_`rNs-s-s'*j(k(klll Z( 	`1$2CJ2OQUQ^_____	` 	`r8   )r9   r:   r;   r   r   rg   PasswordInputr   r   r   Groupr   allr   ObjectPermissionr   r   rh   rG   rR   r]   r   r<   r=   s   @r7   r   r      s       ua
mm"u"$$  H
 'ua"##"u"$$!JKK	   -,akk""$$  F
 98a!)--//   	Z);\;X_fgfghnfofoppp(,,,j.qq{{KKK%AAm,<,<===	I
 
 
 
 
 
 
 
= = = = =    ` ` ` ` ` ` `r8   r   c                   h    e Zd Z e ed          dej                                                  Z ed ed          e	j                                                  Z
 edd           ed ed          	           ed
 ed          	          fZ G d d          Z fdZ fdZ xZS )r   UsersFr   r   r   r/   r'   usersr?   r   c                       e Zd ZeZg dZdS )GroupForm.Meta)r/   r'   r   r   N)r9   r:   r;   r   rE   rF   r%   r8   r7   rG   r      s$        
 
 
r8   rG   c                      t                      j        |i | | j        j        r3| j        j                            dd          | j        d         _        d S d S )NidTflatr   )r,   rR   rH   rP   r   values_listrF   rJ   r   s      r7   rR   zGroupForm.__init__  si    $)&))) = 	\+/=+>+J+J4VZ+J+[+[DK (((	\ 	\r8   c                      t                      j        |i |}|j                            | j        d                    |S )Nr   )r,   r]   r   r[   rZ   r   s       r7   r]   zGroupForm.save
  sB    577<000 	4,W5666r8   )r9   r:   r;   r   rg   r   r   r   r   r   r   r   rh   rG   rR   r]   r<   r=   s   @r7   r   r      s?       ++ajj!!##  E
 98a!)--//   	''qqzz***%AAm,<,<===I
 
 
 
 
 
 
 
\ \ \ \ \        r8   r   c                   6    e Zd Z e ed          ej                                        e e	j
        ddi                    Z e	j        d          Z e	j        d          Z e	j        d          Z e	j        d          Z e ed           e	j                    d ed	          
          Z e ed          dej                                                  Z e ed          dej                                                  Z eddd           eddddd ed                     ed ed                     edd ed                     ed ed                    fZ G d d           Z fd!Z fd"Z fd#Z xZS )$r   zObject typessize   ro   )r   r   limit_choices_tor$   F)r#   zAdditional actionsz1Actions granted in addition to those listed above)r   rq   r#   r!   r   r   r   r/   r'   enabledcan_viewcan_add
can_change
can_deleteactionsActionsr?   object_typesObjectsr   r   
AssignmentconstraintsConstraintsc                   4    e Zd ZeZg dZd ed          iZdS )ObjectPermissionForm.Meta)r/   r'   r   r   r   r   r   r   r   zJSON expression of a queryset filter that will return only permitted objects. Leave null to match all objects of this type. A list of multiple objects will result in a logical OR operation.N)r9   r:   r;   r   rE   rF   rg   
help_textsr%   r8   r7   rG   r   ?  sC         
 
 
 11 



r8   rG   c                     t                      j        |i | d| j        d         _        | j        j        rb| j        j                            dd          | j        d         _        | j        j	                            dd          | j        d         _        | j        j        rGdD ]F}|| j        j
        v r4d| j        d	|          _        | j        j
                            |           Ed S d S )
NFr   r   Tr   r   r   viewaddchangedeletecan_)r,   rR   rF   r#   rH   rP   r   r   rJ   r   r   remove)rT   rU   rV   actionr6   s       r7   rR   zObjectPermissionForm.__init__L  s   $)&))) +0I' = 	\,0M,@,L,LTX\,L,],]DK!)+/=+>+J+J4VZ+J+[+[DK ( = 	9= 9 9T]222;?DKv08M)00888		9 	99 9r8   c           	         t                                                       | j                            d          }| j                            d          }| j                            d          st	                      | j        d<   dD ]A}| j        d|          r/|| j        d         vr | j        d                             |           B| j        d         s!t          j        t          d                    |r|rt          |          t          ur|g}|D ]}|
                                }	 t          di}|j                            t          ||                                                     [# t           t"          f$ r=}t          j        dt          d                              ||	          i          d }~ww xY wd S d S d S )
Nr   r   r   r   r   z%At least one action must be selected.r   z#Invalid filter for {model}: {error})rE   error)r,   r   rZ   rS   listappendr   r   rg   typemodel_classCONSTRAINT_TOKEN_USERr   filterr   existsr   
ValueErrorformat)	rT   r   r   r   ctrE   tokenser6   s	           r7   r   zObjectPermissionForm.clean^  s   (,,^<<'++M::  $$Y// 	2+/66Di(9 	< 	<F 1 <fDDUV_D`6`6`!),33F;;;  + 	T'*Q(R(RSSS  	K 	K  ,,*m"  ((-qF M(()CKQW)X)XYY``bbbb"J/   /%q)N'O'O'V'V]bjk'V'l'l1   	 	 	 	 s   .AE22G 8F;;G c                      t                      j        |i |}|j                            | j        d                    |j                            | j        d                    |S )Nr   r   )r,   r]   r   r[   rZ   r   r   s       r7   r]   zObjectPermissionForm.save  s`    577<000 	4,W5666D-h7888r8   ) r9   r:   r;   r   rg   r
   r   r   OBJECTPERMISSION_OBJECT_TYPESr   SelectMultipler   BooleanFieldr   r   r   r   r   r   r   r   r   r   r   r   r   rh   rG   rR   r   r]   r<   r=   s   @r7   r   r     s       11a#''))6#u#61+666	  L "u!  H !e   G $#  J $#  J a$%%"5?$$!GHH	  G ,+ajj!!##  E
 -,akk""$$  F 		22YlITUTUV_T`T`aaaaa	ll3337<999QQ}%5%5666I
 
 
 
 
 
 
 
9 9 9 9 9$" " " " "H        r8   r   N)/djangor   django.confr   django.contrib.authr   django.contrib.postgres.formsr   django.core.exceptionsr   django.utils.safestringr   django.utils.translationr	   rg   core.modelsr
   ipam.formfieldsr   ipam.validatorsr   netbox.preferencesr   users.constantsusers.modelsutilities.datar   utilities.forms.fieldsr   r   utilities.forms.renderingr   utilities.forms.widgetsr   utilities.permissionsr   __all__modelsModelFormMetaclassr   	ModelFormr   r   r   r   r   r   r%   r8   r7   <module>r      s                     3 3 3 3 3 3 : : : : : : - - - - - - - - - - - - 6 6 6 6 6 6 " " " " " " . . . . . . , , , , , , * * * * * *         ' ' ' ' ' ' b b b b b b b b . . . . . . 2 2 2 2 2 2 < < < < < <8 8 8 8 8el= 8 8 861
 1
 1
 1
 1
U_0G 1
 1
 1
 1
h'7 '7 '7 '7 '7EO '7 '7 '7T
 
 
 
 
 
 
 
 ?` ?` ?` ?` ?`u ?` ?` ?`D% % % % % % % %Pv v v v v5? v v v v vr8   