41 lines
1.0 KiB
JavaScript
41 lines
1.0 KiB
JavaScript
import OrderedObject from "./OrderedObject.js"
|
|
const { z } = require("zod")
|
|
|
|
export default class Tokens extends OrderedObject {
|
|
|
|
schema = z.object({
|
|
index: z.number(),
|
|
url: z.string(),
|
|
uuid: z.string().regex(
|
|
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
|
|
"Invalid UUID"
|
|
),
|
|
used: z.boolean(),
|
|
})
|
|
|
|
markUsed(uuid) {
|
|
let token = this.get(uuid)
|
|
token.used = true
|
|
super.update(`TOKEN-${uuid}`, token)
|
|
}
|
|
|
|
save(token) {
|
|
let id = `TOKEN-${token.uuid}`
|
|
let result = this.schema.safeParse(token)
|
|
if(result.success) {
|
|
try {
|
|
super.add(id, token)
|
|
} catch(e) {
|
|
console.error(e)
|
|
throw e
|
|
}
|
|
} else {
|
|
console.error(result.error)
|
|
throw new global.ServerError(400, "Invalid Member Data!");
|
|
}
|
|
}
|
|
|
|
get(uuid) {
|
|
return this.entries[this.ids[`TOKEN-${uuid}`]]
|
|
}
|
|
} |