clockwork-cli 2.0.19

Command line interface for Clockwork
use anchor_lang::prelude::Pubkey;
use clockwork_relayer_api::{
    SecretApprove, SecretCreate, SecretGet, SecretList, SecretRevoke, SignedRequest,
};
use reqwest::header::CONTENT_TYPE;
use solana_sdk::signer::Signer;

use crate::{client::Client, errors::CliError};

pub fn get(client: &Client, name: String) -> Result<(), CliError> {
    let keypair = &client.payer;
    let msg = SecretGet { name };
    let msg_bytes = bincode::serialize(&msg).unwrap();
    let sig = keypair.sign_message(&msg_bytes);
    let req = SignedRequest {
        msg,
        signer: keypair.pubkey(),
        signature: sig,
    };
    let client = reqwest::blocking::Client::new();
    let res = client
        .post("http://0.0.0.0:8000/secret_get")
        .header(CONTENT_TYPE, "application/json")
        .json(&req)
        .send();
    if let Ok(plaintext) = res {
        println!("{:?}", plaintext.text());
    }
    Ok(())
}

pub fn list(client: &Client) -> Result<(), CliError> {
    let keypair = &client.payer;
    let msg = SecretList {};
    let msg_bytes = bincode::serialize(&msg).unwrap();
    let sig = keypair.sign_message(&msg_bytes);
    let req = SignedRequest {
        msg,
        signer: keypair.pubkey(),
        signature: sig,
    };
    let client = reqwest::blocking::Client::new();
    let res = client
        .post("http://0.0.0.0:8000/secret_list")
        .header(CONTENT_TYPE, "application/json")
        .json(&req)
        .send();
    if let Ok(plaintext) = res {
        println!("{:?}", plaintext.text());
    }
    Ok(())
}

pub fn create(client: &Client, name: String, word: String) -> Result<(), CliError> {
    let keypair = &client.payer;
    let msg = SecretCreate { name, word };
    let msg_bytes = bincode::serialize(&msg).unwrap();
    let sig = keypair.sign_message(&msg_bytes);
    let req = SignedRequest {
        msg,
        signer: keypair.pubkey(),
        signature: sig,
    };
    let client = reqwest::blocking::Client::new();
    client
        .post("http://0.0.0.0:8000/secret_create")
        .header(CONTENT_TYPE, "application/json")
        .json(&req)
        .send()
        .unwrap();
    Ok(())
}

pub fn approve(client: &Client, name: String, delegate: Pubkey) -> Result<(), CliError> {
    let keypair = &client.payer;
    let msg = SecretApprove { name, delegate };
    let msg_bytes = bincode::serialize(&msg).unwrap();
    let sig = keypair.sign_message(&msg_bytes);
    let req = SignedRequest {
        msg,
        signer: keypair.pubkey(),
        signature: sig,
    };
    let client = reqwest::blocking::Client::new();
    client
        .post("http://0.0.0.0:8000/secret_approve")
        .header(CONTENT_TYPE, "application/json")
        .json(&req)
        .send()
        .unwrap();
    Ok(())
}

pub fn revoke(client: &Client, name: String, delegate: Pubkey) -> Result<(), CliError> {
    let keypair = &client.payer;
    let msg = SecretRevoke { name, delegate };
    let msg_bytes = bincode::serialize(&msg).unwrap();
    let sig = keypair.sign_message(&msg_bytes);
    let req = SignedRequest {
        msg,
        signer: keypair.pubkey(),
        signature: sig,
    };
    let client = reqwest::blocking::Client::new();
    client
        .post("http://0.0.0.0:8000/secret_revoke")
        .header(CONTENT_TYPE, "application/json")
        .json(&req)
        .send()
        .unwrap();
    Ok(())
}