akamai-nginx
Version:
generate nginx config from akamai property
144 lines (109 loc) • 7.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.BehaviorSetVariable = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _behavior = require('../behavior.js');
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var BehaviorSetVariable = exports.BehaviorSetVariable = function (_Behavior) {
_inherits(BehaviorSetVariable, _Behavior);
function BehaviorSetVariable(options, valueMap) {
_classCallCheck(this, BehaviorSetVariable);
var _this = _possibleConstructorReturn(this, (BehaviorSetVariable.__proto__ || Object.getPrototypeOf(BehaviorSetVariable)).call(this));
_this.options = options;
_this.valueMap = valueMap;
return _this;
}
_createClass(BehaviorSetVariable, [{
key: 'process',
value: function process() {
return ['varMap["' + this.options.variableName + '"] = function()', '\tlocal function setVar()'].concat(_toConsumableArray(this.setVariableLua(this.options).map(function (e) {
return '\t\t' + e;
})), ['\tend', '\treturn setVar()', 'end']);
}
}, {
key: 'setVariableLua',
value: function setVariableLua(options) {
var lua = ['local result'];
if (options.valueSource === 'EXPRESSION') {
lua.push.apply(lua, ['-- EXPRESSION', 'result = swapVars("' + options.variableValue + '")']);
}
if (options.valueSource === 'GENERATE') {
lua.push('-- GENERATE: ' + options.generator);
lua.push.apply(lua, _toConsumableArray(this.switchByVal({
'RAND': ['math.randomseed(os.time())', 'result = math.random(' + options.minRandomNumber + ', ' + options.maxRandomNumber + ')']
}, '-- not supported yet.', options.generator)));
}
if (options.valueSource === 'EXTRACT') {
lua.push('-- EXTRACT: ' + options.extractLocation);
lua.push.apply(lua, [this.switchByVal({
'COOKIE': 'result = cs(ngx.var["cookie_' + options.cookieName + '"])',
'CLIENT_REQUEST_HEADER': 'result = cs(ngx.req.get_headers()["' + options.headerName + '"])',
'QUERY_STRING': 'result = cs(ngx.req.get_uri_args()["' + options.queryParameterName + '"])',
'PATH_COMPONENT_OFFSET': 'result = cs(aka_request_uri_parts[' + options.pathComponentOffset + '])'
}, '-- not supported yet.', options.extractLocation)]);
}
if (options.transform === 'NONE') {
lua.push('return result');
} else {
lua.push.apply(lua, ['-- TRANSFORM: ' + options.transform, 'local options = { }']);
Object.keys(options).forEach(function (key) {
lua.push('options["' + key + '"] = "' + options[key] + '"');
});
lua.push('return transformVariable(result, options)');
}
return lua;
}
}]);
return BehaviorSetVariable;
}(_behavior.Behavior);
_behavior.Behavior.register('setVariable', BehaviorSetVariable);
/**
* Option breakdown condensed from https://developer.akamai.com/api/luna/papi/behaviors.html#setvariable
* ----------------------------
{
"variableName": "PMUSER_EXAMPLE_VAR_NAME",
"valueSource" = GENERATE
"generator":
RAND + use "minRandomNumber", "maxRandomNumber"
HEXRAND + use "numberOfBytes"
valueSource = EXTRACT
"extractLocation":
COOKIE + use "cookieName"
CLIENT_REQUEST_HEADER + use "headerName"
QUERY_STRING + use "queryParameterName"
PATH_COMPONENT_OFFSET + use "pathComponentOffset"
CLIENT_CERTIFICATE=notsupported,
EDGESCAPE=notsupported,
PATH_COMPONENT_NAME=notsupported,
PATH_PARAMETER=notsupported,
valueSource = EXPRESSION
"variableValue": "abc {{builtin.AK_HOST}} def"
transform: common to all valueSource results
NONE=do nothing
ADD, SUBTRACT, MINUS, MULTIPLY, DIVIDE, MODULO + use "operandOne"
LOWER, UPPER, STRING_LENGTH, REMOVE_WHITESPACE, TRIM
SUBSTITUTE + use "regex", "replacement", "caseSensitive", "globalSubstitution"
"replacement" supports group capture replacement via $1, $2 … $n
SUBSTRING + use "startIndex", "endIndex"
STRING_INDEX + use "subString"
URL_ENCODE + use "exceptChars", "forceChars"
HEX_ENCODE, HEX_DECODE, XML_ENCODE, XML_DECODE, URL_DECODE, URL_DECODE_UNI, NORMALIZE_PATH_WIN
BITWISE_AND, BITWISE_OR, BITWISE_XOR + use "operandOne"
BITWISE_NOT
DECIMAL_TO_HEX, HEX_TO_DECIMAL
DECRYPT/ENCRYPT, + use "algorithm", "encryptionKey", "initializationVector",
"encryptionMode(CBC/ECB", "nonce", "prependBytes"
(ALG_AES128 or ALG_AES256 (Advanced Encryption Standard, 128 or 256 bits), or ALG_3DES)
BASE_64_ENCODE/BASE_64_DECODE
SHA_1, SHA_256, MD5, a base64-encoded HMAC key, or a simple HASH
HMAC + use "hmacKey", "hmacAlgorithm" (MD5, SHA1, or SHA256) - HASH + use "min", "max"
UTC_SECONDS (epoch time), EPOCH_TO_STRING, and STRING_TO_EPOCH + use "formatString"
%m/%d/%y as specified by strftime
NETMASK + use "ipVersion" (IPV4 or IPV6), "ipv6Prefix", "ipv4Prefix"
EXTRACT_PARAM + use "paramName", "separator"
} **/