Advertisement
Guest User

Untitled

a guest
Apr 17th, 2015
485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function (module) {
  2.     "use strict";
  3.  
  4.     var User = module.parent.require('./user'),
  5.         meta = module.parent.require('./meta'),
  6.         db = module.parent.require('../src/database'),
  7.         passport = module.parent.require('passport'),
  8.         passportLdap = require('passport-ldapauth'),
  9.         fs = module.parent.require('fs'),
  10.         path = module.parent.require('path'),
  11.         nconf = module.parent.require('nconf');
  12.  
  13.     var constants = Object.freeze({
  14.         'name': "LDAP Account",
  15.         'admin': {
  16.             'route': '/plugins/sso-ldap',
  17.             'icon': 'fa-user'
  18.         }
  19.     });
  20.  
  21.     var Ldap = {};
  22.  
  23.     Ldap.init = function (data, callback) {
  24.         function render(req, res, next) {
  25.             res.render('admin/plugins/sso-ldap', {});
  26.         }
  27.  
  28.         data.router.get('/admin/plugins/sso-ldap', data.middleware.admin.buildHeader, render);
  29.         data.router.get('/api/admin/plugins/sso-ldap', render);
  30.  
  31.         //callback();
  32.     };
  33.  
  34.     Ldap.getStrategy = function (strategies, callback) {
  35.         meta.settings.get('sso-ldap', function (err, settings) {
  36.             if (!err && settings['server'] && settings['username'] && settings['secret'] && settings['base'] && settings['filter']) {
  37.                 passport.use(new passportLdap({
  38.                     server: {
  39.                         url: settings['server'],
  40.                         bindDn: settings['username'], //DN konta do autoryzacji
  41.                         bindCredentials: settings['secret'],
  42.                         searchBase: settings['base'],
  43.                         searchFilter: settings['filter']
  44.                     },
  45.                     usernameField: settings['username'],
  46.                     passwordField: settings['secret']
  47.                 }, function (accessToken, refreshToken, profile, callback) {
  48.                     Ldap.login(profile.id, profile.displayName, profile.emails[0].value, function (err, user) {
  49.                         if (err) {
  50.                             return callback(err);
  51.                         }
  52.                         return callback(null, user);
  53.                     });
  54.                 }));
  55.                 strategies.push({
  56.                     name: 'ldapauth',
  57.                     url: '/auth/ldapauth',
  58.                     callbackURL: '/auth/ldapauth/callback',
  59.                     icon: 'fa-user',
  60.                 });
  61.             }
  62.  
  63.             callback(null, strategies);
  64.         });
  65.     };
  66.  
  67.     Ldap.login = function (ldapId, handle, email, picture, callback) {
  68.         Ldap.getUidByLdapId(LdapId, function (err, uid) {
  69.             if (err) {
  70.                 return callback(err);
  71.             }
  72.  
  73.             if (uid !== null) {
  74.                 // Existing User
  75.                 return callback(null, {
  76.                     uid: uid
  77.                 });
  78.             } else {
  79.                 // New User
  80.                 var success = function (uid) {
  81.                     // Save provider-specific information to the user
  82.                     User.setUserField(uid, 'ldapid', ldapId);
  83.                     db.setObjectField('ldapid:uid', ldapId, uid);
  84.                     callback(null, {
  85.                         uid: uid
  86.                     });
  87.                 };
  88.  
  89.                 return User.getUidByEmail(email, function (err, uid) {
  90.                     if (err) {
  91.                         return callback(err);
  92.                     }
  93.  
  94.                     if (!uid) {
  95.                         return User.create({username: handle, email: email}, function (err, uid) {
  96.                             if (err) {
  97.                                 return callback(err);
  98.                             }
  99.  
  100.                             return success(uid);
  101.                         });
  102.                     } else {
  103.                         return success(uid); // Existing account -- merge
  104.                     }
  105.                 });
  106.             }
  107.         });
  108.     };
  109.  
  110.     Ldap.getUidByLdapId = function (ldapid, callback) {
  111.         db.getObjectField('ldapid:uid', ldapid, function (err, uid) {
  112.             if (err) {
  113.                 return callback(err);
  114.             }
  115.             return callback(null, uid);
  116.         });
  117.     };
  118.  
  119.     Ldap.addMenuItem = function (custom_header, callback) {
  120.         custom_header.authentication.push({
  121.             "route": constants.admin.route,
  122.             "icon": constants.admin.icon,
  123.             "name": constants.name
  124.         });
  125.  
  126.         callback(null, custom_header);
  127.     };
  128.  
  129.     module.exports = Ldap;
  130. }(module));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement