artsy-passport
Version:
Wires up the common auth handlers for Artsy's [Ezel](ezeljs.com)-based apps using [passport](http://passportjs.org/).
80 lines (70 loc) • 2.38 kB
JavaScript
// Generated by CoffeeScript 1.11.1
(function() {
var _, opts, passport, request;
_ = require('underscore');
passport = require('passport');
request = require('superagent');
opts = require('../options');
this.ensureEmail = function(req, res, next) {
var tmpSuffix;
if (req.user == null) {
return next();
}
tmpSuffix = _.last(opts.twitterSignupTempEmail('').split('@'));
if (req.user.get('email').match(tmpSuffix)) {
return res.redirect(opts.twitterLastStepPath);
} else {
return next();
}
};
this.login = function(req, res, next) {
if (req.user) {
return next();
}
return passport.authenticate('twitter', {
callbackURL: "" + opts.APP_URL + opts.twitterLastStepPath
})(req, res, next);
};
this.submit = function(req, res, next) {
if (!req.user) {
return next(new Error("No user"));
}
if (req.body.email == null) {
return next(new Error("No email provided"));
}
return request.put(opts.ARTSY_URL + "/api/v1/me").send({
email: req.body.email,
email_confirmation: req.body.email,
access_token: req.user.get('accessToken')
}).end(function(err, r) {
if (err) {
return next(err);
}
return request.put(opts.ARTSY_URL + "/api/v1/me").send({
access_token: req.user.get('accessToken')
}).end(function(err, r) {
if (err) {
return next(err);
}
return req.login(req.user.set(r.body), function(err) {
if (err) {
return next(err);
}
return res.redirect(opts.afterSignupPagePath);
});
});
});
};
this.error = function(err, req, res, next) {
var href, msg, ref, ref1;
if ((ref = err.text) != null ? ref.match('Error from MailChimp API') : void 0) {
return next();
}
msg = ((ref1 = err.response.body) != null ? ref1.error : void 0) || err.message || err.toString();
if (msg === 'User Already Exists') {
href = opts.logoutPath + "?redirect-to=" + opts.loginPagePath;
msg = "An account with this email address already exists. If this is " + "your account please " + "log in to Artsy with your email and password, and link your Twitter account" + "in your settings instead.";
}
return res.redirect(opts.twitterLastStepPath + '?error=' + msg);
};
}).call(this);