Fix: OneTimeLinks (#1719)

* fix otls

* one otl per client

* revert some code

* revert some more code, add comments

* adjust migration
This commit is contained in:
Bernd Storath
2025-03-07 09:16:24 +01:00
committed by GitHub
parent fcb5049dab
commit e5fb6ff3a6
11 changed files with 57 additions and 51 deletions
@@ -12,7 +12,7 @@ function createPreparedStatement(db: DBType) {
create: db
.insert(oneTimeLink)
.values({
clientId: sql.placeholder('id'),
id: sql.placeholder('id'),
oneTimeLink: sql.placeholder('oneTimeLink'),
expiresAt: sql.placeholder('expiresAt'),
})
@@ -20,7 +20,12 @@ function createPreparedStatement(db: DBType) {
erase: db
.update(oneTimeLink)
.set({ expiresAt: sql.placeholder('expiresAt') as never as string })
.where(eq(oneTimeLink.clientId, sql.placeholder('id')))
.where(eq(oneTimeLink.id, sql.placeholder('id')))
.prepare(),
findByOneTimeLink: db.query.oneTimeLink
.findFirst({
where: eq(oneTimeLink.oneTimeLink, sql.placeholder('oneTimeLink')),
})
.prepare(),
};
}
@@ -36,6 +41,10 @@ export class OneTimeLinkService {
return this.#statements.delete.execute({ id });
}
getByOtl(oneTimeLink: string) {
return this.#statements.findByOneTimeLink.execute({ oneTimeLink });
}
generate(id: ID) {
const key = `${id}-${Math.floor(Math.random() * 1000)}`;
const oneTimeLink = Math.abs(CRC32.str(key)).toString(16);
@@ -45,7 +54,7 @@ export class OneTimeLinkService {
}
erase(id: ID) {
const expiresAt = Date.now() + 10 * 1000;
const expiresAt = new Date(Date.now() + 10 * 1000).toISOString();
return this.#statements.erase.execute({ id, expiresAt });
}
}