// Generated by IcedCoffeeScript 1.7.1-f
(function() {
  var GetIndex, a_json_parse, chain, constants, iced, log, make_esc, unix_time, __iced_k, __iced_k_noop, _ref;

  iced = require('iced-runtime');
  __iced_k = __iced_k_noop = function() {};

  make_esc = require('iced-error').make_esc;

  _ref = require('iced-utils').util, chain = _ref.chain, unix_time = _ref.unix_time, a_json_parse = _ref.a_json_parse;

  constants = require('./constants').constants;

  log = require('./log');

  exports.GetIndex = GetIndex = (function() {
    function GetIndex(config) {
      this.config = config;
    }

    GetIndex.prototype.fetch = function(cb) {
      var err, res, ___iced_passed_deferral, __iced_deferrals, __iced_k;
      __iced_k = __iced_k_noop;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      (function(_this) {
        return (function(__iced_k) {
          __iced_deferrals = new iced.Deferrals(__iced_k, {
            parent: ___iced_passed_deferral,
            filename: "/home/max/src/keybase/node-installer/src/get_index.iced",
            funcname: "GetIndex.fetch"
          });
          _this.config.request("/sig/files/" + (_this.config.key_version()) + "/index.asc", __iced_deferrals.defer({
            assign_fn: (function(__slot_1) {
              return function() {
                err = arguments[0];
                res = arguments[1];
                return __slot_1._signed_index = arguments[2];
              };
            })(_this),
            lineno: 15
          }));
          __iced_deferrals._fulfill();
        });
      })(this)((function(_this) {
        return function() {
          return cb(err);
        };
      })(this));
    };

    GetIndex.prototype.verify = function(cb) {
      var a, b, err, now, t, ___iced_passed_deferral, __iced_deferrals, __iced_k;
      __iced_k = __iced_k_noop;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      now = unix_time();
      (function(_this) {
        return (function(__iced_k) {
          __iced_deferrals = new iced.Deferrals(__iced_k, {
            parent: ___iced_passed_deferral,
            filename: "/home/max/src/keybase/node-installer/src/get_index.iced",
            funcname: "GetIndex.verify"
          });
          _this.config.oneshot_verify({
            which: 'index',
            sig: _this._signed_index
          }, __iced_deferrals.defer({
            assign_fn: (function(__slot_1) {
              return function() {
                err = arguments[0];
                return __slot_1._index = arguments[1];
              };
            })(_this),
            lineno: 22
          }));
          __iced_deferrals._fulfill();
        });
      })(this)((function(_this) {
        return function() {
          var _ref1, _ref2;
          err = err != null ? err : (t = _this._index.timestamp) == null ? new Error("Bad index; no timestamp") : (a = now - t) > (b = constants.index_timeout) ? new Error("Index timed out: " + a + " > " + b) : ((_ref1 = _this._index.keys) != null ? _ref1.latest : void 0) == null ? new Error("missing required field: keys.latest") : ((_ref2 = _this._index["package"]) != null ? _ref2.latest : void 0) == null ? new Error("missing required field: package.latest") : null;
          return cb(err);
        };
      })(this));
    };

    GetIndex.prototype.run = function(cb) {
      var esc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
      __iced_k = __iced_k_noop;
      ___iced_passed_deferral = iced.findDeferral(arguments);
      log.debug("+ GetIndex::run");
      esc = make_esc(cb, "GetIndex::run");
      (function(_this) {
        return (function(__iced_k) {
          __iced_deferrals = new iced.Deferrals(__iced_k, {
            parent: ___iced_passed_deferral,
            filename: "/home/max/src/keybase/node-installer/src/get_index.iced",
            funcname: "GetIndex.run"
          });
          _this.fetch(esc(__iced_deferrals.defer({
            lineno: 36
          })));
          __iced_deferrals._fulfill();
        });
      })(this)((function(_this) {
        return function() {
          (function(__iced_k) {
            __iced_deferrals = new iced.Deferrals(__iced_k, {
              parent: ___iced_passed_deferral,
              filename: "/home/max/src/keybase/node-installer/src/get_index.iced",
              funcname: "GetIndex.run"
            });
            _this.verify(esc(__iced_deferrals.defer({
              lineno: 37
            })));
            __iced_deferrals._fulfill();
          })(function() {
            _this.config.set_index(_this._index);
            log.debug("- GetIndex::run");
            return cb(null);
          });
        };
      })(this));
    };

    return GetIndex;

  })();

}).call(this);