Skip to content

Instantly share code, notes, and snippets.

@hellobrian
Created March 10, 2015 02:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hellobrian/02edfff3f91e261ded61 to your computer and use it in GitHub Desktop.
Save hellobrian/02edfff3f91e261ded61 to your computer and use it in GitHub Desktop.
user and gitub auth
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;
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;
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