diff --git a/services/identity/Dockerfile b/services/identity/Dockerfile --- a/services/identity/Dockerfile +++ b/services/identity/Dockerfile @@ -1,7 +1,12 @@ FROM rust:1.67 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ - protobuf-compiler && rm -rf /var/lib/apt/lists/* + build-essential cmake git libgtest-dev libssl-dev zlib1g-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install more recent version of protobuf, must be ran as root +COPY scripts/install_protobuf.sh ../../scripts/install_protobuf.sh +RUN ../../scripts/install_protobuf.sh # Create a new user comm and use it to run subsequent commands RUN useradd -m comm @@ -24,6 +29,7 @@ COPY services/identity . COPY shared/protos/identity.proto ../../shared/protos/ +COPY shared/protos/identity_client.proto ../../shared/protos/ # Remove the previously-built binary so that only the application itself is # rebuilt diff --git a/services/identity/build.rs b/services/identity/build.rs --- a/services/identity/build.rs +++ b/services/identity/build.rs @@ -1,4 +1,13 @@ fn main() -> Result<(), Box> { - tonic_build::compile_protos("../../shared/protos/identity.proto")?; + tonic_build::configure() + .build_server(true) + .build_client(false) + .compile( + &[ + "../../shared/protos/identity.proto", + "../../shared/protos/identity_client.proto", + ], + &["../../shared/protos/"], + )?; Ok(()) } diff --git a/services/identity/src/client_service.rs b/services/identity/src/client_service.rs new file mode 100644 --- /dev/null +++ b/services/identity/src/client_service.rs @@ -0,0 +1,117 @@ +pub mod client_proto { + tonic::include_proto!("identity.client"); +} + +use crate::client_service::client_proto::{ + DeleteUserRequest, DeviceKeysForUserRequest, DeviceKeysForUserResponse, + Empty, GenerateNonceResponse, KeyserverKeysRequest, KeyserverKeysResponse, + OpaqueLoginFinishRequest, OpaqueLoginFinishResponse, OpaqueLoginStartRequest, + OpaqueLoginStartResponse, RefreshUserPreKeysRequest, + RegistrationFinishRequest, RegistrationFinishResponse, + RegistrationStartRequest, RegistrationStartResponse, + UpdateUserPasswordFinishRequest, UpdateUserPasswordFinishResponse, + UpdateUserPasswordStartRequest, UpdateUserPasswordStartResponse, + UploadOneTimeKeysRequest, WalletLoginRequest, WalletLoginResponse, +}; +pub use client_proto::identity_client_service_server::{ + IdentityClientService, IdentityClientServiceServer, +}; + +#[derive(derive_more::Constructor)] +pub struct ClientService {} + +#[tonic::async_trait] +impl IdentityClientService for ClientService { + async fn register_password_user_start( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn register_password_user_finish( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn update_user_password_start( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> + { + unimplemented!(); + } + + async fn update_user_password_finish( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> + { + unimplemented!(); + } + + async fn login_password_user_start( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn login_password_user_finish( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn login_wallet_user( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn delete_user( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn generate_nonce( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn get_device_keys_for_user( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn get_keyserver_keys( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn upload_one_time_keys( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } + + async fn refresh_user_pre_keys( + &self, + _request: tonic::Request, + ) -> Result, tonic::Status> { + unimplemented!(); + } +} diff --git a/services/identity/src/main.rs b/services/identity/src/main.rs --- a/services/identity/src/main.rs +++ b/services/identity/src/main.rs @@ -4,6 +4,7 @@ use tonic::transport::Server; use tracing_subscriber::FmtSubscriber; +mod client_service; mod config; mod constants; mod database; @@ -20,6 +21,8 @@ use service::{IdentityKeyserverServiceServer, MyIdentityService}; use tracing::info; +use client_service::{ClientService, IdentityClientServiceServer}; + #[derive(Parser)] #[clap(author, version, about, long_about = None)] #[clap(propagate_version = true)] @@ -57,10 +60,16 @@ let aws_config = aws_config::from_env().region("us-east-2").load().await; let database_client = DatabaseClient::new(&aws_config); let server = MyIdentityService::new(database_client); - let svc = + let keyserver_service = IdentityKeyserverServiceServer::with_interceptor(server, check_auth); + let client_server = + IdentityClientServiceServer::new(ClientService::new()); info!("Listening to gRPC traffic on {}", addr); - Server::builder().add_service(svc).serve(addr).await?; + Server::builder() + .add_service(keyserver_service) + .add_service(client_server) + .serve(addr) + .await?; } Commands::PopulateDB => unimplemented!(), }