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') }