UNPKG

3.74 kBtext/coffeescriptView Raw
1_ = require 'underscore'
2fs = require 'fs'
3express = require 'express'
4Backbone = require 'backbone'
5sharify = require 'sharify'
6backboneSuperSync = require 'backbone-super-sync'
7bodyParser = require 'body-parser'
8cookieParser = require 'cookie-parser'
9session = require 'cookie-session'
10path = require "path"
11logger = require 'morgan'
12artsyXapp = require 'artsy-xapp'
13artsyPassport = require '../'
14config = require '../config.coffee'
15
16# CurrentUser class
17class CurrentUser extends Backbone.Model
18 url: -> "#{config.ARTSY_URL}/api/v1/me"
19 sync: (method, model, options = {}) ->
20 options.headers ?= {}
21 options.headers['X-Access-Token'] = @get 'accessToken'
22 super
23 unlink: (options) ->
24 auth = new Backbone.Model id: 'foo'
25 auth.url = "#{config.ARTSY_URL}/api/v1/me/authentications/#{options.provider}"
26 auth.destroy
27 headers: 'X-Access-Token': @get 'accessToken'
28 error: options.error
29 success: => @fetch options
30
31sharify.data = config
32
33setup = (app) ->
34
35 app.use sharify
36
37 Backbone.sync = backboneSuperSync
38
39 app.set 'views', __dirname
40 app.set 'view engine', 'jade'
41
42 app.use bodyParser.json()
43 app.use bodyParser.urlencoded(extended: true)
44 app.use cookieParser()
45 app.use session
46 secret: 'super-secret'
47 key: 'artsy-passport'
48 app.use logger('dev')
49
50 app.use express.static __dirname + '/public'
51
52 # Setup Artsy Passport
53 app.use artsyPassport _.extend config,
54 CurrentUser: CurrentUser
55 { loginPagePath, signupPagePath, settingsPagePath,
56 afterSignupPagePath, twitterLastStepPath, logoutPath } = artsyPassport.options
57
58 # App specific routes that render a login/signup form and logged in view
59 app.get '(/|/log_in|/sign_up|/user/edit)', (req, res) ->
60 if req.user? then res.render 'loggedin' else res.render 'login'
61 app.get afterSignupPagePath, (req, res) ->
62 res.render 'personalize'
63 app.get twitterLastStepPath, (req, res) ->
64 res.render 'onelaststep'
65
66 # Potential candidates to be first class in AP. Delete, unlink account,
67 # and reset password handlers
68 app.get '/deleteaccount', (req, res, next) ->
69 return next() unless req.user?
70 req.user.destroy
71 error: (m, e) -> next e
72 success: -> res.redirect logoutPath
73 app.get '/unlink/:provider', (req, res, next) ->
74 req.user.unlink
75 provider: req.params.provider
76 error: (m, e) -> next e
77 success: (user, r) ->
78 req.login user, (err) ->
79 return next err if err
80 res.redirect settingsPagePath
81 app.post '/reset', (req, res, next) ->
82 reset = new Backbone.Model
83 reset.url = "#{config.ARTSY_URL}/api/v1/users/send_reset_password_instructions"
84 reset.save { email: req.body.email },
85 headers: 'X-Xapp-Token': artsyXapp.token
86 error: (m, e) -> next e
87 success: (m, r) -> res.redirect '/newpassword'
88 app.get '/newpassword', (req, res, next) ->
89 res.render 'newpassword'
90 app.post '/newpassword', (req, res, next) ->
91 reset = new Backbone.Model id: 'foo'
92 reset.url = "#{config.ARTSY_URL}/api/v1/users/reset_password"
93 reset.save req.body,
94 headers: 'X-Xapp-Token': artsyXapp.token
95 error: (m, e) -> next e
96 success: (m, r) -> res.redirect loginPagePath
97 app.get '/nocsrf', (req, res) ->
98 res.render 'nocsrf'
99
100 # Error handler
101 app.use (err, req, res, next) ->
102 console.warn err.stack
103 res.render 'error', err: err?.response?.body?.error or err.stack
104
105 # Start server
106 return unless module is require.main
107 artsyXapp.on('error', (e) -> console.warn(e); process.exit(1)).init
108 url: config.ARTSY_URL
109 id: config.ARTSY_ID
110 secret: config.ARTSY_SECRET
111 , ->
112 app.listen 4000, -> console.log "Example listening on #{4000}"
113
114app = module.exports = express()
115setup app