Skip to main content

static_authz_plugin/domain/
client.rs

1//! Client implementation for the static `AuthZ` resolver plugin.
2
3use async_trait::async_trait;
4use authz_resolver_sdk::{
5    AuthZResolverError, AuthZResolverPluginClient, EvaluationRequest, EvaluationResponse,
6};
7
8use super::service::Service;
9
10#[async_trait]
11impl AuthZResolverPluginClient for Service {
12    async fn evaluate(
13        &self,
14        request: EvaluationRequest,
15    ) -> Result<EvaluationResponse, AuthZResolverError> {
16        Ok(self.evaluate(&request))
17    }
18}
19
20#[cfg(test)]
21#[cfg_attr(coverage_nightly, coverage(off))]
22mod tests {
23    use super::*;
24    use authz_resolver_sdk::{Action, EvaluationRequestContext, Resource, Subject, TenantContext};
25    use std::collections::HashMap;
26    use uuid::Uuid;
27
28    #[tokio::test]
29    async fn plugin_trait_evaluates_successfully() {
30        let service = Service::new();
31        let plugin: &dyn AuthZResolverPluginClient = &service;
32
33        let request = EvaluationRequest {
34            subject: Subject {
35                id: Uuid::nil(),
36                subject_type: None,
37                properties: HashMap::new(),
38            },
39            action: Action {
40                name: "list".to_owned(),
41            },
42            resource: Resource {
43                resource_type: "test".to_owned(),
44                id: None,
45                properties: HashMap::new(),
46            },
47            context: EvaluationRequestContext {
48                tenant_context: Some(TenantContext {
49                    root_id: Some(Uuid::parse_str("33333333-3333-3333-3333-333333333333").unwrap()),
50                    ..TenantContext::default()
51                }),
52                token_scopes: vec![],
53                require_constraints: false,
54                capabilities: vec![],
55                supported_properties: vec![],
56                bearer_token: None,
57            },
58        };
59
60        let result = plugin.evaluate(request).await;
61        assert!(result.is_ok());
62        assert!(result.unwrap().decision);
63    }
64}