diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-02 12:32:27 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-02 12:32:27 -0600 |
| commit | a577c62277e3d651b66fd68dbe800bf3ab5c4921 (patch) | |
| tree | 7ae4e79fc84c539c12fb0313d0d3cc929b2e12ae /src/authorization/check_service.rs | |
| parent | c2b8edab01b23fde6cc196a3349ad6aa19a93299 (diff) | |
| parent | 0b610d061e45811130d8cf3919037fdc9513e340 (diff) | |
Merge branch 'rs' into 'main'
Re-write the authorization daemon in rust
See merge request gitlab-org/software-supply-chain-security/authorization/authzd!1
Diffstat (limited to 'src/authorization/check_service.rs')
| -rw-r--r-- | src/authorization/check_service.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/authorization/check_service.rs b/src/authorization/check_service.rs new file mode 100644 index 00000000..57f7b5d5 --- /dev/null +++ b/src/authorization/check_service.rs @@ -0,0 +1,35 @@ +use envoy_types::ext_authz::v3::CheckResponseExt; +use envoy_types::ext_authz::v3::pb::{CheckRequest, CheckResponse}; +use std::sync::Arc; +use tonic::{Request, Response, Status}; + +use super::authorizer::Authorizer; + +#[derive(Debug)] +pub struct CheckService { + authorizer: Arc<dyn Authorizer + Send + Sync>, +} + +impl CheckService { + pub fn new(authorizer: Arc<dyn Authorizer + Send + Sync>) -> Self { + Self { authorizer } + } +} + +#[tonic::async_trait] +impl envoy_types::ext_authz::v3::pb::Authorization for CheckService { + async fn check( + &self, + request: Request<CheckRequest>, + ) -> Result<Response<CheckResponse>, Status> { + if self.authorizer.authorize(request.into_inner()) { + log::info!("OK"); + Ok(Response::new(CheckResponse::with_status(Status::ok("OK")))) + } else { + log::info!("Unauthorized"); + Ok(Response::new(CheckResponse::with_status( + Status::unauthenticated("Unauthorized"), + ))) + } + } +} |
