@@ -27,7 +27,7 @@ use axum::{
2727 extract:: { RawQuery , State as AxumState } ,
2828 http:: StatusCode ,
2929 response:: { Html , IntoResponse , Response } ,
30- Json ,
30+ Extension , Json ,
3131} ;
3232use axum_extra:: typed_header:: TypedHeader ;
3333use chrono:: { DateTime , Utc } ;
@@ -65,6 +65,13 @@ use crate::{impl_from_error_for_route, passwords::PasswordManager, BoundActivity
6565#[ cfg( test) ]
6666mod tests;
6767
68+ /// Extra parameters we get from the listener configuration, because they are
69+ /// per-listener options. We pass them through request extensions.
70+ #[ derive( Debug , Clone ) ]
71+ pub struct ExtraRouterParameters {
72+ pub undocumented_oauth2_access : bool ,
73+ }
74+
6875struct GraphQLState {
6976 pool : PgPool ,
7077 homeserver_connection : Arc < dyn HomeserverConnection < Error = anyhow:: Error > > ,
@@ -217,13 +224,19 @@ impl IntoResponse for RouteError {
217224}
218225
219226async fn get_requester (
227+ undocumented_oauth2_access : bool ,
220228 clock : & impl Clock ,
221229 activity_tracker : & BoundActivityTracker ,
222230 mut repo : BoxRepository ,
223231 session_info : SessionInfo ,
224232 token : Option < & str > ,
225233) -> Result < Requester , RouteError > {
226234 let requester = if let Some ( token) = token {
235+ // If we haven't enabled undocumented_oauth2_access on the listener, we bail out
236+ if !undocumented_oauth2_access {
237+ return Err ( RouteError :: InvalidToken ) ;
238+ }
239+
227240 let token = repo
228241 . oauth2_access_token ( )
229242 . find_by_token ( token)
@@ -281,6 +294,9 @@ async fn get_requester(
281294
282295pub async fn post (
283296 AxumState ( schema) : AxumState < Schema > ,
297+ Extension ( ExtraRouterParameters {
298+ undocumented_oauth2_access,
299+ } ) : Extension < ExtraRouterParameters > ,
284300 clock : BoxClock ,
285301 repo : BoxRepository ,
286302 activity_tracker : BoundActivityTracker ,
@@ -294,7 +310,15 @@ pub async fn post(
294310 . as_ref ( )
295311 . map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
296312 let ( session_info, _cookie_jar) = cookie_jar. session_info ( ) ;
297- let requester = get_requester ( & clock, & activity_tracker, repo, session_info, token) . await ?;
313+ let requester = get_requester (
314+ undocumented_oauth2_access,
315+ & clock,
316+ & activity_tracker,
317+ repo,
318+ session_info,
319+ token,
320+ )
321+ . await ?;
298322
299323 let content_type = content_type. map ( |TypedHeader ( h) | h. to_string ( ) ) ;
300324
@@ -323,6 +347,9 @@ pub async fn post(
323347
324348pub async fn get (
325349 AxumState ( schema) : AxumState < Schema > ,
350+ Extension ( ExtraRouterParameters {
351+ undocumented_oauth2_access,
352+ } ) : Extension < ExtraRouterParameters > ,
326353 clock : BoxClock ,
327354 repo : BoxRepository ,
328355 activity_tracker : BoundActivityTracker ,
@@ -334,7 +361,15 @@ pub async fn get(
334361 . as_ref ( )
335362 . map ( |TypedHeader ( Authorization ( bearer) ) | bearer. token ( ) ) ;
336363 let ( session_info, _cookie_jar) = cookie_jar. session_info ( ) ;
337- let requester = get_requester ( & clock, & activity_tracker, repo, session_info, token) . await ?;
364+ let requester = get_requester (
365+ undocumented_oauth2_access,
366+ & clock,
367+ & activity_tracker,
368+ repo,
369+ session_info,
370+ token,
371+ )
372+ . await ?;
338373
339374 let request =
340375 async_graphql:: http:: parse_query_string ( & query. unwrap_or_default ( ) ) ?. data ( requester) ;
0 commit comments