diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2025-08-24 17:03:16 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2025-08-26 01:08:11 -0400 |
| commit | 0bbc83f09cc7517dddf16770a15f9e90815f48ba (patch) | |
| tree | 4b7ea51aab2e9255fb8832d3109b4bc8dc033f0c /src/token/mod.rs | |
| parent | 218d6dbb56727721d19019c8514f5e4395596e98 (diff) | |
Generate tokens in memory and then store them.
This is the leading edge of a larger storage refactoring, where repo types stop doing things like generating secrets or deciding whether to carry out an operation. To make this work, there is now a `Token` type that holds the complete state of a token, in memory.
Diffstat (limited to 'src/token/mod.rs')
| -rw-r--r-- | src/token/mod.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/token/mod.rs b/src/token/mod.rs index 33403ef..58ff08b 100644 --- a/src/token/mod.rs +++ b/src/token/mod.rs @@ -6,4 +6,36 @@ mod id; pub mod repo; mod secret; +use uuid::Uuid; + +use crate::{ + clock::DateTime, + user::{self, User}, +}; + pub use self::{broadcaster::Broadcaster, event::Event, id::Id, secret::Secret}; + +#[derive(Clone, Debug)] +pub struct Token { + pub id: Id, + pub user: user::Id, + pub issued_at: DateTime, + pub last_used_at: DateTime, +} + +impl Token { + pub fn generate(user: &User, issued_at: &DateTime) -> (Self, Secret) { + let id = Id::generate(); + let secret = Uuid::new_v4().to_string().into(); + + ( + Self { + id, + user: user.id.clone(), + issued_at: *issued_at, + last_used_at: *issued_at, + }, + secret, + ) + } +} |
