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">([^<]*)