/
users.js
127 lines (113 loc) · 3.52 KB
/
users.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
var helpers = require('./helpers.js'),
user_data = require("../data/user.js"),
async = require('async'),
bcrypt = require('bcrypt'),
fs = require('fs');
exports.version = "0.1.0";
function User (user_data) {
this.uuid = user_data["user_uuid"];
this.email_address = user_data["email_address"];
this.display_name = user_data["display_name"];
this.password = user_data["password"];
this.first_seen_date = user_data["first_seen_date"];
this.last_modified_date = user_data["last_modified_date"];
this.deleted = user_data["deleted"];
}
User.prototype.uuid = null;
User.prototype.email_address = null;
User.prototype.display_name = null;
User.prototype.password = null;
User.prototype.first_seen_date = null;
User.prototype.last_modified_date = null;
User.prototype.deleted = false;
User.prototype.check_password = function (pw, callback) {
bcrypt.compare(pw, this.password, callback);
};
User.prototype.response_obj = function () {
return {
uuid: this.uuid,
email_address: this.email_address,
display_name: this.display_name,
first_seen_date: this.first_seen_date,
last_modified_date: this.last_modified_date
};
};
exports.register = function (req, res) {
async.waterfall([
function (cb) {
var em = req.body.email_address;
if (!em || em.indexOf("@") == -1)
cb(helpers.invalid_email_address());
else if (!req.body.display_name)
cb(helpers.missing_data("display_name"));
else if (!req.body.password)
cb(helpers.missing_data("password"));
else
cb(null);
},
// register da user.
function (cb) {
user_data.register(
req.body.email_address,
req.body.display_name,
req.body.password,
cb);
},
],
function (err, user_data) {
if (err) {
helpers.send_failure(res, helpers.http_code_for_error(err), err);
} else {
var u = new User(user_data);
helpers.send_success(res, {user: u.response_obj() });
}
});
};
exports.user_by_uuid = function (uuid, callback) {
user_data.user_by_uuid(uuid, (err, user_data) => {
if (err) {
callback(err);
} else {
callback(null, new User(user_data));
}
});
};
exports.user_by_display_name = function (req, res) {
async.waterfall([
// first get the user by the email address.
function (cb) {
user_data.user_by_display_name(req.body.email_address, cb);
}
],
function (err, u) {
if (!err) {
helpers.send_success(res, { user: u.response_obj() });
} else {
helpers.send_failure(res, helpers.http_code_for_error(err), err);
}
});
};
exports.authenticate_user = function (un, pw, callback) {
var user_object;
async.waterfall([
function (cb) {
user_data.user_by_display_name(un, cb);
},
function (user_data, cb) {
user_object = new User(user_data);
user_object.check_password(pw, cb);
}
],
function (err, auth_ok) {
if (!err) {
if (auth_ok) {
callback(null, user_object);
} else {
callback(helpers.error("invalid_credentials",
"The given username/password are invalid."));
}
} else {
callback(err);
}
});
};