mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 20:14:49 +00:00
custom_cli
This commit is contained in:
committed by
Aiden McClelland
parent
9fb02c6a1e
commit
064c905bd3
@@ -1,3 +1,5 @@
|
|||||||
|
use std::marker::PhantomData;
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use basic_cookies::Cookie;
|
use basic_cookies::Cookie;
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
@@ -40,12 +42,31 @@ fn gen_pwd() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// fn cli_login(ctx: CliContext, password: Option<String>, metadata: Value) -> Result<(), Error> {
|
async fn cli_login(
|
||||||
// todo!()
|
ctx: CliContext,
|
||||||
// }
|
password: Option<String>,
|
||||||
|
metadata: Value,
|
||||||
|
) -> Result<(), RpcError> {
|
||||||
|
let password = if let Some(password) = password {
|
||||||
|
password
|
||||||
|
} else {
|
||||||
|
rpassword::prompt_password_stdout("Password: ")?
|
||||||
|
};
|
||||||
|
|
||||||
|
rpc_toolkit::command_helpers::call_remote(
|
||||||
|
ctx,
|
||||||
|
"auth.login",
|
||||||
|
serde_json::json!({ "password": password, "metadata": metadata }),
|
||||||
|
PhantomData::<()>,
|
||||||
|
)
|
||||||
|
.await?
|
||||||
|
.result?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[command(
|
#[command(
|
||||||
// custom_cli(cli_login),
|
custom_cli(cli_login(async, context(CliContext))),
|
||||||
display(display_none),
|
display(display_none),
|
||||||
metadata(authenticated = false)
|
metadata(authenticated = false)
|
||||||
)]
|
)]
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ use rpc_toolkit::yajrc::RpcError;
|
|||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
fn inner_main() -> Result<(), Error> {
|
fn inner_main() -> Result<(), Error> {
|
||||||
run_cli!(
|
run_cli!({
|
||||||
embassy::main_api,
|
command: embassy::main_api,
|
||||||
app => app
|
app: app => app
|
||||||
.name("Embassy CLI")
|
.name("Embassy CLI")
|
||||||
.arg(
|
.arg(
|
||||||
clap::Arg::with_name("config")
|
clap::Arg::with_name("config")
|
||||||
@@ -24,7 +24,7 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
)
|
)
|
||||||
.arg(Arg::with_name("host").long("host").short("h").takes_value(true))
|
.arg(Arg::with_name("host").long("host").short("h").takes_value(true))
|
||||||
.arg(Arg::with_name("port").long("port").short("p").takes_value(true)),
|
.arg(Arg::with_name("port").long("port").short("p").takes_value(true)),
|
||||||
matches => {
|
context: matches => {
|
||||||
simple_logging::log_to_stderr(match matches.occurrences_of("verbosity") {
|
simple_logging::log_to_stderr(match matches.occurrences_of("verbosity") {
|
||||||
0 => log::LevelFilter::Off,
|
0 => log::LevelFilter::Off,
|
||||||
1 => log::LevelFilter::Error,
|
1 => log::LevelFilter::Error,
|
||||||
@@ -33,10 +33,9 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
4 => log::LevelFilter::Debug,
|
4 => log::LevelFilter::Debug,
|
||||||
_ => log::LevelFilter::Trace,
|
_ => log::LevelFilter::Trace,
|
||||||
});
|
});
|
||||||
EitherContext::Cli(CliContext::init(matches)?)
|
CliContext::init(matches)?
|
||||||
},
|
},
|
||||||
(),
|
exit: |e: RpcError| {
|
||||||
|e: RpcError| {
|
|
||||||
match e.data {
|
match e.data {
|
||||||
Some(Value::String(s)) => eprintln!("{}: {}", e.message, s),
|
Some(Value::String(s)) => eprintln!("{}: {}", e.message, s),
|
||||||
Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") {
|
Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") {
|
||||||
@@ -48,7 +47,7 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
|
|
||||||
std::process::exit(e.code);
|
std::process::exit(e.code);
|
||||||
}
|
}
|
||||||
);
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
use embassy::context::{CliContext, EitherContext};
|
use embassy::context::CliContext;
|
||||||
use embassy::Error;
|
use embassy::Error;
|
||||||
use rpc_toolkit::run_cli;
|
use rpc_toolkit::run_cli;
|
||||||
use rpc_toolkit::yajrc::RpcError;
|
use rpc_toolkit::yajrc::RpcError;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
fn inner_main() -> Result<(), Error> {
|
fn inner_main() -> Result<(), Error> {
|
||||||
run_cli!(
|
run_cli!({
|
||||||
embassy::portable_api,
|
command: embassy::portable_api,
|
||||||
app => app
|
app: app => app
|
||||||
.name("Embassy SDK")
|
.name("Embassy SDK")
|
||||||
.arg(
|
.arg(
|
||||||
clap::Arg::with_name("config")
|
clap::Arg::with_name("config")
|
||||||
@@ -21,7 +21,7 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
.multiple(true)
|
.multiple(true)
|
||||||
.takes_value(false),
|
.takes_value(false),
|
||||||
),
|
),
|
||||||
matches => {
|
context: matches => {
|
||||||
simple_logging::log_to_stderr(match matches.occurrences_of("verbosity") {
|
simple_logging::log_to_stderr(match matches.occurrences_of("verbosity") {
|
||||||
0 => log::LevelFilter::Off,
|
0 => log::LevelFilter::Off,
|
||||||
1 => log::LevelFilter::Error,
|
1 => log::LevelFilter::Error,
|
||||||
@@ -30,9 +30,9 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
4 => log::LevelFilter::Debug,
|
4 => log::LevelFilter::Debug,
|
||||||
_ => log::LevelFilter::Trace,
|
_ => log::LevelFilter::Trace,
|
||||||
});
|
});
|
||||||
EitherContext::Cli(CliContext::init(matches)?)
|
CliContext::init(matches)?
|
||||||
},
|
},
|
||||||
|e: RpcError| {
|
exit: |e: RpcError| {
|
||||||
match e.data {
|
match e.data {
|
||||||
Some(Value::String(s)) => eprintln!("{}: {}", e.message, s),
|
Some(Value::String(s)) => eprintln!("{}: {}", e.message, s),
|
||||||
Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") {
|
Some(Value::Object(o)) => if let Some(Value::String(s)) = o.get("details") {
|
||||||
@@ -43,7 +43,7 @@ fn inner_main() -> Result<(), Error> {
|
|||||||
}
|
}
|
||||||
std::process::exit(e.code);
|
std::process::exit(e.code);
|
||||||
}
|
}
|
||||||
);
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -175,9 +175,11 @@ pub async fn get(
|
|||||||
action.get(&id, &*version, &*volumes).await
|
action.get(&id, &*version, &*volumes).await
|
||||||
}
|
}
|
||||||
|
|
||||||
#[command(subcommands(self(set_impl(async)), set_dry), display(display_none))]
|
#[command(
|
||||||
|
subcommands(self(set_impl(async, context(RpcContext))), set_dry),
|
||||||
|
display(display_none)
|
||||||
|
)]
|
||||||
pub fn set(
|
pub fn set(
|
||||||
#[context] ctx: RpcContext,
|
|
||||||
#[parent_data] id: PackageId,
|
#[parent_data] id: PackageId,
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
#[arg(long = "format")]
|
#[arg(long = "format")]
|
||||||
|
|||||||
@@ -14,17 +14,3 @@ impl From<RpcContext> for () {
|
|||||||
()
|
()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: these shouldn't be necessary
|
|
||||||
|
|
||||||
impl From<CliContext> for RpcContext {
|
|
||||||
fn from(_: CliContext) -> Self {
|
|
||||||
panic!("RPC Context used in CLI Handler")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<RpcContext> for CliContext {
|
|
||||||
fn from(_: RpcContext) -> Self {
|
|
||||||
panic!("CLI Context used in RPC Handler")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ pub mod version;
|
|||||||
pub mod volume;
|
pub mod volume;
|
||||||
|
|
||||||
pub use config::Config;
|
pub use config::Config;
|
||||||
use context::CliContext;
|
|
||||||
pub use error::{Error, ErrorKind, ResultExt};
|
pub use error::{Error, ErrorKind, ResultExt};
|
||||||
use rpc_toolkit::command;
|
use rpc_toolkit::command;
|
||||||
use rpc_toolkit::yajrc::RpcError;
|
use rpc_toolkit::yajrc::RpcError;
|
||||||
|
|||||||
Reference in New Issue
Block a user