This repository has been archived by the owner on Nov 25, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathapp.js
131 lines (107 loc) · 3.21 KB
/
app.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
126
127
128
129
130
131
/*jshint globalstrict:true, trailing:false, unused:true, node:true */
"use strict";
var express = require('express');
var passport = require('passport');
var OAuth2Strategy = require('passport-oauth2');
var request = require('request');
var gitterHost = process.env.HOST || 'https://gitter.im';
var port = process.env.PORT || 7000;
// Client OAuth configuration
var clientId = process.env.GITTER_KEY ? process.env.GITTER_KEY.trim() : undefined;
var clientSecret = process.env.GITTER_SECRET ? process.env.GITTER_SECRET.trim() : undefined;
// Gitter API client helper
var gitter = {
fetch: function(path, token, cb) {
var options = {
url: gitterHost + path,
headers: {
'Authorization': 'Bearer ' + token
}
};
request(options, function (err, res, body) {
if (err) return cb(err);
if (res.statusCode === 200) {
cb(null, JSON.parse(body));
} else {
cb('err' + res.statusCode);
}
});
},
fetchCurrentUser: function(token, cb) {
this.fetch('/api/v1/user/', token, function(err, user) {
cb(err, user[0]);
});
},
fetchRooms: function(user, token, cb) {
this.fetch('/api/v1/user/' + user.id + '/rooms', token, function(err, rooms) {
cb(err, rooms);
});
}
};
var app = express();
// Middlewares
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.use(express.json());
app.use(express.urlencoded());
app.use(express.static( __dirname + '/public'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret: 'keyboard cat'}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
// Passport Configuration
passport.use(new OAuth2Strategy({
authorizationURL: gitterHost + '/login/oauth/authorize',
tokenURL: gitterHost + '/login/oauth/token',
clientID: clientId,
clientSecret: clientSecret,
callbackURL: '/login/callback',
passReqToCallback: true
},
function(req, accessToken, refreshToken, profile, done) {
req.session.token = accessToken;
gitter.fetchCurrentUser(accessToken, function(err, user) {
return (err ? done(err) : done(null, user));
});
}
));
passport.serializeUser(function(user, done) {
done(null, JSON.stringify(user));
});
passport.deserializeUser(function (user, done) {
done(null, JSON.parse(user));
});
app.get('/login',
passport.authenticate('oauth2')
);
app.get('/login/callback',
passport.authenticate('oauth2', {
successRedirect: '/home',
failureRedirect: '/'
})
);
app.get('/logout', function(req,res) {
req.session.destroy();
res.redirect('/');
});
app.get('/', function(req, res) {
res.render('landing');
});
app.get('/home', function(req, res) {
if (!req.user) return res.redirect('/');
// Fetch user rooms using the Gitter API
gitter.fetchRooms(req.user, req.session.token, function(err, rooms) {
if (err) return res.send(500);
res.render('home', {
user: req.user,
token: req.session.token,
clientId: clientId,
rooms: rooms
});
});
});
app.listen(port);
console.log('Demo app running at http://localhost:' + port);