
    ix;                         d dl Z d dlZd dl mZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZ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 d dlmZ d dlm Z  d dl!m"Z"m#Z# d dl$m%Z%  G d d          Z&dS )    N)Logger)OptionalDictCallableSequence)	BoltError)FailureArgsSuccessArgsDefaultCallbackOptionsCallbackOptions _build_default_install_page_html)OAuthSettings)BoltRequest)BoltResponse)SlackApiError)OAuthStateUtils)Installation)SQLite3InstallationStore)SQLite3OAuthStateStore)	WebClientSlackResponse)create_web_clientc            (          e Zd ZU eed<   eed<   ee         ed<   eed<   eed<   eege	f         ed<   ee
ge	f         ed<   ddd	d
ee         dee         defdZedefd            Zedefd            Zedddddddddddej        ej        ddddfdedee         dee         deee                  deee                  dee         dee         dee         dee         dee         dee         dee         dedededed
ee         dee         dd f&d            Zdede	fd Zdedefd!Zd"ededefd#Zd$ededefd%Zd&ed'ee         fd(Z dede	fd)Z!d*edee"         fd+Z#ded,e"fd-Z$dS ).	OAuthFlowsettings	client_idredirect_uriinstall_pathredirect_uri_pathsuccess_handlerfailure_handlerN)clientloggerr#   r$   c                   || _         || _        || _        | j        | j        | j        _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        t          || j        j	        | j        j
                  | _        |j        | j        |_        |j        j        | _        |j        j        | _        dS )zThe module to run the Slack app installation flow (OAuth flow).

        Args:
            client: The `slack_sdk.web.WebClient` instance.
            logger: The logger.
            settings: OAuth settings to configure this module.
        N)r$   state_utilsredirect_uri_page_renderer)_client_loggerr   r$   r   r   r   r    r   r&   r'   default_callback_optionscallback_optionssuccessr!   failurer"   )selfr#   r$   r   s       V/root/projects/butler/venv/lib/python3.11/site-packages/slack_bolt/oauth/oauth_flow.py__init__zOAuthFlow.__init__&   s      <##'<DM 0 M6 M6!%!@(>1'+}'O)
 )
 )
%
 $,(,(EH%'8@'8@    returnc                 R    | j         t          | j                  | _         | j         S )N)r$   )r(   r   r$   r.   s    r/   r#   zOAuthFlow.clientI   s&    <,DK@@@DL|r1   c                 Z    | j         t          j        t                    | _         | j         S N)r)   logging	getLogger__name__r4   s    r/   r$   zOAuthFlow.loggerO   s$    <",X66DL|r1   Fx   databaseclient_secretscopesuser_scopesr+   success_urlfailure_urlauthorization_urlstate_cookie_namestate_expiration_secondsinstallation_store_bot_only!token_rotation_expiration_minutesc           
         |pt           j        d         }|pt           j        d         }|p2t           j                            dd                              d          }|p2t           j                            dd                              d          }|pt           j                            d          }|t	          ||          nt	          |||	          }|t          ||
          nt          |||          }t          |pt                      |t          di d|d|d|d|d|d|d|d|	d|
d|d|d|d|d|d|d|d|          S )NSLACK_CLIENT_IDSLACK_CLIENT_SECRETSLACK_SCOPES ,SLACK_USER_SCOPESSLACK_REDIRECT_URI)r;   r   )r;   r   r$   )r;   expiration_seconds)r;   rN   r$   r   r<   r=   r>   r   r   r    r+   r?   r@   rA   installation_storerD   rE   state_storerB   rC   )r#   r$   r    )	osenvirongetsplitr   r   r   r   r   )clsr;   r   r<   r=   r>   r   r   r    r+   r?   r@   rA   rB   rC   rD   rE   r#   r$   rO   rP   s                        r/   sqlite3zOAuthFlow.sqlite3Y   s   6 >,=!>	%J4I)JH2:>>."==CCCHH!WRZ^^4G%L%L%R%RSV%W%W#Krz~~6J'K'K ~ %h)LLLL)8yY_``` 	 ~ #HIabbbb'Nfouvvv 	
 (Y[["   #) ,m v	
 (K *\ *\ #4"3 "2!1 (K (K #4"3 $6#5  -H,G!" 3T2S#& (K'( #4"3)* *B)A+
 
 
 	
r1   requestc           	         d }|                      d|          }| j        j        du rJ|                     |          }|                      ||          }| j        j                            |          }| j        j        r>|                     ||          }t          d|| 	                    ddi|                    S t          dd| 	                    d|d|                    S )	NrJ   T   Content-Typeztext/html; charset=utf-8)statusbodyheadersi.  )r[   Location)
build_authorize_urlr   state_validation_enabledissue_new_stater&   build_set_cookie_for_new_stateinstall_page_rendering_enabledbuild_install_page_htmlr   append_set_cookie_headers)r.   rX   set_cookie_valueurlstatehtmls         r/   handle_installationzOAuthFlow.handle_installation   s   *.&&r733=1T99((11E**5'::C#}8WWX]^^=7 	//W==D66#%?@$      66%?SQQ$    r1   c                 >    | j         j                                        S r6   )r   rP   issue)r.   rX   s     r/   rb   zOAuthFlow.issue_new_state   s    }(..000r1   ri   c                     |j                             d          }| j        j                            |||d         nd           S )Nteamr   )ri   ro   )queryrT   r   authorize_url_generatorgenerate)r.   ri   rX   team_idss       r/   r`   zOAuthFlow.build_authorize_url   sL    ,3M,=,=f,E,E}4== ( 4!$ > 
 
 	
r1   rh   c                      t          |          S r6   r   )r.   rh   rX   s      r/   re   z!OAuthFlow.build_install_page_html   s    /444r1   r^   rg   c                     ||g|d<   |S )Nz
Set-CookierQ   )r.   r^   rg   s      r/   rf   z#OAuthFlow.append_set_cookie_headers   s    '%5$6GL!r1   c                    |j                             dd g          d         }|1|                     t          ||d| j        | j                            S | j        j        du r|j                             dd g          d         }| j        j                            ||j	                  s1|                     t          |dd| j        | j                            S | j        j
                            |          }|s1|                     t          |d	d
| j        | j                            S |j                             dd g          d         }|1|                     t          |dd
| j        | j                            S |                     |          }|1|                     t          |dd
| j        | j                            S 	 |                     ||           nI# t          $ r<}|                     t          |d|d| j        | j                            cY d }~S d }~ww xY w|                     t!          ||| j        | j                            S )Nerrorr   rZ   )rX   reasonsuggested_status_coder   defaultTri   invalid_browseri  invalid_statei  codemissing_codeinvalid_codestorage_errori  )rX   rx   rw   ry   r   rz   )rX   installationr   rz   )rp   rT   r"   r	   r   r*   ra   r&   is_valid_browserr^   rP   consumerun_installationstore_installationr   r!   r
   )r.   rX   rw   ri   valid_state_consumedr}   r   errs           r/   handle_callbackzOAuthFlow.handle_callback   s    !!'D62215''# *-!] 9     =1T99M%%gv66q9E=,==eW_UU 	++ '0.1!% $ =     $(=#<#D#DU#K#K ' 	++ '..1!% $ =     }  $003<''#)*-!] 9     ,,T22''#)*-!] 9    	##G\:::: 
	 
	 
	''#**-!] 9  	 	 	 	 	 	 	 	
	 ##)5	  
 
 	
s   G# #
H)-1H$H)$H)r}   c                    	 | j                             || j        j        | j        j        | j        j                  }|                    d          pi }|                    d          pd}|                    d          pi }|                    d          pi }|                    d          pi }|                    d          }d }	d }
|<| j                             |	          }|d
         }	|du r|                    d          }
t          d,i d|                    d          d|                    d          d|                    d          d|
d|                    d          d|                    d          d|d
|	d|                    d          d|                    d          d|                    d          d|                    d          d|                    d          d|                    d          d|                    d          d |                    d          d!|                    d          d"|                    d          d#|                    d$          d%|                    d&          d'|                    d(          d|d)|                    d)          S # t          $ r-}d*| d+| }| j
                            |           Y d }~d S d }~ww xY w)-N)r}   r   r<   r   
enterpriseis_enterprise_installFro   authed_userincoming_webhookaccess_token)tokenbot_idTrh   app_identerprise_ididenterprise_namenameenterprise_urlteam_id	team_name	bot_tokenbot_user_id
bot_scopesscopebot_refresh_tokenrefresh_tokenbot_token_expires_in
expires_inuser_id
user_tokenr>   user_refresh_tokenuser_token_expires_inincoming_webhook_urlincoming_webhook_channelchannelincoming_webhook_channel_id
channel_id"incoming_webhook_configuration_urlconfiguration_url
token_typez2Failed to fetch oauth.v2.access result with code: z
 - error: rQ   )r#   oauth_v2_accessr   r   r<   r   rT   	auth_testr   r   r$   warning)r.   r}   oauth_responseinstalled_enterpriser   installed_team	installerr   r   r   r   r   emessages                 r/   r   zOAuthFlow.run_installation7  s   4	,0K,G,G-1"m9!]7	 -H - -N 4B3E3El3S3S3YWY *8*<*<=T*U*U*^Y^!-;-?-?-G-G-M2N(6(:(:=(I(I(ORI/=/A/ABT/U/U/[Y['5'9'9.'I'II$(F,0N$ K11	1BB	"8,(D00%.]]5%9%9N   %))(333266t<<< !5 8 8 @ @ @  .~	
 '**4000 ),,V444 $) v +..}=== *--g666 #1"4"4_"E"E"E &4%7%7%E%E%E "d+++ %==888 &MM'222  $-==#A#A#A!" '0mmL&A&A&A#$ &6%9%9%%@%@%@%& *:)=)=i)H)H)H'( -=,@,@,N,N,N)* 4D3G3GH[3\3\3\+, '<&;-. *--l;;;/ 4  	 	 	^4^^[\^^GK(((44444	s   J=K   
K7
"K22K7r   c                 D    | j         j                            |           d S r6   )r   rO   save)r.   rX   r   s      r/   r   zOAuthFlow.store_installationn  s!    (--l;;;;;r1   )%r9   
__module____qualname__r   __annotations__strr   r   r
   r   r	   r   r   r0   propertyr#   r$   classmethodr   default_cookie_namedefault_expiration_secondsr   r   intboolrW   r   rk   rb   r`   re   dictrf   r   r   r   r   rQ   r1   r/   r   r      s        NNN3-{m\9::::{m\9::::
 '+#'	!A !A !A #!A  	!A
  !A !A !A !AF 	    X
     X 
 $('+*./3&*&*+/6:%)%)+/ "1!D(7(R,114&*#'/C
 C
C
 C=	C

  }C
 #'C
 hsm,C
 smC
 smC
 $C=C
 #?3C
 c]C
 c]C
 $C=C
$ %C
& #&'C
( &*)C
* ,/+C
, #-C
.  /C
0 
1C
 C
 C
 [C
R; <    >1{ 1s 1 1 1 1
 
{ 
s 
 
 
 
53 5 5 5 5 5 5 RU    Z
{ Z
| Z
 Z
 Z
 Z
~5S 5Xl-C 5 5 5 5n<+ <\ < < < < < <r1   r   )'r7   rR   r   typingr   r   r   r   slack_bolt.errorr   !slack_bolt.oauth.callback_optionsr	   r
   r   r   slack_bolt.oauth.internalsr   slack_bolt.oauth.oauth_settingsr   slack_bolt.requestr   slack_bolt.responser   slack_sdk.errorsr   slack_sdk.oauthr   "slack_sdk.oauth.installation_storer   *slack_sdk.oauth.installation_store.sqlite3r   #slack_sdk.oauth.state_store.sqlite3r   slack_sdk.webr   r   slack_bolt.util.utilsr   r   rQ   r1   r/   <module>r      s    				       5 5 5 5 5 5 5 5 5 5 5 5 & & & & & &            H G G G G G 9 9 9 9 9 9 * * * * * * , , , , , , * * * * * * + + + + + + ; ; ; ; ; ; O O O O O O F F F F F F 2 2 2 2 2 2 2 2 3 3 3 3 3 3T< T< T< T< T< T< T< T< T< T<r1   