pub struct DMSCJWTManager { /* private fields */ }Expand description
Core JWT management structure.
The DMSCJWTManager handles all JWT-related operations including token
generation, validation, and secret key management. It uses the HS256
(HMAC SHA-256) algorithm for signing tokens.
§Thread Safety
This structure is designed to be shared across threads when wrapped in an Arc. All methods are stateless regarding the token content and only read the configuration (secret and expiry).
§Algorithm
Uses HMAC-SHA256 (HS256) for token signing. This symmetric algorithm uses the same secret key for both signing and verification.
§Performance
Token generation and validation are designed to be fast operations. The encoding/decoding operations are primarily CPU-bound due to the HMAC computation.
Implementations§
Source§impl DMSCJWTManager
impl DMSCJWTManager
Sourcepub fn new(secret: String, expiry_secs: u64) -> Self
pub fn new(secret: String, expiry_secs: u64) -> Self
Creates a new JWT manager with the specified secret and expiry time.
This constructor is used for Python bindings and creates a JWT manager that can generate and validate tokens with the given configuration.
§Parameters
secret: The secret key used for signing and verifying JWT tokensexpiry_secs: The default expiry time in seconds for generated tokens
§Returns
A new instance of DMSCJWTManager
Sourcepub fn py_generate_token(
&self,
user_id: &str,
roles: Vec<String>,
permissions: Vec<String>,
) -> Result<String, DMSCError>
pub fn py_generate_token( &self, user_id: &str, roles: Vec<String>, permissions: Vec<String>, ) -> Result<String, DMSCError>
Generates a new JWT token for the specified user with roles and permissions.
§Parameters
user_id: The unique identifier of the user (subject claim)roles: A list of role identifiers assigned to the userpermissions: A list of permission identifiers granted to the user
§Returns
The encoded JWT token string
Sourcepub fn py_validate_token(&self, token: &str) -> Result<DMSCJWTClaims, DMSCError>
pub fn py_validate_token(&self, token: &str) -> Result<DMSCJWTClaims, DMSCError>
Sourcepub fn py_get_token_expiry(&self) -> u64
pub fn py_get_token_expiry(&self) -> u64
Returns the default token expiry time in seconds.
Source§impl DMSCJWTManager
impl DMSCJWTManager
Sourcepub fn create(secret: String, expiry_secs: u64) -> Self
pub fn create(secret: String, expiry_secs: u64) -> Self
Creates a new JWT manager with the specified secret and expiry time.
This is the primary constructor for creating a JWT manager. It initializes the manager with a secret key and default token expiry time. The secret key is used for both signing new tokens and validating existing ones.
§Performance
This constructor pre-computes the encoding and decoding keys for optimal performance during token generation and validation operations.
§Parameters
secret: The secret key used for signing and verifying JWT tokensexpiry_secs: The default expiry time in seconds for generated tokens
§Returns
A new instance of DMSCJWTManager
§Examples
use dmsc::auth::jwt::DMSCJWTManager;
let manager = DMSCJWTManager::create(
"your-secret-key".to_string(),
3600 // 1 hour expiry
);Sourcepub fn generate_token(
&self,
user_id: &str,
roles: Vec<String>,
permissions: Vec<String>,
) -> Result<String, DMSCError>
pub fn generate_token( &self, user_id: &str, roles: Vec<String>, permissions: Vec<String>, ) -> Result<String, DMSCError>
Generates a new JWT token for the specified user with roles and permissions.
This method creates a signed JWT token containing the user’s subject identifier, assigned roles, and permissions. The token is signed using HMAC-SHA256 algorithm.
§Token Claims
The generated token includes the following claims:
sub: The user identifierexp: Expiration time (current time + expiry_secs)iat: Issued at time (current time)roles: List of role identifierspermissions: List of permission identifiers
§Parameters
user_id: The unique identifier of the user (subject claim)roles: A vector of role identifiers assigned to the userpermissions: A vector of permission identifiers granted to the user
§Returns
A Result containing the encoded JWT token string, or a DMSCError if encoding fails
§Examples
use dmsc::auth::jwt::DMSCJWTManager;
let manager = DMSCJWTManager::create("secret".to_string(), 3600);
let token = manager.generate_token(
"user123",
vec!["admin".to_string()],
vec!["read:data".to_string(), "write:data".to_string()]
);
match token {
Ok(t) => println!("Generated token: {}", t),
Err(e) => println!("Failed to generate token: {:?}", e),
}Sourcepub fn validate_token(&self, token: &str) -> Result<DMSCJWTClaims, DMSCError>
pub fn validate_token(&self, token: &str) -> Result<DMSCJWTClaims, DMSCError>
Validates a JWT token and returns the decoded claims.
This method verifies the token’s signature and decodes the claims payload. It validates the token structure and signature using the configured secret key.
§Validation Performed
- Verifies the token signature using HMAC-SHA256
- Validates the token structure (header, payload, signature)
- Checks token expiration if validation is enabled
§Parameters
token: The JWT token string to validate
§Returns
A Result containing the decoded DMSCJWTClaims if validation succeeds, or a DMSCError if validation fails (invalid signature, expired token, etc.)
§Examples
use dmsc::auth::jwt::DMSCJWTManager;
let manager = DMSCJWTManager::create("secret".to_string(), 3600);
// First generate a token
let token = manager.generate_token("user123", vec![], vec![]).unwrap();
// Then validate it
let claims = manager.validate_token(&token);
match claims {
Ok(c) => println!("User: {}, Roles: {:?}", c.sub, c.roles),
Err(e) => println!("Invalid token: {:?}", e),
}Sourcepub fn get_token_expiry(&self) -> u64
pub fn get_token_expiry(&self) -> u64
Returns the default token expiry time in seconds.
This method returns the configured default expiry time that is used when generating new tokens.
§Returns
The default token expiry time in seconds
Sourcepub fn get_secret(&self) -> &str
pub fn get_secret(&self) -> &str
Returns a reference to the secret key.
This method provides read-only access to the configured secret key. The secret key is used for both signing and verifying tokens.
§Returns
A string slice reference to the secret key
§Security Note
Be cautious when exposing the secret key. In production, the secret should be stored securely and never logged or exposed to unauthorized parties.
Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for DMSCJWTManager
impl<'py> IntoPyObject<'py> for DMSCJWTManager
Source§type Target = DMSCJWTManager
type Target = DMSCJWTManager
Source§type Output = Bound<'py, <DMSCJWTManager as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCJWTManager as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for DMSCJWTManager
impl PyClass for DMSCJWTManager
Source§impl PyClassImpl for DMSCJWTManager
impl PyClassImpl for DMSCJWTManager
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = c"Core JWT management structure.\n\nThe `DMSCJWTManager` handles all JWT-related operations including token\ngeneration, validation, and secret key management. It uses the HS256\n(HMAC SHA-256) algorithm for signing tokens.\n\n## Thread Safety\n\nThis structure is designed to be shared across threads when wrapped in\nan Arc. All methods are stateless regarding the token content and only\nread the configuration (secret and expiry).\n\n## Algorithm\n\nUses HMAC-SHA256 (HS256) for token signing. This symmetric algorithm\nuses the same secret key for both signing and verification.\n\n## Performance\n\nToken generation and validation are designed to be fast operations.\nThe encoding/decoding operations are primarily CPU-bound due to the\nHMAC computation.\x00"
const RAW_DOC: &'static CStr = c"Core JWT management structure.\n\nThe `DMSCJWTManager` handles all JWT-related operations including token\ngeneration, validation, and secret key management. It uses the HS256\n(HMAC SHA-256) algorithm for signing tokens.\n\n## Thread Safety\n\nThis structure is designed to be shared across threads when wrapped in\nan Arc. All methods are stateless regarding the token content and only\nread the configuration (secret and expiry).\n\n## Algorithm\n\nUses HMAC-SHA256 (HS256) for token signing. This symmetric algorithm\nuses the same secret key for both signing and verification.\n\n## Performance\n\nToken generation and validation are designed to be fast operations.\nThe encoding/decoding operations are primarily CPU-bound due to the\nHMAC computation.\x00"
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCJWTManager>
type ThreadChecker = SendablePyClass<DMSCJWTManager>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for DMSCJWTManager
impl PyClassNewTextSignature for DMSCJWTManager
const TEXT_SIGNATURE: &'static str = "(secret, expiry_secs)"
Source§impl PyMethods<DMSCJWTManager> for PyClassImplCollector<DMSCJWTManager>
impl PyMethods<DMSCJWTManager> for PyClassImplCollector<DMSCJWTManager>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for DMSCJWTManager
impl PyTypeInfo for DMSCJWTManager
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for DMSCJWTManager
impl ExtractPyClassWithClone for DMSCJWTManager
Auto Trait Implementations§
impl Freeze for DMSCJWTManager
impl RefUnwindSafe for DMSCJWTManager
impl Send for DMSCJWTManager
impl Sync for DMSCJWTManager
impl Unpin for DMSCJWTManager
impl UnwindSafe for DMSCJWTManager
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more