@@ -38,6 +38,7 @@ use opentelemetry_semantic_conventions::trace::{GRAPHQL_DOCUMENT, GRAPHQL_OPERAT
3838use rand:: { SeedableRng , thread_rng} ;
3939use rand_chacha:: ChaChaRng ;
4040use sqlx:: PgPool ;
41+ use state:: has_session_ended;
4142use tracing:: { Instrument , info_span} ;
4243use ulid:: Ulid ;
4344
@@ -237,7 +238,7 @@ async fn get_requester(
237238 clock : & impl Clock ,
238239 activity_tracker : & BoundActivityTracker ,
239240 mut repo : BoxRepository ,
240- session_info : SessionInfo ,
241+ session_info : & SessionInfo ,
241242 user_agent : Option < String > ,
242243 token : Option < & str > ,
243244) -> Result < Requester , RouteError > {
@@ -328,13 +329,13 @@ pub async fn post(
328329 . as_ref ( )
329330 . map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
330331 let user_agent = user_agent. map ( |TypedHeader ( h) | h. to_string ( ) ) ;
331- let ( session_info, _cookie_jar ) = cookie_jar. session_info ( ) ;
332+ let ( session_info, mut cookie_jar ) = cookie_jar. session_info ( ) ;
332333 let requester = get_requester (
333334 undocumented_oauth2_access,
334335 & clock,
335336 & activity_tracker,
336337 repo,
337- session_info,
338+ & session_info,
338339 user_agent,
339340 token,
340341 )
@@ -352,7 +353,12 @@ pub async fn post(
352353 . data ( requester) ; // XXX: this should probably return another error response?
353354
354355 let span = span_for_graphql_request ( & request) ;
355- let response = schema. execute ( request) . instrument ( span) . await ;
356+ let mut response = schema. execute ( request) . instrument ( span) . await ;
357+
358+ if has_session_ended ( & mut response) {
359+ let session_info = session_info. mark_session_ended ( ) ;
360+ cookie_jar = cookie_jar. update_session_info ( & session_info) ;
361+ }
356362
357363 let cache_control = response
358364 . cache_control
@@ -362,7 +368,7 @@ pub async fn post(
362368
363369 let headers = response. http_headers . clone ( ) ;
364370
365- Ok ( ( headers, cache_control, Json ( response) ) )
371+ Ok ( ( headers, cache_control, cookie_jar , Json ( response) ) )
366372}
367373
368374pub async fn get (
@@ -382,13 +388,13 @@ pub async fn get(
382388 . as_ref ( )
383389 . map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
384390 let user_agent = user_agent. map ( |TypedHeader ( h) | h. to_string ( ) ) ;
385- let ( session_info, _cookie_jar ) = cookie_jar. session_info ( ) ;
391+ let ( session_info, mut cookie_jar ) = cookie_jar. session_info ( ) ;
386392 let requester = get_requester (
387393 undocumented_oauth2_access,
388394 & clock,
389395 & activity_tracker,
390396 repo,
391- session_info,
397+ & session_info,
392398 user_agent,
393399 token,
394400 )
@@ -398,7 +404,12 @@ pub async fn get(
398404 async_graphql:: http:: parse_query_string ( & query. unwrap_or_default ( ) ) ?. data ( requester) ;
399405
400406 let span = span_for_graphql_request ( & request) ;
401- let response = schema. execute ( request) . instrument ( span) . await ;
407+ let mut response = schema. execute ( request) . instrument ( span) . await ;
408+
409+ if has_session_ended ( & mut response) {
410+ let session_info = session_info. mark_session_ended ( ) ;
411+ cookie_jar = cookie_jar. update_session_info ( & session_info) ;
412+ }
402413
403414 let cache_control = response
404415 . cache_control
@@ -408,7 +419,7 @@ pub async fn get(
408419
409420 let headers = response. http_headers . clone ( ) ;
410421
411- Ok ( ( headers, cache_control, Json ( response) ) )
422+ Ok ( ( headers, cache_control, cookie_jar , Json ( response) ) )
412423}
413424
414425pub async fn playground ( ) -> impl IntoResponse {
0 commit comments