From f6f9a18d9ff9b886cacd5f1582960d541e288b44 Mon Sep 17 00:00:00 2001 From: Rohan Sircar Date: Wed, 5 May 2021 23:30:45 +0530 Subject: [PATCH] add build-info endpoint --- Cargo.lock | 304 +++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 7 + build.rs | 3 + src/lib.rs | 13 +- src/main.rs | 1 + src/routes.rs | 1 + src/routes/misc.rs | 5 + src/routes/users.rs | 4 +- 8 files changed, 328 insertions(+), 10 deletions(-) create mode 100644 build.rs create mode 100644 src/routes/misc.rs diff --git a/Cargo.lock b/Cargo.lock index 1af514f..4277b19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,6 +48,8 @@ dependencies = [ "actix-web", "actix-web-httpauth", "bcrypt", + "build-info", + "build-info-build", "bytes 1.0.1", "chrono", "custom_error", @@ -425,6 +427,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "anyhow" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b" + [[package]] name = "async-trait" version = "0.1.50" @@ -506,6 +523,15 @@ dependencies = [ "getrandom 0.2.2", ] +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.2.1" @@ -561,6 +587,74 @@ dependencies = [ "bytes 0.5.6", ] +[[package]] +name = "build-info" +version = "0.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "569d94157949b69d52fd80b77a33cffa083ebcd7abf6d60999b41cc977664a32" +dependencies = [ + "build-info-common", + "build-info-proc", + "lazy_static", + "proc-macro-hack", +] + +[[package]] +name = "build-info-build" +version = "0.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7975fa865b3562339bdec59ee877d2a8618c4f95dc0e4729f3d501818cae11b1" +dependencies = [ + "anyhow", + "base64", + "bincode", + "build-info-common", + "cargo_metadata", + "chrono", + "git2", + "glob", + "lazy_static", + "pretty_assertions", + "rustc_version 0.3.3", + "serde_json", + "xz2", +] + +[[package]] +name = "build-info-common" +version = "0.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3210a1a81517312746d7ecad5cde4ad9d3ec20640cb6e0c9900c9c6aa6dea1" +dependencies = [ + "chrono", + "derive_more", + "semver 0.11.0", + "serde", +] + +[[package]] +name = "build-info-proc" +version = "0.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22b0c07441c4c64c569cbf637e1e181b1c9c934764c7dcaac0ab7d8ffc8e1eba" +dependencies = [ + "anyhow", + "base64", + "bincode", + "build-info-common", + "chrono", + "format-buf", + "num-bigint", + "num-traits", + "proc-macro-error", + "proc-macro-hack", + "proc-macro2", + "quote", + "serde_json", + "syn", + "xz2", +] + [[package]] name = "bumpalo" version = "3.6.1" @@ -594,11 +688,46 @@ dependencies = [ "bytes 1.0.1", ] +[[package]] +name = "camino" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4648c6d00a709aa069a236adcaae4f605a6241c72bf5bee79331a4b625921a9" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0226944a63d1bf35a3b5f948dd7c59e263db83695c9e8bffc4037de02e30f1d7" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "081e3f0755c1f380c2d010481b6fa2e02973586d5f2b24eebb7a2a1d98b143d8" +dependencies = [ + "camino", + "cargo-platform", + "semver 0.11.0", + "semver-parser 0.10.2", + "serde", + "serde_json", +] + [[package]] name = "cc" version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" +dependencies = [ + "jobserver", +] [[package]] name = "cfg-if" @@ -710,6 +839,16 @@ dependencies = [ "subtle", ] +[[package]] +name = "ctor" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "ctr" version = "0.6.0" @@ -782,6 +921,12 @@ dependencies = [ "migrations_macros", ] +[[package]] +name = "diff" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" + [[package]] name = "digest" version = "0.9.0" @@ -892,6 +1037,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "format-buf" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7aea5a5909a74969507051a3b17adc84737e31a5f910559892aedce026f4d53" + [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -1057,6 +1208,25 @@ dependencies = [ "polyval", ] +[[package]] +name = "git2" +version = "0.13.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b483c6c2145421099df1b4efd50e0f6205479a072199460eff852fa15e5603c7" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "url", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + [[package]] name = "h2" version = "0.2.7" @@ -1228,6 +1398,15 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +[[package]] +name = "jobserver" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "972f5ae5d1cb9c6ae417789196c803205313edde988685da5e3aae0827b9e7fd" +dependencies = [ + "libc", +] + [[package]] name = "kernel32-sys" version = "0.2.2" @@ -1265,6 +1444,18 @@ version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41" +[[package]] +name = "libgit2-sys" +version = "0.12.19+1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f322155d574c8b9ebe991a04f6908bb49e68a79463338d24a43d6274cb6443e6" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + [[package]] name = "libsqlite3-sys" version = "0.18.0" @@ -1276,6 +1467,18 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "libz-sys" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "linked-hash-map" version = "0.5.4" @@ -1309,6 +1512,17 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "lzma-sys" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb4b7c3eddad11d3af9e86c487607d2d2442d185d848575365c4856ba96d619" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + [[package]] name = "match_cfg" version = "0.1.0" @@ -1446,6 +1660,17 @@ dependencies = [ "version_check 0.1.5", ] +[[package]] +name = "num-bigint" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e0d047c1062aa51e256408c560894e5251f08925980e53cf1aa5bd00eec6512" +dependencies = [ + "autocfg 1.0.1", + "num-integer", + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.44" @@ -1481,6 +1706,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "output_vt100" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cdc5b785b7a58c5aad8216b3dfa114df64b0b06ae6e1501cef91df2fbdf8f9" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "parking_lot" version = "0.11.1" @@ -1518,6 +1752,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +[[package]] +name = "pest" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +dependencies = [ + "ucd-trie", +] + [[package]] name = "phf" version = "0.7.24" @@ -1637,6 +1880,18 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "pretty_assertions" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cab0e7c02cf376875e9335e0ba1da535775beb5450d21e1dffca068818ed98b" +dependencies = [ + "ansi_term", + "ctor", + "diff", + "output_vt100", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -1962,7 +2217,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", ] [[package]] @@ -1992,7 +2256,17 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "semver-parser", + "semver-parser 0.7.0", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser 0.10.2", + "serde", ] [[package]] @@ -2001,6 +2275,15 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "semver-parser" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7" +dependencies = [ + "pest", +] + [[package]] name = "serde" version = "1.0.125" @@ -2130,7 +2413,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" dependencies = [ "discard", - "rustc_version", + "rustc_version 0.2.3", "stdweb-derive", "stdweb-internal-macros", "stdweb-internal-runtime", @@ -2411,6 +2694,12 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f6906492a7cd215bfa4cf595b600146ccfac0c79bcbd1f3000162af5e8b06" +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + [[package]] name = "unicase" version = "2.6.0" @@ -2703,3 +2992,12 @@ dependencies = [ "winapi 0.2.8", "winapi-build", ] + +[[package]] +name = "xz2" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c179869f34fc7c01830d3ce7ea2086bc3a07e0d35289b667d0a8bf910258926c" +dependencies = [ + "lzma-sys", +] diff --git a/Cargo.toml b/Cargo.toml index 53c68fe..052c80e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,10 @@ diesel_migrations = "1.4.0" actix-threadpool = "0.3.3" envy = "0.4" +[dependencies.build-info] +version = "=0.0.23" +features = ['runtime', 'serde'] + [dependencies.serde] version = "1.0.125" features = ['derive'] @@ -59,3 +63,6 @@ features = ['serde'] [dev-dependencies] actix-rt = "1.1.1" + +[build-dependencies] +build-info-build = "=0.0.23" diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..d36778f --- /dev/null +++ b/build.rs @@ -0,0 +1,3 @@ +fn main() { + build_info_build::build_script(); +} diff --git a/src/lib.rs b/src/lib.rs index 04e8f8e..7ee9697 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,13 +1,10 @@ +#![forbid(unsafe_code)] #[macro_use] extern crate diesel; #[macro_use] extern crate derive_new; #[macro_use] extern crate log; -extern crate bcrypt; -extern crate custom_error; -extern crate regex; -extern crate validator; mod actions; mod errors; @@ -27,6 +24,8 @@ use rand::Rng; use serde::Deserialize; use types::DbPool; +build_info::build_info!(pub fn get_build_info); + #[derive(Deserialize, Debug, Clone)] pub struct EnvConfig { pub database_url: String, @@ -56,7 +55,11 @@ pub fn configure_app(app_data: AppData) -> Box { .service( web::scope("/api") .service(routes::users::get_user) - .service(routes::users::get_all_users), + .service(routes::users::get_all_users) + .service(web::scope("/get").route( + "/build-info", + web::get().to(routes::misc::build_info_req), + )), ) // .route("/api/users/get", web::get().to(user_controller.get_user.into())) .service(web::scope("/api/public")) // public endpoint - not implemented yet diff --git a/src/main.rs b/src/main.rs index 322cfd8..a31a9ec 100755 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +#![forbid(unsafe_code)] use actix_demo::{AppConfig, AppData, EnvConfig}; use diesel::{r2d2::ConnectionManager, SqliteConnection}; use env_logger::Env; diff --git a/src/routes.rs b/src/routes.rs index 4ec67ce..6805293 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -2,3 +2,4 @@ pub mod auth; pub mod users; pub use self::auth::*; pub use self::users::*; +pub mod misc; diff --git a/src/routes/misc.rs b/src/routes/misc.rs new file mode 100644 index 0000000..edf4332 --- /dev/null +++ b/src/routes/misc.rs @@ -0,0 +1,5 @@ +use crate::get_build_info; + +pub async fn build_info_req() -> String { + serde_json::to_string(get_build_info()).unwrap() +} diff --git a/src/routes/users.rs b/src/routes/users.rs index 84ebcfc..9a66fd3 100644 --- a/src/routes/users.rs +++ b/src/routes/users.rs @@ -10,9 +10,9 @@ use validator::Validate; #[get("/get/users/{user_id}")] pub async fn get_user( app_data: web::Data, - user_id_param: web::Path, + user_id: web::Path, ) -> Result { - let u_id = user_id_param.into_inner(); + let u_id = user_id.into_inner(); // use web::block to offload blocking Diesel code without blocking server thread let res = web::block(move || { let pool = &app_data.pool;