forked from screeps/backend-local
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauthlib.js
41 lines (35 loc) · 1.01 KB
/
authlib.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
var q = require('q'),
_ = require('lodash'),
crypto = require('crypto'),
common = require('@screeps/common'),
env = common.storage.env;
exports.genToken = function (id) {
var token = crypto.createHmac('sha1', 'hsdhweh342sdbj34e').update(new Date().getTime() + id).digest('hex');
return env.setex(`auth_${token}`, 60, id)
.then(() => token);
};
exports.checkToken = function (token, noConsume) {
var authKey = `auth_${token}`;
return env.get(authKey)
.then((data) => {
if (!data) {
return q.reject(false);
}
if (!noConsume) {
env.ttl(authKey)
.then((ttl) => {
if (ttl > 100) {
env.expire(authKey, 60);
}
});
}
return common.storage.db.users.findOne({_id: data})
})
.then((user) => {
if (!user) {
return q.reject(false);
}
env.set(env.keys.USER_ONLINE+user._id, Date.now());
return user;
});
};