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
59
60
61
62
63
64
65
|
var crypto = require('crypto');
/* The SessionsDAO must be constructed with a connected database object */
function SessionsDAO(db) {
"use strict";
/* If this constructor is called without the "new" operator, "this" points
* to the global object. Log a warning and call it correctly. */
if (false === (this instanceof SessionsDAO)) {
console.log('Warning: SessionsDAO constructor called without "new" operator');
return new SessionsDAO(db);
}
var sessions = db.collection("sessions");
this.startSession = function(username, callback) {
"use strict";
// Generate session id
var current_date = (new Date()).valueOf().toString();
var random = Math.random().toString();
var session_id = crypto.createHash('sha1').update(current_date + random).digest('hex');
// Create session document
var session = {'username': username, '_id': session_id}
// Insert session document
sessions.insert(session, function (err, result) {
"use strict";
callback(err, session_id);
});
}
this.endSession = function(session_id, callback) {
"use strict";
// Remove session document
sessions.remove({ '_id' : session_id }, function (err, numRemoved) {
"use strict";
callback(err);
});
}
this.getUsername = function(session_id, callback) {
"use strict";
if (!session_id) {
callback(Error("Session not set"), null);
return;
}
sessions.findOne({ '_id' : session_id }, function(err, session) {
"use strict";
if (err) return callback(err, null);
if (!session) {
callback(new Error("Session: " + session + " does not exist"), null);
return;
}
callback(null, session.username);
});
}
}
module.exports.SessionsDAO = SessionsDAO;
|