Node.js handler

Since version 2.0, a beta Node.js handler is available on GitHub and NPMJS.

Up-to-date documentation is available on GitHub.

Examples

Important things:

  • The above examples below are written for version 0.6.0 in CommonJS but Node.js handler can be used in ES7 and/or Typescript code

  • Rules and headers must be written in javascript for these hosts (example $uid eq "dwho" becomes $uid === "dwho")

  • Virtualhosts handled by node-lemonldap-ng-handler must be explicitly declared in your lemonldap-ng.ini file in [node-handler] section

[node-handler]

nodeVhosts = test.example.com, test2.example.com

Use it as FastCGI server (application protection only)

FastCGI server

var handler = require('lemonldap-ng-handler');

handler.init({
  configStorage: {
    "confFile": "/path/to/lemonldap-ng.ini"
  }
}).then( () => {

  handler.nginxServer({
    "mode": "fcgi",   // or "http", default: fcgi
    "port": 9090,     // default value
    "ip": 'localhost' // default value
  });

});

Nginx configuration

server {
  #...
  # Internal authentication request
  location = /lmauth {
    internal;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass localhost:9090;

    # Drop post data
    fastcgi_pass_request_body  off;
    fastcgi_param CONTENT_LENGTH "";

    # Keep original hostname
    fastcgi_param HOST $http_host;

    # Keep original request (LLNG server will receive /lmauth)
    fastcgi_param X_ORIGINAL_URI  $original_uri;
  }

  # Client requests
  location / {
    auth_request /lmauth;
    set $original_uri $uri$is_args$args;
    auth_request_set $lmremote_user $upstream_http_lm_remote_user;
    auth_request_set $lmlocation $upstream_http_location;
    error_page 401 $lmlocation;
    include conf/nginx-lua-headers.conf;
  }
}

Use it to protect an express app

// Variables
var express = require('express');
var app = express();
var handler = require('lemonldap-ng-handler');

// initialize handler (optional args)
handler.init({
  configStorage: {
    "confFile":"test/lemonldap-ng.ini"
  }
}).then( () => {

  // and load it
  app.use(handler.run);

  // Then simply use your express app
  app.get('/', function(req, res) {
    return res.send('Hello ' + req.headers['Auth-User'] + ' !');
  });
  app.listen(3000, function() {
    return console.log('Example app listening on port 3000!');
  });
});