
    Dsi(                     "   d dl Z d dlZd dlZd dlmZmZ d dl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 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!m"Z"  ejF                  d      Z$ G d de      Z%d Z& G d de%      Z'y)    N)authenticatelogin)Site)BadSignatureSignatureExpiredloads)HttpResponse)CSRF_TOKEN_LENGTH)redirectrender)method_decorator)	mark_safe)gettext)View)csrf_exempt   )	microsoft)get_hook
get_schemedjangoc                        e Zd ZdZ ed       ed       ed      dZ ee       fd       Zd Z	d Z
d	 Zd
 Zd Zd Z xZS )AuthenticateCallbackViewzAuthentication callback for Microsoft to call as part of OAuth2
        implicit grant flow

    For more details:
    https://developer.microsoft.com/en-us/graph/docs/get-started/rest
    zTAn invalid state variable was provided. Please refresh the page and try again later.zENo authentication code was provided from Microsoft. Please try again.zIFailed to authenticate you for an unknown reason. Please try again later.)	bad_statemissing_codelogin_failedc                 *    t        |   |g|i |S )N)superdispatch)selfrequestargskwargs	__class__s       `/var/www/python-projects/worksol/worksolenv/lib/python3.12/site-packages/microsoft_auth/views.pyr   z!AuthenticateCallbackView.dispatch.   s    w9$9&99    c                    t         j                  j                  | j                        j                  }t        | j                        }dj                  ||      i d| _        | j                  |j                  d            }| j                  |       d|v r|d   | j                  d<   | j                  |j                  d      |j                  d             | j                  |j                  d             d| j                  d   v r@d| j                  d   vr/| j                  | j                  d   d      | j                  d   d<   t        d	      }|" || j                  | j                        | _        t        t!        j"                  d
| j                  d   i            | j                  d<   | j                  S )Nz
{0}://{1}/)base_urlmessagestatenexterrorerror_descriptioncoder(   MICROSOFT_AUTH_CALLBACK_HOOKmicrosoft_auth)r   objectsget_currentr    domainr   formatcontext_parse_stateget_check_csrf_check_microsoft_response_authenticatemessagesr   r   jsondumps)r   r"   r2   schemer)   functions         r$   get_context_dataz)AuthenticateCallbackView.get_context_data2   s   ))$,,7>>DLL) %++FF;
 !!&**W"56U?#(=DLL  	&&JJw,?!@	

 	6::f-. t||I..#4<<	+BB;?==Y'0<DLL#$78 :;#DLL$,,?DL"+JJ($,,y*ABC#
Y ||r%   c                     |d}	 t        |dd      }|S # t        $ r t        j                  d       i }Y |S t        $ r t        j                  d       i }Y |S w xY w)N r/   i,  )saltmax_agezstate has been tempered withzstate has expired)r   r   loggerdebugr   )r   r)   s     r$   r5   z%AuthenticateCallbackView._parse_state\   sr    =E	%&6DE   	LL78E
 	   	LL,-E		s     AAAc                 l   |j                  dd      }t        j                  d|      t        |      t        k(  f}t        |      sot        j                  d       t        j                  dj                  |             t        j                  dj                  |             ddi| j                  d	<   y y )
NtokenrA   z[a-zA-Z0-9]zState validation failed:z	state: {}z
checks: {}r+   r   r(   )
r6   researchlenr
   allrD   rE   r3   r4   )r   r)   rG   checkss       r$   r7   z$AuthenticateCallbackView._check_csrfk   s    		'2& IImU+J++
 6{LL34LL++E23LL,,V45'.&<DLL#	 r%   c                 R    d| j                   d   vr|||d| j                   d<   y y y )Nr+   r(   )r+   r,   )r4   )r   r+   r,   s      r$   r8   z2AuthenticateCallbackView._check_microsoft_responsez   s9    $,,y11 "):+Y' ! 2r%   c                     d| j                   d   vrV|ddi| j                   d<   y t        | j                  |      }|ddi| j                   d<   y t        | j                  |       y y )Nr+   r(   r   )r-   r   )r4   r   r    r   )r   r-   users      r$   r9   z&AuthenticateCallbackView._authenticate   sj    $,,y11|+2N*CY' $DLLt<< 07.GDLL+$,,- 2r%   c                      | j                   di |j                  j                         }d}d|d   v rd}t        |d||      S )zmain callback for Microsoft to call

        validates Microsoft response, attempts to authenticate user and
        returns simple HTML page with Javascript that will post a message
        to parent window with details of result   r+   r(     zmicrosoft/auth_callback.htmlstatus )r?   POSTdictr   )r   r    r4   status_codes       r$   postzAuthenticateCallbackView.post   sV     ($''>',,*;*;*=>gi((K*	
 	
r%   )__name__
__module____qualname____doc___r:   r   r   r   r?   r5   r7   r8   r9   rY   __classcell__)r#   s   @r$   r   r      sr     ;
 V
 &
H k": #:(T=.
r%   r   c                 4    t        |       d   }t        |      S )Nmicrosoft_authorization_url)r   r   )r    urls     r$   to_ms_redirectrc      s    
G
:
;CC=r%   c                       e Zd ZdZd Zy)AuthenticateCallbackRedirectTc                      | j                   di |j                  j                         }d|d   v rt        |d   d      S t	        |j                  dd            S )zmain callback for Microsoft to call
        validates Microsoft response, attempts to authenticate user and
        redirects to app root on success. Returns HTTP 401 on error.r+   r(   rR   rS   r*   /rU   )r?   rV   rW   r	   r   r6   )r   r    r4   s      r$   rY   z!AuthenticateCallbackRedirect.post   s[    
 ($''>',,*;*;*=>gi((	 23??GKK455r%   N)rZ   r[   r\   r   rY   rU   r%   r$   re   re      s    H
6r%   re   )(r;   loggingrH   django.contrib.authr   r   django.contrib.sites.modelsr   django.core.signingr   r   r   django.httpr	   django.middleware.csrfr
   django.shortcutsr   r   django.utils.decoratorsr   django.utils.safestringr   django.utils.translationr   r^   django.viewsr   django.views.decorators.csrfr   context_processorsr   utilsr   r   	getLoggerrD   r   rc   re   rU   r%   r$   <module>rw      sk      	 3 , E E $ 4 - 4 - 1  4 ) '			8	$L
t L
^
6#; 6r%   