jsbin/lib/features.js
Fabien O'Carroll 3c68b0559a Merge branch 'feature/process-fork-messaging' of git://github.com/jsbin/jsbin
* 'feature/process-fork-messaging' of git://github.com/jsbin/jsbin: (54 commits)
  move zmq to optional deps
  dont send options to zmq
  pass type to jobsworth
  pass access token, not user
  only start dropbox if we initialize it
  dont pass app to dropbox initialize
  Update flash message text
  Add link to dropbox button
  Stringify options before sending
  put /auth/dropbox behind a feature flag
  Add dropbox feature
  Stringify object before sending
  add zmq as dependancy
  revert removal of template
  update dropbox for zmq/jobsworth
  Add commented out debugger
  move callback url to config
  access_token => accessToken
  Remove parent.js
  Add flash message to confirm dropbox linking
  ...

Conflicts:
	lib/addons/memcached/index.js
	lib/features.js
	package.json
2014-04-09 16:56:32 +01:00

116 lines
2.6 KiB
JavaScript

/**
* usage:
*
* var features = require('./features');
*
* if (features('alpha', req)) {
* // do alpha features
* }
*
* // as an express route handler - if it fails the feature test then
* // the user will see a 404 (in this case, you can catch /cool-feature, and
* // express will call the second handler)
* app.get('/cool-feature', features.route('alpha'), function (req, res) {
* res.render('cool-feature');
* });
*
* // as a hbs template (defined in ./hbs.js)
* {{#feature user "alpha"}}You are part of the cool gang{{/feature}}
*/
'use strict';
var Features = require('feature-gateway'),
undefsafe = require('undefsafe'),
options = require('./config');
var teamjsbin = ['rem', 'allouis', 'yandle', 'electric_g'];
var alphausers = teamjsbin.concat(['stuartlangridge', 'slexaxton', 'reybango', 'phuu', 'agcolom', 'glennjones', 'rossbruniges', 'andrewnez', 'chrismahon', 'brianleroux', 'jed', 'iancrowther', 'jakearchibald']);
/* Begin: user types */
function alpha(req) {
var name = undefsafe(req, 'session.user.name');
if (name) {
return alphausers.indexOf(name) !== -1;
}
return false;
}
function beta(req) {
return undefsafe(req, 'session.user.beta');
}
function team(req) {
var name = undefsafe(req, 'session.user.name');
if (name) {
return teamjsbin.indexOf(name) !== -1;
}
return false;
}
function pro(req) {
return flags.alpha(req) || undefsafe(req, 'session.user.pro');
}
/* End: user types */
var flags = {
/* Begin: actual features */
github: function () {
return options.github && options.github.id;
},
// private bins
private: function (req) {
return alpha(req); // pro
},
// whether user can delete bins
delete: true, // live 25 Feb 2014
// allows for sandbox play in a bin without actually saving
sandbox: function (req) {
return alpha(req); // pro
},
// info/hover card with details of bin and streaming info
infocard: function (req) {
return alpha(req);
},
// seperate account management pages
accountPages: function (req) {
return alpha(req);
},
// use SSL for sign in
sslLogin: true,
// using memcache for sessions
serverSession: true,
// code-analysis engine for javascript panel
tern: function (req) {
return alpha(req);
},
stripe: function (req) {
return team(req);
},
vanity: function (req) {
return alpha(req); // return pro(req);
},
dropbox: function (req) {
return alpha(req);
}
};
var features = module.exports = new Features(flags);
features.log = function () {
// console.log.apply(console, [].slice.apply(arguments));
};