UNPKG

@openinc/parse-server-opendash

Version:
67 lines (66 loc) 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createToken = createToken; exports.createUrl = createUrl; exports.consumeToken = consumeToken; exports.isExpired = isExpired; exports.createSessionToken = createSessionToken; const crypto_1 = require("crypto"); const config_1 = require("../features/config"); const types_1 = require("../types"); async function createToken(type, userId, url) { const key = (0, crypto_1.randomUUID)(); const token = new types_1.Core_Token({ key: key, url: createUrl(url, key), payload: { type, userId, }, }); await token.save(null, { useMasterKey: true }); return { token: token.key, url: token.url }; } function createUrl(url, token) { if (!config_1.ConfigInstance.getInstance().getBoolean("ENFORCE_APP_URL")) { return url.replace("{{token}}", token); } const appUrl = new URL(config_1.ConfigInstance.getInstance().get("APP_URL")); const providedUrl = new URL(url.replace("{{token}}", token)); providedUrl.protocol = appUrl.protocol; providedUrl.host = appUrl.host; return providedUrl.toString(); } async function consumeToken(type, key, doNotConsume = false) { const token = await new Parse.Query(types_1.Core_Token) .equalTo("key", key) .equalTo("used", false) .first({ useMasterKey: true }); if (!token) { throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, "Token not found."); } if (!doNotConsume) { token.used = true; await token.save({ used: true }, { useMasterKey: true }); } if (isExpired(token)) { throw new Parse.Error(Parse.Error.OBJECT_NOT_FOUND, "Token expired."); } return token.payload; } function isExpired(token) { return token.createdAt.valueOf() + 1000 * 60 * 60 * 24 < Date.now(); } async function createSessionToken(user, installationId, createdWith) { const sessionToken = "r:" + (0, crypto_1.randomBytes)(64).toString("hex").slice(0, 32); const session = new Parse.Object("_Session", { sessionToken, user, createdWith, installationId, restricted: false, expiresAt: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365), }); await session.save(null, { useMasterKey: true }); return sessionToken; }