diff --git a/radicle-httpd/Cargo.toml b/radicle-httpd/Cargo.toml index 48ca85f0e..01579e2ce 100644 --- a/radicle-httpd/Cargo.toml +++ b/radicle-httpd/Cargo.toml @@ -37,6 +37,7 @@ tower-http = { version = "0.3.4", default-features = false, features = ["trace", tracing = { version = "0.1.37", default-features = false, features = ["std", "log"] } tracing-logfmt = { version = "0.2", optional = true } tracing-subscriber = { version = "0.3", default-features = false, features = ["std", "ansi", "fmt"] } +ureq = { version = "2.9", default-features = false, features = ["json"] } [dependencies.radicle] path = "../radicle" @@ -45,6 +46,9 @@ version = "0.2.0" [dependencies.radicle-term] path = "../radicle-term" +[dependencies.radicle-cli] +path = "../radicle-cli" + [dev-dependencies] hyper = { version = "0.14.17", default-features = false, features = ["client"] } pretty_assertions = { version = "1.3.0" } diff --git a/radicle-httpd/src/api/v1/sessions.rs b/radicle-httpd/src/api/v1/sessions.rs index 1ee6cb698..5d794cb1b 100644 --- a/radicle-httpd/src/api/v1/sessions.rs +++ b/radicle-httpd/src/api/v1/sessions.rs @@ -122,9 +122,9 @@ async fn session_delete_handler( #[cfg(test)] mod routes { + use crate::commands::web::{sign, SessionInfo}; use axum::body::Body; use axum::http::StatusCode; - use radicle_cli::commands::rad_web::{self, SessionInfo}; use crate::api::auth::{AuthState, Session}; use crate::test::{self, get, post, put}; @@ -154,7 +154,7 @@ mod routes { // Create request body let signer = ctx.profile.signer().unwrap(); - let signature = rad_web::sign(signer, &session_info).unwrap(); + let signature = sign(signer, &session_info).unwrap(); let body = serde_json::to_vec(&super::AuthChallenge { sig: signature, pk: session_info.public_key, diff --git a/radicle-httpd/src/bin/rad-web.rs b/radicle-httpd/src/bin/rad-web.rs new file mode 100644 index 000000000..49b01ef56 --- /dev/null +++ b/radicle-httpd/src/bin/rad-web.rs @@ -0,0 +1,10 @@ +use radicle_cli::terminal as term; +use radicle_httpd::commands::web as rad_web; + +fn main() { + term::run_command_args::( + rad_web::HELP, + rad_web::run, + std::env::args_os().skip(1).collect(), + ) +} diff --git a/radicle-httpd/src/commands.rs b/radicle-httpd/src/commands.rs new file mode 100644 index 000000000..112ad9c25 --- /dev/null +++ b/radicle-httpd/src/commands.rs @@ -0,0 +1,2 @@ +//! Extra CLI commands relating to HTTPd. +pub mod web; diff --git a/radicle-httpd/src/commands/web.rs b/radicle-httpd/src/commands/web.rs new file mode 100644 index 000000000..952cc53c9 --- /dev/null +++ b/radicle-httpd/src/commands/web.rs @@ -0,0 +1,123 @@ +use std::ffi::OsString; + +use anyhow::anyhow; +use serde::{Deserialize, Serialize}; + +use radicle::crypto::{PublicKey, Signature, Signer}; + +use radicle_cli::terminal as term; +use radicle_cli::terminal::args::{Args, Error, Help}; + +pub const HELP: Help = Help { + name: "web", + description: "Connect web with node", + version: env!("CARGO_PKG_VERSION"), + usage: r#" +Usage + + rad web [