135 lines
3.3 KiB
JavaScript
135 lines
3.3 KiB
JavaScript
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')
|
|
}
|