diff --git a/actix-session/CHANGES.md b/actix-session/CHANGES.md index 1cdc19e25..4e3fafca2 100644 --- a/actix-session/CHANGES.md +++ b/actix-session/CHANGES.md @@ -6,6 +6,7 @@ - Rename `redis-rs-session` crate feature to `redis-session`. - Rename `redis-rs-tls-session` crate feature to `redis-session-native-tls`. - Remove `redis-actor-session` crate feature (and, therefore, the `actix-redis` based storage backend). +- Make `generate_session_key()` public and change it's implementation to use `DistString::sample_string` method. ## 0.9.0 diff --git a/actix-session/src/storage/utils.rs b/actix-session/src/storage/utils.rs index bc9198867..a4742cf0a 100644 --- a/actix-session/src/storage/utils.rs +++ b/actix-session/src/storage/utils.rs @@ -1,17 +1,12 @@ -use rand::{distributions::Alphanumeric, rngs::OsRng, Rng as _}; +use rand::distributions::{Alphanumeric, DistString}; use crate::storage::SessionKey; /// Session key generation routine that follows [OWASP recommendations]. /// /// [OWASP recommendations]: https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html#session-id-entropy -pub(crate) fn generate_session_key() -> SessionKey { - let value = std::iter::repeat(()) - .map(|()| OsRng.sample(Alphanumeric)) - .take(64) - .collect::>(); - - // These unwraps will never panic because pre-conditions are always verified - // (i.e. length and character set) - String::from_utf8(value).unwrap().try_into().unwrap() +pub fn generate_session_key() -> SessionKey { + let session_key = Alphanumeric.sample_string(&mut rand::thread_rng(), 64); + // This unwrap should never panic because the String is guaranteed to be 64 alphanumeric characters + session_key.try_into().unwrap() }