rustauth-core 0.2.0

Core types and primitives for RustAuth.
Documentation
use serde::{Deserialize, Serialize};

use rustauth_core::crypto::jwt::{sign_jwt, verify_jwt};

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
struct Claims {
    sub: String,
}

#[test]
fn verify_jwt_accepts_token_signed_with_same_secret() -> Result<(), Box<dyn std::error::Error>> {
    let token = sign_jwt(
        &Claims {
            sub: "user_123".to_owned(),
        },
        "secret-a-at-least-32-chars-long!!",
        3600,
    )?;

    let claims = verify_jwt::<Claims>(&token, "secret-a-at-least-32-chars-long!!")?;

    assert_eq!(
        claims,
        Some(Claims {
            sub: "user_123".to_owned()
        })
    );
    Ok(())
}

#[test]
fn verify_jwt_rejects_token_signed_with_different_secret() -> Result<(), Box<dyn std::error::Error>>
{
    let token = sign_jwt(
        &Claims {
            sub: "user_123".to_owned(),
        },
        "secret-a-at-least-32-chars-long!!",
        3600,
    )?;

    let claims = verify_jwt::<Claims>(&token, "secret-b-at-least-32-chars-long!!")?;

    assert_eq!(claims, None);
    Ok(())
}

#[test]
fn verify_jwt_rejects_expired_token() -> Result<(), Box<dyn std::error::Error>> {
    let token = sign_jwt(
        &Claims {
            sub: "user_123".to_owned(),
        },
        "secret-a-at-least-32-chars-long!!",
        -1,
    )?;

    let claims = verify_jwt::<Claims>(&token, "secret-a-at-least-32-chars-long!!")?;

    assert_eq!(claims, None);
    Ok(())
}