UNPKG

cognito-srp

Version:

Secure Remote Password protocol implementation compatible with Amazon Cognito.

65 lines (64 loc) 2.55 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const express = require("express"); const cors = require("cors"); const bodyParser = require("body-parser"); const handler_builder_1 = require("handler-builder"); const getPort = require("get-port"); const matchAwsJson = (request) => { const type = request.header('content-type'); return type === 'application/json' || /application\/x-amz-json-.*/.test(type); }; class AwsEndpoint { constructor(service, handlers, app) { this.service = service; if (!app) { app = express(); } app.use(cors()); app.use(bodyParser.json({ type: matchAwsJson })); app.options('/', cors()); const builder = this.getHandlerBuilder(); const handler = builder.build(handlers); app.post('/', (request, response, next) => { handler(request, response).then(null, next); }); this.app = app; } start(port) { return __awaiter(this, void 0, void 0, function* () { if (!port) { port = yield getPort(); } this.server = yield this.app.listen(port); return port; }); } stop() { this.server.close(); } getHandlerBuilder() { return new handler_builder_1.default((request) => { const [service, action] = request.header('x-amz-target').split('.'); if (service !== this.service) { throw new Error(`expected target service to be ${this.service}, not ${service}.`); } return action; }, (request, response) => { response.status(400).send({ __type: 'InvalidAction', message: 'Cannot process requested action: ' + request.header('x-amz-target') }); return Promise.resolve(); }); } } exports.AwsEndpoint = AwsEndpoint;