@@ -244,6 +244,7 @@ <h2>App Installation Flow<a class="headerlink" href="#app-installation-flow" tit
244244</ table >
245245< p > The code snippet below demonstrates how to build it using < a class ="reference external " href ="https://flask.palletsprojects.com/ "> Flask</ a > .</ p >
246246< div class ="highlight-python notranslate "> < div class ="highlight "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> os</ span >
247+ < span class ="kn "> import</ span > < span class ="nn "> html</ span >
247248< span class ="kn "> from</ span > < span class ="nn "> slack_sdk.oauth</ span > < span class ="kn "> import</ span > < span class ="n "> AuthorizeUrlGenerator</ span >
248249< span class ="kn "> from</ span > < span class ="nn "> slack_sdk.oauth.installation_store</ span > < span class ="kn "> import</ span > < span class ="n "> FileInstallationStore</ span > < span class ="p "> ,</ span > < span class ="n "> Installation</ span >
249250< span class ="kn "> from</ span > < span class ="nn "> slack_sdk.oauth.state_store</ span > < span class ="kn "> import</ span > < span class ="n "> FileOAuthStateStore</ span >
@@ -269,7 +270,7 @@ <h2>App Installation Flow<a class="headerlink" href="#app-installation-flow" tit
269270 < span class ="n "> state</ span > < span class ="o "> =</ span > < span class ="n "> state_store</ span > < span class ="o "> .</ span > < span class ="n "> issue</ span > < span class ="p "> ()</ span >
270271 < span class ="c1 "> # https://slack.com/oauth/v2/authorize?state=(generated value)&client_id={client_id}&scope=app_mentions:read,chat:write&user_scope=search:read</ span >
271272 < span class ="n "> url</ span > < span class ="o "> =</ span > < span class ="n "> authorize_url_generator</ span > < span class ="o "> .</ span > < span class ="n "> generate</ span > < span class ="p "> (</ span > < span class ="n "> state</ span > < span class ="p "> )</ span >
272- < span class ="k "> return</ span > < span class ="sa "> f</ span > < span class ="s1 "> '<a href="</ span > < span class ="si "> {</ span > < span class ="n "> url</ span > < span class ="si "> }</ span > < span class ="s1 "> ">'</ span > \
273+ < span class ="k "> return</ span > < span class ="sa "> f</ span > < span class ="s1 "> '<a href="</ span > < span class ="si "> {</ span > < span class ="n "> html </ span > < span class =" o " > . </ span > < span class =" n " > escape </ span > < span class =" p " > ( </ span > < span class =" n " > url</ span > < span class =" p " > ) </ span > < span class ="si "> }</ span > < span class ="s1 "> ">'</ span > \
273274 < span class ="
sa "
> f
</ span > < span class ="
s1 "
> '<img alt=""Add to Slack"" height="40" width="139" src="https://platform.slack-edge.com/img/add_to_slack.png" srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, https://platform.slack-edge.com/img/
[email protected] 2x" /></a>'
</ span > 274275</ pre > </ div >
275276</ div >
@@ -295,13 +296,11 @@ <h2>App Installation Flow<a class="headerlink" href="#app-installation-flow" tit
295296 < span class ="n "> redirect_uri</ span > < span class ="o "> =</ span > < span class ="n "> redirect_uri</ span > < span class ="p "> ,</ span >
296297 < span class ="n "> code</ span > < span class ="o "> =</ span > < span class ="n "> request</ span > < span class ="o "> .</ span > < span class ="n "> args</ span > < span class ="p "> [</ span > < span class ="s2 "> "code"</ span > < span class ="p "> ]</ span >
297298 < span class ="p "> )</ span >
298-
299- < span class ="n "> installed_enterprise</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "enterprise"</ span > < span class ="p "> ,</ span > < span class ="p "> {})</ span >
299+ < span class ="n "> installed_enterprise</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "enterprise"</ span > < span class ="p "> )</ span > < span class ="ow "> or</ span > < span class ="p "> {}</ span >
300300 < span class ="n "> is_enterprise_install</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "is_enterprise_install"</ span > < span class ="p "> )</ span >
301- < span class ="n "> installed_team</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "team"</ span > < span class ="p "> ,</ span > < span class ="p "> {})</ span >
302- < span class ="n "> installer</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "authed_user"</ span > < span class ="p "> ,</ span > < span class ="p "> {})</ span >
303- < span class ="n "> incoming_webhook</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "incoming_webhook"</ span > < span class ="p "> ,</ span > < span class ="p "> {})</ span >
304-
301+ < span class ="n "> installed_team</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "team"</ span > < span class ="p "> )</ span > < span class ="ow "> or</ span > < span class ="p "> {}</ span >
302+ < span class ="n "> installer</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "authed_user"</ span > < span class ="p "> )</ span > < span class ="ow "> or</ span > < span class ="p "> {}</ span >
303+ < span class ="n "> incoming_webhook</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "incoming_webhook"</ span > < span class ="p "> )</ span > < span class ="ow "> or</ span > < span class ="p "> {}</ span >
305304 < span class ="n "> bot_token</ span > < span class ="o "> =</ span > < span class ="n "> oauth_response</ span > < span class ="o "> .</ span > < span class ="n "> get</ span > < span class ="p "> (</ span > < span class ="s2 "> "access_token"</ span > < span class ="p "> )</ span >
306305 < span class ="c1 "> # NOTE: oauth.v2.access doesn't include bot_id in response</ span >
307306 < span class ="n "> bot_id</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span >
@@ -342,7 +341,7 @@ <h2>App Installation Flow<a class="headerlink" href="#app-installation-flow" tit
342341 < span class ="k "> return</ span > < span class ="n "> make_response</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Try the installation again (the state value is already expired)"</ span > < span class ="p "> ,</ span > < span class ="mi "> 400</ span > < span class ="p "> )</ span >
343342
344343 < span class ="n "> error</ span > < span class ="o "> =</ span > < span class ="n "> request</ span > < span class ="o "> .</ span > < span class ="n "> args</ span > < span class ="p "> [</ span > < span class ="s2 "> "error"</ span > < span class ="p "> ]</ span > < span class ="k "> if</ span > < span class ="s2 "> "error"</ span > < span class ="ow "> in</ span > < span class ="n "> request</ span > < span class ="o "> .</ span > < span class ="n "> args</ span > < span class ="k "> else</ span > < span class ="s2 "> ""</ span >
345- < span class ="k "> return</ span > < span class ="n "> make_response</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Something is wrong with the installation (error: </ span > < span class ="si "> {</ span > < span class ="n "> error</ span > < span class ="si "> }</ span > < span class ="s2 "> )"</ span > < span class ="p "> ,</ span > < span class ="mi "> 400</ span > < span class ="p "> )</ span >
344+ < span class ="k "> return</ span > < span class ="n "> make_response</ span > < span class ="p "> (</ span > < span class ="sa "> f</ span > < span class ="s2 "> "Something is wrong with the installation (error: </ span > < span class ="si "> {</ span > < span class ="n "> html </ span > < span class =" o " > . </ span > < span class =" n " > escape </ span > < span class =" p " > ( </ span > < span class =" n " > error</ span > < span class =" p " > ) </ span > < span class ="si "> }</ span > < span class ="s2 "> )"</ span > < span class ="p "> ,</ span > < span class ="mi "> 400</ span > < span class ="p "> )</ span >
346345</ pre > </ div >
347346</ div >
348347</ section >
0 commit comments