aboutsummaryrefslogtreecommitdiff
path: root/config/passport.js
blob: 27f835f5e1911a204027035cb01eb1a6299d9431 (plain)
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
var passport = require('passport');
var dbFile  = require("../node_simple.js");
var LocalStrategy = require('passport-local').Strategy;
var bcrypt = require('bcrypt-nodejs');

var exports = module.exports = {};

var encryptPassword = exports.encryptPassword = function (password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(5), null);
}

var comparePassword = function (password1, password2) {
    return bcrypt.compareSync(password1, password2);
}

passport.serializeUser(function (user, done) {
    done(null, user);
});

passport.deserializeUser(function(user, done) {
    done(null, user);
});



// fields - [email, user_name, f_name, l_name, uni, department, password, phone_num]

passport.use('local_signup', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
}, function(req, email, password, done){
    console.log("nothing here");

    var hash_pass = encryptPassword(password);

    var fields = [email, req.body.usrname, req.body.fname, req.body.lname, req.body.univ, req.body.dept, hash_pass,
        req.body.phone_num];

    dbFile.add_user(fields, function (success, error, message) {

        if (!success && error) {
            console.log("!success && error");
            return done(null, false, {message:message}); // Review later, need to pass errors
        }

        else if (!success && !error) {
            console.log("!success && !error");
            console.log(message);
            return done(null, false, {message: message});
        }

        else  {
            console.log("ELSE");
            var user_data = {
                email: fields[0],
                user_name: fields[1],
                f_name: fields[2],
                l_name: fields[3],
                university: fields[4],
                department: fields[5],
                answered: 0,
                messages: 0,
                comments: 0,
                phone_num: fields[7],
                followers: []
            };
            return done(null, user_data);
        }
    });

}));

passport.use('local_signin', new LocalStrategy({
    usernameField: 'usrname',
    passwordField: 'password',
    passReqToCallback: true
}, function (req, usrname, password, done) {
    dbFile.retrieveUser(usrname, function (success, error, user, message) {
        if (!success && error) {
            return done(message);
        }

        else if (!success && !error) { // Username is undefined
            //return done(null, false, {message: message});
            // ADMIN
            dbFile.adminExists(usrname, function (error, exists, data, message) {
                if (error) {
                    return done(message);
                } else if (!error && !exists){
                    return done(null, false, {message: 'Username does not exist.'});
                } else {
                    console.log("data: " + data);
                    if (comparePassword(password, data.password)) {
                        return done(null, data);
                    } else {
                        return done(null, false, {message: 'Password incorrect.'});
                    }
                }
            });
        }

        else  {

            dbFile.retrievePassword(usrname, function(success, hash_pwd, message) {
                if (!success) {
                    return done(message);
                } else {
                    console.log(hash_pwd);
                    console.log("compare password: " + comparePassword(password, hash_pwd));
                    if (comparePassword(password, hash_pwd)) {

                        return done(null, user);
                    } else {
                        return done(null, false, {message: 'Password incorrect.'});
                    }
                }
            });
        }
    });
}));