-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added User creation, suppresion, login and logout
- Loading branch information
Guillaume Besson
committed
Jun 22, 2013
1 parent
8407d5b
commit 1b0762c
Showing
6 changed files
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,3 +12,5 @@ logs | |
results | ||
|
||
npm-debug.log | ||
|
||
node_modules |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
var config = require('./config.js'); | ||
var database = require('./database.js'); | ||
|
||
var express = require('express'); | ||
var app = express(); | ||
|
||
/* | ||
** Express Configuration | ||
*/ | ||
|
||
// app.use(express.logger()); | ||
app.use(express.bodyParser()); | ||
app.use(express.cookieParser()); | ||
app.use(express.session({secret: config.cookieSecret})); | ||
|
||
/* | ||
** User Routes (creation, login, logout) | ||
*/ | ||
|
||
var user = require('./user.js'); | ||
user.createRoutes(app, database); | ||
|
||
|
||
database.connect(function () { | ||
app.listen(config.port); | ||
console.log("Server started and listening on port " + config.port); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
// Replace here with your MongoDB server address | ||
exports.database = "mongodb://localhost/noderssreader"; | ||
exports.port = 3000; | ||
exports.cookieSecret = "9a62df3075e2ab7bb554c2e2607af0dd"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
var config = require('./config.js'); | ||
var mongoose = require('mongoose'); | ||
|
||
|
||
exports.connect = function(callback) { | ||
console.log("Connecting to database..."); | ||
mongoose.connect(config.database); | ||
|
||
db = mongoose.connection; | ||
db.on('error', console.error.bind(console, 'Connection error:')); | ||
db.once('open', function() { | ||
console.log("Connected !"); | ||
callback(); | ||
}); | ||
}; | ||
|
||
var userSchema = mongoose.Schema({ | ||
email: String, | ||
password: String, | ||
creationDate: { type: Date, default: Date.now } | ||
}); | ||
|
||
var User = mongoose.model('User', userSchema); | ||
|
||
exports.createUser = function(email, password, callback) { | ||
User.find().where("email").equals(email).exec(function (err, user) { | ||
if (user.length || err) | ||
{ | ||
callback(null, true); | ||
return false; | ||
} | ||
var newUser = new User({email: email, password: password}); | ||
newUser.save(function (err) { | ||
return callback(this, err); | ||
}); | ||
}); | ||
} | ||
|
||
exports.deleteUser = function(user, callback) { | ||
User.remove({email: user.email}, callback); | ||
} | ||
|
||
exports.loginUser = function(email, password, callback) { | ||
User.findOne().where("email").equals(email).exec(function (err, user) { | ||
console.log(user); | ||
if (!user || password != user.password) | ||
{ | ||
callback(false); | ||
return false; | ||
} | ||
callback(user); | ||
return true; | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"name": "Node-RSS-Reader", | ||
"description": "A simple Node RSS Reader", | ||
"version": "0.0.1", | ||
"dependencies": { | ||
"express": "3.x", | ||
"mongoose": "*", | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
var config = require('./config.js'); | ||
|
||
exports.createRoutes = function (app, database) { | ||
|
||
/* | ||
** User creation | ||
*/ | ||
|
||
app.put("/api/user", function(req, res) { | ||
|
||
if (req.session.user) | ||
{ | ||
res.send(409, "You are connected, you can't create an account"); | ||
return false; | ||
} | ||
|
||
var email = req.param('email'); | ||
var password = req.param('password'); | ||
if (!email || !password || email.length < 3 || password.length < 3) | ||
{ | ||
res.send(400, "Please provide a correct email and a correct password"); | ||
return false; | ||
} | ||
database.createUser(email, password, function (user, err) { | ||
if (err) | ||
{ | ||
console.log("[error] user %s already exist", email); | ||
res.send(409, "This user already exist"); | ||
return false; | ||
} | ||
console.log("[info ] Creating new user %s", email); | ||
req.session.user = user; | ||
res.send(200, "User created"); | ||
}); | ||
}); | ||
|
||
/* | ||
** User delete | ||
*/ | ||
|
||
app.delete("/api/user", function(req, res) { | ||
if (!req.session.user) | ||
{ | ||
res.send(401, "You are not connected"); | ||
return false; | ||
} | ||
|
||
database.deleteUser(req.session.user, function() { | ||
delete req.session.user; | ||
res.send(200, "User deleted"); | ||
}); | ||
}); | ||
|
||
/* | ||
** Login | ||
*/ | ||
|
||
app.post("/api/login", function (req, res) { | ||
|
||
if (req.session.user) | ||
{ | ||
res.send(200, "Already connected"); | ||
return true; | ||
} | ||
|
||
var email = req.param('email'); | ||
var password = req.param('password'); | ||
if (!email || !password || email.length < 3 || password.length < 3) | ||
{ | ||
res.send(400, "Please provide a correct email and a correct password"); | ||
return false; | ||
} | ||
database.loginUser(email, password, function(user) { | ||
if (!user) | ||
{ | ||
console.log("[error] connection error for user %s", email); | ||
res.send(401, "Wrong email or password"); | ||
return false; | ||
} | ||
req.session.user = user; | ||
console.log("[info ] user %s connected", email); | ||
res.send(200, "Connected"); | ||
}); | ||
}); | ||
|
||
/* | ||
** Logout | ||
*/ | ||
|
||
app.post("/api/logout", function (req, res) { | ||
if (!req.session.user) | ||
{ | ||
res.send(401, "You are not connected"); | ||
return false; | ||
} | ||
delete req.session.user; | ||
res.send(200, "Logged out"); | ||
}); | ||
|
||
}; |