summaryrefslogtreecommitdiff
path: root/src/token/mod.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2025-08-24 17:03:16 -0400
committerOwen Jacobson <owen@grimoire.ca>2025-08-26 01:08:11 -0400
commit0bbc83f09cc7517dddf16770a15f9e90815f48ba (patch)
tree4b7ea51aab2e9255fb8832d3109b4bc8dc033f0c /src/token/mod.rs
parent218d6dbb56727721d19019c8514f5e4395596e98 (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.rs32
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,
+ )
+ }
+}