1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use crate::cloud::lease_manager::models::influxdb::Token;
use crate::cloud::ProjectNode;
use miette::IntoDiagnostic;
use ockam_core::api::Request;
use ockam_core::async_trait;
use ockam_node::Context;

#[async_trait]
pub trait InfluxDbTokenLease {
    async fn create_token(&self, ctx: &Context) -> miette::Result<Token>;

    async fn get_token(&self, ctx: &Context, token_id: String) -> miette::Result<Token>;

    async fn revoke_token(&self, ctx: &Context, token_id: String) -> miette::Result<()>;

    async fn list_tokens(&self, ctx: &Context) -> miette::Result<Vec<Token>>;
}

#[async_trait]
impl InfluxDbTokenLease for ProjectNode {
    async fn create_token(&self, ctx: &Context) -> miette::Result<Token> {
        self.secure_client
            .ask(ctx, "influxdb_token_lease", Request::post("/"))
            .await
            .into_diagnostic()?
            .success()
            .into_diagnostic()
    }

    async fn get_token(&self, ctx: &Context, token_id: String) -> miette::Result<Token> {
        self.secure_client
            .ask(
                ctx,
                "influxdb_token_lease",
                Request::get(format!("/{token_id}")),
            )
            .await
            .into_diagnostic()?
            .success()
            .into_diagnostic()
    }

    async fn revoke_token(&self, ctx: &Context, token_id: String) -> miette::Result<()> {
        self.secure_client
            .tell(
                ctx,
                "influxdb_token_lease",
                Request::delete(format!("/{token_id}")),
            )
            .await
            .into_diagnostic()?
            .success()
            .into_diagnostic()
    }

    async fn list_tokens(&self, ctx: &Context) -> miette::Result<Vec<Token>> {
        self.secure_client
            .ask(ctx, "influxdb_token_lease", Request::get("/"))
            .await
            .into_diagnostic()?
            .success()
            .into_diagnostic()
    }
}