Created
March 10, 2015 02:37
-
-
Save hellobrian/02edfff3f91e261ded61 to your computer and use it in GitHub Desktop.
user and gitub auth
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express') | |
, https = require('https') | |
, cookieParser = require('cookie-parser') | |
, cons = require('consolidate') | |
, bodyParser = require('body-parser') | |
, path = require('path') | |
, extend = require("extend") | |
, Cloudant = require('cloudant') | |
, session = require('express-session') | |
, url = require('url') | |
, querystring = require('querystring') | |
, dustjs = require('dustjs-linkedin') | |
, request = require('request') | |
, requestify = require('requestify') | |
; | |
var app = express(); | |
app.set('views', path.join(__dirname, 'views')); | |
app.engine('dust', cons.dust); | |
app.set('view engine', 'dust'); | |
app.use(express.static(path.join(__dirname, 'public'))); | |
app.use(cookieParser()); | |
app.use(bodyParser.urlencoded({ extended: false })); | |
app.use(session({ | |
secret: 'keyboard cat', | |
resave: false, | |
saveUninitialized: false | |
})); | |
var index = require('./routes/index'); | |
app.use('/', index); | |
var catalog = require('./routes/catalog'); | |
app.use('/catalog', catalog); | |
var dashboard = require('./routes/dashboard'); | |
app.use('/dashboard', dashboard); | |
var cfauth = require('./routes/cfauth'); | |
app.use('/login', cfauth); | |
var github = require('./routes/github'); | |
app.use('/auth/github', github); | |
var profile = require('./routes/profile'); | |
app.use('/user', profile); | |
// app.get('/logout', function(req, res){ | |
// req.session.destroy(); | |
// req.logout(); | |
// res.redirect('/'); | |
// }); | |
module.exports = app; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express') | |
, router = express.Router() | |
, passport = require('passport') | |
, GitHubStrategy = require('passport-github').Strategy | |
, session = require('express-session') | |
, requestify = require('requestify') | |
; | |
var credentials = require('../credentials') | |
, GITHUB_CLIENT_ID = credentials.github.id | |
, GITHUB_CLIENT_SECRET = credentials.github.secret | |
, CALLBACK_URL = credentials.github.callback | |
; | |
passport.serializeUser(function(user, done) { | |
done(null, user); | |
}); | |
passport.deserializeUser(function(obj, done) { | |
done(null, obj); | |
}); | |
passport.use(new GitHubStrategy({ | |
clientID: GITHUB_CLIENT_ID, | |
clientSecret: GITHUB_CLIENT_SECRET, | |
callbackURL: CALLBACK_URL | |
}, | |
function(accessToken, refreshToken, profile, done) { | |
process.nextTick(function() { | |
return done(null, profile); | |
}); | |
})); | |
router.use(passport.initialize(), function(req, res, next) { | |
next(); | |
}); | |
router.use(passport.session(), function(req, res, next) { | |
next(); | |
}); | |
router.get('/', | |
passport.authenticate('github', { | |
scope: ['user', 'repo', 'repo:status', 'repo_deployment', 'read:org'], | |
state: 'foobar' | |
}), | |
function(req, res){ | |
// The request will be redirected to GitHub for authentication, so this | |
// function will not be called. | |
}); | |
router.get('/callback', | |
passport.authenticate('github', { failureRedirect: '/login' }), | |
function(req, res) { | |
router.params.user = req.user; | |
res.redirect('/user/' + req.user.username); | |
}); | |
// router.get('/logout', function(req, res){ | |
// req.session.destroy(); | |
// req.logout(); | |
// res.redirect('/'); | |
// }); | |
module.exports = router; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express') | |
, router = express.Router() | |
, requestify = require('requestify') | |
; | |
router.get('/:username', function(req, res){ | |
var username = req.session.passport.user.username; | |
requestify.get('https://api.github.com/users/' + username + '/repos') | |
.then(function(response) { | |
var repos = response.getBody(); | |
var repos_with_archive_urls = getArchiveURLs(repos); | |
res.render('profile', { | |
layout: 'layout', user: req.session.passport.user, repos: repos_with_archive_urls }); | |
}); | |
}); | |
function getArchiveURLs(repos_array) { | |
for (var i = 0; i < repos_array.length; i++) { | |
repos_array[i].archive_url = repos_array[i].url + '/tarball/master' | |
} | |
return repos_array; | |
} | |
module.exports = router; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment