kopia lustrzana https://github.com/c9/core
120 wiersze
3.7 KiB
JavaScript
120 wiersze
3.7 KiB
JavaScript
define(function(require, exports, module) {
|
|
main.consumes = ["Plugin", "http"];
|
|
main.provides = ["auth.bootstrap"];
|
|
return main;
|
|
|
|
function main(options, imports, register) {
|
|
var Plugin = imports.Plugin;
|
|
var http = imports.http;
|
|
|
|
var fs = require("fs");
|
|
var _read = require("read");
|
|
|
|
/***** Initialization *****/
|
|
|
|
var plugin = new Plugin("Ajax.org", main.consumes);
|
|
|
|
// TODO read from options
|
|
var AUTHURL = options.authUrl;
|
|
var AUTHPATH = process.env.HOME + "/.c9/.auth";
|
|
var lastToken;
|
|
|
|
/***** Methods *****/
|
|
|
|
function read(options, cb) {
|
|
_read(options, function(err, result) {
|
|
if (err && err.message == 'canceled') {
|
|
console.log("\n");
|
|
if (options.retry)
|
|
return process.exit(1);
|
|
else {
|
|
options.retry = 1;
|
|
console.log("(^C again to quit)");
|
|
return read(options, cb);
|
|
}
|
|
}
|
|
cb(err, result);
|
|
});
|
|
}
|
|
|
|
function readCredentials(callback){
|
|
read({
|
|
prompt: "Cloud9 Username:"
|
|
}, function(error, username) {
|
|
if (error) return callback(error);
|
|
if (!username) {
|
|
console.error("username is required");
|
|
return process.exit(1);
|
|
}
|
|
read({
|
|
prompt: "Password:",
|
|
silent: true,
|
|
replace: "*"
|
|
}, function(error, password) {
|
|
if (error) return callback(error);
|
|
|
|
callback(null, { username: username, password: password });
|
|
});
|
|
});
|
|
}
|
|
|
|
function login(callback){
|
|
fs.readFile(AUTHPATH, { encoding: "utf8" }, function(err, data){
|
|
if (err || !data || lastToken == data) {
|
|
_login(callback);
|
|
}
|
|
else {
|
|
lastToken = data;
|
|
callback(null, data);
|
|
}
|
|
});
|
|
}
|
|
|
|
function _login(callback){
|
|
readCredentials(function(err, credentials){
|
|
if (err) return callback(err);
|
|
|
|
// Retrieve token
|
|
http.request(AUTHURL + "/api/nc/auth", {
|
|
method: "POST",
|
|
contentType: "application/json",
|
|
body: {
|
|
username: credentials.username,
|
|
password: credentials.password,
|
|
client_id: "cli"
|
|
}
|
|
}, function(err, token) {
|
|
if (err) {
|
|
var message = /id="error_header">([^<]*)</.exec(err.message);
|
|
console.error(message ? message[1] : err.message || err, "\n");
|
|
return callback(err);
|
|
}
|
|
|
|
fs.writeFile(AUTHPATH, token, function(err){
|
|
if (err) return callback(err);
|
|
callback(null, lastToken = token);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
/***** Register and define API *****/
|
|
|
|
/**
|
|
* Finds or lists files and/or lines based on their filename or contents
|
|
**/
|
|
plugin.freezePublicAPI({
|
|
/**
|
|
*
|
|
*/
|
|
login: login
|
|
});
|
|
|
|
register(null, {
|
|
"auth.bootstrap": plugin
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
//require("node-optimist");
|