201 строка
5.9 KiB
JavaScript
201 строка
5.9 KiB
JavaScript
/*!
|
|
* Copyright (C) 2010-2016, Microsoft Corporation
|
|
*
|
|
* This program is licensed to you under the terms of Version 2.0 of the
|
|
* Apache License. This program is distributed WITHOUT
|
|
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
|
|
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
|
|
* Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) for more
|
|
* details.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var deployr = require('deployr'),
|
|
common = require('flatiron').common;
|
|
|
|
/**
|
|
* Top-level include for the `deployr-cli-users` module.
|
|
*
|
|
* @mixin
|
|
* @alias plugins/deployr-cli-users
|
|
*/
|
|
var cliUsers = exports;
|
|
|
|
/**
|
|
* Expose the plugin `commands`.
|
|
*/
|
|
cliUsers.commands = require('./commands');
|
|
|
|
/**
|
|
* Expose the plugin name _cli-users_.
|
|
* @property {String} name - The plugin name.
|
|
*/
|
|
cliUsers.name = 'cli-users';
|
|
|
|
/**
|
|
* Attaches the `deployr-cli-users` behavior to the application.
|
|
* @param {Object} options - The options object literal to use when attaching.
|
|
*/
|
|
cliUsers.attach = function(options) {
|
|
var app = this;
|
|
options = options || {};
|
|
|
|
if (!app.plugins.cli) {
|
|
throw new Error('`inquirer` plugin is required to use `deployr-cli-users`');
|
|
} else if (!app.config) {
|
|
throw new Error('`app.config` must be set to use `deployr-cli-users`');
|
|
}
|
|
|
|
/**
|
|
* Setup state from the application attached to.
|
|
* @property {Object} app - The application.
|
|
*/
|
|
cliUsers.app = app;
|
|
cliUsers.after = options.after || {};
|
|
cliUsers.before = options.before || {};
|
|
common.templateUsage(app, cliUsers.commands);
|
|
|
|
//
|
|
// Add the necessary `<app> users *` commands
|
|
//
|
|
app.commands['users'] = app.commands['users'] || {};
|
|
app.commands['users'] = common.mixin(app.commands['users'], cliUsers.commands);
|
|
|
|
//
|
|
// Setup aliases for `<app> users *` commands.
|
|
//
|
|
app.alias('login', {
|
|
resource: 'users',
|
|
command: 'login'
|
|
});
|
|
app.alias('logout', {
|
|
resource: 'users',
|
|
command: 'logout'
|
|
});
|
|
app.alias('whoami', {
|
|
resource: 'users',
|
|
command: 'whoami'
|
|
});
|
|
|
|
/**
|
|
* Attempts to authenicate the user in DeployR.
|
|
*
|
|
* @memberof plugins/deployr-cli-users
|
|
* @protected
|
|
* @param {Function} callback - Continuation to pass control to when
|
|
* complete.
|
|
*/
|
|
app.auth = function(callback) {
|
|
var response, error, username, attempts = 0;
|
|
|
|
// assert there is a DeployR endpoint
|
|
if (!app.config.get('endpoint')) {
|
|
app.commands.endpoint(function(n) {
|
|
app.auth(callback);
|
|
});
|
|
return;
|
|
}
|
|
|
|
app.prompt.inquirer([{
|
|
name: 'username',
|
|
type: 'input',
|
|
message: 'Username:',
|
|
default: app.config.get('username') || null,
|
|
validate: function(input) {
|
|
username = input;
|
|
return input.length >= 3 || ' Please enter a valid username';
|
|
}
|
|
}, {
|
|
name: 'password',
|
|
type: 'password',
|
|
message: 'Password:',
|
|
validate: function(input) {
|
|
var done = this.async();
|
|
|
|
if (!input) {
|
|
done('Permission denied, please try again.');
|
|
return;
|
|
}
|
|
|
|
deployr.configure({ host: app.config.get('endpoint') })
|
|
.io('/r/user/login')
|
|
.data({ username: username, password: input })
|
|
.error(function(err) {
|
|
error = err;
|
|
|
|
//
|
|
// - Connection errors
|
|
// - 940 Authentication Error: username/password
|
|
// credentials provided are invalid.
|
|
//
|
|
if (!err.deployr) {
|
|
error = 'Cannot establish connection to "' +
|
|
app.config.get('endpoint') + '"';
|
|
} else if (err.get('errorCode') === 940) {
|
|
//
|
|
// Attempt to get the password three times.
|
|
//
|
|
attempts += 1;
|
|
|
|
if (attempts >= 3) {
|
|
error = 'Three failed login attempts.';
|
|
} else {
|
|
done('Permission denied, please try again.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
done(true);
|
|
})
|
|
.end(function(res) {
|
|
response = res;
|
|
error = null;
|
|
done(true);
|
|
});
|
|
}
|
|
}], function() {
|
|
callback(error, response);
|
|
}.bind(this));
|
|
};
|
|
|
|
/**
|
|
* Attempts to unauthenticate the user from DeployR.
|
|
*
|
|
* @memberof plugins/deployr-cli-users
|
|
* @protected
|
|
* @param {Function} callback - Continuation to pass control to when
|
|
* complete.
|
|
*/
|
|
app.unauth = function(callback) {
|
|
var endpoint = app.config.get('endpoint');
|
|
|
|
if (endpoint) {
|
|
deployr.configure({
|
|
host: endpoint,
|
|
cookies: ['JSESSIONID=' + app.config.get('cookie')],
|
|
sticky: true
|
|
})
|
|
.io('/r/user/logout')
|
|
.end()
|
|
.ensure(function() { callback(); });
|
|
} else {
|
|
callback();
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Detaches this plugin from the application.
|
|
*/
|
|
cliUsers.detach = function() {
|
|
var app = this;
|
|
|
|
Object.keys(app.commands['users']).forEach(function(method) {
|
|
if (cliUsers.commands[method]) {
|
|
delete app.commands['config'][method];
|
|
}
|
|
|
|
cliUsers.commands.app = null;
|
|
});
|
|
}; |