Merge branch 'master' of https://github.com/srinandan/microgateway-plugins
diff --git a/cloud-foundry-route-service/index.js b/cloud-foundry-route-service/index.js new file mode 100644 index 0000000..991f172 --- /dev/null +++ b/cloud-foundry-route-service/index.js
@@ -0,0 +1,64 @@ +'use strict' +/* + * Copyright 2016 Apigee Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/** + * Changes target host/path according to Cloud Foundry "magic header". + * + * @module + */ + +function retarget (req, res, next) { + const cfurl = req.headers['x-cf-forwarded-url'] + if (! cfurl) { + next() + return + } + + let h = cfurl.indexOf('://') + if (h >= 0) { + h += 3 + } + else { + h = 0 + } + + let p = cfurl.indexOf('/', h) + if (p < 0) { + p = cfurl.length + } + + const cfHostname = cfurl.slice(h, p) + const cfPath = cfurl.slice(p) || '/' + + // console.log('x-cf-forwarded-url', cfurl, h, p) + // console.log(req.targetHostname, '->', cfHostname) + // console.log(req.targetPath, '->', cfPath) + + if (cfHostname) { + req.targetHostname = cfHostname + } + req.targetPath = cfPath + + next() +} + +module.exports.init = function (config, logger, stats) { + return { + onrequest: retarget + } +}
diff --git a/cloud-foundry-route-service/package.json b/cloud-foundry-route-service/package.json new file mode 100644 index 0000000..58a30b0 --- /dev/null +++ b/cloud-foundry-route-service/package.json
@@ -0,0 +1,11 @@ +{ + "name": "cloud-foundry-route-service", + "version": "1.0.0", + "description": "Handles 'x-cf-forwarded-url' header for Cloud Foundry route-service", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "Apache-2.0" +}
diff --git a/index.js b/index.js index fd4f20a..fcf02d8 100644 --- a/index.js +++ b/index.js
@@ -13,5 +13,6 @@ accesscontrol:require('./accesscontrol'), eurekaclient:require('./eurekaclient') json2xml: require('./json2xml'), - healthcheck: require('./healthcheck') + healthcheck: require('./healthcheck'), + 'cloud-foundry-route-service': require('./cloud-foundry-route-service') }