Skip to content

Commit 86118d3

Browse files
author
wayne-th
committed
first commit
1 parent 8b1661d commit 86118d3

File tree

16 files changed

+1056
-0
lines changed

16 files changed

+1056
-0
lines changed

config/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./env/' + process.env.NODE_ENV + '.js');

config/env/development.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
// Development configuration options
3+
db: 'mongodb://localhost/mean-book',
4+
sessionSecret: 'developmentSessionSecret',
5+
}

config/express.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var config = require('./config'),
2+
express = require('express'),
3+
morgan = require('morgan'),
4+
compress = require('compression'),
5+
bodyParser = require('body-parser'),
6+
methodOverride = require('method-override')
7+
passport = require('passport');
8+
9+
module.exports = function () {
10+
var app = express();
11+
12+
if (process.env.NODE_DEV === 'development') {
13+
app.use(morgan('dev'));
14+
} else if (process.env.NODE_DEV === 'production') {
15+
app.use(compress());
16+
}
17+
18+
app.use(bodyParser.urlencoded({
19+
extended: true
20+
}));
21+
app.use(bodyParser.json());
22+
app.use(methodOverride());
23+
24+
app.use(session({
25+
saveUninitialized: true,
26+
resave: true,
27+
secret: config.sessionSecret
28+
}));
29+
30+
app.use(passport.initialize());
31+
app.use(passport.session());
32+
33+
require('../app/routes/index.routes.js') (app);
34+
require('../app/routes/users.routes.js') (app);
35+
36+
app.use(express.static('./public'));
37+
38+
return app;
39+
}

config/mongoose.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var config = require('./config'),
2+
mongoose = require('mongoose');
3+
4+
module.exports = function() {
5+
var db = mongoose.connect(config.db);
6+
7+
require('../models/user.models');
8+
9+
return db;
10+
};

config/passport.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var passport = require('passport'),
2+
mongoose = require('mongoose');
3+
4+
module.exports = function() {
5+
var User = mongoose.model('User');
6+
7+
passport.serializeUser(function(user, done) {
8+
done(null, user.id);
9+
});
10+
11+
passport.deserializeUser(function(id, done) {
12+
User.findOne({
13+
_id: id
14+
}, '-password -salt', function(err, user) {
15+
done(err, user);
16+
});
17+
});
18+
19+
require('./strategies/local.js')();
20+
}

config/strategies/local.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var passport = require('passport'),
2+
LocalStrategy = require('passport-local').Strategy,
3+
User = require('mongoose').model('User');
4+
5+
module.exports = function() {
6+
passport.use(new LocalStrategy(function(username, password, done){
7+
User.findOne({
8+
username: username
9+
}, function(err, user) {
10+
if (err) {
11+
return done(err);
12+
}
13+
14+
if (!user) {
15+
return done(null, false, {
16+
message: 'Unknown User',
17+
});
18+
}
19+
20+
if (!user.authenticate(password)) {
21+
return done(null, false, {
22+
message: 'Invalid password',
23+
});
24+
}
25+
26+
return done(null, user);
27+
});
28+
}));
29+
};

controllers/auth.controller.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var User = require('mongoose').model('User'),
2+
passport = require('passport');
3+
4+
var getErrorMessage = function(err) {
5+
var message = '';
6+
7+
if (err.code) {
8+
switch (err.code) {
9+
case 11000:
10+
case 11001:
11+
message = 'Username already exists';
12+
break;
13+
default:
14+
message = 'Something went wrong';
15+
}
16+
} else {
17+
for (var errName in err.errors) {
18+
if (err.erros[errName].message)
19+
message = err.erros[errName].message;
20+
}
21+
}
22+
23+
return message;
24+
};
25+
26+
exports.signup = function(req, res, next) {
27+
if (!req.user) {
28+
var user = new User(req.body);
29+
var message = null;
30+
31+
user.save(function(err) {
32+
if (err) {
33+
var message = getErrorMessage(err);
34+
res.json(message);
35+
}
36+
})
37+
}
38+
}

controllers/index.controller.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
exports.render = function(req, res) {
2+
res.send("Hello World");
3+
};

controllers/users.controller.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
var User = require('mongoose').model('User');
2+
3+
exports.create = function(req, res, next) {
4+
var user = new User(req.body);
5+
6+
user.save(function(err) {
7+
if (err) {
8+
return next(err);
9+
} else {
10+
res.json(user);
11+
}
12+
});
13+
};
14+
15+
exports.list = function(req, res, next) {
16+
User.find({}, function(err, users) {
17+
if (err) {
18+
return next(err);
19+
} else {
20+
res.json(users);
21+
}
22+
});
23+
};
24+
25+
exports.read = function(req, res) {
26+
res.json(req.user);
27+
};
28+
29+
exports.userByID = function(req, res, next, id) {
30+
User.findOne({
31+
_id: id
32+
}, function(err, user) {
33+
if (err) {
34+
return next(err);
35+
} else {
36+
req.user = user;
37+
next();
38+
}
39+
});
40+
};
41+
42+
exports.update = function(req, res, next) {
43+
User.findByIdAndUpdate(req.user.id, req.body, function(err, user) {
44+
if (err) {
45+
return next(err);
46+
} else {
47+
res.json(user);
48+
}
49+
});
50+
};
51+
52+
exports.delete = function(req, res, next) {
53+
req.user.remove(function(err) {
54+
if (err) {
55+
return next(err);
56+
} else {
57+
res.json(req.user);
58+
}
59+
});
60+
};

models/user.models.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var mongoose = require('mongoose'),
2+
crypto = requrie('crypto'),
3+
Schema = mongoose.Schema;
4+
5+
var UserSchema = new Schema({
6+
firstName: String,
7+
lastName: String,
8+
username: {
9+
type: String,
10+
trim: true,
11+
unique: true,
12+
required: true,
13+
},
14+
email: {
15+
type: String,
16+
index: true,
17+
match: /.+\@.+\..+/,
18+
},
19+
password: {
20+
type: String,
21+
validate: [
22+
function(password) {
23+
return password.length >= 8;
24+
},
25+
'Password should be longer'
26+
]
27+
},
28+
role: {
29+
type: String,
30+
enum: ['Admin', 'Owner', 'User'],
31+
},
32+
created: {
33+
type: Date,
34+
default: Date.now
35+
}
36+
});
37+
38+
UserSchema.pre('save', function(next) {
39+
if (this.password) {
40+
this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64');
41+
this.password = this.hashPassword(this.password);
42+
}
43+
next();
44+
});
45+
46+
UserSchema.methods.hashPassword = function(password) {
47+
return crypto.pbkdf2Sync(password, this.salt, 10000, 64).toString('base64');
48+
};
49+
50+
UserSchema.methods.authenticate = function(password) {
51+
return this.password === this.hashPassword(password);
52+
};;
53+
54+
mongoose.model('User', UserSchema);

0 commit comments

Comments
 (0)