Add defaults for generic parameters (#5)

This commit is contained in:
Thomas Gideon 2018-08-05 12:03:58 -04:00 committed by GitHub
parent cb304d20e9
commit 1b594ff60e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 39 deletions

View File

@ -1,25 +1,24 @@
[package]
name = "medallion"
version = "2.2.2"
authors = ["Thomas Gideon <cmdln@thecommandline.net>"]
categories = ["cryptography", "authentication", "web-programming", "data-structures"]
description = "JWT library for rust using serde, serde_json and openssl"
homepage = "http://github.com/commandline/medallion"
repository = "http://github.com/commandline/medallion"
documentation = "https://commandline.github.io/medallion/"
readme = "README.md"
homepage = "http://github.com/commandline/medallion"
keywords = ["JWT", "token", "web", "JSON", "RSA"]
categories = ["cryptography", "authentication", "web-programming",
"data-structures"]
license = "MIT"
name = "medallion"
readme = "README.md"
repository = "http://github.com/commandline/medallion"
version = "2.2.3"
[badges]
[badges.travis-ci]
branch = "master"
repository = "https://travis-ci.org/commandline/medallion"
[dependencies]
base64 = "0.9"
openssl = "0.10"
serde = "1.0"
serde_json = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
time = "0.1"
[badges]
travis-ci = { repository = "https://travis-ci.org/commandline/medallion", branch = "master" }

View File

@ -1,6 +1,6 @@
use base64::{decode_config, encode_config, URL_SAFE_NO_PAD};
use serde::Serialize;
use serde::de::DeserializeOwned;
use serde::Serialize;
use serde_json::{self, Value};
use std::default::Default;
@ -13,7 +13,7 @@ use super::Result;
/// depending on the application whereas claims seem to be shared as a function of registerest and
/// public claims.
#[derive(Debug, PartialEq, Serialize, Deserialize)]
pub struct Header<T> {
pub struct Header<T = ()> {
pub alg: Algorithm,
#[serde(skip_serializing)]
pub headers: Option<T>,

View File

@ -14,17 +14,17 @@ extern crate serde_derive;
extern crate serde_json;
extern crate time;
use serde::Serialize;
use serde::de::DeserializeOwned;
pub use error::Error;
pub use header::Header;
pub use header::Algorithm;
pub use header::Header;
pub use payload::{DefaultPayload, Payload};
use serde::de::DeserializeOwned;
use serde::Serialize;
mod crypt;
pub mod error;
mod header;
mod payload;
mod crypt;
pub type Result<T> = std::result::Result<T, Error>;
@ -35,7 +35,7 @@ pub type DefaultToken<H> = Token<H, ()>;
/// Main struct representing a JSON Web Token, composed of a header and a set of claims.
#[derive(Debug, Default)]
pub struct Token<H, C> {
pub struct Token<H = (), C = ()> {
raw: Option<String>,
pub header: Header<H>,
pub payload: Payload<C>,
@ -104,11 +104,11 @@ where
#[cfg(test)]
mod tests {
use {DefaultPayload, DefaultToken, Header};
use super::Algorithm::{HS256, RS512};
use openssl;
use std::default::Default;
use time::{self, Duration, Tm};
use super::Algorithm::{HS256, RS512};
use {DefaultPayload, DefaultToken, Header, Payload, Token};
#[test]
pub fn raw_data() {
@ -124,16 +124,16 @@ mod tests {
#[test]
pub fn roundtrip_hmac() {
let now = time::now();
let header: Header<()> = Default::default();
let header: Header<()> = Header::default();
let payload = DefaultPayload {
nbf: Some(now.to_timespec().sec as u64),
exp: Some((now + Duration::minutes(5)).to_timespec().sec as u64),
..Default::default()
..DefaultPayload::default()
};
let token = DefaultToken::new(header, payload);
let token = Token::new(header, payload);
let key = "secret".as_bytes();
let raw = token.sign(key).unwrap();
let same = DefaultToken::parse(&*raw).unwrap();
let same = Token::parse(&*raw).unwrap();
assert_eq!(token, same);
assert!(same.verify(key).unwrap());
@ -145,7 +145,7 @@ mod tests {
let token = create_for_range(now, now + Duration::minutes(-5));
let key = "secret".as_bytes();
let raw = token.sign(key).unwrap();
let same = DefaultToken::parse(&*raw).unwrap();
let same = Token::parse(&*raw).unwrap();
assert_eq!(token, same);
assert_eq!(false, same.verify(key).unwrap());
@ -157,7 +157,7 @@ mod tests {
let token = create_for_range(now + Duration::minutes(5), now + Duration::minutes(10));
let key = "secret".as_bytes();
let raw = token.sign(key).unwrap();
let same = DefaultToken::parse(&*raw).unwrap();
let same = Token::parse(&*raw).unwrap();
assert_eq!(token, same);
assert_eq!(false, same.verify(key).unwrap());
@ -168,16 +168,16 @@ mod tests {
let rsa_keypair = openssl::rsa::Rsa::generate(2048).unwrap();
let header: Header<()> = Header {
alg: RS512,
..Default::default()
..Header::default()
};
let token = DefaultToken {
header: header,
..Default::default()
..Token::default()
};
let raw = token
.sign(&rsa_keypair.private_key_to_pem().unwrap())
.unwrap();
let same = DefaultToken::parse(&*raw).unwrap();
let same = Token::parse(&*raw).unwrap();
assert_eq!(token, same);
assert!(
@ -186,13 +186,13 @@ mod tests {
);
}
fn create_for_range(nbf: Tm, exp: Tm) -> DefaultToken<()> {
let header: Header<()> = Default::default();
let payload = DefaultPayload {
fn create_for_range(nbf: Tm, exp: Tm) -> Token {
let header: Header = Header::default();
let payload = Payload {
nbf: Some(nbf.to_timespec().sec as u64),
exp: Some(exp.to_timespec().sec as u64),
..Default::default()
..Payload::default()
};
DefaultToken::new(header, payload)
Token::new(header, payload)
}
}

View File

@ -1,16 +1,16 @@
use super::Result;
use base64::{decode_config, encode_config, URL_SAFE_NO_PAD};
use error::Error;
use serde::Serialize;
use serde::de::DeserializeOwned;
use serde::Serialize;
use serde_json;
use serde_json::value::Value;
use super::Result;
use time::{self, Timespec};
/// A default claim set, including the standard, or registered, claims and the ability to specify
/// your own as custom claims.
#[derive(Debug, Serialize, Deserialize, Default, PartialEq)]
pub struct Payload<T> {
pub struct Payload<T = ()> {
#[serde(skip_serializing_if = "Option::is_none")]
pub iss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
@ -100,9 +100,9 @@ impl<T: Serialize + DeserializeOwned> Payload<T> {
#[cfg(test)]
mod tests {
use super::{DefaultPayload, Payload};
use std::default::Default;
use time::{self, Duration};
use super::{DefaultPayload, Payload};
#[derive(Default, Debug, Serialize, Deserialize, PartialEq)]
struct CustomClaims {