Skip to content

Commit

Permalink
Added User creation, suppresion, login and logout
Browse files Browse the repository at this point in the history
  • Loading branch information
Guillaume Besson committed Jun 22, 2013
1 parent 8407d5b commit 1b0762c
Show file tree
Hide file tree
Showing 6 changed files with 196 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ logs
results

npm-debug.log

node_modules
27 changes: 27 additions & 0 deletions app.js
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);
});
4 changes: 4 additions & 0 deletions config.js
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";
54 changes: 54 additions & 0 deletions database.js
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;
});
}
9 changes: 9 additions & 0 deletions package.json
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": "*",
}
}
100 changes: 100 additions & 0 deletions user.js
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");
});

};

0 comments on commit 1b0762c

Please sign in to comment.