-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
125 lines (107 loc) · 3.07 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var express = require('express')
, login = require('./login.js')
, request = require('request')
, db = require('./db.js')
, async = require('async')
;
var app = module.exports = express();
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'htuayreve'}));
app.use(login.passport.initialize());
app.use(login.passport.session());
app.use('/static', express.static(__dirname + '/static'));
app.use(app.router);
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
app.get('/', function(req, res, next) {
res.render('index');
});
app.get('/login', function(req, res){
res.redirect('/auth/github');
});
app.get('/unauthorized', function(req, res){
res.render('401');
});
app.get('/auth/github',
login.passport.authenticate('github'),
function(req, res){
}
);
app.get('/auth/github/callback',
login.passport.authenticate('github', {
successRedirect: '/messages',
failureRedirect: '/unauthorized',
failureFlash: true
})
);
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
app.get('/messages', login.ensureAuthenticated, function(req, res){
var user = req.user
;
if (user.profile === undefined || user.profile.github_id === undefined) {
res.redirect('/logout');
}
async.parallel({
following: function(cb) {
db.getFollowing(user.profile.github_id, cb);
}
}, function(error, results) {
// duh!? Looks like we need to call json parse twice
var f = JSON.parse(results.following.following);
user.following = JSON.parse(f);
res.render('messages', { user: user });
});
});
// TODO: login.ensureAuthenticaated
app.get('/message/add', function(req, res){
var toName = req.query['to_name']
, toId = req.query['to_id']
, message = req.query['message']
, user = req.user
;
if (user === undefined) {
var out = JSON.stringify ({ status: 'error', message: 'You are not logged in' })
;
res.writeHead(200, {"Content-Type": "application/json"});
res.write(out);
}
async.series({
toUser: function(cb) {
db.findUserOrRetrieve(toId, toName, cb);
}
}, function(error, results) {
async.parallel({
sentMessage: function(cb) {
db.saveMessage(user, results.toUser, message, cb);
},
ignore: function(cb) {
db.addFollowing(results.toUser.profile, cb);
}
}, function(error, dummy) {
res.writeHead(200, {"Content-Type": "application/json"});
res.write( JSON.stringify ({
'status': 'ok', 'message': results.sentMessage
}));
});
});
});
app.get('*', function(req, res){
res.status(404);
res.render('404');
});
// Be sure to change the github id and secret if you change the port
app.listen(3000)
console.info("Started on port 3000");