diff options
author | Johannes Zellner <johannes@cloudron.io> | 2019-08-06 16:21:26 +0200 |
---|---|---|
committer | Johannes Zellner <johannes@cloudron.io> | 2019-08-06 16:21:26 +0200 |
commit | 34adfa8518ba0b57d1837db1847a13215f31a83c (patch) | |
tree | 3c500b494b0350b35cb8a0748f343fd05c0b4b5e /src | |
parent | f384014e30d095a47ddce214a05c860a7c4d6679 (diff) | |
download | Surfer-34adfa8518ba0b57d1837db1847a13215f31a83c.tar.gz Surfer-34adfa8518ba0b57d1837db1847a13215f31a83c.tar.zst Surfer-34adfa8518ba0b57d1837db1847a13215f31a83c.zip |
Replace passport usage with simpler custom middleware
Diffstat (limited to 'src')
-rw-r--r-- | src/auth.js | 66 |
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 | ||
3 | var passport = require('passport'), | 3 | var 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 | ||
59 | function 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 | |||
70 | passport.serializeUser(function (user, done) { | ||
71 | console.log('serializeUser', user); | ||
72 | done(null, user.uid); | ||
73 | }); | ||
74 | |||
75 | passport.deserializeUser(function (id, done) { | ||
76 | console.log('deserializeUser', id); | ||
77 | done(null, { uid: id }); | ||
78 | }); | ||
79 | |||
80 | function verifyUser(username, password, callback) { | 57 | function 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 | ||
124 | exports.login = [ | 101 | exports.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 | ||
137 | exports.verify = passport.authenticate('bearer', { session: false }); | 115 | exports.verify = function (req, res, next) { |
116 | var accessToken = req.query.access_token || req.body.accessToken; | ||
138 | 117 | ||
139 | passport.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 | ||
150 | exports.logout = function (req, res, next) { | 128 | exports.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, {})); |