diff --git a/services/identity/src/client_service.rs b/services/identity/src/client_service.rs --- a/services/identity/src/client_service.rs +++ b/services/identity/src/client_service.rs @@ -21,6 +21,7 @@ config::CONFIG, database::{DatabaseClient, Error as DBError, KeyPayload}, id::generate_uuid, + interceptor::check_auth, nonce::generate_nonce_data, reserved_users::validate_signed_keyserver_message, siwe::parse_and_verify_siwe_message, @@ -38,6 +39,7 @@ use tracing::error; use self::client_proto::{ + update_reserved_usernames_list_request::UpdateType, ReservedRegistrationStartRequest, UpdateReservedUsernamesListRequest, }; @@ -788,9 +790,33 @@ async fn update_reserved_usernames_list( &self, - _request: tonic::Request, + request: tonic::Request, ) -> Result, tonic::Status> { - unimplemented!() + // This RPC should only be called by Ashoat's keyserver + let authenticated_request = check_auth(request)?; + let message = authenticated_request.into_inner(); + let update_type = message.update_type(); + let username = message.username; + match update_type { + UpdateType::Add => { + self + .client + .add_username_to_reserved_usernames_table(username) + .await + .map_err(handle_db_error)?; + let response = Empty {}; + Ok(Response::new(response)) + } + UpdateType::Remove => { + self + .client + .delete_username_from_reserved_usernames_table(username) + .await + .map_err(handle_db_error)?; + let response = Empty {}; + Ok(Response::new(response)) + } + } } } diff --git a/services/identity/src/interceptor.rs b/services/identity/src/interceptor.rs --- a/services/identity/src/interceptor.rs +++ b/services/identity/src/interceptor.rs @@ -3,7 +3,7 @@ use crate::config::CONFIG; -pub fn check_auth(req: Request<()>) -> Result, Status> { +pub fn check_auth(req: Request) -> Result, Status> { let token: MetadataValue<_> = CONFIG.keyserver_auth_token.parse().map_err(|e| { error!("Invalid auth token on server: {}", e);