1pub mod auth;
13pub mod authorizer;
14pub mod error;
15pub mod jwt;
16
17pub use auth::*;
18pub use authorizer::{Authorizer, RbacAuthorizer};
19pub use error::AuthError;
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24
25 #[test]
26 fn test_module_exports() {
27 let creds = Credentials::new("user", "pass");
29 assert_eq!(creds.username, "user");
30 }
31
32 #[test]
33 fn test_rbac_authorizer_via_lib_root() {
34 let authorizer = RbacAuthorizer::new();
35 let user = User::new(1, "user").with_permissions(vec!["read".to_string()]);
36
37 let can_read = authorizer.can(&user, "read", "resource");
38 let can_delete = authorizer.can(&user, "delete", "resource");
39
40 assert!(can_read.unwrap());
41 assert!(!can_delete.unwrap());
42 }
43
44 #[test]
45 fn test_rbac_authorizer_admin_via_lib_root() {
46 let authorizer = RbacAuthorizer::new();
47 let user = User::new(1, "admin").with_roles(vec!["admin".to_string()]);
48
49 let can_do_anything = authorizer.can(&user, "delete", "anything");
50
51 assert!(can_do_anything.unwrap());
52 }
53
54 #[test]
55 fn test_jwt_authenticator_via_lib_root() {
56 let auth = JwtAuthenticator::new("secret", "issuer", 3600);
57 let creds = Credentials::new("user", "pass");
58
59 let token = auth.authenticate(&creds).expect("authenticate");
60 assert!(!token.access_token.is_empty());
61
62 let user = auth.verify_token(&token.access_token).expect("verify");
63 assert_eq!(user.username, "user");
64 }
65
66 #[test]
67 fn test_jwt_encoder_via_lib_root() {
68 use jwt::{JwtClaims, JwtEncoder};
69 let encoder = JwtEncoder::new("lib-secret");
70 let claims = JwtClaims::new("lib-user", 9_999_999_999);
71 let token = encoder.encode(&claims).expect("encode");
72 let decoded = encoder.decode(&token).expect("decode");
73 assert_eq!(decoded.sub, "lib-user");
74 }
75}