Skip to content

Commit 8226164

Browse files
committed
Rever move of Session into the token match arm and separate Session from Auth
1 parent b58f01d commit 8226164

File tree

7 files changed

+53
-32
lines changed

7 files changed

+53
-32
lines changed

sentry/src/access.rs

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use chrono::Utc;
22
use futures::future::try_join_all;
33
use redis::aio::MultiplexedConnection;
44

5-
use crate::Session;
5+
use crate::{Auth, Session};
66
use primitives::event_submission::{RateLimit, Rule};
77
use primitives::sentry::Event;
88
use primitives::Channel;
@@ -39,6 +39,7 @@ impl fmt::Display for Error {
3939
pub async fn check_access(
4040
redis: &MultiplexedConnection,
4141
session: &Session,
42+
auth: Option<&Auth>,
4243
rate_limit: &RateLimit,
4344
channel: &Channel,
4445
events: &[Event],
@@ -60,7 +61,7 @@ pub async fn check_access(
6061
return Err(Error::ChannelIsExpired);
6162
}
6263

63-
let (is_creator, auth_uid) = match &session.auth {
64+
let (is_creator, auth_uid) = match auth {
6465
Some(auth) => (auth.uid == channel.creator, auth.uid.to_string()),
6566
None => (false, Default::default()),
6667
};
@@ -263,7 +264,6 @@ mod test {
263264
};
264265

265266
let session = Session {
266-
auth: Some(auth),
267267
ip: Default::default(),
268268
referrer_header: None,
269269
country: None,
@@ -280,12 +280,26 @@ mod test {
280280
let events = get_impression_events(2);
281281
let channel = get_channel(rule);
282282

283-
let response =
284-
check_access(&redis, &session, &config.ip_rate_limit, &channel, &events).await;
283+
let response = check_access(
284+
&redis,
285+
&session,
286+
Some(&auth),
287+
&config.ip_rate_limit,
288+
&channel,
289+
&events,
290+
)
291+
.await;
285292
assert_eq!(Ok(()), response);
286293

287-
let err_response =
288-
check_access(&&redis, &session, &config.ip_rate_limit, &channel, &events).await;
294+
let err_response = check_access(
295+
&&redis,
296+
&session,
297+
Some(&auth),
298+
&config.ip_rate_limit,
299+
&channel,
300+
&events,
301+
)
302+
.await;
289303
assert_eq!(
290304
Err(Error::RulesError(
291305
"rateLimit: too many requests".to_string()
@@ -308,7 +322,6 @@ mod test {
308322
referrer_header: None,
309323
country: None,
310324
os: None,
311-
auth: Some(auth),
312325
};
313326

314327
let rule = Rule {
@@ -323,6 +336,7 @@ mod test {
323336
let err_response = check_access(
324337
&redis,
325338
&session,
339+
Some(&auth),
326340
&config.ip_rate_limit,
327341
&channel,
328342
&get_impression_events(2),
@@ -339,6 +353,7 @@ mod test {
339353
let response = check_access(
340354
&redis,
341355
&session,
356+
Some(&auth),
342357
&config.ip_rate_limit,
343358
&channel,
344359
&get_impression_events(1),

sentry/src/event_aggregator.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use crate::access::check_access;
22
use crate::access::Error as AccessError;
3-
use crate::analytics_recorder;
43
use crate::db::event_aggregate::insert_event_aggregate;
54
use crate::db::get_channel_by_id;
65
use crate::db::DbPool;
76
use crate::event_reducer;
87
use crate::Application;
98
use crate::ResponseError;
109
use crate::Session;
10+
use crate::{analytics_recorder, Auth};
1111
use async_std::sync::RwLock;
1212
use chrono::Utc;
1313
use lazy_static::lazy_static;
@@ -69,6 +69,7 @@ impl EventAggregator {
6969
app: &'a Application<A>,
7070
channel_id: &ChannelId,
7171
session: &Session,
72+
auth: Option<&Auth>,
7273
events: &'a [Event],
7374
) -> Result<(), ResponseError> {
7475
let recorder = self.recorder.clone();
@@ -127,6 +128,7 @@ impl EventAggregator {
127128
check_access(
128129
&app.redis,
129130
session,
131+
auth,
130132
&app.config.ip_rate_limit,
131133
&record.channel,
132134
events,

sentry/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ pub fn epoch() -> f64 {
446446
// @TODO: Make pub(crate)
447447
#[derive(Debug, Clone)]
448448
pub struct Session {
449-
pub auth: Option<Auth>,
450449
pub ip: Option<String>,
451450
pub country: Option<String>,
452451
pub referrer_header: Option<String>,

sentry/src/middleware/auth.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ pub(crate) async fn for_request(
2121
.map(|hv| hv.to_str().ok().map(ToString::to_string))
2222
.flatten();
2323

24+
let session = Session {
25+
ip: get_request_ip(&req),
26+
country: None,
27+
referrer_header: referrer,
28+
os: None,
29+
};
30+
req.extensions_mut().insert(session);
31+
2432
let authorization = req.headers().get(AUTHORIZATION);
2533

2634
let prefix = "Bearer ";
@@ -69,15 +77,7 @@ pub(crate) async fn for_request(
6977
uid: adapter_session.uid,
7078
};
7179

72-
let session = Session {
73-
ip: get_request_ip(&req),
74-
country: None,
75-
referrer_header: referrer,
76-
os: None,
77-
auth: Some(auth),
78-
};
79-
80-
req.extensions_mut().insert(session);
80+
req.extensions_mut().insert(auth);
8181
}
8282

8383
Ok(req)
@@ -176,12 +176,18 @@ mod test {
176176
let altered_request = for_request(req, &dummy_adapter, redis)
177177
.await
178178
.expect("Valid requests should succeed");
179+
179180
let auth = altered_request
180181
.extensions()
181182
.get::<Auth>()
182183
.expect("There should be a Session set inside the request");
183184

184185
assert_eq!(IDS["leader"], auth.uid);
185-
assert!(auth.session.ip.is_none());
186+
187+
let session = altered_request
188+
.extensions()
189+
.get::<Session>()
190+
.expect("There should be a Session set inside the request");
191+
assert!(session.ip.is_none());
186192
}
187193
}

sentry/src/payout.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn payout(
3636
) -> BigNum {
3737
let fixed_amount_rule = rules.iter().find_map(|rule| {
3838
match (match_rule(rule, &event, &session, &publisher), &rule.amount) {
39-
(true, Some(amount)) => rule.amount.clone(),
39+
(true, Some(amount)) => Some(amount.clone()),
4040
_ => None,
4141
}
4242
});
@@ -45,7 +45,8 @@ fn payout(
4545
Some(amount) => amount,
4646
None => {
4747
let exponent: f64 = 10.0;
48-
let multiplier = rules.iter().filter_map(|&rule| rule.multiplier).product();
48+
// @TODO: Know-issue - `multiplier` and `value` can overflow, should return Error instead
49+
let multiplier: f64 = rules.iter().filter_map(|rule| rule.multiplier).product();
4950
let value: u64 = (multiplier * exponent.powi(18)) as u64;
5051
let result = min_price * BigNum::from(value);
5152

@@ -164,7 +165,6 @@ mod tests {
164165
cases.iter().for_each(|case| {
165166
let (event, expected_result, message) = case;
166167
let payout = get_payout(&channel, &event, &session);
167-
// println!("payout {:?}", payout.to_f64());
168168
assert!(&payout == expected_result, message.clone());
169169
})
170170
}
@@ -218,8 +218,7 @@ mod tests {
218218
os: None,
219219
};
220220

221-
cases.iter().for_each(|case| {
222-
let (event, expected_result, message) = case;
221+
cases.iter().for_each(|(event, expected_result, message)| {
223222
let payout = get_payout(&channel, &event, &session);
224223
assert!(&payout == expected_result, message.clone());
225224
})

sentry/src/routes/analytics.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use crate::db::analytics::{
22
advertiser_channel_ids, get_advanced_reports, get_analytics, AnalyticsType,
33
};
4+
use crate::success_response;
45
use crate::Application;
56
use crate::Auth;
67
use crate::ResponseError;
78
use crate::RouteParams;
8-
use crate::{success_response, Session};
99
use hyper::{Body, Request, Response};
1010
use primitives::adapter::Adapter;
1111
use primitives::analytics::{AnalyticsQuery, AnalyticsResponse};
@@ -17,11 +17,11 @@ pub async fn publisher_analytics<A: Adapter>(
1717
req: Request<Body>,
1818
app: &Application<A>,
1919
) -> Result<Response<Body>, ResponseError> {
20-
let session = req
20+
let auth = req
2121
.extensions()
22-
.get::<Session>()
23-
.ok_or(ResponseError::Unauthorized)?;
24-
let auth = session.auth.ok_or(ResponseError::Unauthorized)?;
22+
.get::<Auth>()
23+
.ok_or(ResponseError::Unauthorized)?
24+
.clone();
2525

2626
let analytics_type = AnalyticsType::Publisher { auth };
2727

sentry/src/routes/channel.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ pub async fn insert_events<A: Adapter + 'static>(
184184
) -> Result<Response<Body>, ResponseError> {
185185
let (req_head, req_body) = req.into_parts();
186186

187-
let auth_session = req_head.extensions.get::<Auth>();
187+
let auth = req_head.extensions.get::<Auth>();
188188
let session = req_head
189189
.extensions
190190
.get::<Session>()
@@ -205,7 +205,7 @@ pub async fn insert_events<A: Adapter + 'static>(
205205
.ok_or_else(|| ResponseError::BadRequest("invalid request".to_string()))?;
206206

207207
app.event_aggregator
208-
.record(app, &channel_id, session, &events)
208+
.record(app, &channel_id, session, auth, &events)
209209
.await?;
210210

211211
Ok(Response::builder()

0 commit comments

Comments
 (0)