examples: Add took to generate a JWT for testing

master
Dustin 2023-11-04 15:50:15 -05:00
parent 3b42be1797
commit 02d41e922d
2 changed files with 49 additions and 0 deletions

View File

@ -31,3 +31,5 @@ serial_test = "2.0.0"
tempfile = "3.8.1"
tower = { version = "0.4.13", features = ["util"] }
[[example]]
name = "make-token"

47
examples/make-token.rs Normal file
View File

@ -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());
}