-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathvalidate.js
58 lines (50 loc) · 1.31 KB
/
validate.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const Cookies = require('cookies')
const request = require('request')
const config = require('./config')
const validUsers = {}
function fetchUser (token, cb) {
const cookie = request.cookie(config.cookie + '=' + token)
const url = 'https://www.anrop.se'
const jar = request.jar()
jar.setCookie(cookie, url)
request('https://www.anrop.se/api/users/current', { jar, json: true }, function (err, resp, body) {
if (err) {
cb(err)
} else {
cb(null, body)
}
})
}
function validateUser (userId, cb) {
fetchUser(userId, function (err, user) {
if (err) {
console.error(err)
cb(err)
} else {
console.log(user)
if (user.groups && user.groups.indexOf(config.group) > -1) {
validUsers[userId] = user
console.log('User is allowed access')
cb(null)
} else {
console.log('User did not have correct group')
cb(new Error('Unauthorized'))
}
}
})
}
module.exports = function (req, cb) {
const cookies = new Cookies(req)
const token = cookies.get(config.cookie)
if (token) {
if (validUsers[token]) {
console.log('User is already allowed access')
cb(null)
} else {
validateUser(token, cb)
}
} else {
console.log('No cookie found in request')
cb(new Error('Unauthorized'))
}
}