1
- // Copyright 2024 New Vector Ltd.
1
+ // Copyright 2024, 2025 New Vector Ltd.
2
2
// Copyright 2022-2024 The Matrix.org Foundation C.I.C.
3
3
//
4
4
// SPDX-License-Identifier: AGPL-3.0-only
@@ -53,7 +53,10 @@ use self::{
53
53
mutations:: Mutation ,
54
54
query:: Query ,
55
55
} ;
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
+ } ;
57
60
58
61
#[ cfg( test) ]
59
62
mod tests;
@@ -72,6 +75,7 @@ struct GraphQLState {
72
75
site_config : SiteConfig ,
73
76
password_manager : PasswordManager ,
74
77
url_builder : UrlBuilder ,
78
+ limiter : Limiter ,
75
79
}
76
80
77
81
#[ async_trait]
@@ -104,6 +108,10 @@ impl state::State for GraphQLState {
104
108
& self . url_builder
105
109
}
106
110
111
+ fn limiter ( & self ) -> & Limiter {
112
+ & self . limiter
113
+ }
114
+
107
115
fn clock ( & self ) -> BoxClock {
108
116
let clock = SystemClock :: default ( ) ;
109
117
Box :: new ( clock)
@@ -126,6 +134,7 @@ pub fn schema(
126
134
site_config : SiteConfig ,
127
135
password_manager : PasswordManager ,
128
136
url_builder : UrlBuilder ,
137
+ limiter : Limiter ,
129
138
) -> Schema {
130
139
let state = GraphQLState {
131
140
pool : pool. clone ( ) ,
@@ -134,6 +143,7 @@ pub fn schema(
134
143
site_config,
135
144
password_manager,
136
145
url_builder,
146
+ limiter,
137
147
} ;
138
148
let state: BoxState = Box :: new ( state) ;
139
149
@@ -303,6 +313,7 @@ pub async fn post(
303
313
cookie_jar : CookieJar ,
304
314
content_type : Option < TypedHeader < ContentType > > ,
305
315
authorization : Option < TypedHeader < Authorization < Bearer > > > ,
316
+ requester_fingerprint : RequesterFingerprint ,
306
317
body : Body ,
307
318
) -> Result < impl IntoResponse , RouteError > {
308
319
let body = body. into_data_stream ( ) ;
@@ -329,6 +340,7 @@ pub async fn post(
329
340
MultipartOptions :: default ( ) ,
330
341
)
331
342
. await ?
343
+ . data ( requester_fingerprint)
332
344
. data ( requester) ; // XXX: this should probably return another error response?
333
345
334
346
let span = span_for_graphql_request ( & request) ;
@@ -355,6 +367,7 @@ pub async fn get(
355
367
activity_tracker : BoundActivityTracker ,
356
368
cookie_jar : CookieJar ,
357
369
authorization : Option < TypedHeader < Authorization < Bearer > > > ,
370
+ requester_fingerprint : RequesterFingerprint ,
358
371
RawQuery ( query) : RawQuery ,
359
372
) -> Result < impl IntoResponse , FancyError > {
360
373
let token = authorization
@@ -371,8 +384,9 @@ pub async fn get(
371
384
)
372
385
. await ?;
373
386
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) ;
376
390
377
391
let span = span_for_graphql_request ( & request) ;
378
392
let response = schema. execute ( request) . instrument ( span) . await ;
0 commit comments