@m-ld/gateway
Version:
m-ld gateway for services
86 lines • 8.19 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { EndPoint, get, head, post } from './EndPoint.js';
import { plugins } from 'restify';
import { AccountOwnedId, resolveGateway, validate } from '../lib/index.js';
import { as } from '../lib/validate.js';
import { pipeline } from 'stream/promises';
import { MethodNotAllowedError, toHttpError } from './errors.js';
// @ts-ignore
import { version } from '../../package.json' assert { type: 'json' };
export class GatewayWebsite extends EndPoint {
constructor(gateway, server, notifier, liquid) {
super(server, '', ({ useFor }) => useFor('post', plugins.bodyParser()));
this.gateway = gateway;
this.notifier = notifier;
this.liquid = liquid;
this.startTime = new Date();
this.pageVars = Promise.resolve(resolveGateway(gateway.config.gateway)).then(url => ({
origin: url.origin,
domain: gateway.domainName,
root: gateway.rootAccountName,
version
}));
}
async getPage(req, res) {
if (req.path() === '/activate')
throw new MethodNotAllowedError;
await this.renderHtml(res, req.path().slice(1) || 'index', await this.pageVars);
}
async headPage(req, res) {
if (req.path() === '/activate')
throw new MethodNotAllowedError;
// This will throw ENOENT if not found
await this.liquid.parseFile(req.path().slice(1) || 'index');
this.setHtmlHeaders(res).send();
}
async activation(req, res) {
const { account, email, code, jwe } = req.body;
const pageVars = { account, email, version };
try {
if (email) {
AccountOwnedId.checkComponentId(account);
// Requesting activation code by email
validate(email, as.string().email());
const { jwe, code } = await this.gateway.activation(account, email);
await this.notifier.sendActivationCode(email, code);
pageVars.jwe = jwe;
}
else {
const { user: account, email } = this.gateway.verifyActivation(code, jwe);
const acc = await this.gateway.account(account, true);
const { auth: { key } } = await acc.generateKey({ email });
pageVars.key = key;
}
}
catch (e) {
pageVars.error = toHttpError(e).toJSON();
}
await this.renderHtml(res, 'activate', pageVars);
}
async renderHtml(res, file, pageVars) {
// This will throw ENOENT if not found
const html = await this.liquid.renderFileToNodeStream(file, pageVars);
await pipeline(html, this.setHtmlHeaders(res));
}
setHtmlHeaders(res) {
res.header('content-type', 'text/html');
res.header('transfer-encoding', 'chunked');
res.header('last-modified', this.startTime);
return res;
}
}
__decorate([
get('/*')
], GatewayWebsite.prototype, "getPage", null);
__decorate([
head('/*')
], GatewayWebsite.prototype, "headPage", null);
__decorate([
post('/activate')
], GatewayWebsite.prototype, "activation", null);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZXdheVdlYnNpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC9HYXRld2F5V2Vic2l0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQTZCLE1BQU0sU0FBUyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdqRSxhQUFhO0FBQ2IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBSXJFLE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBZ0I7SUFJbEQsWUFDVyxPQUFnQixFQUN6QixNQUFjLEVBQ0csUUFBa0IsRUFDbEIsTUFBYztRQUUvQixLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUMvQixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFOL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUVSLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU5oQixjQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQVV0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMs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