akamai-nginx
Version:
generate nginx config from akamai property
223 lines (182 loc) • 9.87 kB
JavaScript
'use strict';
var integrationConfig = function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _integrationPapi$rule;
var integrationPapi;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(Object.keys(papiOpts.behavior).length > 0 || Object.keys(papiOpts.criteria).length > 0)) {
_context.next = 3;
break;
}
console.log('returning existing config..');
return _context.abrupt('return', papiOpts);
case 3:
// load template papi json to inject behavior rules to test
integrationPapi = JSON.parse(_fs2.default.readFileSync(_appRootPath2.default + '/test/_integration.template.json', 'utf8'));
// add sample vars
(_integrationPapi$rule = integrationPapi.rules.variables).push.apply(_integrationPapi$rule, [{
name: 'PMUSER_TEST_MATCH',
value: 'exactMatchMe',
description: 'a test variable',
hidden: false,
sensitive: false
}, {
name: 'PMUSER_TEST_ONE_OF',
value: 'aklm',
description: 'a test variable',
hidden: false,
sensitive: false
}, {
name: 'PMUSER_TEST_BETWEEN',
value: '150',
description: 'a test variable',
hidden: false,
sensitive: false
}, {
name: 'PMUSER_TEST_SETVARIABLE',
value: '150',
description: 'placeholder',
hidden: false,
sensitive: false
}]);
_globule2.default.find(_appRootPath2.default + '/test/**/*.papi.json').forEach(function (papiPath) {
var isBehavior = papiPath.indexOf('behavior') > -1;
var papiPathParts = papiPath.split('/');
var papiFilename = papiPathParts[papiPathParts.length - 1];
var papiName = papiFilename.split('.')[0];
var url = papiFilename.replace('.papi.json', '');
var opts = JSON.parse(_fs2.default.readFileSync(papiPath, 'utf8'));
if (isBehavior) {
papiOpts.behavior[papiFilename] = opts;
var behaviors = [];
behaviors.push({
name: papiName,
options: opts
});
// if this is a setVariable behavior, return a header for testing result
if (papiName === 'setVariable') {
behaviors.push({
name: 'modifyOutgoingResponseHeader',
options: {
action: 'MODIFY',
standardModifyHeaderName: 'OTHER',
customHeaderName: variableCheckHeaderName,
newHeaderValue: '{{user.' + opts.variableName + '}}',
avoidDuplicateHeaders: true
}
});
}
integrationPapi.rules.children.push({
name: 'behavior ' + papiName,
children: [],
behaviors: behaviors,
criteria: [{
name: 'path',
options: {
matchOperator: 'MATCHES_ONE_OF',
values: [integrationUrlPathBehavior + url],
matchCaseSensitive: false
}
}],
criteriaMustSatisfy: 'all'
});
} else {
papiOpts.criteria[papiFilename] = opts;
integrationPapi.rules.children.push({
name: 'criteria ' + papiName,
children: [],
behaviors: [{
name: 'modifyOutgoingResponseHeader',
options: {
'action': 'MODIFY',
'standardModifyHeaderName': 'OTHER',
'customHeaderName': checkHeaderName,
'newHeaderValue': checkHeaderValue,
'avoidDuplicateHeaders': true
}
}],
criteria: [{
name: 'path',
options: {
matchOperator: 'MATCHES_ONE_OF',
values: [integrationUrlPathCriteria + url],
matchCaseSensitive: false
}
}, {
name: papiName,
options: opts
}],
criteriaMustSatisfy: 'all'
});
}
});
(0, _akamaiNginx.setLocalConfig)(_appRootPath2.default + '/test/_integration.template.json', // will load modified as integrationPapi
_appRootPath2.default + '/lua/akamai.lua');
_context.next = 9;
return (0, _akamaiNginx.generateConf)(integrationPapi);
case 9:
_context.next = 11;
return timeout(5000);
case 11:
return _context.abrupt('return', papiOpts);
case 12:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function integrationConfig() {
return _ref.apply(this, arguments);
};
}();
var _mocha = require('mocha');
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _appRootPath = require('app-root-path');
var _appRootPath2 = _interopRequireDefault(_appRootPath);
var _globule = require('globule');
var _globule2 = _interopRequireDefault(_globule);
var _akamaiNginx = require('../src/akamai-nginx.js');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
//lazy init
var papiOpts = {};
papiOpts.behavior = {};
papiOpts.criteria = {};
var integrationUrlPrefix = 'https://localhost';
var integrationUrlPathCriteria = '/integration/criteria/';
var integrationUrlPathBehavior = '/integration/behavior/';
var checkHeaderName = 'CRITERIA-TEST';
var checkHeaderValue = 'BEHAVIOR-TRIGGERED';
var variableCheckHeaderName = 'SETVARIABLE-RESULT';
// trigger config build before describe blocks
(0, _mocha.before)(function (done) {
integrationConfig().then(function () {
done();
});
});
// todo use agent in supertest instead
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
function timeout(ms) {
return new Promise(function (resolve) {
return setTimeout(resolve, ms);
});
}
function integrationTestUrl(papiJsonFileName, type, pathSuffix) {
if (!pathSuffix) pathSuffix = '';
if (!type || type !== 'criteria') {
return integrationUrlPathBehavior + papiJsonFileName.replace('.papi.json', '') + pathSuffix + '?nocache=true';
} else {
return integrationUrlPathCriteria + papiJsonFileName.replace('.papi.json', '') + pathSuffix + '?nocache=true';
}
}
module.exports.variableCheckHeaderName = variableCheckHeaderName;
module.exports.checkHeaderName = checkHeaderName;
module.exports.checkHeaderValue = checkHeaderValue;
module.exports.urlPrefix = integrationUrlPrefix;
module.exports.testUrl = integrationTestUrl;
module.exports.config = integrationConfig;