Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat/SYNC-4244_stale #1546

Merged
merged 11 commits into from
May 9, 2024
1 change: 1 addition & 0 deletions syncserver/src/tokenserver/extractors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ impl TokenserverRequest {
.contains(&self.auth_data.client_state)
{
let error_message = "Unacceptable client-state value stale value".to_owned();
warn!("Client attempted stale value"; "uid"=> self.user.uid, "client_state"=> self.user.client_state.clone());
return Err(TokenserverError::invalid_client_state(error_message));
}

Expand Down
8 changes: 8 additions & 0 deletions tokenserver-common/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,14 @@ impl ReportableError for TokenserverError {
TokenType::BrowserId => Some("request.error.browser_id".to_owned()),
TokenType::Oauth => Some("request.error.oauth".to_owned()),
}
} else if matches!(
self,
TokenserverError {
status: "invalid-client-state",
..
}
) {
Some("request.error.invalid_client_state".to_owned())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably worth having a different metric (or preferably tag, but we don't have ReportableError::tags in this codebase yet which let's you do that) for the specific "Unacceptable client-state value stale value" issue in question.

Though I suppose we can alternatively look at the warn log messages for a count of those 🤷‍♂️

Copy link
Member Author

@jrconlin jrconlin May 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, let's hold off on adding a tag for that. I see that there's already a ticket for that work.

In any case, I'll add a different ticket to do that and we can add the tag once that lands.

} else {
None
}
Expand Down
2 changes: 2 additions & 0 deletions tokenserver-db/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
extern crate diesel;
#[macro_use]
extern crate diesel_migrations;
#[macro_use]
extern crate slog_scope;

mod error;
pub mod mock;
Expand Down
8 changes: 6 additions & 2 deletions tokenserver-db/src/models.rs
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ impl TokenserverDb {
let raw_user = raw_users[0].clone();

// Collect any old client states that differ from the current client state
let old_client_states = {
let old_client_states: Vec<String> = {
raw_users[1..]
.iter()
.map(|user| user.client_state.clone())
Expand Down Expand Up @@ -463,7 +463,11 @@ impl TokenserverDb {
// The most up-to-date user doesn't have a node and is retired. This is an internal
// service error for compatibility reasons (the legacy Tokenserver returned an
// internal service error in this situation).
(_, None) => Err(DbError::internal("Tokenserver user retired".to_owned())),
(_, None) => {
let uid = raw_user.uid;
warn!("Tokenserver user retired"; "uid" => &uid);
Err(DbError::internal("Tokenserver user retired".to_owned()))
}
}
}
}
Expand Down