UNPKG

artsy-passport

Version:

Wires up the common auth handlers for Artsy's [Ezel](ezeljs.com)-based apps using [passport](http://passportjs.org/).

162 lines (151 loc) 5.93 kB
// Generated by CoffeeScript 1.11.1 (function() { var _, artsyXapp, onAccessToken, opts, request; _ = require('underscore'); request = require('superagent'); opts = require('../options'); artsyXapp = require('artsy-xapp'); this.local = function(req, username, password, done) { return request.post(opts.ARTSY_URL + "/oauth2/access_token").set({ 'User-Agent': req.get('user-agent') }).query({ client_id: opts.ARTSY_ID, client_secret: opts.ARTSY_SECRET, grant_type: 'credentials', email: username, password: password }).end(onAccessToken(req, done)); }; this.linkedin = function(req, token, tokenSecret, profile, done) { var ref, ref1; req.socialProfileEmail = profile != null ? (ref = profile.emails) != null ? (ref1 = ref[0]) != null ? ref1.value : void 0 : void 0 : void 0; if (req.user) { return request.post(opts.ARTSY_URL + "/api/v1/me/authentications/linkedin").set({ 'User-Agent': req.get('user-agent') }).send({ oauth_token: token, oauth_token_secret: tokenSecret, access_token: req.user.get('accessToken') }).end(function(err, res) { return done(err, req.user); }); } else { return request.post(opts.ARTSY_URL + "/oauth2/access_token").set({ 'User-Agent': req.get('user-agent') }).query({ client_id: opts.ARTSY_ID, client_secret: opts.ARTSY_SECRET, grant_type: 'oauth_token', oauth_token: token, oauth_token_secret: tokenSecret, oauth_provider: 'linkedin' }).end(onAccessToken(req, done, { oauth_token: token, oauth_token_secret: tokenSecret, provider: 'linkedin' })); } }; this.facebook = function(req, token, refreshToken, profile, done) { var ref, ref1; req.socialProfileEmail = profile != null ? (ref = profile.emails) != null ? (ref1 = ref[0]) != null ? ref1.value : void 0 : void 0 : void 0; if (req.user) { return request.post(opts.ARTSY_URL + "/api/v1/me/authentications/facebook").set({ 'User-Agent': req.get('user-agent') }).send({ oauth_token: token, access_token: req.user.get('accessToken') }).end(function(err, res) { return done(err, req.user); }); } else { return request.post(opts.ARTSY_URL + "/oauth2/access_token").set({ 'User-Agent': req.get('user-agent') }).query({ client_id: opts.ARTSY_ID, client_secret: opts.ARTSY_SECRET, grant_type: 'oauth_token', oauth_token: token, oauth_provider: 'facebook' }).end(onAccessToken(req, done, { oauth_token: token, provider: 'facebook', name: profile != null ? profile.displayName : void 0 })); } }; this.twitter = function(req, token, tokenSecret, profile, done) { if (req.user) { return request.post(opts.ARTSY_URL + "/api/v1/me/authentications/twitter").set({ 'User-Agent': req.get('user-agent') }).send({ oauth_token: token, oauth_token_secret: tokenSecret, access_token: req.user.get('accessToken') }).end(function(err, res) { return done(err, req.user); }); } else { return request.post(opts.ARTSY_URL + "/oauth2/access_token").set({ 'User-Agent': req.get('user-agent') }).query({ client_id: opts.ARTSY_ID, client_secret: opts.ARTSY_SECRET, grant_type: 'oauth_token', oauth_token: token, oauth_token_secret: tokenSecret, oauth_provider: 'twitter' }).end(onAccessToken(req, done, { oauth_token: token, oauth_token_secret: tokenSecret, provider: 'twitter', email: opts.twitterSignupTempEmail(token, tokenSecret, profile), name: profile != null ? profile.displayName : void 0 })); } }; onAccessToken = function(req, done, params) { return function(err, res) { var msg, ref, ref1; if (err && !(res != null ? res.body : void 0) || !err && (res != null ? res.status : void 0) > 400) { err = new Error("Gravity returned a generic " + res.status + " html page"); } if (!err && ((res != null ? res.body.access_token : void 0) == null)) { err = new Error("Gravity returned no access token and no error"); } if (err != null) { err.message = msg = (res != null ? (ref = res.body) != null ? ref.error_description : void 0 : void 0) || (res != null ? (ref1 = res.body) != null ? ref1.error : void 0 : void 0) || (res != null ? res.text : void 0) || err.stack || err.toString(); } if (!err) { return done(null, new opts.CurrentUser({ accessToken: res.body.access_token })); } else if ((params != null ? params.provider : void 0) === 'twitter' && (msg.match('no account linked') != null)) { err = new Error("No Twitter account found, please sign up"); return done(err); } else if (msg.match('no account linked') != null) { req.artsyPassportSignedUp = true; return request.post(opts.ARTSY_URL + '/api/v1/user').send(params).set({ 'User-Agent': req.get('user-agent') }).set({ 'X-Xapp-Token': artsyXapp.token }).end(function(err) { if (err) { return done(err); } return request.post(opts.ARTSY_URL + "/oauth2/access_token").set({ 'User-Agent': req.get('user-agent') }).query(_.extend(params, { client_id: opts.ARTSY_ID, client_secret: opts.ARTSY_SECRET, grant_type: 'oauth_token', oauth_provider: params.provider })).end(onAccessToken(req, done, params)); }); } else { console.warn("Error requesting an access token from Artsy '" + msg + "'"); return done(err); } }; }; }).call(this);