Skip to main content

dnslib/mcp/tools/
access_lists.rs

1use rmcp::{ErrorData as McpError, model::*};
2
3use crate::{
4    control_plane::policy::Policy,
5    core::dns::access_lists,
6    core::dns::service::DnsService,
7    mcp::{helpers::run_json, params::DomainParams},
8};
9
10pub async fn handle_list_blocked<C: DnsService + Send + Sync>(
11    client: &C,
12    policy: &Policy,
13) -> Result<CallToolResult, McpError> {
14    Ok(run_json(
15        "dns_list_blocked",
16        policy.check_read(),
17        access_lists::list_blocked(client),
18    )
19    .await)
20}
21
22pub async fn handle_add_blocked<C: DnsService + Send + Sync>(
23    client: &C,
24    policy: &Policy,
25    p: DomainParams,
26) -> Result<CallToolResult, McpError> {
27    Ok(run_json(
28        "dns_add_blocked",
29        policy.check_write(),
30        access_lists::add_blocked(client, &p.domain),
31    )
32    .await)
33}
34
35pub async fn handle_delete_blocked<C: DnsService + Send + Sync>(
36    client: &C,
37    policy: &Policy,
38    p: DomainParams,
39) -> Result<CallToolResult, McpError> {
40    Ok(run_json(
41        "dns_delete_blocked",
42        policy.check_delete(),
43        access_lists::delete_blocked(client, &p.domain),
44    )
45    .await)
46}
47
48pub async fn handle_list_allowed<C: DnsService + Send + Sync>(
49    client: &C,
50    policy: &Policy,
51) -> Result<CallToolResult, McpError> {
52    Ok(run_json(
53        "dns_list_allowed",
54        policy.check_read(),
55        access_lists::list_allowed(client),
56    )
57    .await)
58}
59
60pub async fn handle_add_allowed<C: DnsService + Send + Sync>(
61    client: &C,
62    policy: &Policy,
63    p: DomainParams,
64) -> Result<CallToolResult, McpError> {
65    Ok(run_json(
66        "dns_add_allowed",
67        policy.check_write(),
68        access_lists::add_allowed(client, &p.domain),
69    )
70    .await)
71}
72
73pub async fn handle_delete_allowed<C: DnsService + Send + Sync>(
74    client: &C,
75    policy: &Policy,
76    p: DomainParams,
77) -> Result<CallToolResult, McpError> {
78    Ok(run_json(
79        "dns_delete_allowed",
80        policy.check_delete(),
81        access_lists::delete_allowed(client, &p.domain),
82    )
83    .await)
84}