@@ -38,6 +38,7 @@ use opentelemetry_semantic_conventions::trace::{GRAPHQL_DOCUMENT, GRAPHQL_OPERAT
38
38
use rand:: { SeedableRng , thread_rng} ;
39
39
use rand_chacha:: ChaChaRng ;
40
40
use sqlx:: PgPool ;
41
+ use state:: has_session_ended;
41
42
use tracing:: { Instrument , info_span} ;
42
43
use ulid:: Ulid ;
43
44
@@ -237,7 +238,7 @@ async fn get_requester(
237
238
clock : & impl Clock ,
238
239
activity_tracker : & BoundActivityTracker ,
239
240
mut repo : BoxRepository ,
240
- session_info : SessionInfo ,
241
+ session_info : & SessionInfo ,
241
242
user_agent : Option < String > ,
242
243
token : Option < & str > ,
243
244
) -> Result < Requester , RouteError > {
@@ -328,13 +329,13 @@ pub async fn post(
328
329
. as_ref ( )
329
330
. map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
330
331
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 ( ) ;
332
333
let requester = get_requester (
333
334
undocumented_oauth2_access,
334
335
& clock,
335
336
& activity_tracker,
336
337
repo,
337
- session_info,
338
+ & session_info,
338
339
user_agent,
339
340
token,
340
341
)
@@ -352,7 +353,12 @@ pub async fn post(
352
353
. data ( requester) ; // XXX: this should probably return another error response?
353
354
354
355
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
+ }
356
362
357
363
let cache_control = response
358
364
. cache_control
@@ -362,7 +368,7 @@ pub async fn post(
362
368
363
369
let headers = response. http_headers . clone ( ) ;
364
370
365
- Ok ( ( headers, cache_control, Json ( response) ) )
371
+ Ok ( ( headers, cache_control, cookie_jar , Json ( response) ) )
366
372
}
367
373
368
374
pub async fn get (
@@ -382,13 +388,13 @@ pub async fn get(
382
388
. as_ref ( )
383
389
. map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
384
390
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 ( ) ;
386
392
let requester = get_requester (
387
393
undocumented_oauth2_access,
388
394
& clock,
389
395
& activity_tracker,
390
396
repo,
391
- session_info,
397
+ & session_info,
392
398
user_agent,
393
399
token,
394
400
)
@@ -398,7 +404,12 @@ pub async fn get(
398
404
async_graphql:: http:: parse_query_string ( & query. unwrap_or_default ( ) ) ?. data ( requester) ;
399
405
400
406
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
+ }
402
413
403
414
let cache_control = response
404
415
. cache_control
@@ -408,7 +419,7 @@ pub async fn get(
408
419
409
420
let headers = response. http_headers . clone ( ) ;
410
421
411
- Ok ( ( headers, cache_control, Json ( response) ) )
422
+ Ok ( ( headers, cache_control, cookie_jar , Json ( response) ) )
412
423
}
413
424
414
425
pub async fn playground ( ) -> impl IntoResponse {
0 commit comments