From fbcb0e456212c78a24774982fec9809bedebe6fb Mon Sep 17 00:00:00 2001 From: Dorian Date: Fri, 13 Jan 2023 09:56:06 -0500 Subject: [PATCH] Fix up the output and release a new version. --- Cargo.toml | 3 ++- README.md | 7 +++++++ publish-deb.sh | 22 ++++++++++++++++++++++ src/main.rs | 35 +++++++++++++++++++++++++---------- 4 files changed, 56 insertions(+), 11 deletions(-) create mode 100755 publish-deb.sh diff --git a/Cargo.toml b/Cargo.toml index 1ff50a7..92ac5e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mirror-server" -version = "0.1.0" +version = "0.2.0" edition = "2021" authors = ["Dorian Pula "] description = "A simple server for mirror HTTP requests for testing." @@ -17,4 +17,5 @@ section = "web" [dependencies] actix-web = "4" +clap = { version = "4.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] } diff --git a/README.md b/README.md index c176389..259f537 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,10 @@ A simple server for mirroring HTTP requests for testing. * Install cargo-deb: `cargo install cargo-deb` * Create the DEB package: `cargo deb` +## Install + +Download the DEB file, and install it: + +```bash +curl https://code.birch-tree.net/api/packages/dorian/generic/mirror-server/0.2.0/mirror-server_0.2.0_amd64.deb && sudo dpkg -i mirror-server-0.2.0_amd64.deb +``` diff --git a/publish-deb.sh b/publish-deb.sh new file mode 100755 index 0000000..aee0fff --- /dev/null +++ b/publish-deb.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +read -r -p "Username: " USERNAME +read -r -s -p "Password: " PASSWORD + +_pkg_name=mirror-server +_pkg_version=0.2.0 +_deb_file="${_pkg_name}_${_pkg_version}_amd64.deb" +_deb_path="target/debian" +_gitea_server="code.birch-tree.net" + +if [[ ! -f "${_deb_path}/${_deb_file}" ]]; +then + echo "Run cargo deb first!" + exit 1 +fi + +curl --user "${USERNAME}:${PASSWORD}" \ + --upload-file "${_deb_path}/${_deb_file}" \ + -X PUT \ + "https://${_gitea_server}/api/packages/${USERNAME}/generic/${_pkg_name}/${_pkg_version}/${_deb_file}" + diff --git a/src/main.rs b/src/main.rs index 9c13967..1e241bb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,19 @@ use actix_web::{web::Json, App, HttpRequest, HttpServer, Responder}; +use clap::Parser; use serde::Serialize; +use std::collections::BTreeMap; + +#[derive(Parser)] +#[command(author, version, about, long_about = None)] +struct CliArgs { + /// Port to run on. + #[arg(short, long, default_value_t = 8080)] + port: u16, + + /// Listen to IP mask + #[arg(short, long, default_value = "0.0.0.0")] + ips: String, +} #[derive(Serialize)] struct EchoHeader { @@ -12,20 +26,19 @@ struct EchoResponse { method: String, path: String, host: String, - headers: Vec, + headers: BTreeMap, } impl EchoResponse { fn new(req: &HttpRequest) -> Self { let req_uri = req.uri(); - let headers = req - .headers() - .iter() - .map(|(header_name, header_value)| EchoHeader { - name: header_name.to_string(), - value: header_value.to_str().unwrap_or("ERROR").to_string(), - }) - .collect::>(); + let mut headers = BTreeMap::new(); + for (header_name, header_value) in req.headers().iter() { + headers.insert( + header_name.to_string(), + header_value.to_str().unwrap_or("ERROR").to_string(), + ); + } EchoResponse { method: req.method().to_string(), path: req_uri.path().to_string(), @@ -42,8 +55,10 @@ async fn echo_request(request: HttpRequest) -> actix_web::Result #[actix_web::main] async fn main() -> std::io::Result<()> { + let cli_args = CliArgs::parse(); + let listen_on = (cli_args.ips, cli_args.port); HttpServer::new(|| App::new().default_service(actix_web::web::route().to(echo_request))) - .bind(("0.0.0.0", 8080))? + .bind(listen_on)? .run() .await }