@@ -161,30 +161,32 @@ def sqlite3(
161161 # -----------------------------
162162
163163 async def handle_installation (self , request : AsyncBoltRequest ) -> BoltResponse :
164- state = await self .issue_new_state (request )
165- url = await self .build_authorize_url (state , request )
166- set_cookie_value = self .settings .state_utils .build_set_cookie_for_new_state (
167- state
168- )
164+ set_cookie_value : Optional [str ] = None
165+ url = await self .build_authorize_url ("" , request )
166+ if self .settings .state_validation_enabled is True :
167+ state = await self .issue_new_state (request )
168+ url = await self .build_authorize_url (state , request )
169+ set_cookie_value = self .settings .state_utils .build_set_cookie_for_new_state (
170+ state
171+ )
169172 if self .settings .install_page_rendering_enabled :
170173 html = await self .build_install_page_html (url , request )
171174 return BoltResponse (
172175 status = 200 ,
173176 body = html ,
174- headers = {
175- "Content-Type" : "text/html; charset=utf-8" ,
176- "Set-Cookie" : [ set_cookie_value ] ,
177- } ,
177+ headers = await self . append_set_cookie_headers (
178+ { "Content-Type" : "text/html; charset=utf-8" } ,
179+ set_cookie_value ,
180+ ) ,
178181 )
179182 else :
180183 return BoltResponse (
181184 status = 302 ,
182185 body = "" ,
183- headers = {
184- "Content-Type" : "text/html; charset=utf-8" ,
185- "Location" : url ,
186- "Set-Cookie" : [set_cookie_value ],
187- },
186+ headers = await self .append_set_cookie_headers (
187+ {"Content-Type" : "text/html; charset=utf-8" , "Location" : url },
188+ set_cookie_value ,
189+ ),
188190 )
189191
190192 # ----------------------
@@ -199,6 +201,13 @@ async def build_authorize_url(self, state: str, request: AsyncBoltRequest) -> st
199201 async def build_install_page_html (self , url : str , request : AsyncBoltRequest ) -> str :
200202 return _build_default_install_page_html (url )
201203
204+ async def append_set_cookie_headers (
205+ self , headers : dict , set_cookie_value : Optional [str ]
206+ ):
207+ if set_cookie_value is not None :
208+ headers ["Set-Cookie" ] = [set_cookie_value ]
209+ return headers
210+
202211 # -----------------------------
203212 # Callback
204213 # -----------------------------
@@ -219,29 +228,30 @@ async def handle_callback(self, request: AsyncBoltRequest) -> BoltResponse:
219228 )
220229
221230 # state parameter verification
222- state : Optional [str ] = request .query .get ("state" , [None ])[0 ]
223- if not self .settings .state_utils .is_valid_browser (state , request .headers ):
224- return await self .failure_handler (
225- AsyncFailureArgs (
226- request = request ,
227- reason = "invalid_browser" ,
228- suggested_status_code = 400 ,
229- settings = self .settings ,
230- default = self .default_callback_options ,
231+ if self .settings .state_validation_enabled is True :
232+ state : Optional [str ] = request .query .get ("state" , [None ])[0 ]
233+ if not self .settings .state_utils .is_valid_browser (state , request .headers ):
234+ return await self .failure_handler (
235+ AsyncFailureArgs (
236+ request = request ,
237+ reason = "invalid_browser" ,
238+ suggested_status_code = 400 ,
239+ settings = self .settings ,
240+ default = self .default_callback_options ,
241+ )
231242 )
232- )
233243
234- valid_state_consumed = await self .settings .state_store .async_consume (state )
235- if not valid_state_consumed :
236- return await self .failure_handler (
237- AsyncFailureArgs (
238- request = request ,
239- reason = "invalid_state" ,
240- suggested_status_code = 401 ,
241- settings = self .settings ,
242- default = self .default_callback_options ,
244+ valid_state_consumed = await self .settings .state_store .async_consume (state )
245+ if not valid_state_consumed :
246+ return await self .failure_handler (
247+ AsyncFailureArgs (
248+ request = request ,
249+ reason = "invalid_state" ,
250+ suggested_status_code = 401 ,
251+ settings = self .settings ,
252+ default = self .default_callback_options ,
253+ )
243254 )
244- )
245255
246256 # run installation
247257 code = request .query .get ("code" , [None ])[0 ]
0 commit comments