diff --git a/rest/src/lib.rs b/rest/src/lib.rs index a3e05f9..26e8667 100644 --- a/rest/src/lib.rs +++ b/rest/src/lib.rs @@ -21,6 +21,8 @@ use axum::{body::Body, response::Response, Router}; #[cfg(feature = "oidc")] use axum_oidc::{EmptyAdditionalClaims, OidcClaims}; use serde::{Deserialize, Serialize}; +#[cfg(feature = "mock_auth")] +use service::permission::MockContext; use service::user_service::UserService; use service::PermissionService; use service::ServiceError; @@ -31,9 +33,8 @@ use tower::ServiceBuilder; use tower_sessions::{cookie::SameSite, Expiry, MemoryStore, SessionManagerLayer}; use uuid::Uuid; -// TODO: In prod, it must be a different type than in dev mode. #[cfg(feature = "mock_auth")] -type Context = (); +type Context = MockContext; #[cfg(feature = "oidc")] type Context = Option>; @@ -216,9 +217,9 @@ pub fn oidc_config() -> OidcConfig { let client_id = std::env::var("CLIENT_ID").expect("CLIENT_ID env variable"); let client_secret = std::env::var("CLIENT_SECRET").ok(); OidcConfig { - app_url: app_url.into(), - issuer: issuer.into(), - client_id: client_id.into(), + app_url, + issuer, + client_id, client_secret: client_secret.unwrap_or_default().into(), } } @@ -245,7 +246,7 @@ pub async fn auth_info( ) -> Response { let user = rest_state .user_service() - .current_user(context.clone().into()) + .current_user(context.clone()) .await .unwrap_or_else(|_| "NoUser".into()); let privileges: Arc<[Arc]> = rest_state @@ -253,12 +254,12 @@ pub async fn auth_info( .get_privileges_for_current_user(context.into()) .await .unwrap_or_else(|_| Arc::new([])) - .into_iter() + .iter() .map(|privilege| privilege.name.clone()) .collect(); let auth_info = AuthInfoTO { user, privileges }; - let response = serde_json::to_string(&AuthInfoTO::from(auth_info)).unwrap(); + let response = serde_json::to_string(&auth_info).unwrap(); Response::builder() .status(200) .body(Body::new(response)) diff --git a/service/src/permission.rs b/service/src/permission.rs index 46907e9..6ee0349 100644 --- a/service/src/permission.rs +++ b/service/src/permission.rs @@ -6,6 +6,11 @@ use mockall::automock; use crate::ServiceError; +/// For mocking the context locally since there is actually +/// no context. +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MockContext; + #[derive(Debug, PartialEq, Eq)] pub struct User { pub name: Arc, diff --git a/service_impl/src/lib.rs b/service_impl/src/lib.rs index 8e17e09..6a92f21 100644 --- a/service_impl/src/lib.rs +++ b/service_impl/src/lib.rs @@ -11,12 +11,13 @@ mod test; pub mod uuid_service; pub use permission::PermissionServiceImpl; +use service::permission::MockContext; pub struct UserServiceDev; #[async_trait] impl service::user_service::UserService for UserServiceDev { - type Context = (); + type Context = MockContext; async fn current_user( &self, @@ -36,8 +37,6 @@ impl service::user_service::UserService for UserServiceImpl { &self, context: Self::Context, ) -> Result, service::ServiceError> { - context - .ok_or_else(|| service::ServiceError::Unauthorized) - .map(|user| user.clone()) + context.ok_or_else(|| service::ServiceError::Unauthorized) } } diff --git a/service_impl/src/test/permission_test.rs b/service_impl/src/test/permission_test.rs index be59e55..1e13029 100644 --- a/service_impl/src/test/permission_test.rs +++ b/service_impl/src/test/permission_test.rs @@ -54,7 +54,11 @@ async fn test_user_service_dev() { let user_service = UserServiceDev; assert_eq!( "DEVUSER", - user_service.current_user(()).await.unwrap().as_ref() + user_service + .current_user(MockContext) + .await + .unwrap() + .as_ref() ); }