keybase-proofs
Version:
Publicly-verifiable proofs of identity
245 lines (219 loc) • 8.42 kB
JavaScript
// Generated by IcedCoffeeScript 108.0.11
(function() {
var BaseScraper, DnsScraper, constants, decode_sig, dns, iced, make_ids, txt_reformat, urlmod, v_codes, __iced_k, __iced_k_noop,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
__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; };
iced = require('iced-runtime');
__iced_k = __iced_k_noop = function() {};
BaseScraper = require('./base').BaseScraper;
constants = require('../constants').constants;
v_codes = constants.v_codes;
decode_sig = require('kbpgp').ukm.decode_sig;
urlmod = require('url');
make_ids = require('../base').make_ids;
urlmod = require('url');
dns = require('dns');
txt_reformat = function(v) {
var sv, _i, _len, _results;
if (v == null) {
return [];
} else if (v.length === 0) {
return v;
} else if (Array.isArray(v[0])) {
_results = [];
for (_i = 0, _len = v.length; _i < _len; _i++) {
sv = v[_i];
_results.push(sv[0]);
}
return _results;
} else {
return v;
}
};
exports.DnsScraper = DnsScraper = (function(_super) {
__extends(DnsScraper, _super);
function DnsScraper(opts) {
DnsScraper.__super__.constructor.call(this, opts);
}
DnsScraper.prototype._check_args = function(args) {
if (!(args.domain != null)) {
return new Error("Bad args to DNS proof: no domain given");
} else {
return null;
}
};
DnsScraper.prototype.make_url = function(_arg) {
var domain;
domain = _arg.domain;
return "dns://" + (domain.toLowerCase());
};
DnsScraper.prototype.url_to_domain = function(u) {
var _ref;
return (_ref = urlmod.parse(u)) != null ? _ref.hostname : void 0;
};
DnsScraper.prototype.get_tor_error = function() {
return [new Error("DNS isn't reliable over tor"), v_codes.TOR_SKIPPED];
};
DnsScraper.prototype.hunt2 = function(_arg, cb) {
var domain, err, out, url;
domain = _arg.domain;
err = null;
out = {};
if (domain == null) {
err = new Error("invalid arguments: expected a domain");
} else {
url = this.make_url({
domain: domain
});
out = {
api_url: url,
human_url: url,
remote_id: url,
rc: v_codes.OK
};
}
return cb(err, out);
};
DnsScraper.prototype._check_api_url = function(_arg) {
var api_url, domain;
api_url = _arg.api_url, domain = _arg.domain;
return api_url.toLowerCase().indexOf(this.make_url({
domain: domain
})) >= 0;
};
DnsScraper.prototype._validate_text_check = function(_arg) {
var err, med_id, msg, proof_text_check, signature, _ref;
signature = _arg.signature, proof_text_check = _arg.proof_text_check;
_ref = decode_sig({
armored: signature
}), err = _ref[0], msg = _ref[1];
if (err == null) {
med_id = make_ids(msg.body).med_id;
if (proof_text_check.indexOf(med_id) < 0) {
err = new Error("Bad payload text_check");
}
}
return err;
};
DnsScraper.prototype.check_status = function(_arg, cb) {
var api_url, d, domain, err, proof_text_check, rc, search_domains, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
api_url = _arg.api_url, proof_text_check = _arg.proof_text_check;
rc = err = null;
(function(_this) {
return (function(__iced_k) {
if ((domain = _this.url_to_domain(api_url)) == null) {
err = new Error("no domain found in URL " + api_url);
return __iced_k(rc = v_codes.CONTENT_FAILURE);
} else {
search_domains = [domain, ["_keybase", domain].join(".")];
(function(__iced_k) {
var _i, _len, _ref, _results, _while;
_ref = search_domains;
_len = _ref.length;
_i = 0;
_while = function(__iced_k) {
var _break, _continue, _next;
_break = __iced_k;
_continue = function() {
return iced.trampoline(function() {
++_i;
return _while(__iced_k);
});
};
_next = _continue;
if (!(_i < _len)) {
return _break();
} else {
d = _ref[_i];
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/michal/SourceCode/keybase/go/src/github.com/keybase/server_test_progs/proofs/src/scrapers/dns.iced",
funcname: "DnsScraper.check_status"
});
_this._check_status({
domain: d,
proof_text_check: proof_text_check
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return rc = arguments[1];
};
})(),
lineno: 93
}));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
if (rc === v_codes.OK) {
(function(__iced_k) {
_break()
})(__iced_k);
} else {
return __iced_k();
}
})(_next);
});
}
};
_while(__iced_k);
})(__iced_k);
}
});
})(this)((function(_this) {
return function() {
return cb(err, rc);
};
})(this));
};
DnsScraper.prototype._resolve_txt = function(domain, cb) {
var dnslib, err;
dnslib = this.libs.dns || dns;
try {
return dnslib.resolveTxt(domain, function(err, records) {
return cb(err, records);
});
} catch (_error) {
err = _error;
return cb(err);
}
};
DnsScraper.prototype._check_status = function(_arg, cb) {
var domain, err, proof_text_check, rc, records, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
domain = _arg.domain, proof_text_check = _arg.proof_text_check;
this.log("+ DNS check for " + domain);
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/michal/SourceCode/keybase/go/src/github.com/keybase/server_test_progs/proofs/src/scrapers/dns.iced",
funcname: "DnsScraper._check_status"
});
_this._resolve_txt(domain, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return records = arguments[1];
};
})(),
lineno: 115
}));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
rc = typeof err !== "undefined" && err !== null ? (_this.log("| DNS error: " + err), v_codes.DNS_ERROR) : (__indexOf.call(txt_reformat(records), proof_text_check) >= 0) ? v_codes.OK : (_this.log("| DNS failed; found TXT entries: " + (JSON.stringify(records))), v_codes.NOT_FOUND);
_this.log("- DNS check for " + domain + " -> " + rc);
return cb(err, rc);
};
})(this));
};
return DnsScraper;
})(BaseScraper);
}).call(this);