use std::env; use std::fs::File; use std::io::Read; extern crate jsonwebtoken as jwt; #[macro_use] extern crate serde_derive; extern crate serde_json; use jwt::{decode, Validation, Algorithm}; #[derive(Debug, Serialize, Deserialize)] struct Claims { aud: String, exp: u64, iss: String, sub: String, scope: String, } fn main() { let args: Vec = env::args().collect(); let keyfile = &args[1]; println!("reading key from {}", keyfile); let mut f = File::open(keyfile).unwrap(); let mut key = Vec::new(); f.read_to_end(&mut key).unwrap(); println!("key len {}", key.len()); println!("finding tokens on command line"); let token = &args[2]; println!("token {}", token); decode_token(&token, &key); } fn decode_token(token: &str, key: &[u8]) { let v = Validation::new(Algorithm::RS512); let data = match decode::(&token, key, &v) { Ok(c) => c, Err(err) => match *err.kind() { _ => { eprintln!("ERROR: {:?}", err); panic!(); }, }, }; let claims = data.claims; let j = serde_json::to_string_pretty(&claims).expect("JSON error"); println!("{}", j); }