2017-02-26 14:40:33 +01:00
<!DOCTYPE html>
< html lang = "en" dir = "ltr" >
< head >
< meta charset = "utf-8" / >
< title > documentation:2.0:nodehandler< / title >
< meta name = "generator" content = "DokuWiki" / >
2018-06-25 23:17:51 +02:00
< meta name = "robots" content = "index,follow" / >
2017-02-26 14:40:33 +01:00
< meta name = "keywords" content = "documentation,2.0,nodehandler" / >
< link rel = "search" type = "application/opensearchdescription+xml" href = "lib/exe/opensearch.html" title = "LemonLDAP::NG" / >
< link rel = "start" href = "nodehandler.html" / >
< link rel = "contents" href = "nodehandler.html" title = "Sitemap" / >
< link rel = "stylesheet" type = "text/css" href = "lib/exe/css.php.t.bootstrap3.css" / >
<!-- //if:usedebianlibs
< link rel = "stylesheet" type = "text/css" href = "/javascript/bootstrap/css/bootstrap.min.css" / >
//elsif:useexternallibs
< link rel = "stylesheet" type = "text/css" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" > < / script >
//elsif:cssminified
< link rel = "stylesheet" type = "text/css" href = "/static/bwr/bootstrap/dist/css/bootstrap.min.css" / >
//else -->
< link rel = "stylesheet" type = "text/css" href = "/static/bwr/bootstrap/dist/css/bootstrap.css" / >
<!-- //endif -->
< script type = "text/javascript" > / * < ! [ C D A T A [ * / v a r N S = ' d o c u m e n t a t i o n : 2 . 0 ' ; v a r J S I N F O = { " i d " : " d o c u m e n t a t i o n : 2 . 0 : n o d e h a n d l e r " , " n a m e s p a c e " : " d o c u m e n t a t i o n : 2 . 0 " } ;
/*!]]>*/< / script >
< script type = "text/javascript" charset = "utf-8" src = "lib/exe/js.php.t.bootstrap3.js" > < / script >
<!-- //if:usedebianlibs
< script type = "text/javascript" src = "/javascript/jquery/jquery.min.js" > < / script >
//elsif:useexternallibs
< script type = "text/javascript" src = "http://code.jquery.com/jquery-2.2.0.min.js" > < / script >
//elsif:jsminified
< script type = "text/javascript" src = "/static/bwr/jquery/dist/jquery.min.js" > < / script >
//else -->
< script type = "text/javascript" src = "/static/bwr/jquery/dist/jquery.js" > < / script >
<!-- //endif -->
<!-- //if:usedebianlibs
< script type = "text/javascript" src = "/javascript/jquery-ui/jquery-ui.min.js" > < / script >
//elsif:useexternallibs
< script type = "text/javascript" src = "http://code.jquery.com/ui/1.10.4/jquery-ui.min.js" > < / script >
//elsif:jsminified
2018-03-08 13:29:31 +01:00
< script type = "text/javascript" src = "/static/bwr/jquery-ui/jquery-ui.min.js" > < / script >
2017-02-26 14:40:33 +01:00
//else -->
2018-03-08 13:29:31 +01:00
< script type = "text/javascript" src = "/static/bwr/jquery-ui/jquery-ui.js" > < / script >
2017-02-26 14:40:33 +01:00
<!-- //endif -->
< / head >
< body >
< div class = "dokuwiki export container" >
2018-04-23 14:58:36 +02:00
<!-- TOC START -->
< div id = "dw__toc" >
< h3 class = "toggle" > Table of Contents< / h3 >
< div >
< ul class = "toc" >
< li class = "level1" > < div class = "li" > < a href = "#examples" > Examples< / a > < / div >
< ul class = "toc" >
< li class = "level2" > < div class = "li" > < a href = "#use_it_as_fastcgi_server_application_protection_only" > Use it as FastCGI server (application protection only)< / a > < / div >
< ul class = "toc" >
< li class = "level3" > < div class = "li" > < a href = "#fastcgi_server" > FastCGI server< / a > < / div > < / li >
< li class = "level3" > < div class = "li" > < a href = "#nginx_configuration" > Nginx configuration< / a > < / div > < / li >
< / ul >
< / li >
< li class = "level2" > < div class = "li" > < a href = "#use_it_to_protect_an_express_app" > Use it to protect an express app< / a > < / div > < / li >
< / ul > < / li >
< / ul >
< / div >
< / div >
<!-- TOC END -->
2017-02-26 14:40:33 +01:00
< h1 class = "sectionedit1" id = "nodejs_handler" > Node.js handler< / h1 >
< div class = "level1" >
< p >
2018-04-23 14:58:36 +02:00
Since version 2.0, a beta Node.js handler is available on < a href = "https://github.com/LemonLDAPNG/node-lemonldap-ng-handler" class = "urlextern" title = "https://github.com/LemonLDAPNG/node-lemonldap-ng-handler" rel = "nofollow" > GitHub< / a > .
2017-02-26 14:40:33 +01:00
< / p >
< p >
2018-04-23 14:58:36 +02:00
Up-to-date documentation is available on GitHub.
2017-02-26 14:40:33 +01:00
< / p >
< / div >
2018-04-23 14:58:36 +02:00
<!-- EDIT1 SECTION "Node.js handler" [1 - 209] -->
< h2 class = "sectionedit2" id = "examples" > Examples< / h2 >
< div class = "level2" >
< p >
< strong > Important things< / strong > :
< / p >
< ul >
< li class = "level1" > < div class = "li" > Rules and headers must be written in javascript for these hosts < em > (example < code > $uid eq “dwho”< / code > becomes < code > $uid === “dwho”< / code > )< / em > < / div >
< / li >
2018-05-15 21:50:12 +02:00
< li class = "level1" > < div class = "li" > Multi-lines are not supported in lemonldap-ng.ini< / div >
< / li >
2018-05-17 21:42:46 +02:00
< li class = "level1" > < div class = "li" > Virtualhosts handled by node-lemonldap-ng-handler must be explicitly declared in your < code > lemonldap-ng.ini< / code > file in < code > [node-handler]< / code > section < em > (< strong > NB< / strong > : section < code > [handler]< / code > isn' t used by node handler)< / em > :< / div >
2018-04-23 14:58:36 +02:00
< / li >
< / ul >
< pre class = "code ini" > < span class = "re0" > < span class = "br0" > [ < / span > node-handler< span class = "br0" > ] < / span > < / span >
< span class = "re1" > nodeVhosts< / span > < span class = "sy0" > =< / span > < span class = "re2" > test.example.com, test2.example.com< / span > < / pre >
< / div >
2018-05-17 21:42:46 +02:00
<!-- EDIT2 SECTION "Examples" [210 - 731] -->
2018-04-23 14:58:36 +02:00
< h3 class = "sectionedit3" id = "use_it_as_fastcgi_server_application_protection_only" > Use it as FastCGI server (application protection only)< / h3 >
< div class = "level3" >
< / div >
< h4 id = "fastcgi_server" > FastCGI server< / h4 >
< div class = "level4" >
< dl class = "file" >
< dt > < a href = "_export/code/documentation/2.0/nodehandler/codeblock.1.code" title = "Download Snippet" class = "mediafile mf_js" > server.js< / a > < / dt >
< dd > < pre class = "code file javascript" > < span class = "kw1" > var< / span > handler < span class = "sy0" > =< / span > require< span class = "br0" > ( < / span > < span class = "st0" > 'node-lemonldap-ng-handler'< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
handler.< span class = "me1" > init< / span > < span class = "br0" > ( < / span > < span class = "br0" > { < / span >
configStorage< span class = "sy0" > :< / span > < span class = "br0" > { < / span >
< span class = "st0" > " confFile" < / span > < span class = "sy0" > :< / span > < span class = "st0" > " /path/to/lemonldap-ng.ini" < / span >
< span class = "br0" > } < / span >
< span class = "br0" > } < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
handler.< span class = "me1" > nginxServer< / span > < span class = "br0" > ( < / span > < span class = "br0" > { < / span >
< span class = "st0" > " mode" < / span > < span class = "sy0" > :< / span > < span class = "st0" > " fcgi" < / span > < span class = "sy0" > ,< / span > < span class = "co1" > // or " http" , default: fcgi< / span >
< span class = "st0" > " port" < / span > < span class = "sy0" > :< / span > < span class = "nu0" > 9090< / span > < span class = "sy0" > ,< / span > < span class = "co1" > // default value< / span >
< span class = "st0" > " ip" < / span > < span class = "sy0" > :< / span > < span class = "st0" > 'localhost'< / span > < span class = "co1" > // default value< / span >
< span class = "br0" > } < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span > < / pre >
< / dd > < / dl >
< / div >
< h4 id = "nginx_configuration" > Nginx configuration< / h4 >
< div class = "level4" >
< dl class = "file" >
< dt > < a href = "_export/code/documentation/2.0/nodehandler/codeblock.2.code" title = "Download Snippet" class = "mediafile mf_conf" > nginx.conf< / a > < / dt >
< dd > < pre class = "code file nginx" > server {
#...
# Internal authentication request
location = /lmauth {
internal;
include /etc/nginx/fastcgi_params;
fastcgi_pass localhost:9090;
# Drop post datas
fastcgi_pass_request_body off;
fastcgi_param CONTENT_LENGTH " " ;
# Keep original hostname
fastcgi_param HOST $http_host;
2018-06-07 13:48:21 +02:00
# Keep original request (LLNG server will receive /lmauth)
2018-04-23 14:58:36 +02:00
fastcgi_param X_ORIGINAL_URI $request_uri;
}
# Client requests
location / {
auth_request /lmauth;
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;
}
}< / pre >
< / dd > < / dl >
< / div >
2018-06-07 13:48:21 +02:00
<!-- EDIT3 SECTION "Use it as FastCGI server (application protection only)" [732 - 1912] -->
2018-04-23 14:58:36 +02:00
< h3 class = "sectionedit4" id = "use_it_to_protect_an_express_app" > Use it to protect an express app< / h3 >
< div class = "level3" >
< dl class = "file" >
< dt > < a href = "_export/code/documentation/2.0/nodehandler/codeblock.3.code" title = "Download Snippet" class = "mediafile mf_js" > app.js< / a > < / dt >
< dd > < pre class = "code file javascript" > < span class = "co1" > // Variables< / span >
< span class = "kw1" > var< / span > express < span class = "sy0" > =< / span > require< span class = "br0" > ( < / span > < span class = "st0" > 'express'< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "kw1" > var< / span > app < span class = "sy0" > =< / span > express< span class = "br0" > ( < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "kw1" > var< / span > handler < span class = "sy0" > =< / span > require< span class = "br0" > ( < / span > < span class = "st0" > 'node-lemonldap-ng-handler'< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "co1" > // initialize handler (optional args)< / span >
handler.< span class = "me1" > init< / span > < span class = "br0" > ( < / span > < span class = "br0" > { < / span >
configStorage< span class = "sy0" > :< / span > < span class = "br0" > { < / span >
< span class = "st0" > " confFile" < / span > < span class = "sy0" > :< / span > < span class = "st0" > " test/lemonldap-ng.ini" < / span >
< span class = "br0" > } < / span >
< span class = "br0" > } < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "co1" > // and load it< / span >
app.< span class = "me1" > use< / span > < span class = "br0" > ( < / span > handler.< span class = "me1" > run< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "co1" > // Then simply use your express app< / span >
app.< span class = "kw1" > get< / span > < span class = "br0" > ( < / span > < span class = "st0" > '/'< / span > < span class = "sy0" > ,< / span > < span class = "kw1" > function< / span > < span class = "br0" > ( < / span > req< span class = "sy0" > ,< / span > res< span class = "br0" > ) < / span > < span class = "br0" > { < / span >
< span class = "kw1" > return< / span > res.< span class = "me1" > send< / span > < span class = "br0" > ( < / span > < span class = "st0" > 'Hello '< / span > < span class = "sy0" > +< / span > req.< span class = "me1" > headers< / span > < span class = "br0" > [ < / span > < span class = "st0" > 'Auth-User'< / span > < span class = "br0" > ] < / span > < span class = "sy0" > +< / span > < span class = "st0" > ' !'< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "br0" > } < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
app.< span class = "me1" > listen< / span > < span class = "br0" > ( < / span > < span class = "nu0" > 3000< / span > < span class = "sy0" > ,< / span > < span class = "kw1" > function< / span > < span class = "br0" > ( < / span > < span class = "br0" > ) < / span > < span class = "br0" > { < / span >
< span class = "kw1" > return< / span > console.< span class = "me1" > log< / span > < span class = "br0" > ( < / span > < span class = "st0" > 'Example app listening on port 3000!'< / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span >
< span class = "br0" > } < / span > < span class = "br0" > ) < / span > < span class = "sy0" > ;< / span > < / pre >
< / dd > < / dl >
2017-02-26 14:40:33 +01:00
< / div >
2018-06-07 13:48:21 +02:00
<!-- EDIT4 SECTION "Use it to protect an express app" [1913 - ] --> < / div >
2017-02-26 14:40:33 +01:00
< / body >
< / html >