aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/auth.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/auth.js')
-rw-r--r--src/auth.js66
1 files changed, 23 insertions, 43 deletions
diff --git a/src/auth.js b/src/auth.js
index 96f3045..2532688 100644
--- a/src/auth.js
+++ b/src/auth.js
@@ -1,12 +1,10 @@
1'use strict'; 1'use strict';
2 2
3var passport = require('passport'), 3var path = require('path'),
4 path = require('path'),
5 safe = require('safetydance'), 4 safe = require('safetydance'),
6 fs = require('fs'), 5 fs = require('fs'),
7 bcrypt = require('bcryptjs'), 6 bcrypt = require('bcryptjs'),
8 uuid = require('uuid/v4'), 7 uuid = require('uuid/v4'),
9 BearerStrategy = require('passport-http-bearer').Strategy,
10 ldapjs = require('ldapjs'), 8 ldapjs = require('ldapjs'),
11 HttpError = require('connect-lastmile').HttpError, 9 HttpError = require('connect-lastmile').HttpError,
12 HttpSuccess = require('connect-lastmile').HttpSuccess, 10 HttpSuccess = require('connect-lastmile').HttpSuccess,
@@ -56,27 +54,6 @@ try {
56 // start with empty token store 54 // start with empty token store
57} 55}
58 56
59function issueAccessToken() {
60 return function (req, res, next) {
61 var accessToken = uuid();
62
63 tokenStore.set(accessToken, req.user, function (error) {
64 if (error) return next(new HttpError(500, error));
65 next(new HttpSuccess(201, { accessToken: accessToken, user: req.user }));
66 });
67 };
68}
69
70passport.serializeUser(function (user, done) {
71 console.log('serializeUser', user);
72 done(null, user.uid);
73});
74
75passport.deserializeUser(function (id, done) {
76 console.log('deserializeUser', id);
77 done(null, { uid: id });
78});
79
80function verifyUser(username, password, callback) { 57function verifyUser(username, password, callback) {
81 if (AUTH_METHOD === 'ldap') { 58 if (AUTH_METHOD === 'ldap') {
82 var ldapClient = ldapjs.createClient({ url: process.env.CLOUDRON_LDAP_URL }); 59 var ldapClient = ldapjs.createClient({ url: process.env.CLOUDRON_LDAP_URL });
@@ -121,34 +98,37 @@ function verifyUser(username, password, callback) {
121 } 98 }
122} 99}
123 100
124exports.login = [ 101exports.login = function (req, res, next) {
125 function (req, res, next) { 102 verifyUser(req.body.username, req.body.password, function (error, user) {
126 verifyUser(req.body.username, req.body.password, function (error, user) { 103 if (error) return next(new HttpError(401, 'Invalid credentials'));
127 if (error) return next(new HttpError(401, 'Invalid credentials')); 104
105 var accessToken = uuid();
128 106
129 req.user = user; 107 tokenStore.set(accessToken, user, function (error) {
108 if (error) return next(new HttpError(500, error));
130 109
131 next(); 110 next(new HttpSuccess(201, { accessToken: accessToken, user: user }));
132 }); 111 });
133 }, 112 });
134 issueAccessToken() 113};
135];
136 114
137exports.verify = passport.authenticate('bearer', { session: false }); 115exports.verify = function (req, res, next) {
116 var accessToken = req.query.access_token || req.body.accessToken;
138 117
139passport.use(new BearerStrategy(function (token, done) { 118 tokenStore.get(accessToken, function (error, user) {
140 tokenStore.get(token, function (error, result) { 119 if (error) return next(new HttpError(401, 'Invalid Access Token'));
141 if (error) { 120
142 console.error(error); 121 req.user = user;
143 return done(null, false);
144 }
145 122
146 done(null, result, { accessToken: token }); 123 next();
147 }); 124 });
148})); 125
126};
149 127
150exports.logout = function (req, res, next) { 128exports.logout = function (req, res, next) {
151 tokenStore.del(req.authInfo.accessToken, function (error) { 129 var accessToken = req.query.access_token || req.body.accessToken;
130
131 tokenStore.del(accessToken, function (error) {
152 if (error) console.error(error); 132 if (error) console.error(error);
153 133
154 next(new HttpSuccess(200, {})); 134 next(new HttpSuccess(200, {}));