nullnet-wallguard-server 0.2.0

A centralized management system for network firewalls
Documentation
use super::request_log::ServerLogger;
use crate::{
    datastore::DatastoreWrapper,
    proto::wallguard::{
        wall_guard_server::WallGuard, Authentication, CommonResponse, ConfigSnapshot,
        HeartbeatRequest, HeartbeatResponse, LoginRequest, Packets, SetupRequest, StatusRequest,
        StatusResponse,
    },
};

use tonic::{Request, Response, Status};

pub(crate) struct WallGuardImpl {
    pub(crate) datastore: DatastoreWrapper,
}

#[tonic::async_trait]
impl WallGuard for WallGuardImpl {
    async fn heartbeat(
        &self,
        request: Request<HeartbeatRequest>,
    ) -> Result<Response<HeartbeatResponse>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.heartbeat_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/heartbeat", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }

    async fn setup(
        &self,
        request: Request<SetupRequest>,
    ) -> Result<Response<CommonResponse>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.setup_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/setup", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }

    async fn login(
        &self,
        request: Request<LoginRequest>,
    ) -> Result<Response<Authentication>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.login_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/login", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }

    async fn handle_packets(
        &self,
        request: Request<Packets>,
    ) -> Result<Response<CommonResponse>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.handle_packets_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/handle_packets", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }

    async fn handle_config(
        &self,
        request: Request<ConfigSnapshot>,
    ) -> Result<Response<CommonResponse>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.handle_config_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/handle_config", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }

    async fn status(
        &self,
        request: Request<StatusRequest>,
    ) -> Result<Response<StatusResponse>, Status> {
        let addr = ServerLogger::extract_address(&request);
        let received_at = chrono::Utc::now();
        let result = self.device_status_impl(request).await;
        ServerLogger::log_response(&result, &addr, "/status", received_at);
        result.map_err(|e| Status::internal(format!("{e:?}")))
    }
}