mas_data_model/personal/
mod.rs

1// Copyright 2025 New Vector Ltd.
2//
3// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
4// Please see LICENSE files in the repository root for full details.
5
6pub mod session;
7
8use chrono::{DateTime, Utc};
9use ulid::Ulid;
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12pub struct PersonalAccessToken {
13    pub id: Ulid,
14    pub session_id: Ulid,
15    pub created_at: DateTime<Utc>,
16    pub expires_at: Option<DateTime<Utc>>,
17    pub revoked_at: Option<DateTime<Utc>>,
18}
19
20impl PersonalAccessToken {
21    #[must_use]
22    pub fn is_valid(&self, now: DateTime<Utc>) -> bool {
23        if self.revoked_at.is_some() {
24            return false;
25        }
26        if let Some(expires_at) = self.expires_at {
27            expires_at > now
28        } else {
29            true
30        }
31    }
32}