Page MenuHomePhabricator

D4658.diff
No OneTemporary

D4658.diff

diff --git a/services/identity/src/service.rs b/services/identity/src/service.rs
--- a/services/identity/src/service.rs
+++ b/services/identity/src/service.rs
@@ -21,10 +21,11 @@
use crate::database::DatabaseClient;
use crate::opaque::Cipher;
use crate::token::{AccessTokenData, AuthType};
-use crate::{config::Config, database::Error};
+use crate::{config::Config, database::Error as DBError};
pub use proto::identity_service_server::IdentityServiceServer;
use proto::{
+ get_user_id_request::AuthType as ProtoAuthType,
identity_service_server::IdentityService,
login_request::Data::PakeLoginRequest,
login_request::Data::WalletLoginRequest,
@@ -334,17 +335,7 @@
message.access_token.as_bytes(),
),
Ok(None) => false,
- Err(Error::AwsSdk(DynamoDBError::InternalServerError(_)))
- | Err(Error::AwsSdk(
- DynamoDBError::ProvisionedThroughputExceededException(_),
- ))
- | Err(Error::AwsSdk(DynamoDBError::RequestLimitExceeded(_))) => {
- return Err(Status::unavailable("please retry"))
- }
- Err(e) => {
- error!("Encountered an unexpected error: {}", e);
- return Err(Status::failed_precondition("unexpected error"));
- }
+ Err(e) => return Err(handle_db_error(e)),
};
let response = Response::new(VerifyUserTokenResponse { token_valid });
info!("Sending VerifyUserToken response: {:?}", response);
@@ -356,7 +347,29 @@
&self,
request: Request<GetUserIdRequest>,
) -> Result<Response<GetUserIdResponse>, Status> {
- unimplemented!();
+ let message = request.into_inner();
+ let auth_type = match ProtoAuthType::from_i32(message.auth_type) {
+ Some(ProtoAuthType::Password) => AuthType::Password,
+ Some(ProtoAuthType::Wallet) => AuthType::Wallet,
+ None => {
+ error!(
+ "Unable to parse AuthType from message: {}",
+ message.auth_type
+ );
+ return Err(Status::invalid_argument("invalid message"));
+ }
+ };
+ let user_id = match self
+ .client
+ .get_user_id_from_user_info(message.user_info, auth_type)
+ .await
+ {
+ Ok(Some(user_id)) => user_id,
+ Ok(None) => return Err(Status::not_found("no user ID found")),
+ Err(e) => return Err(handle_db_error(e)),
+ };
+ let response = Response::new(GetUserIdResponse { user_id });
+ Ok(response)
}
}
@@ -385,17 +398,7 @@
.await
{
Ok(_) => Ok(access_token_data.access_token),
- Err(Error::AwsSdk(DynamoDBError::InternalServerError(_)))
- | Err(Error::AwsSdk(
- DynamoDBError::ProvisionedThroughputExceededException(_),
- ))
- | Err(Error::AwsSdk(DynamoDBError::RequestLimitExceeded(_))) => {
- Err(Status::unavailable("please retry"))
- }
- Err(e) => {
- error!("Encountered an unexpected error: {}", e);
- Err(Status::failed_precondition("unexpected error"))
- }
+ Err(e) => Err(handle_db_error(e)),
}
}
@@ -500,17 +503,7 @@
Ok(None) => {
return Err(Status::not_found("user not found"));
}
- Err(Error::AwsSdk(DynamoDBError::InternalServerError(_)))
- | Err(Error::AwsSdk(
- DynamoDBError::ProvisionedThroughputExceededException(_),
- ))
- | Err(Error::AwsSdk(DynamoDBError::RequestLimitExceeded(_))) => {
- return Err(Status::unavailable("please retry"))
- }
- Err(e) => {
- error!("Encountered an unexpected error: {}", e);
- return Err(Status::failed_precondition("unexpected error"));
- }
+ Err(e) => return Err(handle_db_error(e)),
};
let credential_request =
CredentialRequest::deserialize(pake_credential_request).map_err(|e| {
@@ -676,13 +669,22 @@
.await
{
Ok(_) => Ok(()),
- Err(Error::AwsSdk(DynamoDBError::InternalServerError(_)))
- | Err(Error::AwsSdk(
- DynamoDBError::ProvisionedThroughputExceededException(_),
+ Err(e) => Err(handle_db_error(e)),
+ }
+}
+
+fn handle_db_error(db_error: DBError) -> Status {
+ match db_error {
+ DBError::AwsSdk(DynamoDBError::InternalServerError(_))
+ | DBError::AwsSdk(DynamoDBError::ProvisionedThroughputExceededException(
+ _,
))
- | Err(Error::AwsSdk(DynamoDBError::RequestLimitExceeded(_))) => {
- Err(Status::unavailable("please retry"))
+ | DBError::AwsSdk(DynamoDBError::RequestLimitExceeded(_)) => {
+ Status::unavailable("please retry")
+ }
+ e => {
+ error!("Encountered an unexpected error: {}", e);
+ Status::failed_precondition("unexpected error")
}
- Err(_) => Err(Status::failed_precondition("internal error")),
}
}

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 4:15 AM (19 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2573867
Default Alt Text
D4658.diff (4 KB)

Event Timeline