@resourcefulhumans/rheactor-aws-lambda
Version:
Core components for RESTful AWS lambda endpoints
78 lines (67 loc) • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.header = header;
exports.checkContentType = checkContentType;
exports.getOptionalToken = getOptionalToken;
var _jsonwebtoken = require('jsonwebtoken');
var _jsonwebtoken2 = _interopRequireDefault(_jsonwebtoken);
var _rheactorModels = require('rheactor-models');
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _tcomb = require('tcomb');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @param {Array<String>} headers
* @param {String} header
* @returns {String}
*/
function header(headers, header) {
if (!headers || headers === null) return false;
var lowerCaseHeaders = {};
for (var k in headers) {
lowerCaseHeaders[k.toLowerCase()] = headers[k];
}
return lowerCaseHeaders[header.toLowerCase()];
}
/**
* @param {{headers: {Object}, path: {String}, httpMethod: {String}, body: {String}}} event
* @param {String} expectedContentType
* @returns {boolean}
*/
function checkContentType(event, expectedContentType) {
(0, _tcomb.String)(expectedContentType, ['checkContentType', 'expectedContentType:String']);
var ctype = header(event.headers, 'Content-Type');
if (!ctype) {
throw new Error('Must provide Content-Type.');
}
var splitted = ctype.split(';', 2);
var type = splitted[0];
if (type.toLowerCase() !== expectedContentType.toLowerCase()) {
throw new Error('Unsupported content type: "' + type + '".');
}
if (splitted.length > 1) {
var match = splitted[1].match(/charset=([^ ]+)/);
if (match[1] && match[1].toLowerCase() !== 'utf-8') throw new Error('Unsupported encoding: "' + match[1] + '", only UTF-8 is supported.');
}
return true;
}
/**
* @param {{headers: {Object}, path: {String}, httpMethod: {String}, body: {String}}} event
* @param {String} secretOrPrivateKey
* @returns {boolean}
*/
function getOptionalToken(event, secretOrPrivateKey) {
(0, _tcomb.String)(secretOrPrivateKey, ['getOptionalToken', 'secretOrPrivateKey:String']);
var authorization = header(event.headers, 'Authorization');
if (!authorization) return _bluebird2.default.resolve();
if (!/^Bearer /.test(authorization)) throw new Error('Must provide bearer authorization!');
var token = authorization.match(/^Bearer (.+)/)[1];
return new _bluebird2.default(function (resolve, reject) {
return _jsonwebtoken2.default.verify(token, secretOrPrivateKey, function (error) {
if (error) return reject(error);
return resolve(new _rheactorModels.JsonWebToken(token));
});
});
}