@@ -9,6 +9,7 @@ use crate::middleware::cors::{cors, Cors};
9
9
use crate :: routes:: channel:: channel_status;
10
10
use crate :: routes:: event_aggregate:: list_channel_event_aggregates;
11
11
use crate :: routes:: validator_message:: { extract_params, list_validator_messages} ;
12
+ use futures:: future:: { BoxFuture , FutureExt } ;
12
13
use hyper:: { Body , Method , Request , Response , StatusCode } ;
13
14
use lazy_static:: lazy_static;
14
15
use primitives:: adapter:: Adapter ;
@@ -20,7 +21,6 @@ use routes::cfg::config;
20
21
use routes:: channel:: { channel_list, create_channel, last_approved} ;
21
22
use slog:: { error, Logger } ;
22
23
use std:: collections:: HashMap ;
23
-
24
24
pub mod middleware {
25
25
pub mod auth;
26
26
pub mod channel;
@@ -54,22 +54,18 @@ lazy_static! {
54
54
static ref ADVERTISER_ANALYTICS_BY_CHANNEL_ID : Regex = Regex :: new( r"^/analytics/for-advertiser/0x([a-zA-Z0-9]{64})/?$" ) . expect( "The regex should be valid" ) ;
55
55
}
56
56
57
- async fn config_middleware < A : Adapter > (
58
- req : Request < Body > ,
59
- _: & Application < A > ,
60
- ) -> Result < Request < Body > , ResponseError > {
61
- Ok ( req)
62
- }
63
-
64
- async fn auth_required_middleware < A : Adapter > (
57
+ fn auth_required_middleware < ' a , A : Adapter > (
65
58
req : Request < Body > ,
66
59
_: & Application < A > ,
67
- ) -> Result < Request < Body > , ResponseError > {
68
- if req. extensions ( ) . get :: < Session > ( ) . is_some ( ) {
69
- Ok ( req)
70
- } else {
71
- Err ( ResponseError :: Unauthorized )
60
+ ) -> BoxFuture < ' a , Result < Request < Body > , ResponseError > > {
61
+ async move {
62
+ if req. extensions ( ) . get :: < Session > ( ) . is_some ( ) {
63
+ Ok ( req)
64
+ } else {
65
+ Err ( ResponseError :: Unauthorized )
66
+ }
72
67
}
68
+ . boxed ( )
73
69
}
74
70
75
71
#[ derive( Debug ) ]
@@ -137,8 +133,7 @@ impl<A: Adapter + 'static> Application<A> {
137
133
138
134
( "/analytics" , & Method :: GET ) => analytics ( req, & self ) . await ,
139
135
( "/analytics/for-advertiser" , & Method :: GET ) => {
140
- // @TODO get advertiser channels
141
- let req = match chain ( req, & self , vec ! [ auth_required_middleware] ) . await {
136
+ let req = match chain ( req, & self , vec ! [ Box :: new( auth_required_middleware) ] ) . await {
142
137
Ok ( req) => req,
143
138
Err ( error) => {
144
139
return map_response_error ( error) ;
@@ -147,7 +142,7 @@ impl<A: Adapter + 'static> Application<A> {
147
142
advertiser_analytics ( req, & self ) . await
148
143
}
149
144
( "/analytics/for-publisher" , & Method :: GET ) => {
150
- let req = match chain ( req, & self , vec ! [ auth_required_middleware] ) . await {
145
+ let req = match chain ( req, & self , vec ! [ Box :: new ( auth_required_middleware) ] ) . await {
151
146
Ok ( req) => req,
152
147
Err ( error) => {
153
148
return map_response_error ( error) ;
@@ -170,7 +165,7 @@ impl<A: Adapter + 'static> Application<A> {
170
165
}
171
166
}
172
167
173
- async fn analytics_router < A : Adapter > (
168
+ async fn analytics_router < A : Adapter + ' static > (
174
169
mut req : Request < Body > ,
175
170
app : & Application < A > ,
176
171
) -> Result < Response < Body > , ResponseError > {
@@ -184,15 +179,15 @@ async fn analytics_router<A: Adapter>(
184
179
. map_or( "" . to_string( ) , |m| m. as_str( ) . to_string( ) ) ] ) ;
185
180
req. extensions_mut ( ) . insert ( param) ;
186
181
187
- let req = chain ( req, app, vec ! [ channel_load] ) . await ?;
182
+ let req = chain ( req, app, vec ! [ Box :: new ( channel_load) ] ) . await ?;
188
183
analytics ( req, app) . await
189
184
} else if let Some ( caps) = ADVERTISER_ANALYTICS_BY_CHANNEL_ID . captures ( route) {
190
185
let param = RouteParams ( vec ! [ caps
191
186
. get( 1 )
192
187
. map_or( "" . to_string( ) , |m| m. as_str( ) . to_string( ) ) ] ) ;
193
188
req. extensions_mut ( ) . insert ( param) ;
194
189
195
- let req = chain ( req, app, vec ! [ auth_required_middleware ] ) . await ?;
190
+ let req = auth_required_middleware ( req, app) . await ?;
196
191
advertiser_analytics ( req, app) . await
197
192
} else {
198
193
Err ( ResponseError :: NotFound )
@@ -202,7 +197,7 @@ async fn analytics_router<A: Adapter>(
202
197
}
203
198
}
204
199
205
- async fn channels_router < A : Adapter > (
200
+ async fn channels_router < A : Adapter + ' static > (
206
201
mut req : Request < Body > ,
207
202
app : & Application < A > ,
208
203
) -> Result < Response < Body > , ResponseError > {
@@ -217,15 +212,6 @@ async fn channels_router<A: Adapter>(
217
212
. map_or( "" . to_string( ) , |m| m. as_str( ) . to_string( ) ) ] ) ;
218
213
req. extensions_mut ( ) . insert ( param) ;
219
214
220
- // example with middleware
221
- // @TODO remove later
222
- let req = match chain ( req, app, vec ! [ config_middleware] ) . await {
223
- Ok ( req) => req,
224
- Err ( error) => {
225
- return Err ( error) ;
226
- }
227
- } ;
228
-
229
215
last_approved ( req, app) . await
230
216
} else if let ( Some ( caps) , & Method :: GET ) =
231
217
( CHANNEL_STATUS_BY_CHANNEL_ID . captures ( & path) , method)
@@ -235,13 +221,7 @@ async fn channels_router<A: Adapter>(
235
221
. map_or( "" . to_string( ) , |m| m. as_str( ) . to_string( ) ) ] ) ;
236
222
req. extensions_mut ( ) . insert ( param) ;
237
223
238
- let req = match chain ( req, app, vec ! [ channel_load] ) . await {
239
- Ok ( req) => req,
240
- Err ( error) => {
241
- return Err ( error) ;
242
- }
243
- } ;
244
-
224
+ let req = channel_load ( req, app) . await ?;
245
225
channel_status ( req, app) . await
246
226
} else if let ( Some ( caps) , & Method :: GET ) = ( CHANNEL_VALIDATOR_MESSAGES . captures ( & path) , method)
247
227
{
@@ -251,7 +231,7 @@ async fn channels_router<A: Adapter>(
251
231
252
232
req. extensions_mut ( ) . insert ( param) ;
253
233
254
- let req = match chain ( req, app, vec ! [ channel_load] ) . await {
234
+ let req = match chain ( req, app, vec ! [ Box :: new ( channel_load) ] ) . await {
255
235
Ok ( req) => req,
256
236
Err ( error) => {
257
237
return Err ( error) ;
@@ -280,7 +260,7 @@ async fn channels_router<A: Adapter>(
280
260
] ) ;
281
261
req. extensions_mut ( ) . insert ( param) ;
282
262
283
- let req = chain ( req, app, vec ! [ channel_load] ) . await ?;
263
+ let req = chain ( req, app, vec ! [ Box :: new ( channel_load) ] ) . await ?;
284
264
285
265
list_channel_event_aggregates ( req, app) . await
286
266
} else {
0 commit comments