sample-pilet-service
Version:
Piral: Sample pilet feed service.
127 lines (123 loc) • 3.97 kB
JavaScript
;
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