artsy-passport
Version:
Wires up the common auth handlers for Artsy's [Ezel](ezeljs.com)-based apps using [passport](http://passportjs.org/).
61 lines (54 loc) • 1.99 kB
text/coffeescript
express = require 'express'
artsyPassport = require '../'
Backbone = require 'backbone'
sharify = require 'sharify'
fs = require 'fs'
config = require '../config.coffee'
_ = require 'underscore'
backboneSuperSync = require 'backbone-super-sync'
# CurrentUser class
class CurrentUser extends Backbone.Model
url: -> "#{config.SECURE_ARTSY_URL}/api/v1/me"
sync: (method, model, options = {}) ->
options.data ?= {}
options.data.access_token = @get 'accessToken'
super
app = module.exports = express()
# Generic setup
sharify.data = config
app.use sharify
Backbone.sync = backboneSuperSync
app.set 'views', __dirname
app.set 'view engine', 'jade'
app.use express.bodyParser()
app.use express.cookieParser('foobar')
app.use express.cookieSession()
app.use express.static __dirname + '/public'
app.use require('artsy-xapp-middleware')
artsyUrl: config.SECURE_ARTSY_URL
clientId: config.ARTSY_ID
clientSecret: config.ARTSY_SECRET
# Setup Artsy Passport
app.use artsyPassport _.extend config,
CurrentUser: CurrentUser
{ loginPath, signupPath, twitterCallbackPath, facebookCallbackPath } = artsyPassport.options
# Artsy passport route handlers
app.post loginPath, (req, res) ->
res.redirect '/'
app.post signupPath, (req, res) ->
res.redirect '/personalize'
app.get twitterCallbackPath, (req, res) ->
if req.query.sign_up then res.redirect('/personalize') else res.redirect('/')
app.get facebookCallbackPath, (req, res) ->
if req.query.sign_up then res.redirect('/personalize') else res.redirect('/')
# App specific routes that render a login/signup form and logged in view
app.get '/', (req, res) ->
if req.user? then res.render 'loggedin' else res.render 'login'
app.get '/personalize', (req, res) ->
res.redirect '/' unless req.user?
res.send 'Personalize Flow for ' + req.user.get('name')
app.get '/logout', (req, res) ->
req.logout()
res.redirect '/'
return unless module is require.main
app.listen 3000, -> console.log "Example listening on 3000"