1 | var express = require('express');
|
2 | var passport = require('passport');
|
3 | var Strategy = require('passport-github').Strategy;
|
4 | var github = require('octonode');
|
5 | var path = require('path');
|
6 | var fs = require('fs-extra');
|
7 | var session = require('express-session');
|
8 | var bodyParser = require('body-parser')
|
9 | var methodOverride = require('method-override');
|
10 |
|
11 | var app = express();
|
12 | var configFile = require(path.join(process.cwd(),'.config.book.json'));
|
13 | var callbackURL_ = path.join(configFile.heroku_url, 'github/auth/return');
|
14 | const oauth_file = require(path.join(process.cwd(),'.oauth.github.json'));
|
15 | const GitHubApi = require("github");
|
16 |
|
17 | var engines = require('consolidate');
|
18 |
|
19 | var organizacion;
|
20 |
|
21 | app.set('views', __dirname + '/_book');
|
22 | app.engine('html', engines.mustache);
|
23 | app.set('view engine', 'html');
|
24 | console.log("Callback URL IS: " + callbackURL_);
|
25 |
|
26 | passport.serializeUser(function(user, done) {
|
27 | done(null, user);
|
28 | });
|
29 |
|
30 | passport.deserializeUser(function(obj, done) {
|
31 | done(null, obj);
|
32 | });
|
33 |
|
34 |
|
35 | app.use(bodyParser.urlencoded({ extended: true }));
|
36 | app.use(bodyParser.json());
|
37 | app.use(methodOverride());
|
38 | app.use(passport.initialize());
|
39 | app.use(passport.session());
|
40 |
|
41 | passport.use(new Strategy({
|
42 | clientID: oauth_file.clientID,
|
43 | clientSecret: oauth_file.clientSecret,
|
44 | callbackURL: oauth_file.callbackURL,
|
45 | scope: ['user','repo']
|
46 | },
|
47 | function(accessToken, refreshToken, profile, done) {
|
48 | profile.token = accessToken;
|
49 | done(null,profile)
|
50 | }));
|
51 |
|
52 |
|
53 |
|
54 |
|
55 | var port = Number(process.env.PORT || 5000);
|
56 |
|
57 | app.listen(port, function() {
|
58 | console.log('Your files will be served through this web server in port ' + port);
|
59 | });
|
60 |
|
61 |
|
62 | app.get('/',
|
63 | passport.authenticate('github', { scope: [ 'user:email' ] }),
|
64 | function(req, res) {
|
65 | });
|
66 |
|
67 |
|
68 | app.get("/github/auth/return",
|
69 | passport.authenticate('github', { failureRedirect: '/fail' }),
|
70 | function(req, res) {
|
71 | organizacion = require('./.config.book.json').organization;
|
72 | var client = github.client(req.user.token);
|
73 |
|
74 | var ghorg = client.org(organizacion);
|
75 |
|
76 | console.log("USERNAME: " + req.user.username);
|
77 |
|
78 | client.get(`/users/${req.user.username}/orgs`, {}, function (err, status, body, headers) {
|
79 | if (body.length == 0) res.redirect('/fail');
|
80 | var founded = false;
|
81 | console.log("ORGSSSSS")
|
82 | body.forEach((org,inx) => {
|
83 | console.log(org);
|
84 | if (org.login == organizacion) {
|
85 | founded = true;
|
86 | res.redirect('/content');
|
87 | }
|
88 | else if (inx + 1 == body.length && !founded) {
|
89 | res.redirect('/fail');
|
90 | }
|
91 | });
|
92 | });
|
93 |
|
94 | });
|
95 |
|
96 | app.get("/content", (req, res) => {
|
97 | res.render('index')
|
98 | });
|
99 |
|
100 |
|
101 | app.get('/fail', (req, res) => {
|
102 | res.send("<h1 style='color:red;'>FAILED AUTHENTICATION. You are not part of the organization " + organizacion + "</h1>");
|
103 | });
|
104 |
|
105 | app.use(express.static(__dirname + '/_book'));
|