-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpassport.js
136 lines (129 loc) · 4.94 KB
/
passport.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
127
128
129
130
131
132
133
134
135
136
const passport = require('passport');
const LocalStrategy = require('passport-local');
const User = require('./models/user');
const UserData = require('./models/user-data');
// Updated serialize/deserialize functions
passport.serializeUser((user, done) => {
done(undefined, user._id);
});
passport.deserializeUser((userId, done) => {
User.findById(userId, (err, user) => {
if (err) {
return done(err, undefined);
}
return done(undefined, user);
});
});
// Does the login and returns a token if login successfully
passport.use(
'login',
new LocalStrategy(
{
usernameField: 'email',
},
(username, password, done) => {
User.findOne({ email: username.toLowerCase() }, function (err, user) {
if (err) {
return done(null, false, { message: 'Unknown error.' });
}
if (!user) {
return done(null, false, {
message: 'Incorrect username or password.',
});
}
user.verifyPassword(password, (err, valid) => {
if (err) {
return done(null, false, { message: 'Unknown error.' });
}
if (!valid) {
return done(null, false, {
message: 'Incorrect username or password.',
});
}
return done(null, user);
});
});
}
)
);
// Register for an account
// Will change later to match the patient's register process
passport.use(
'register',
new LocalStrategy(
{
passReqToCallback: true,
usernameField: 'email',
},
(req, email, password, done) => {
User.findOne({ email: email })
.then((foundUser) => {
if (foundUser) {
console.log('Account existed');
return done(null, false, { message: 'Account already existed!' });
} else {
now = new Date();
const newUser = new User();
newUser.email = email.toLowerCase().trim();
newUser.password = newUser.hashPassword(password);
newUser.leaderboardName = req.body.leaderboardName.trim();
newUser.firstName = req.body.firstName.trim();
newUser.lastName = req.body.lastName.trim();
newUser.dateOfRegistration = new Date(now.getFullYear(), now.getMonth(), now.getDate());
newUser.dateOfBirth = new Date(req.body.dateOfBirth);
newUser.phoneNumber = req.body.phoneNumber.trim();
newUser.clinicianId = req.body.clinicianId || null;
// Validate
if (newUser.email == '') return done(null, false, { message: 'Email cannot be empty' });
if (newUser.firstName == '')
return done(null, false, { message: 'First name cannot be empty' });
if (newUser.lastName == '')
return done(null, false, { message: 'Last name cannot be empty' });
if (newUser.phoneNumber == '')
return done(null, false, { message: 'Phone number cannot be empty' });
if (!/^\+*[0-9]+$/.test(newUser.phoneNumber))
return done(null, false, {
message: 'Phone number can only contain plus sign (+) and number',
});
if (password.trim() == '')
return done(null, false, { message: 'Password cannot be empty' });
if (/\s/.test(password))
return done(null, false, { message: 'Password cannot contain space' });
if (newUser.dateOfBirth.getTime() > now.getTime())
return done(null, false, { message: 'Date of birth is invalid' });
newUser.save().then((savedUser) => {
// If this user is a patient
if (req.body.clinicianId) {
const newUserdata = new UserData({
userId: savedUser._id,
bloodGlucoseData: [],
stepCountData: [],
insulinDoseData: [],
weightData: [],
requiredFields: req.body.requiredFields || [0, 1, 2, 3],
bloodGlucoseLowThresh: req.body.bloodGlucoseLowThresh,
bloodGlucoseHighThresh: req.body.bloodGlucoseHighThresh,
weightLowThresh: req.body.weightLowThresh,
weightHighThresh: req.body.weightHighThresh,
insulinDoseLowThresh: req.body.insulinDoseLowThresh,
insulinDoseHighThresh: req.body.insulinDoseHighThresh,
stepCountLowThresh: req.body.stepCountLowThresh,
stepCountHighThresh: req.body.stepCountHighThresh,
});
newUserdata.save().then((savedUserData) => {
return done(null, newUser);
});
} else {
// This user is a clinician. Not need to add userdata
return done(null, newUser);
}
});
}
})
.catch((err) => {
console.log(err.message);
});
}
)
);
module.exports = passport;