marknotes/server.js

136 lines
3.3 KiB
JavaScript
Raw Normal View History

2015-09-26 00:49:24 +00:00
require("./const.js");
var express = require('express');
var app = express();
var uuid = require('uuid');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var passport = require('passport');
var TwitterStrategy = require('passport-twitter').Strategy;
// Set up some config details
var port = 11111;
var TWITTER_KEY = 'zAVJjGpeFJRVov8sBgsfTFZTa';
var TWITTER_SECRET = 'BpHIe92wS66CKaRB9j6CEBb7L0j7QwCyYStMcPXQwhTCrdeFhX';
// End config
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(obj, done) {
done(null, obj);
});
passport.use(new TwitterStrategy({
consumerKey: TWITTER_KEY,
consumerSecret: TWITTER_SECRET,
callbackURL: "http://127.0.0.1:11111/auth/twitter/callback"
},
function(token, tokenSecret, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
return done(null, profile);
});
}
));
// Some useful functions
function genChecksum(a, o, e) {
var sha = require('crypto').createHash('sha256');
var input = global.SECRET;
if (a) input += a;
if (o) input += o;
if (e) input += e;
return(sha.update(input).digest("hex"));
}
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// app.use(logger());
app.use(cookieParser());
// app.use(express.bodyParser());
// app.use(express.methodOverride());
app.use(session({
genid: function(req) {
return uuid.v1();
},
secret: global.SECRET,
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(__dirname + '/public'));
app.get('/ping', function(req, res){
res.status(200).send(req.user);
});
app.get('/', function (req, res) {
res.locals.login = req.isAuthenticated();
res.render('index', {title: "MarkNotes"});
});
app.get('/login', function (req, res) {
res.locals.login = req.isAuthenticated();
if (req.isAuthenticated()) {
res.redirect('/');
} else {
res.render('login', {title: "Log in to MarkNotes", user: req.user});
}
});
app.get('/secret', ensureAuthenticated, function (req, res) {
res.send('Jahbulon');
});
app.get('/auth/twitter', passport.authenticate('twitter'), function(req, res){
// The request will be redirected to Twitter for authentication, so this
// function will not be called.
});
app.get('/auth/twitter/callback',
passport.authenticate('twitter', { failureRedirect: '/login' }),
function (req, res) {
res.redirect('/');
}
);
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.get('/api', function (req, res) {
var url = require('url');
var output = "";
var query = url.parse(req.url,true).query;
var checksum = genChecksum(query.a, query.o, query.e);
if (checksum === query.cs) {
output += "Checksum: " + query.cs + "\n";
output += "Action: " + query.a + "\n";
output += "Object: " + query.o + "\n";
output += "Extra: " + query.e + "\n";
res.send(output);
} else {
res.status(403);
res.send("Failed to authenticate.");
}
});
var server = app.listen(port, function () {
var host = server.address().address;
var port = server.address().port;
console.log("Server running at http://%s:%s", host, port);
});
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}