| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- // Generated by IcedCoffeeScript 1.7.1-c
- (function() {
- var Client, E, PackageJson, certs, dcopy, env, iced, k, log, m, proxyca, request, tor, urlmod, __iced_k, __iced_k_noop, _cli, _fn,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
- __slice = [].slice;
- iced = require('iced-runtime').iced;
- __iced_k = __iced_k_noop = function() {};
- request = require('request');
- env = require('./env').env;
- urlmod = require('url');
- E = require('./err').E;
- log = require('./log');
- certs = require('./ca').certs;
- PackageJson = require('./package').PackageJson;
- proxyca = require('./proxyca');
- tor = require('./tor');
- m = function(dict, method) {
- dict.method = method;
- return dict;
- };
- dcopy = function(d) {
- var k, out, v;
- out = {};
- for (k in d) {
- v = d[k];
- out[k] = v;
- }
- return out;
- };
- exports.Client = Client = (function() {
- function Client(headers) {
- this.headers = headers;
- this._cookies = {};
- this._session = null;
- this._csrf = null;
- this._warned = false;
- }
- Client.prototype.set_headers = function(h) {
- return this.headers = h;
- };
- Client.prototype.get_headers = function() {
- return this.headers;
- };
- Client.prototype.add_headers = function(d) {
- var k, v;
- this.headers || (this.headers = {});
- for (k in d) {
- v = d[k];
- this.headers[k] = v;
- }
- return true;
- };
- Client.prototype.set_session = function(s) {
- if (!tor.strict()) {
- this.add_headers({
- "X-Keybase-Session": s
- });
- return this._session = s;
- }
- };
- Client.prototype.clear_session = function() {
- this._session = null;
- if (this.headers != null) {
- return delete this.headers['X-Keybase-Session'];
- }
- };
- Client.prototype.clear_csrf = function() {
- this._csrf = null;
- if (this.headers != null) {
- return delete this.headers['X-CSRF-Token'];
- }
- };
- Client.prototype.set_csrf = function(c) {
- if (!tor.strict()) {
- this.add_headers({
- "X-CSRF-Token": c
- });
- return this._csrf = c;
- }
- };
- Client.prototype.get_session = function() {
- return this._session;
- };
- Client.prototype.get_csrf = function() {
- return this._csrf;
- };
- Client.prototype._find_cookies = function(res) {
- var cookie_line, name, parts, v, val, _i, _len, _ref, _ref1, _results;
- if ((v = (_ref = res.headers) != null ? _ref['set-cookie'] : void 0) != null) {
- _results = [];
- for (_i = 0, _len = v.length; _i < _len; _i++) {
- cookie_line = v[_i];
- parts = cookie_line.split("; ");
- if (parts.length) {
- _ref1 = parts[0].split("="), name = _ref1[0], val = _ref1[1];
- _results.push(this._cookies[name] = decodeURIComponent(val));
- } else {
- _results.push(void 0);
- }
- }
- return _results;
- }
- };
- Client.prototype.error_for_humans = function(_arg) {
- var err, host, port, uri, uri_fields;
- err = _arg.err, uri = _arg.uri, uri_fields = _arg.uri_fields;
- host = uri_fields.hostname;
- port = uri_fields.port;
- switch (err.code) {
- case 'ENOTFOUND':
- return new E.ReqNotFoundError("Host '" + host + "' wasn't found in DNS; check your network");
- case 'ECONNREFUSED':
- return new E.ReqConnRefusedError("Host '" + host + ":" + port + "' refused connection; maybe the server is down");
- default:
- return new E.ReqGenericError("Could not access URL: " + uri);
- }
- };
- Client.prototype.req = function(_arg, cb) {
- var args, body, ca, endpoint, err, http_status, jar, json, kb_status, method, need_cookie, opts, pathname, pcc, pjs, prx, res, search, tha, tls, tor_on, uri_fields, v, ___iced_passed_deferral, __iced_deferrals, __iced_k;
- __iced_k = __iced_k_noop;
- ___iced_passed_deferral = iced.findDeferral(arguments);
- method = _arg.method, endpoint = _arg.endpoint, args = _arg.args, http_status = _arg.http_status, kb_status = _arg.kb_status, pathname = _arg.pathname, search = _arg.search, json = _arg.json, jar = _arg.jar, need_cookie = _arg.need_cookie;
- method || (method = 'GET');
- tha = null;
- if ((tor_on = tor.enabled())) {
- tha = tor.hidden_address();
- log.debug("| Using tor hidden address: " + (JSON.stringify(tha)));
- }
- if (!(jar != null) && !(tor.strict()) && (need_cookie || !tor_on)) {
- jar = true;
- }
- if (json == null) {
- json = true;
- }
- opts = {
- method: method,
- json: json
- };
- if (jar != null) {
- opts.jar = jar;
- }
- opts.headers = this.headers != null ? dcopy(this.headers) : {};
- pjs = new PackageJson;
- opts.headers["X-Keybase-Client"] = pjs.identify_as();
- opts.headers["User-Agent"] = pjs.user_agent();
- kb_status || (kb_status = ["OK"]);
- http_status || (http_status = [200]);
- tls = !tor_on && !(env().get_no_tls());
- uri_fields = {
- protocol: "http" + (tls ? 's' : ''),
- hostname: tor_on ? tha.hostname : env().get_host(),
- port: tor_on ? tha.port : env().get_port(),
- pathname: pathname || [env().get_api_uri_prefix(), endpoint + ".json"].join("/"),
- search: search
- };
- if (method === 'GET' || method === 'DELETE') {
- uri_fields.query = args;
- }
- opts.uri = urlmod.format(uri_fields);
- if (method === 'POST') {
- opts.body = args;
- }
- log.debug("+ request to " + endpoint + " (" + opts.uri + ") (cookie=" + (!!jar) + ")");
- if ((prx = env().get_proxy()) != null) {
- log.debug("| using proxy " + prx);
- opts.proxy = prx;
- }
- if (!tls) {
- } else if ((opts.proxy != null) && ((pcc = proxyca.get()) != null)) {
- log.debug("| Using proxy CA certs " + (pcc.files().join(':')));
- opts.ca = pcc.data().concat([ca]);
- } else if ((ca = certs[uri_fields.hostname]) != null) {
- log.debug("| Adding a custom CA for host " + uri_fields.hostname + " when tls=" + tls);
- opts.ca = [ca];
- }
- tor.agent(opts);
- (function(_this) {
- return (function(__iced_k) {
- __iced_deferrals = new iced.Deferrals(__iced_k, {
- parent: ___iced_passed_deferral,
- filename: "/Users/max/src/keybase/node-client/src/req.iced",
- funcname: "Client.req"
- });
- request(opts, __iced_deferrals.defer({
- assign_fn: (function() {
- return function() {
- err = arguments[0];
- res = arguments[1];
- return body = arguments[2];
- };
- })(),
- lineno: 152
- }));
- __iced_deferrals._fulfill();
- });
- })(this)((function(_this) {
- return function() {
- var _ref, _ref1, _ref2, _ref3, _ref4;
- if (typeof err !== "undefined" && err !== null) {
- err = _this.error_for_humans({
- err: err,
- uri: opts.uri,
- uri_fields: uri_fields
- });
- } else if (!(_ref = res.statusCode, __indexOf.call(http_status, _ref) >= 0)) {
- if (res.statusCode === 400 && ((_ref1 = res.headers) != null ? _ref1["x-keybase-client-unsupported"] : void 0)) {
- v = res.headers["x-keybase-client-upgrade-to"];
- err = new E.RequiredUpgradeError("Upgrade is required! Run `keybase-installer` to upgrade to v" + v);
- err.upgrade_to = v;
- } else {
- err = new E.HttpError("Got reply " + res.statusCode);
- }
- } else if (json && !(_ref2 = typeof body !== "undefined" && body !== null ? (_ref3 = body.status) != null ? _ref3.name : void 0 : void 0, __indexOf.call(kb_status, _ref2) >= 0)) {
- err = new E.KeybaseError("" + body.status.desc + " (error #" + body.status.code + ")");
- err.fields = ((_ref4 = body.status) != null ? _ref4.fields : void 0) || {};
- opts.agent = null;
- log.debug("Full request: " + (JSON.stringify(opts)));
- log.debug("Full reply: " + (JSON.stringify(body)));
- } else {
- if (((v = res.headers["x-keybase-client-upgrade-to"]) != null) && !_this._warned) {
- log.warn("Upgrade suggested! Run `keybase-installer` to upgrade to v" + v);
- _this._warned = true;
- }
- _this._find_cookies(res);
- }
- log.debug("- request to " + endpoint + " -> " + err);
- return cb(err, body, res);
- };
- })(this));
- };
- Client.prototype.post = function(args, cb) {
- return this.req(m(args, "POST"), cb);
- };
- Client.prototype.get = function(args, cb) {
- return this.req(m(args, "GET"), cb);
- };
- Client.prototype.cookies = function() {
- return this._cookies;
- };
- return Client;
- })();
- exports.client = _cli = new Client();
- _fn = function(fname) {
- return exports[fname] = function() {
- var args;
- args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
- return _cli[fname].apply(_cli, args);
- };
- };
- for (k in Client.prototype) {
- _fn(k);
- }
- }).call(this);
|