UNPKG

sample-pilet-service

Version:

Piral: Sample pilet feed service.

127 lines (123 loc) 3.97 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAuthRequest = exports.getAuthStatus = exports.finishLogin = exports.getLoginPage = void 0; const db_1 = require("../db"); function renderPage(content) { return `<!doctype html> <meta charset=utf8> <title>Authorize Login</title> <style> html, body, form, div { margin: 0; padding: 0; height: 100%; width: 100%; } form, div { display: flex; align-items: center; justify-content: center; } button, p { font-family: gill sans, sans-serif; font-size: 1.5rem; } button { padding: 0.5rem 2rem; background: #080; color: white; border: 0; border-radius: 7px; cursor: pointer; } button:hover { background: #0b0; } </style> ${content}`; } const getLoginPage = () => (_, res) => __awaiter(void 0, void 0, void 0, function* () { return res.send(renderPage(` <form method=POST> <button>Authorize</button> </form> `)); }); exports.getLoginPage = getLoginPage; const finishLogin = () => (req, res) => __awaiter(void 0, void 0, void 0, function* () { const { id } = req.query; const activeRequest = (0, db_1.getActiveAuthRequest)(id); activeRequest.status = 'done'; activeRequest.notifiers.forEach((n) => n(true)); activeRequest.notifiers.splice(0, activeRequest.notifiers.length); return res.send(renderPage(` <div> <p> Authorized. You can close this page now. </p> </div> `)); }); exports.finishLogin = finishLogin; const getAuthStatus = (apiKeys) => (req, res) => __awaiter(void 0, void 0, void 0, function* () { const { id } = req.query; const activeRequest = (0, db_1.getActiveAuthRequest)(id); if (activeRequest.status === 'done') { return res.json({ token: apiKeys[0], mode: 'basic', }); } return yield new Promise((resolve) => { activeRequest.notifiers.push((success) => { if (success) { res.status(200).json({ token: apiKeys[0], mode: 'basic', }); } else { res.status(400).json({ message: 'The request expired.', }); } resolve(); }); }); }); exports.getAuthStatus = getAuthStatus; const createAuthRequest = (authUrl, loginUrl) => (req, res) => __awaiter(void 0, void 0, void 0, function* () { const { clientId, clientName, description } = req.body; const current = new Date(); const diff = 30 * 60000; const expires = new Date(current.getTime() + diff); const id = Math.random().toString(26).substring(2); const handle = setTimeout(() => { remove(); clearTimeout(handle); }, diff); const remove = (0, db_1.appendAuthRequest)({ id, clientId, clientName, description, status: 'new', notifiers: [], }); return res.json({ loginUrl: `${loginUrl}?id=${id}`, callbackUrl: `${authUrl}?id=${id}`, expires, }); }); exports.createAuthRequest = createAuthRequest; //# sourceMappingURL=auth.js.map