From 821f597d89dc732473fb735e457175ea568ce97b Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sat, 4 Nov 2023 15:50:15 -0500 Subject: [PATCH] examples: Add took to generate a JWT for testing --- server/Cargo.toml | 2 ++ server/examples/make-token.rs | 47 +++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 server/examples/make-token.rs diff --git a/server/Cargo.toml b/server/Cargo.toml index 44908c9..11169dc 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -31,3 +31,5 @@ serial_test = "2.0.0" tempfile = "3.8.1" tower = { version = "0.4.13", features = ["util"] } +[[example]] +name = "make-token" diff --git a/server/examples/make-token.rs b/server/examples/make-token.rs new file mode 100644 index 0000000..c9ba55b --- /dev/null +++ b/server/examples/make-token.rs @@ -0,0 +1,47 @@ +use std::time; + +use argon2::Argon2; +use jsonwebtoken::{encode, EncodingKey}; +use serde::Serialize; +use uuid::Uuid; + +#[derive(Debug, Serialize)] +struct Claims { + sub: String, + iss: String, + aud: String, + iat: u64, + nbf: u64, + exp: u64, +} + +fn main() { + let args: Vec<_> = std::env::args().collect(); + let hostname = &args[1]; + let machine_id = Uuid::parse_str(&args[2]).unwrap(); + let audience = &args[3]; + + let now = time::SystemTime::now() + .duration_since(time::UNIX_EPOCH) + .unwrap() + .as_secs(); + let claims = Claims { + sub: hostname.into(), + iss: hostname.into(), + aud: audience.into(), + nbf: now - 60, + iat: now, + exp: now + 60, + }; + let mut secret = [0u8; 32]; + Argon2::default() + .hash_password_into( + machine_id.as_bytes(), + hostname.as_bytes(), + &mut secret, + ) + .unwrap(); + let key = EncodingKey::from_secret(&secret); + eprintln!("{:?}", claims); + println!("{}", encode(&Default::default(), &claims, &key).unwrap()); +}