0.3.3 • Published 8 years ago

mozu-multipass v0.3.3

Weekly downloads
174
License
MIT
Repository
github
Last release
8 years ago

Mozu Multipass

npm.io

var Multipass = require('mozu-multipass');
var MozuNodeSDK = require('mozu-node-sdk');
var client = MozuNodeSDK.client(null, { plugins: [Multipass] })

The above gives you a Mozu Node SDK client that stores all its authentication tickets persistently in your home directory. This speeds up access, helps you avoid storing plaintext passwords, and in the best of circumstances, will ask you for your password maximum once every twenty-four hours.

It implements an API that the Mozu Node SDK will accept as an authenticationStorage parameter in the second argument to MozuNodeSDK.client(). The SDK's default authenticationStorage is in-memory, and does not persist between sessions or get shared between processes. Multipass fixes this by reimplementing the get and set methods with a backing store in your home directory, a file called .mozu.authentication-cache.json. This is invisible to the SDK and they work perfectly together. They're newlyweds. Just met. You know how it is. They bumped into each other, sparks happen.

Methods

Don't use these directly. They're here for illustrative purposes. They should plug into the SDK.

Get

// Three types of claim: developer, admin-user, application
// All require an app key in the context.
// developer requires a developerAccountId and developerAccount.emailAddress.
// admin-user requires a tenant and adminUser.emailAddress
multipass.get('developer', client.context, function(err, ticket) {
    // if no valid ticket exists, `ticket` will simply be undefined
});

Set

multipass.set('admin-user', client.context, ticket, function(err) {

});

Remove (optional extension)

multipass.remove('admin-user', client.context, function(err) {

});

Example Extension

You can extend Multipass easily, using regular old JavaScript techniques, to add cool features. Here's one that uses Inquirer to prompt for a developer password when it's time to get a developer ticket.

var Multipass = require('mozu-multipass');
var inquirer = require('inquirer');
function PromptingPass(client) {
  var proto = Multipass(client);
  var promptingPass = Object.create(proto);
  promptingPass.get = function(claimtype, context, callback) {
    return proto.get.call(this, claimtype, context, function(err, ticket) {
      if (claimtype === "developer" && !ticket && !context.developerAccount.password) {
        process.stdout.write('\u0007'); // ding!
        inquirer.prompt([{
          type: 'password',
          name: 'password',
          message: 'Developer password for ' + context.developerAccount.emailAddress + ':',
          validate: function(str) {
            return !!str;
          }
        }], function(answers) {
          context.developerAccount.password = answers.password;
          callback(null, null);
        });
      } else {
        callback(null, ticket);
      }
    });
  };
  return client.authenticationStorage = promptingPass;
};

var promptingClient = require('mozu-node-sdk').client(null, {
  plugins: [PromptingPass]
});
0.3.3

8 years ago

0.3.1

8 years ago

0.3.0

8 years ago

0.2.5

8 years ago

0.2.4

9 years ago

0.2.3

9 years ago

0.2.2

9 years ago

0.2.1

9 years ago

0.2.0

9 years ago

0.1.4

9 years ago

0.1.3

9 years ago