Skip to main content

north_consul/
connect_ca.rs

1use async_trait::async_trait;
2use std::collections::HashMap;
3
4use serde_json::Value;
5
6use crate::errors::Result;
7use crate::request::{get, put};
8use crate::{Client, QueryMeta, QueryOptions, WriteMeta, WriteOptions};
9
10#[derive(Default, Serialize, Deserialize, Debug)]
11#[serde(default)]
12#[allow(clippy::upper_case_acronyms)]
13pub struct CAConfig {
14    Provider: String,
15    Config: Value,
16    CreateIndex: u64,
17    ModifyIndex: u64,
18}
19
20#[derive(Default, Serialize, Deserialize, Debug)]
21#[serde(default)]
22#[allow(clippy::upper_case_acronyms)]
23pub struct CARootList {
24    ActiveRootID: String,
25    TrustDomain: String,
26    Roots: Vec<CARoot>,
27}
28
29#[derive(Eq, Default, PartialEq, Serialize, Deserialize, Debug)]
30#[serde(default)]
31#[allow(clippy::upper_case_acronyms)]
32pub struct CARoot {
33    ID: String,
34    Name: String,
35    RootCert: String,
36    Active: bool,
37    CreateIndex: u64,
38    ModifyIndex: u64,
39}
40
41#[allow(clippy::upper_case_acronyms)]
42#[async_trait]
43pub trait ConnectCA {
44    async fn ca_roots(&self, q: Option<&QueryOptions>) -> Result<(CARootList, QueryMeta)>;
45    async fn ca_get_config(&self, q: Option<&QueryOptions>) -> Result<(CAConfig, QueryMeta)>;
46    async fn ca_set_config(
47        &self,
48        conf: &CAConfig,
49        q: Option<&WriteOptions>,
50    ) -> Result<((), WriteMeta)>;
51}
52
53#[async_trait]
54impl ConnectCA for Client {
55    /// https://www.consul.io/api/connect/ca.html#list-ca-root-certificates
56    async fn ca_roots(&self, q: Option<&QueryOptions>) -> Result<(CARootList, QueryMeta)> {
57        get("/v1/connect/ca/roots", &self.config, HashMap::new(), q).await
58    }
59
60    /// https://www.consul.io/api/connect/ca.html#get-ca-configuration
61    async fn ca_get_config(&self, q: Option<&QueryOptions>) -> Result<(CAConfig, QueryMeta)> {
62        get(
63            "/v1/connect/ca/configuration",
64            &self.config,
65            HashMap::new(),
66            q,
67        )
68        .await
69    }
70
71    /// https://www.consul.io/api/connect/ca.html#update-ca-configuration
72    async fn ca_set_config(
73        &self,
74        conf: &CAConfig,
75        q: Option<&WriteOptions>,
76    ) -> Result<((), WriteMeta)> {
77        put(
78            "/v1/connect/ca/configuration",
79            Some(conf),
80            &self.config,
81            HashMap::new(),
82            q,
83        )
84        .await
85    }
86}