summaryrefslogtreecommitdiff
path: root/src/setup/app.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/setup/app.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/setup/app.rs')
-rw-r--r--src/setup/app.rs21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/setup/app.rs b/src/setup/app.rs
index 1856519..c1c53c5 100644
--- a/src/setup/app.rs
+++ b/src/setup/app.rs
@@ -6,7 +6,7 @@ use crate::{
event::Broadcaster,
name::Name,
password::Password,
- token::{Secret, repo::Provider as _},
+ token::{Secret, Token, repo::Provider as _},
user::create::{self, Create},
};
@@ -31,17 +31,20 @@ impl<'a> Setup<'a> {
let validated = create.validate()?;
let mut tx = self.db.begin().await?;
- let stored = if tx.setup().completed().await? {
- Err(Error::SetupCompleted)?
+ if tx.setup().completed().await? {
+ Err(Error::SetupCompleted)
} else {
- validated.store(&mut tx).await?
- };
- let secret = tx.tokens().issue(stored.user(), created_at).await?;
- tx.commit().await?;
+ let stored = validated.store(&mut tx).await?;
+ let user = stored.user().as_created();
+
+ let (token, secret) = Token::generate(&user, created_at);
+ tx.tokens().create(&token, &secret).await?;
+ tx.commit().await?;
- stored.publish(self.events);
+ stored.publish(self.events);
- Ok(secret)
+ Ok(secret)
+ }
}
pub async fn completed(&self) -> Result<bool, sqlx::Error> {