parsec_tool/subcommands/
mod.rs1mod create_csr;
7mod create_ecc_key;
8mod create_rsa_key;
9mod decrypt;
10mod delete_client;
11mod delete_key;
12mod encrypt;
13mod export_public_key;
14mod generate_random;
15mod list_authenticators;
16mod list_clients;
17mod list_keys;
18mod list_opcodes;
19mod list_providers;
20mod ping;
21mod sign;
22
23use crate::error::{Error::ParsecClientError, Result};
24use crate::subcommands::{
25 create_csr::CreateCsr, create_ecc_key::CreateEccKey, create_rsa_key::CreateRsaKey,
26 decrypt::Decrypt, delete_client::DeleteClient, delete_key::DeleteKey, encrypt::Encrypt,
27 export_public_key::ExportPublicKey, generate_random::GenerateRandom,
28 list_authenticators::ListAuthenticators, list_clients::ListClients, list_keys::ListKeys,
29 list_opcodes::ListOpcodes, list_providers::ListProviders, ping::Ping, sign::Sign,
30};
31use parsec_client::BasicClient;
32use structopt::StructOpt;
33
34#[derive(Debug, StructOpt)]
36pub enum Subcommand {
37 Ping(Ping),
39
40 ListProviders(ListProviders),
42
43 ListAuthenticators(ListAuthenticators),
45
46 ListOpcodes(ListOpcodes),
48
49 ListKeys(ListKeys),
51
52 GenerateRandom(GenerateRandom),
54
55 ExportPublicKey(ExportPublicKey),
57
58 CreateRsaKey(CreateRsaKey),
60
61 CreateEccKey(CreateEccKey),
63
64 Decrypt(Decrypt),
66
67 Sign(Sign),
69
70 DeleteKey(DeleteKey),
72
73 ListClients(ListClients),
75
76 DeleteClient(DeleteClient),
78
79 CreateCsr(CreateCsr),
81
82 Encrypt(Encrypt),
84}
85
86impl Subcommand {
87 pub fn run(&self, client: BasicClient) -> Result<()> {
89 match &self {
90 Subcommand::Ping(cmd) => cmd.run(client),
91 Subcommand::ListProviders(cmd) => cmd.run(client),
92 Subcommand::ListAuthenticators(cmd) => cmd.run(client),
93 Subcommand::ListKeys(cmd) => cmd.run(client),
94 Subcommand::ListClients(cmd) => cmd.run(client),
95 Subcommand::DeleteClient(cmd) => cmd.run(client),
96 Subcommand::ListOpcodes(cmd) => cmd.run(client),
97 Subcommand::GenerateRandom(cmd) => cmd.run(client),
98 Subcommand::ExportPublicKey(cmd) => cmd.run(client),
99 Subcommand::CreateRsaKey(cmd) => cmd.run(client),
100 Subcommand::CreateEccKey(cmd) => cmd.run(client),
101 Subcommand::Sign(cmd) => cmd.run(client),
102 Subcommand::Decrypt(cmd) => cmd.run(client),
103 Subcommand::DeleteKey(cmd) => cmd.run(client),
104 Subcommand::CreateCsr(cmd) => cmd.run(client),
105 Subcommand::Encrypt(cmd) => cmd.run(client),
106 }
107 }
108 fn authentication_required(&self) -> bool {
110 !matches!(
112 &self,
113 Subcommand::Ping(_)
114 | Subcommand::ListProviders(_)
115 | Subcommand::ListAuthenticators(_)
116 | Subcommand::ListOpcodes(_)
117 )
118 }
119
120 pub fn create_client(&self, app_name: Option<String>) -> Result<BasicClient> {
122 let client_result = if self.authentication_required() {
123 BasicClient::new(app_name)
125 } else {
126 BasicClient::new_naked()
128 };
129 match client_result {
130 Ok(client) => Ok(client),
131 Err(err) => Err(ParsecClientError(err)),
132 }
133 }
134}