/**
* Module dependencies.
*/
var express = require('express');
var http = require('http');
var path = require('path');
var jwt = require('jwt-simple');
var _ = require('underscore');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('jwtTokenSecret', '123456ABCDEF');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
var tokens = [];
function requiresAuthentication(request, response, next) {
console.log(request.headers);
if (request.headers.access_token) {
var token = request.headers.access_token;
if (_.where(tokens, token).length > 0) {
var decodedToken = jwt.decode(token, app.get('jwtTokenSecret'));
if (new Date(decodedToken.expires) > new Date()) {
next();
return;
} else {
removeFromTokens();
response.end(401, "Your session is expired");
}
}
}
response.end(401, "No access token found in the request");
}
function removeFromTokens(token) {
for (var counter = 0; counter < tokens.length; counter++) {
if (tokens[counter] === token) {
tokens.splice(counter, 1);
break;
}
}
}
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', function(request, response) {
response.sendfile("Home.html");
});
app.post('/api/login', function(request, response) {
var userName = request.body.userName;
var password = request.body.password;
if (userName === "Ravi" && password === "kiran") {
var expires = new Date();
expires.setDate((new Date()).getDate() + 5);
var token = jwt.encode({
userName: userName,
expires: expires
}, app.get('jwtTokenSecret'));
tokens.push(token);
response.send(200, { access_token: token, userName: userName });
} else {
response.send(401, "Invalid credentials");
}
});
app.post('/api/logout', requiresAuthentication, function(request, response) {
var token= request.headers.access_token;
removeFromTokens(token);
response.send(200);
});
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});