
    >Tf.                        d dl Z d dlmZ d dlmZ d dlmZmZ	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 d	l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 d dlm Z 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/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD  G d de(          ZE G d  d!e(          ZF G d" d#ee(          ZG G d$ d%ee(          ZH G d& d'ee(          ZI G d( d)ee=jJ                  ZK G d* d+ee=jJ                  ZL G d, d-ee=jJ                  ZM G d. d/ee(          ZN eDe,           G d0 d1ee(                      ZO eDe,d2           G d3 d4e=jP                              ZQ eDe,d5           G d6 d7e=jR                              ZSdS )8    N)settings)messages)loginlogoutupdate_session_auth_hash)AuthenticationFormPasswordChangeForm)LoginRequiredMixin)update_last_login)user_logged_in)HttpResponseRedirect)get_object_or_404redirect)renderresolve_url)reverse)method_decorator)url_has_allowed_host_and_scheme	urlencode)gettext_lazy)sensitive_post_parameters)View)load_backends)	UserToken)ObjectChange)ObjectChangeTable)Bookmark)BookmarkTableNotificationTableSubscriptionTable)get_auth_backend_displayget_saml_idps)
get_config)generic)formstables)
UserConfig)register_model_viewc                   x     e Zd ZdZdZ e ed                     fd            Zd Zd Z	d Z
d Zd	 Z xZS )
	LoginViewz5
    Perform user authentication via the web UI.
    z
login.htmlpasswordc                 6     t                      j        |i |S N)superdispatch)selfargskwargs	__class__s      2/var/www/html/netbox-4.1.3/netbox/account/views.pyr/   zLoginView.dispatch,   s    uww0000    c                 v    t          |          \  }}d }d }|r	d|v r|}n|}|||| dt          |           dS )Nz://?)display_name	icon_nameicon_imgurl)r!   r   )r0   namer;   paramsr8   icon_sourcer9   r:   s           r4   gen_auth_datazLoginView.gen_auth_data0   sp    $<T$B$B!k	 	(##&'	 )" //If--//	
 
 	
r5   c                    g }t                      }t          t          j                                                  D ]}t          d|g          }i }|j                            d          x}r||d<   |                                dk    rJ|rH|D ]D}||d<   | 	                    |||          }	|	d          d| d|	d<   |
                    |	           E|
                    | 	                    |||                     |S )	Nzsocial:begin)r1   nextsamlidpr8   z ())r"   r   r   AUTHENTICATION_BACKENDSkeysr   GETgetlowerr?   append)
r0   requestauth_backends	saml_idpsr<   r;   r=   rA   rC   datas
             r4   get_auth_backendszLoginView.get_auth_backendsB   s)   !OO	!("BCCHHJJ 	L 	LD.v666CF{v...t &!%vzz||v%%)%$ / /C$'F5M--dC@@D.2>.B+L+Lc+L+L+LD(!((....	/ $$T%7%7c6%J%JKKKKr5   c                     t          |          }|j        j        r*t          j        d          }|                     ||          S t          || j        ||                     |          d          S )Nnetbox.auth.loginformrL   )	r   useris_authenticatedlogging	getLoggerredirect_to_nextr   template_namerO   )r0   rK   rS   loggers       r4   rH   zLoginView.getV   sz    !'**<( 	:&':;;F((&999gt1!33G<<4
 4
   	r5   c                    t          j        d          }t          ||j                  }|                                r|                    d           t                      j        r0|                    d           t          j
        t          d           t          ||                                           |                    d|j         d           t!          j        |t%          d	                              |j        
                     t)          |j        d          sOt                      |j        _        t-          |j        |j        j        j                                                   |                     ||          }|j        j                            d          x}r9|                    t8          j        ||j                                                   |S |                    d|d                                                      tC          || j"        || #                    |          d          S )NrQ   )rN   z$Login form validation was successfulzDMaintenance mode enabled: disabling update of most recent login timer   )dispatch_uidUser z successfully authenticatedzLogged in as {user}.rT   configrT   rN   locale.languagemax_agez+Login form validation failed for username: usernamerR   )$rV   rW   r   POSTis_validdebugr#   MAINTENANCE_MODEwarningr   
disconnectr   
auth_loginget_userinforT   r   success_formathasattrr_   r'   DEFAULT_USER_PREFERENCESsaverX   rH   
set_cookier   LANGUAGE_COOKIE_NAMEsessionget_expiry_agevaluer   rY   rO   )r0   rK   rZ   rS   responselanguages         r4   postzLoginView.postb   s   "#677!'=====?? 	cLL?@@@ ||, _efff)*;J]^^^^ w000KKIIIIJJJWa(>&?&?&F&FGL&F&Y&YZZZ 7<22 h&0ll#7<3F3_```eeggg,,Wf==H #<.223DEEEx w##H$A8U\UdUsUsUuUu#vvvO LLatJGWG]G]G_G_aabbbgt1!33G<<4
 4
   	r5   c                 <   |j         dk    r|j        n|j        }|                    dt          j                  }|r*t          |d           r|                    d|            n)|r|                    d|            t          d          }t          |          S )Nre   rA   )allowed_hostszRedirecting user to z1Ignoring unsafe 'next' URL passed to login form: home)methodre   rG   rH   r   LOGIN_REDIRECT_URLr   rg   ri   r   r   )r0   rK   rZ   rN   redirect_urls        r4   rX   zLoginView.redirect_to_next   s    &~77w||W[xx(CDD 	+;LX\]]] 	+LL>>>???? caS_aabbb"6??L#L111r5   )__name__
__module____qualname____doc__rY   r   r   r/   r?   rO   rH   r{   rX   __classcell__)r3   s   @r4   r*   r*   &   s          !M//
;;<<1 1 1 1 =<1
 
 
$  (
 
 
& & &P2 2 2 2 2 2 2r5   r*   c                       e Zd ZdZd ZdS )
LogoutViewz$
    Deauthenticate a web user.
    c                    t          j        d          }|j        }t          |           |                    d| d           t          j        |t          d                     t          t          t          j
                            }|                    d           |                    t          j                   |S )Nznetbox.auth.logoutr]   z has logged outzYou have logged out.session_key)rV   rW   rT   auth_logoutrm   r   ro   r   r   r   LOGOUT_REDIRECT_URLdelete_cookieru   )r0   rK   rZ   rd   ry   s        r4   rH   zLogoutView.get   s    "#788 <G5H555666gq!788999 (H4P(Q(QRR}---x<===r5   N)r   r   r   r   rH    r5   r4   r   r      s-             r5   r   c                       e Zd ZdZd ZdS )ProfileViewzaccount/profile.htmlc                 (   t           j                                                            |j        d                              |j                                      d          d d         }t          |          }t          || j	        |dd          S )Nviewr^   changed_object_type   profile)changelog_table
active_tab)
r   objectsvalid_modelsrestrictrT   filterprefetch_relatedr   r   rY   )r0   rK   	changelogr   s       r4   rH   zProfileView.get   s     !(5577@@vVV]] ^ 
 


!
 

2#		
 ,I66gt1.#4
 4
   	r5   N)r   r   r   rY   rH   r   r5   r4   r   r      s(        *M    r5   r   c                       e Zd ZdZd Zd ZdS )UserConfigViewzaccount/preferences.htmlc                 v    |j         j        }t          j        |          }t	          || j        |dd          S )NinstancepreferencesrS   r   )rT   r_   r%   UserConfigFormr   rY   )r0   rK   
userconfigrS   s       r4   rH   zUserConfigView.get   sH    \(
#Z888gt1'4
 4
   	r5   c                    |j         j        }t          j        |j        |          }|                                r|                                 t          j        |t          d                     t          d          }|j        d         x}r:|                    t          j        ||j                                                   n|                    t          j                   |S t%          || j        |dd          S )Nr   z#Your preferences have been updated.zaccount:preferencesra   rb   r   r   )rT   r_   r%   r   re   rf   rs   r   rn   ro   r   cleaned_datart   r   ru   rv   rw   r   r   rY   )r0   rK   r   rS   ry   rz   s         r4   r{   zUserConfigView.post   s    \(
#GL:FFF==?? 	IIKKKWa(M&N&NOOO 566H  ,->??x F##H$A8U\UdUsUsUuUu#vvvv&&x'DEEEOgt1'4
 4
   	r5   Nr   r   r   rY   rH   r{   r   r5   r4   r   r      s7        .M      r5   r   c                       e Zd ZdZd Zd ZdS )ChangePasswordViewzaccount/password.htmlc                     t          |j        dd           r1t          j        |t	          d                     t          d          S t          |j                  }t          || j        |dd          S )Nldap_usernamezDLDAP-authenticated user credentials cannot be changed within NetBox.account:profiler^   r+   r   )	getattrrT   r   ri   ro   r   r	   r   rY   r0   rK   rS   s      r4   rH   zChangePasswordView.get   s~    7<$77 	/Wa(n&o&oppp-...!w|444gt1$4
 4
   	r5   c                 F   t          |j        |j                  }|                                rZ|                                 t          ||j                   t          j        |t          d                     t          d          S t          || j        |dd          S )Nr`   z,Your password has been changed successfully.r   change_passwordr   )r	   rT   re   rf   rs   r   r   rn   ro   r   r   rY   r   s      r4   r{   zChangePasswordView.post   s    !w|',GGG==?? 	/IIKKK$Wdi888Wa(V&W&WXXX-...gt1+4
 4
   	r5   Nr   r   r5   r4   r   r      s7        +M      r5   r   c                   "    e Zd ZeZdZd Zd ZdS )BookmarkListViewzaccount/bookmarks.htmlc                 L    t           j                            |j                  S )Nr^   )r   r   r   rT   r0   rK   s     r4   get_querysetzBookmarkListView.get_queryset  s    &&GL&999r5   c                 
    ddiS )Nr   	bookmarksr   r   s     r4   get_extra_contextz"BookmarkListView.get_extra_context  s    +
 	
r5   N)r   r   r   r   tablerY   r   r   r   r5   r4   r   r     s<        E,M: : :
 
 
 
 
r5   r   c                   "    e Zd ZeZdZd Zd ZdS )NotificationListViewzaccount/notifications.htmlc                 >    |j         j                                        S r-   )rT   notificationsallr   s     r4   r   z!NotificationListView.get_queryset       |)--///r5   c                 
    ddiS )Nr   r   r   r   s     r4   r   z&NotificationListView.get_extra_context#      /
 	
r5   N)r   r   r   r   r   rY   r   r   r   r5   r4   r   r     <        E0M0 0 0
 
 
 
 
r5   r   c                   "    e Zd ZeZdZd Zd ZdS )SubscriptionListViewzaccount/subscriptions.htmlc                 >    |j         j                                        S r-   )rT   subscriptionsr   r   s     r4   r   z!SubscriptionListView.get_queryset-  r   r5   c                 
    ddiS )Nr   r   r   r   s     r4   r   z&SubscriptionListView.get_extra_context0  r   r5   N)r   r   r   r    r   rY   r   r   r   r5   r4   r   r   )  r   r5   r   c                       e Zd Zd ZdS )UserTokenListViewc                     t           j                            |j                  }t	          j        |          }|                    |           t          |d|d|d          S )Nr^   zaccount/token_list.htmlz
api-tokens)tokensr   r   )r   r   r   rT   r&   UserTokenTable	configurer   )r0   rK   r   r   s       r4   rH   zUserTokenListView.get<  si    "))w|)<<%f--   g8&;
 ;
   	r5   Nr   r   r   rH   r   r5   r4   r   r   :  s#        	 	 	 	 	r5   r   c                       e Zd Zd ZdS )UserTokenViewc                     t          t          j                            |j                  |          }t
          j        r|j        nd }t          |d||d          S )Nr^   )pkzaccount/token.html)objectkey)	r   r   r   r   rT   r   ALLOW_TOKEN_RETRIEVALr   r   )r0   rK   r   tokenr   s        r4   rH   zUserTokenView.getK  se    !)"3":":":"M"MRTUUU#9Ceiitg36
 6
   	r5   Nr   r   r5   r4   r   r   H  s#            r5   r   editc                   X    e Zd Zej                                        Zej        Z	dZ
d ZdS )UserTokenEditViewaccount:usertoken_listc                 ,    |j         s|j        |_        |S r-   )r   rT   )r0   objrK   url_args
url_kwargss        r4   alter_objectzUserTokenEditView.alter_object[  s    v 	$|CH
r5   N)r   r   r   r   r   r   querysetr%   UserTokenFormrS   default_return_urlr   r   r5   r4   r   r   U  sE         $$&&HD1    r5   r   deletec                   D    e Zd Zej                                        ZdZdS )UserTokenDeleteViewr   N)r   r   r   r   r   r   r   r   r   r5   r4   r   r   a  s*         $$&&H1r5   r   )TrV   django.confr   django.contribr   django.contrib.authr   rk   r   r   r   django.contrib.auth.formsr   r	   django.contrib.auth.mixinsr
   django.contrib.auth.modelsr   django.contrib.auth.signalsr   django.httpr   django.shortcutsr   r   r   r   django.urlsr   django.utils.decoratorsr   django.utils.httpr   r   django.utils.translationr   ro   django.views.decorators.debugr   django.views.genericr   social_core.backends.utilsr   account.modelsr   core.modelsr   core.tablesr   extras.modelsr   extras.tablesr   r   r    netbox.authenticationr!   r"   netbox.configr#   netbox.viewsr$   usersr%   r&   users.modelsr'   utilities.viewsr(   r*   r   r   r   r   ObjectListViewr   r   r   r   r   ObjectEditViewr   ObjectDeleteViewr   r   r5   r4   <module>r     s                # # # # # # d d d d d d d d d d L L L L L L L L 9 9 9 9 9 9 8 8 8 8 8 8 6 6 6 6 6 6 , , , , , , 8 8 8 8 8 8 8 8 0 0 0 0 0 0 0 0       4 4 4 4 4 4 H H H H H H H H 6 6 6 6 6 6 C C C C C C % % % % % % 4 4 4 4 4 4 $ $ $ $ $ $ $ $ $ $ $ $ ) ) ) ) ) ) " " " " " " M M M M M M M M M M I I I I I I I I $ $ $ $ $ $                     # # # # # # / / / / / /o2 o2 o2 o2 o2 o2 o2 o2d       4    $d   &! ! ! ! !' ! ! !H    +T   D

 

 

 

 

)7+A 

 

 

"

 

 

 

 

-w/E 

 

 



 

 

 

 

-w/E 

 

 

"    *D    Y	 	 	 	 	& 	 	  	 Y''    .   (' Y))2 2 2 2 2'2 2 2 *)2 2 2r5   