Skip to content

A proxy for OpenStack Keystone service catalog endpoints built on top of http-proxy.

License

Notifications You must be signed in to change notification settings

Hopebaytech/proxy-keystone

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proxy-Keystone

A proxy for OpenStack Keystone service catalog endpoints built on top of http-proxy.

Installation

npm install proxy-keystone

Check out the live demo, source code here, to see an express app configured for authentication with the Rackspace Cloud Identity Service and Passport-Keystone.

Documentation

var express = require('express');
var app = express();
var ProxyKeystone = require('proxy-keystone');
var proxyKeystone = new ProxyKeystone();

// proxy-keystone requires you to bring your own authentication middleware
// it should set req.user with a token and service catalog
app.use(function(req, res, next) {
  req.user = {
    token: '12345678910',
    serviceCatalog:[{
      name:"swift",
      endpoints:[{
        "region":"RegionOne",
        "internalURL":"http://127.0.0.1:8080/v1/AUTH_1",
        "publicURL":"http://swift.publicinternets.com/v1/AUTH_1"
      }]
    }]
  };
  next();
});

app.all('/proxy/*', proxyKeystone.middleware);

var server = app.listen(3000, function() {
  console.log('Listening on port %d', server.address().port);
});

Custom Usage

Sometimes the req object is organized differently. The options.token and options.catalog values are used to read keys off the request object. In the following example the user identity is located at req.current_user and a custom user agent is supplied.

// example middleware to set user on req object
app.use(function(req, res, next) {
  req.current_user = {
    key: '12345678910',
    catalog:[{
      name:"swift",
      endpoints:[{
        "region":"RegionOne",
        "internalURL":"http://127.0.0.1:8080/v1/AUTH_1",
        "publicURL":"http://swift.publicinternets.com/v1/AUTH_1"
      }]
    }]
  };
  next();
});

var ProxyKeystone = require('proxy-keystone');
var proxyKeystone = new ProxyKeystone({
  token: 'current_user.key', // req.current_user.key
  catalog: 'current_user.catalog', // req.current_user.catalog
  userAgent: 'Custom Openstack Dashboard' // forwarded in proxy headers
});

app.all('/proxy/*', proxyKeystone.middleware);

Listening for proxy events

  • proxyStart - This event is emitted when the proxy starts.
  • proxyEnd - This event is emitted if the request to the target completed.
  • proxyError - The error event is emitted if the request to the target fail.
proxyKeystone.on('proxyStart',function(req, res, target){
  console.log(req.url);
});

proxyKeystone.on('proxyEnd',function(req, res, proxyRes){
  console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2));
});

proxyKeystone.on('proxyError',function(err){
  console.log(err.message);
});

About

A proxy for OpenStack Keystone service catalog endpoints built on top of http-proxy.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%