@m-ld/gateway
Version:
m-ld gateway for services
85 lines • 8.09 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';
import { version } from '../lib/version.js';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2F0ZXdheVdlYnNpdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9HYXRld2F5V2Vic2l0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQTZCLE1BQU0sU0FBUyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUdqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJNUMsTUFBTSxPQUFPLGNBQWUsU0FBUSxRQUFnQjtJQUlsRCxZQUNXLE9BQWdCLEVBQ3pCLE1BQWMsRUFDRyxRQUFrQixFQUNsQixNQUFjO1FBRS9CLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQy9CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQU4vQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRVIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTmhCLGNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBVXRDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FB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