mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 16:38:19 +01:00
40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
|
|
import { createChallenge } from "altcha-lib";
|
||
|
|
import { sql } from "drizzle-orm";
|
||
|
|
import { db } from "~/drizzle/db";
|
||
|
|
import { Challenges } from "~/drizzle/schema";
|
||
|
|
import { config } from "~/packages/config-manager";
|
||
|
|
|
||
|
|
export const generateChallenge = async (
|
||
|
|
maxNumber = config.validation.challenges.difficulty,
|
||
|
|
) => {
|
||
|
|
const expirationDate = new Date(
|
||
|
|
Date.now() + config.validation.challenges.expiration * 1000,
|
||
|
|
);
|
||
|
|
|
||
|
|
const uuid = (await db.execute(sql<string>`SELECT uuid_generate_v7()`))
|
||
|
|
.rows[0].uuid_generate_v7 as string;
|
||
|
|
|
||
|
|
const challenge = await createChallenge({
|
||
|
|
hmacKey: config.validation.challenges.key,
|
||
|
|
expires: expirationDate,
|
||
|
|
maxNumber,
|
||
|
|
algorithm: "SHA-256",
|
||
|
|
params: {
|
||
|
|
challenge_id: uuid,
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
const result = (
|
||
|
|
await db
|
||
|
|
.insert(Challenges)
|
||
|
|
.values({
|
||
|
|
id: uuid,
|
||
|
|
challenge,
|
||
|
|
expiresAt: expirationDate.toISOString(),
|
||
|
|
})
|
||
|
|
.returning()
|
||
|
|
)[0];
|
||
|
|
|
||
|
|
return result;
|
||
|
|
};
|