From 88732556c11e75c992107532c0beaf7195f6fc9a Mon Sep 17 00:00:00 2001 From: Valentin Tolmer Date: Sat, 20 Nov 2021 18:57:18 +0100 Subject: [PATCH] server: Add an SQL table to store password reset tokens --- server/src/infra/jwt_sql_tables.rs | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/server/src/infra/jwt_sql_tables.rs b/server/src/infra/jwt_sql_tables.rs index 7025cc8..a937510 100644 --- a/server/src/infra/jwt_sql_tables.rs +++ b/server/src/infra/jwt_sql_tables.rs @@ -21,6 +21,15 @@ pub enum JwtStorage { Blacklisted, } +/// Contains the temporary tokens to reset the password, sent by email. +#[derive(Iden)] +pub enum PasswordResetTokens { + Table, + Token, + UserId, + ExpiryDate, +} + /// This needs to be initialized after the domain tables are. pub async fn init_table(pool: &Pool) -> sqlx::Result<()> { sqlx::query( @@ -95,5 +104,38 @@ pub async fn init_table(pool: &Pool) -> sqlx::Result<()> { .execute(pool) .await?; + sqlx::query( + &Table::create() + .table(PasswordResetTokens::Table) + .if_not_exists() + .col( + ColumnDef::new(PasswordResetTokens::Token) + .string_len(255) + .not_null() + .primary_key(), + ) + .col( + ColumnDef::new(PasswordResetTokens::UserId) + .string_len(255) + .not_null(), + ) + .col( + ColumnDef::new(PasswordResetTokens::ExpiryDate) + .date_time() + .not_null(), + ) + .foreign_key( + ForeignKey::create() + .name("PasswordResetTokensUserForeignKey") + .table(PasswordResetTokens::Table, Users::Table) + .col(PasswordResetTokens::UserId, Users::UserId) + .on_delete(ForeignKeyAction::Cascade) + .on_update(ForeignKeyAction::Cascade), + ) + .to_string(DbQueryBuilder {}), + ) + .execute(pool) + .await?; + Ok(()) }