1- // Copyright 2024 New Vector Ltd.
1+ // Copyright 2024, 2025 New Vector Ltd.
22// Copyright 2022-2024 The Matrix.org Foundation C.I.C.
33//
44// SPDX-License-Identifier: AGPL-3.0-only
@@ -53,7 +53,10 @@ use self::{
5353 mutations:: Mutation ,
5454 query:: Query ,
5555} ;
56- use crate :: { impl_from_error_for_route, passwords:: PasswordManager , BoundActivityTracker } ;
56+ use crate :: {
57+ impl_from_error_for_route, passwords:: PasswordManager , BoundActivityTracker , Limiter ,
58+ RequesterFingerprint ,
59+ } ;
5760
5861#[ cfg( test) ]
5962mod tests;
@@ -72,6 +75,7 @@ struct GraphQLState {
7275 site_config : SiteConfig ,
7376 password_manager : PasswordManager ,
7477 url_builder : UrlBuilder ,
78+ limiter : Limiter ,
7579}
7680
7781#[ async_trait]
@@ -104,6 +108,10 @@ impl state::State for GraphQLState {
104108 & self . url_builder
105109 }
106110
111+ fn limiter ( & self ) -> & Limiter {
112+ & self . limiter
113+ }
114+
107115 fn clock ( & self ) -> BoxClock {
108116 let clock = SystemClock :: default ( ) ;
109117 Box :: new ( clock)
@@ -126,6 +134,7 @@ pub fn schema(
126134 site_config : SiteConfig ,
127135 password_manager : PasswordManager ,
128136 url_builder : UrlBuilder ,
137+ limiter : Limiter ,
129138) -> Schema {
130139 let state = GraphQLState {
131140 pool : pool. clone ( ) ,
@@ -134,6 +143,7 @@ pub fn schema(
134143 site_config,
135144 password_manager,
136145 url_builder,
146+ limiter,
137147 } ;
138148 let state: BoxState = Box :: new ( state) ;
139149
@@ -303,6 +313,7 @@ pub async fn post(
303313 cookie_jar : CookieJar ,
304314 content_type : Option < TypedHeader < ContentType > > ,
305315 authorization : Option < TypedHeader < Authorization < Bearer > > > ,
316+ requester_fingerprint : RequesterFingerprint ,
306317 body : Body ,
307318) -> Result < impl IntoResponse , RouteError > {
308319 let body = body. into_data_stream ( ) ;
@@ -329,6 +340,7 @@ pub async fn post(
329340 MultipartOptions :: default ( ) ,
330341 )
331342 . await ?
343+ . data ( requester_fingerprint)
332344 . data ( requester) ; // XXX: this should probably return another error response?
333345
334346 let span = span_for_graphql_request ( & request) ;
@@ -355,6 +367,7 @@ pub async fn get(
355367 activity_tracker : BoundActivityTracker ,
356368 cookie_jar : CookieJar ,
357369 authorization : Option < TypedHeader < Authorization < Bearer > > > ,
370+ requester_fingerprint : RequesterFingerprint ,
358371 RawQuery ( query) : RawQuery ,
359372) -> Result < impl IntoResponse , FancyError > {
360373 let token = authorization
@@ -371,8 +384,9 @@ pub async fn get(
371384 )
372385 . await ?;
373386
374- let request =
375- async_graphql:: http:: parse_query_string ( & query. unwrap_or_default ( ) ) ?. data ( requester) ;
387+ let request = async_graphql:: http:: parse_query_string ( & query. unwrap_or_default ( ) ) ?
388+ . data ( requester)
389+ . data ( requester_fingerprint) ;
376390
377391 let span = span_for_graphql_request ( & request) ;
378392 let response = schema. execute ( request) . instrument ( span) . await ;
0 commit comments