diff --git a/app/composables/useDatabase.ts b/app/composables/useDatabase.ts index d4fb931..622aa6a 100644 --- a/app/composables/useDatabase.ts +++ b/app/composables/useDatabase.ts @@ -1,7 +1,6 @@ import { Database } from "bun:sqlite"; import { BunSQLiteDatabase, drizzle } from "drizzle-orm/bun-sqlite"; import * as schema from '../db/schema'; -import { eq, or, sql } from "drizzle-orm"; let instance: BunSQLiteDatabase & { $client: Database; diff --git a/app/composables/useMarkdown.ts b/app/composables/useMarkdown.ts index a9ad8ce..fd1a70c 100644 --- a/app/composables/useMarkdown.ts +++ b/app/composables/useMarkdown.ts @@ -18,7 +18,7 @@ interface Parser } export default function useMarkdown(): Parser { - let processor: Processor, processorSync: Processor; + let processor: Processor, processorText: Processor; const parse = (markdown: string) => { if (!processor) @@ -43,14 +43,14 @@ export default function useMarkdown(): Parser } const text = (markdown: string) => { - if (!processor) + if (!processorText) { - processor = unified().use([RemarkParse, RemarkGfm, RemarkOfm, RemarkBreaks, RemarkFrontmatter ]); - processor.use(StripMarkdown, { remove: [ 'comment', 'tag', 'callout' ] }); - processor.use(RemarkStringify); + processorText = unified().use([RemarkParse, RemarkGfm, RemarkOfm, RemarkBreaks, RemarkFrontmatter ]); + processorText.use(StripMarkdown, { remove: [ 'comment', 'tag', 'callout' ] }); + processorText.use(RemarkStringify); } - const processed = processor.processSync(markdown); + const processed = processorText.processSync(markdown); return String(processed); } diff --git a/db.sqlite b/db.sqlite index bc673f4..e600ce1 100644 Binary files a/db.sqlite and b/db.sqlite differ diff --git a/server/api/auth/register.post.ts b/server/api/auth/register.post.ts index dce0d35..e800780 100644 --- a/server/api/auth/register.post.ts +++ b/server/api/auth/register.post.ts @@ -74,7 +74,7 @@ export default defineEventHandler(async (e): Promise => { logSession(e, await setUserSession(e, { user: { id: id.id, username: body.data.username, email: body.data.email, state: 0, signin: new Date(), permissions: [], lastTimestamp: new Date() } }) as UserSessionRequired); - const emailId = Bun.hash('register' + id.id + hash, Date.now()); + const emailId = Bun.hash('register' + id.id + hash, Date.now()).toString(10); const timestamp = Date.now() + 1000 * 60 * 60; await runTask('validation', { @@ -90,7 +90,7 @@ export default defineEventHandler(async (e): Promise => { template: 'registration', data: { id: emailId, timestamp, - userId: id, + userId: id.id, username: body.data.username, }, } diff --git a/server/api/auth/request-reset.post.ts b/server/api/auth/request-reset.post.ts index 63a0a1b..08f5721 100644 --- a/server/api/auth/request-reset.post.ts +++ b/server/api/auth/request-reset.post.ts @@ -24,7 +24,7 @@ export default defineEventHandler(async (e) => { if(result && result.id) { - const id = hash('reset' + result.id + result.hash, Date.now()); + const id = hash('reset' + result.id + result.hash, Date.now()).toString(10); const timestamp = Date.now() + 1000 * 60 * 60; await runTask('validation', { payload: { diff --git a/server/api/users/[id]/revalidate.post.ts b/server/api/users/[id]/revalidate.post.ts index 51586fb..21a0fa3 100644 --- a/server/api/users/[id]/revalidate.post.ts +++ b/server/api/users/[id]/revalidate.post.ts @@ -47,7 +47,7 @@ export default defineEventHandler(async (e) => { return; } - const emailId = hash('register' + data.id + data.hash, Date.now()); + const emailId = hash('register' + data.id + data.hash, Date.now()).toString(10); const timestamp = Date.now() + 1000 * 60 * 60; await runTask('validation', { diff --git a/server/components/mail/reset-password.ts b/server/components/mail/reset-password.ts index d1fe15a..d194101 100644 --- a/server/components/mail/reset-password.ts +++ b/server/components/mail/reset-password.ts @@ -1,4 +1,5 @@ import { dom, text } from "#shared/dom.virtual.util"; +import { format } from "#shared/general.util"; export default function(data: any) { diff --git a/server/routes/user/mailvalidation.get.ts b/server/routes/user/mailvalidation.get.ts index ed31af8..4c4a353 100644 --- a/server/routes/user/mailvalidation.get.ts +++ b/server/routes/user/mailvalidation.get.ts @@ -16,6 +16,8 @@ export default defineEventHandler(async (e) => { if(!query.success) throw query.error; + const date = new Date(); + if(Bun.hash('1' + query.data.u.toString(), query.data.t).toString() !== query.data.h) { return createError({ @@ -23,7 +25,7 @@ export default defineEventHandler(async (e) => { message: 'Lien incorrect', }); } - if(Date.now() > query.data.t + (60 * 60 * 1000)) + if(date.getTime() > query.data.t + (60 * 60 * 1000)) { return createError({ statusCode: 400, @@ -34,7 +36,7 @@ export default defineEventHandler(async (e) => { const db = useDatabase(); const validate = db.select(getTableColumns(emailValidationTable)).from(emailValidationTable).where(eq(emailValidationTable.id, query.data.i)).get(); - if(!validate || validate.timestamp <= new Date()) + if(!validate || validate.timestamp <= date) { return createError({ statusCode: 400, @@ -42,7 +44,7 @@ export default defineEventHandler(async (e) => { }); } - db.delete(emailValidationTable).where(lte(emailValidationTable.timestamp, new Date())).run(); + db.delete(emailValidationTable).where(lte(emailValidationTable.timestamp, date)).run(); const result = db.select({ state: usersTable.state }).from(usersTable).where(eq(usersTable.id, query.data.u)).get(); if(result === undefined) diff --git a/server/tasks/validation.ts b/server/tasks/validation.ts index 8945182..27e0998 100644 --- a/server/tasks/validation.ts +++ b/server/tasks/validation.ts @@ -14,18 +14,18 @@ export default defineTask({ name: 'validation', description: 'Add email ID to DB', }, - run(e) { + run({ payload, context }) { try { - if(e.payload.type !== 'validation') + if(payload.type !== 'validation') { throw new Error(`Données inconnues`); } - const payload = e.payload as ValidationPayload; + const _payload = payload as ValidationPayload; const db = useDatabase(); db.delete(emailValidationTable).where(lt(emailValidationTable.timestamp, new Date())).run(); - db.insert(emailValidationTable).values({ id: payload.id, timestamp: new Date(payload.timestamp) }).run(); + db.insert(emailValidationTable).values({ id: _payload.id, timestamp: new Date(_payload.timestamp) }).run(); return { result: true }; } diff --git a/shared/character.util.ts b/shared/character.util.ts index 6e3a46e..157bc48 100644 --- a/shared/character.util.ts +++ b/shared/character.util.ts @@ -3,7 +3,7 @@ import { z } from "zod/v4"; import characterConfig from '#shared/character-config.json'; import proses, { preview } from "#shared/proses"; import { button, buttongroup, checkbox, floater, foldable, input, loading, multiselect, numberpicker, select, tabgroup, Toaster, toggle } from "#shared/components.util"; -import { div, dom, icon, span, text, type DOMList, type RedrawableHTML } from "#shared/dom.util"; +import { div, dom, icon, span, text, reactive, type DOMList, type RedrawableHTML } from "#shared/dom.util"; import { followermenu, fullblocker, tooltip } from "#shared/floating.util"; import { clamp, deepEquals } from "#shared/general.util"; import markdown from "#shared/markdown.util"; @@ -1301,7 +1301,7 @@ export class CharacterSheet useRequestFetch()(`/api/character/${id}`).then(character => { if(character) { - this.character = new CharacterCompiler(character); + this.character = new CharacterCompiler(reactive(character)); if(character.campaign) {