
    'jG                        d dl mZ d dlmZmZ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 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  G d d          Z G d de          Z  G d de          Z!dS )    )Logger)OptionalCallableDictAnySequence)SlackApiErrorSlackTokenRotationError)InstallationStore)Bot)Installation)TokenRotator)	WebClient)AuthorizeArgs)AuthorizeResult)BoltContext)	BoltError)get_arg_names_of_callablec                       e Zd ZdZd Zdddddedee         dee         dee         d	ee         d
ee         dee         dee         fdZ	dS )	AuthorizezeThis provides authorize function that returns AuthorizeResult
    for an incoming request from Slack.c                     d S N )selfs    c/usr/local/lib/hermes-agent/venv/lib/python3.11/site-packages/slack_bolt/authorization/authorize.py__init__zAuthorize.__init__   s        Nactor_enterprise_idactor_team_idactor_user_idcontextenterprise_idteam_iduser_idr   r    r!   returnc                    t                      r   )NotImplementedError)r   r"   r#   r$   r%   r   r    r!   s           r   __call__zAuthorize.__call__   s     "###r   )
__name__
__module____qualname____doc__r   r   r   strr   r)   r   r   r   r   r      s        + +   .2'+'+$ $ $ $  }	$
 #$ #$ &c]$  }$  }$ 
/	"$ $ $ $ $ $r   r   c                       e Zd ZdZdededef         fdZddddded	e	e
         d
e	e
         de	e
         de	e
         de	e
         de	e
         de	e         fdZdS )CallableAuthorizezvWhen you pass the `authorize` argument in AsyncApp constructor,
    This `authorize` implementation will be used.
    loggerfunc.c                J    || _         || _        t          |          | _        d S r   )r1   r2   r   	arg_names)r   r1   r2   s      r   r   zCallableAuthorize.__init__-   s%     	2488r   Nr   r"   r#   r$   r%   r   r    r!   r&   c                v    	 t          ||||          |j        |j        |||||||d
}|                                D ]\  }	}
|	|vr|
||	<    fd|                                D             }|                                } j        D ](}||vr" j                            | d           d ||<   )  j        d
i |}||S t          |t                    r|S t          dt          |           d          # t          $ r4} j                            d| d| d	|j         d           Y d }~d S d }~ww xY w)N)r"   r#   r$   r%   )
argsr1   clientr"   r#   r$   r%   r   r    r!   c                 .    i | ]\  }}|j         v ||S r   )r4   ).0kvr   s      r   
<dictcomp>z.CallableAuthorize.__call__.<locals>.<dictcomp>Y   s.    %i%i%itq!UVZ^ZhUhUhaUhUhUhr   z is not a valid argumentz9Unexpected returned value from authorize function (type: )(The stored bot token for enterprise_id: 
 team_id:   is no longer valid. (response: r   )r   r1   r7   itemskeysr4   warningr2   
isinstancer   
ValueErrortyper	   debugresponse)r   r"   r#   r$   r%   r   r    r!   all_available_argsr:   r;   kwargsfound_arg_namesnameauth_resulterrs   `               r   r)   zCallableAuthorize.__call__7   s   *	%#"/##	   ".!."!.""':!.!." ""   . .1...,-&q)%i%i%i%i7I7O7O7Q7Q%i%i%iF$kkmmO ( (..K''4(I(I(IJJJ#'F4L#$)--f--K"""+77 s"" !q]abm]n]n!q!q!qrrr 	 	 	KB= B BT[ B B25,B B B   44444	s$   B?C: C:  C: :
D8)D33D8)r*   r+   r,   r-   r   r   r   r   r   r   r.   r)   r   r   r   r0   r0   (   s         9 9 sO+,	9 9 9 9$ .2'+'+6 6 6 6  }	6
 #6 #6 &c]6  }6  }6 
/	"6 6 6 6 6 6r   r0   c                      e Zd ZU dZeeef         ed<   eed<   eed<   eed<   eed<   e	e
         ed<   dZeed	<   d
d
d
ddd
dddedede	e         de	e         de	e         dedede	e         defdZd
d
d
ddede	e         de	e         de	e         de	e         de	e         de	e         de	e         fdZde	e         de	e         fd Zd!e	e         de	e         fd"Zd
S )#InstallationStoreAuthorizea	  If you use the OAuth flow settings, this `authorize` implementation will be used.
    As long as your own InstallationStore (or the built-in ones) works as you expect,
    you can expect that the `authorize` layer should work for you without any customization.
    authorize_result_cachebot_onlyuser_token_resolutionfind_installation_availablefind_bot_availabletoken_rotatorzNInstallationStore with client_id/client_secret are required for token rotation_config_error_messageNFauthed_user)	client_idclient_secret!token_rotation_expiration_minutesrR   cache_enabledr7   rS   r1   installation_storerY   rZ   r[   r\   r7   c       	            || _         || _        || _        |	| _        || _        i | _        t          |d          | _        t          |d          | _        ||t          |||          | _
        nd | _
        |pd| _        d S )Nfind_installationfind_bot)rY   rZ   r7   x   )r1   r]   rR   rS   r\   rQ   hasattrrT   rU   r   rV   r[   )
r   r1   r]   rY   rZ   r[   rR   r\   r7   rS   s
             r   r   z#InstallationStoreAuthorize.__init__   s      "4 %:"*&(#+23EGZ+[+[(")*<j"I"I ]%>!-#+" " "D "&D1R1YVY...r   r   r"   r#   r$   r%   r   r    r!   r&   c          
      J   d }d }	d }
d }d }d }| j         s| j        r	 | j                            |||j                  }|m|j        }|j        }	|j        }
|j        }|j	        |k    rd }	d }d |_        d |_
        d |_        d |_        | j        dk    r#||| j                            |||d           }n#| j                            ||||j                  }||j        }	|j        }|j        .|j        |j        k    r|j        |j        k    r|j        }|j        }
|                     |          }|C|j        }	|j        }|j        .|j        |j        k    r|j        |j        k    r|j        }|j        }
|                     |          }||j        }|j        }
||j        }	|j        }nN# t           $ r(}| j                            d|            Y d }~d S d }~wt&          $ r}d| _        Y d }~nd }~ww xY w| j         s| j        r| j        du r$|!|		 | j                            |||j                  }|{|j        }|j        }
|j        f| j        t1          | j                  | j                            || j                  }|(| j                            |           |j        }|j        }
n}# t           $ r(}| j                            d|            Y d }~d S d }~wt&          $ r}d| _        Y d }~n7d }~wt:          $ r'}| j                            d|            Y d }~nd }~ww xY w|p|	}||                     ||           d S | j         r|| j!        v r| j!        |         S 	 |j"        #                    |	          }d }|	!||	k    r|j"        #                    |		          }tI          j%        ||||	|
|
          }| j         r
|| j!        |<   |S # tL          $ r4}| j        '                    d| d| d|j(         d           Y d }~d S d }~ww xY w)N)r#   r$   is_enterprise_installactor)r#   r$   r%   rd   zFailed to rotate tokens due to FT)botminutes_before_expirationz Failed to call find_bot method: )token)auth_test_responseuser_auth_test_response	bot_token
user_token
bot_scopesuser_scopesr>   r?   r@   r=   ))rR   rT   r]   r_   rd   rk   rl   rm   rn   r%   user_refresh_tokenuser_token_expires_atrS   r#   r$   $_rotate_and_save_tokens_if_necessaryr
   r1   errorr(   rU   r`   bot_refresh_tokenrV   r   rW   perform_bot_token_rotationr[   save_bot	Exceptioninfo_debug_log_for_not_foundr\   rQ   r7   	auth_testr   from_auth_test_responser	   rG   rH   )r   r"   r#   r$   r%   r   r    r!   rk   rl   rm   rn   latest_bot_installationthis_user_installation	refreshedrotation_error_rf   refreshed_boterh   auth_test_api_responserj   authorize_resultrN   s                            r   r)   z#InstallationStoreAuthorize.__call__   s    $(	$(
.2
/3:>9=} a	9!A a	9^9 +/*A*S*S"/#*1*G +T + +' +6 7 AI!8!CJ!8!CJ"9"EK.6'AA%)
&*=A/:EI/BHL/E>B/;  5@@2>-B[9=9P9b9b2E,9,9:>	 :c :" :" 6 6:5L5^5^.;(/(/6=6S	 6_ 6 62 2=)?)JJ*@*LK 7 A I %<$IMcMq$q$q$;$CG]Ge$e$e -C,L	-C-N
 )-(Q(QRh(i(iI(4-6-A
.7.C$;$E$M )@(MQgQu(u(u(?(GKaKi(i(i 1:0CI1:1EJ !% I IJa b bI ,$-$7	%.%9
19 *3)=J*3*?K*    !!"TN"T"TUUUttttt& 9 9 9380000009
 M&	I 3	&	I '4//I4E*J\I%)%<%E%E"/#*1*G &F & &
 ? #I!$J,8-5"+D,F"G"GG(,(:(U(U #6:6\ )V ) ) )4 3<<]KKK(5(?I)6)AJ*    !!"TN"T"TUUUttttt& 0 0 0*/'''''' I I I  !GA!G!GHHHHHHHHI  )6J=))-AAA4  	6%4+F"F"F.u55	%,^%=%=E%=%J%J"&*#%%:*=*=*1.*B*B*B*T*T'.F#9(?#%%'      ! F5E+E2## 	 	 	KB= B BT[ B B25,B B B   44444	sn   FF1 1
G<;GG<+G77G<BJ> >
L8K++L88LL8L33L87A,O$ $
P".)PP"c                 F    | j                             d| d|            d S )Nz.No installation data found for enterprise_id: r?   )r1   rG   )r   r#   r$   s      r   rx   z3InstallationStoreAuthorize._debug_log_for_not_foundc  s0    pmppgnppqqqqqr   installationc                     ||j         	|j        d S | j        t          | j                  | j                            || j                  }|| j                            |           |S )N)r   rg   )	ro   rs   rV   r   rW   perform_token_rotationr[   r]   save)r   r   r}   s      r   rq   z?InstallationStoreAuthorize._rotate_and_save_tokens_if_necessaryf  s    L$C$KP\PnPv4%D6777,0,>,U,U%&*&L -V -
 -
	  #((333r   )r*   r+   r,   r-   r   r.   r   __annotations__boolr   r   rW   r   r   intr   r   r   r)   rx   r   rq   r   r   r   rP   rP   p   s=         
 !o!56666NNN!%%%%L))))!q3qqq $('+;? #&*%2 Z  Z  Z  Z .	 Z
 C= Z  } Z ,4C= Z  Z  Z # Z  # Z  Z  Z  ZT .2'+'+~ ~ ~ ~  }	~
 #~ #~ &c]~  }~  }~ 
/	"~ ~ ~ ~Drhsm rhWZm r r r r,AW \deq\r      r   rP   N)"loggingr   typingr   r   r   r   r   slack_sdk.errorsr	   r
   slack_sdk.oauthr   -slack_sdk.oauth.installation_store.models.botr   6slack_sdk.oauth.installation_store.models.installationr   &slack_sdk.oauth.token_rotation.rotatorr   slack_sdk.webr   'slack_bolt.authorization.authorize_argsr   )slack_bolt.authorization.authorize_resultr   slack_bolt.context.contextr   slack_bolt.errorr   slack_bolt.util.utilsr   r   r0   rP   r   r   r   <module>r      s         : : : : : : : : : : : : : : C C C C C C C C - - - - - - = = = = = = O O O O O O ? ? ? ? ? ? # # # # # # A A A A A A E E E E E E 2 2 2 2 2 2 & & & & & & ; ; ; ; ; ;$ $ $ $ $ $ $ $,E E E E E	 E E EPF F F F F F F F F Fr   