pub use plexus_auth_core::{AuthContext, Principal, ServiceIdentity, SessionValidator, VerifiedUser};
pub use plexus_auth_core::{
Anonymous, CallSite, ForwardDerivation, ForwardPolicy, ForwardPolicyName,
IdentityOnly, MethodPath, MethodPathError, PassThrough,
ANONYMOUS_NAME, IDENTITY_ONLY_NAME, PASS_THROUGH_NAME,
};
#[doc(hidden)]
pub fn _deprecation_hint_for_auth_context() {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn reexport_preserves_auth_context_api() {
let ctx = AuthContext::new(
"user-1".into(),
"sess-1".into(),
vec!["admin".into()],
serde_json::json!({"tenant_id": "acme"}),
);
assert_eq!(ctx.user_id, "user-1");
assert_eq!(ctx.session_id, "sess-1");
assert!(ctx.has_role("admin"));
assert!(!ctx.has_role("guest"));
assert_eq!(ctx.tenant(), Some("acme".into()));
assert!(ctx.is_authenticated());
let anon = AuthContext::anonymous();
assert!(!anon.is_authenticated());
assert_eq!(anon.user_id, "anonymous");
}
#[tokio::test]
async fn reexport_preserves_session_validator() {
struct Stub;
#[async_trait::async_trait]
impl SessionValidator for Stub {
async fn validate(&self, cookie: &str) -> Option<AuthContext> {
if cookie == "ok" {
Some(AuthContext::new(
"u".into(),
"s".into(),
vec![],
serde_json::Value::Null,
))
} else {
None
}
}
}
let v = Stub;
assert!(v.validate("ok").await.is_some());
assert!(v.validate("nope").await.is_none());
}
}