Skip to content

Commit

Permalink
rework expiry variant naming
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcountryman committed Oct 29, 2023
1 parent e1e6759 commit e940b55
Show file tree
Hide file tree
Showing 16 changed files with 49 additions and 43 deletions.
2 changes: 1 addition & 1 deletion examples/counter-concurrent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ async fn main() {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::days(1))),
.with_expiry(Expiry::OnInactivity(Duration::days(1))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/counter-extractor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ async fn main() {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/counter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ async fn main() {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/diesel-store-with-custom-table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/diesel-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/moka-postgres-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(caching_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/mongodb-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/mysql-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/postgres-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/redis-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/sqlite-store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion examples/strongly-typed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ async fn main() {
.layer(
SessionManagerLayer::new(session_store)
.with_secure(false)
.with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
.with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
);

let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
//! .layer(
//! SessionManagerLayer::new(session_store)
//! .with_secure(false)
//! .with_expiry(Expiry::InactivityDuration(Duration::seconds(10))),
//! .with_expiry(Expiry::OnInactivity(Duration::seconds(10))),
//! );
//!
//! let app = Router::new()
Expand Down
2 changes: 1 addition & 1 deletion src/service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ impl<Store: SessionStore> SessionManagerLayer<Store> {
/// use tower_sessions::{Expiry, MemoryStore, SessionManagerLayer};
///
/// let session_store = MemoryStore::default();
/// let session_expiry = Expiry::InactivityDuration(Duration::hours(1));
/// let session_expiry = Expiry::OnInactivity(Duration::hours(1));
/// let session_service = SessionManagerLayer::new(session_store).with_expiry(session_expiry);
/// ```
pub fn with_expiry(mut self, expiry: Expiry) -> Self {
Expand Down
62 changes: 34 additions & 28 deletions src/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,16 +50,16 @@ impl Session {
/// use tower_sessions::{Expiry, Session};
///
/// // Uses a so-called "session cookie".
/// let expiry = Expiry::BrowserClosed;
/// let expiry = Expiry::OnSessionEnd;
/// Session::new(Some(expiry));
///
/// // Uses an expiry from the last recorded active time.
/// let expiry = Expiry::InactivityDuration(Duration::hours(1));
/// // Uses an inactivity expiry.
/// let expiry = Expiry::OnInactivity(Duration::hours(1));
/// Session::new(Some(expiry));
///
/// // Uses an expiry that will expire at the exact given time.
/// // Uses a date and time expiry.
/// let expired_at = OffsetDateTime::now_utc().saturating_add(Duration::hours(1));
/// let expiry = Expiry::AbsoluteExpiration(expired_at);
/// let expiry = Expiry::AtDateTime(expired_at);
/// Session::new(Some(expiry));
/// ```
pub fn new(expiry: Option<Expiry>) -> Self {
Expand Down Expand Up @@ -366,12 +366,12 @@ impl Session {
/// use time::{Duration, OffsetDateTime};
/// use tower_sessions::{Expiry, Session};
///
/// let expiry = Expiry::InactivityDuration(Duration::hours(1));
/// let expiry = Expiry::OnInactivity(Duration::hours(1));
/// let session = Session::default();
/// session.set_expiry(Some(expiry));
/// assert_eq!(
/// session.expiry(),
/// Some(Expiry::InactivityDuration(Duration::hours(1)))
/// Some(Expiry::OnInactivity(Duration::hours(1)))
/// );
/// ```
pub fn expiry(&self) -> Option<Expiry> {
Expand All @@ -391,15 +391,13 @@ impl Session {
/// use tower_sessions::{Expiry, Session};
///
/// let session = Session::default();
/// let expiry = Expiry::AbsoluteExpiration(OffsetDateTime::from_unix_timestamp(0).unwrap());
/// let expiry = Expiry::AtDateTime(OffsetDateTime::from_unix_timestamp(0).unwrap());
/// session.set_expiry(Some(expiry));
/// session.insert("foo", 42);
/// assert!(!session.active());
/// assert!(session.is_modified());
///
/// let expiry = Expiry::InactivityDuration(Duration::weeks(2));
/// let expiry = Expiry::OnInactivity(Duration::weeks(2));
/// session.set_expiry(Some(expiry));
/// assert!(session.active());
/// assert!(session.is_modified());
/// ```
pub fn set_expiry(&self, expiry: Option<Expiry>) {
Expand All @@ -412,12 +410,12 @@ impl Session {
pub fn expiry_date(&self) -> OffsetDateTime {
let inner = self.inner.lock();
match inner.expiry {
Some(Expiry::InactivityDuration(duration)) => {
Some(Expiry::OnInactivity(duration)) => {
let modified_at = inner.modified_at.unwrap_or_else(OffsetDateTime::now_utc);
modified_at.saturating_add(duration)
}
Some(Expiry::AbsoluteExpiration(datetime)) => datetime,
Some(Expiry::BrowserClosed) | None => {
Some(Expiry::AtDateTime(datetime)) => datetime,
Some(Expiry::OnSessionEnd) | None => {
// TODO: The default should probably be configurable.
OffsetDateTime::now_utc().saturating_add(DEFAULT_DURATION)
}
Expand All @@ -439,11 +437,11 @@ impl Session {
/// let session = Session::default();
/// assert!(session.active());
///
/// let expiry = Expiry::InactivityDuration(Duration::hours(1));
/// let expiry = Expiry::OnInactivity(Duration::hours(1));
/// session.set_expiry(Some(expiry));
/// assert!(session.active());
///
/// let expiry = Expiry::InactivityDuration(Duration::ZERO);
/// let expiry = Expiry::OnInactivity(Duration::ZERO);
/// session.set_expiry(Some(expiry));
/// assert!(!session.active());
/// ```
Expand Down Expand Up @@ -590,21 +588,29 @@ pub enum Deletion {
}

/// Session expiry configuration.
///
/// # Examples
///
/// ```rust
/// use time::{Duration, OffsetDateTime};
/// use tower_sessions::Expiry;
///
/// let expiry = Expiry::OnInactivity(Duration::minutes(5));
///
/// let expired_at = OffsetDateTime::now_utc().saturating_add(Duration::minutes(5));
/// let expiry = Expiry::AtDateTime(expired_at);
/// ```
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub enum Expiry {
/// Expiry based on inactivity duration.
/// Expire on [current session end][current-session-end], as defined by the
/// browser.
///
/// The session will expire when it has been inactive for the given
/// `Duration`.
InactivityDuration(Duration),
/// [current-session-end]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#define_the_lifetime_of_a_cookie
OnSessionEnd,

/// Expiry at a specific date and time.
///
/// The session will expire when the specified `OffsetDateTime` is reached.
AbsoluteExpiration(OffsetDateTime),
/// Expire on inactivity.
OnInactivity(Duration),

/// Expiry when the browser is closed.
///
/// The session will expire when the user's web browser is closed.
BrowserClosed,
/// Expire at a specific date and time.
AtDateTime(OffsetDateTime),
}
2 changes: 1 addition & 1 deletion tests/common/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub fn build_app<Store: SessionStore>(
max_age: Option<Duration>,
) -> Router {
if let Some(max_age) = max_age {
session_manager = session_manager.with_expiry(Expiry::InactivityDuration(max_age));
session_manager = session_manager.with_expiry(Expiry::OnInactivity(max_age));
}

let session_service = ServiceBuilder::new()
Expand Down

0 comments on commit e940b55

Please sign in to comment.