keybase-proofs
Version:
Publicly-verifiable proofs of identity
152 lines (133 loc) • 5.76 kB
JavaScript
// Generated by IcedCoffeeScript 108.0.11
(function() {
var BaseScraper, FacebookScraper, constants, decode_sig, iced, make_ids, url, 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; };
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;
make_ids = require('../base').make_ids;
url = require('url');
exports.FacebookScraper = FacebookScraper = (function(_super) {
__extends(FacebookScraper, _super);
function FacebookScraper(opts) {
FacebookScraper.__super__.constructor.call(this, opts);
}
FacebookScraper.prototype._check_args = function(args) {
if (!(args.username != null)) {
return new Error("Bad args to Facebook proof: no username given");
} else if (!(args.name != null) || (args.name !== 'facebook')) {
return new Error("Bad args to Facebook proof: type is " + args.name);
} else {
return null;
}
};
FacebookScraper.prototype.hunt2 = function(_arg, cb) {
var err, name, proof_text_check, username;
username = _arg.username, proof_text_check = _arg.proof_text_check, name = _arg.name;
err = new Error("hunt2 is a no-op for Facebook");
return cb(err, {});
};
FacebookScraper.prototype._convert_url_to_mobile = function(api_url) {
var desktop, mobile;
mobile = "https://m.facebook.com/";
desktop = "https://www.facebook.com/";
if (api_url.startsWith(desktop)) {
return api_url.replace(desktop, mobile);
} else {
return api_url;
}
};
FacebookScraper.prototype._check_api_url = function(_arg) {
var api_url, desktop_url, rxx, username;
api_url = _arg.api_url, username = _arg.username;
if (api_url == null) {
return false;
}
rxx = new RegExp("^https://m.facebook.com/" + username + "/posts/[0-9]+$", "i");
desktop_url = this._convert_url_to_mobile(api_url);
return desktop_url.match(rxx);
};
FacebookScraper.prototype.check_status = function(_arg, cb) {
var api_url, desktop_url, err, join_href, match, page$, post_text, proof_text_check, raw, rc, remote_id, rxx, username, username_from_join_href, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
username = _arg.username, api_url = _arg.api_url, proof_text_check = _arg.proof_text_check, remote_id = _arg.remote_id;
if (!this._check_api_url({
api_url: api_url,
username: username
})) {
this.log("Facebook post URL isn't valid for user " + username + ": " + api_url);
return cb(null, v_codes.CONTENT_FAILURE);
}
desktop_url = this._convert_url_to_mobile(api_url);
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/miles/go/src/github.com/keybase/proofs/src/scrapers/facebook.iced",
funcname: "FacebookScraper.check_status"
});
_this._get_url_body({
url: desktop_url
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
rc = arguments[1];
return raw = arguments[2];
};
})(),
lineno: 90
}));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
if ((typeof err !== "undefined" && err !== null) || rc !== v_codes.OK) {
return cb(err, rc);
}
page$ = _this.libs.cheerio.load(raw);
post_text = page$('#m_story_permalink_view h3.by.bz').eq(0).contents().text();
if (!post_text) {
return cb(null, v_codes.CONTENT_FAILURE);
}
if (proof_text_check !== post_text) {
return cb(null, v_codes.CONTENT_FAILURE);
}
join_href = page$('#mobile_login_bar div.u a').eq(0).attr('href');
if (!join_href) {
return cb(null, v_codes.CONTENT_FAILURE);
}
rxx = new RegExp("^/r\\.php\\?next=https.*facebook.com%2F([^/]*)%2Fposts.*$");
if ((match = join_href.match(rxx)) == null) {
return cb(null, v_codes.FAILED_PARSE);
}
username_from_join_href = match[1];
if (username_from_join_href !== username) {
return cb(null, v_codes.CONTENT_FAILURE);
}
return cb(null, v_codes.OK);
};
})(this));
};
FacebookScraper.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.split(/\s+/).indexOf(med_id) < 0) {
err = new Error("Cannot find " + med_id + " in " + proof_text_check);
}
}
return err;
};
return FacebookScraper;
})(BaseScraper);
}).call(this);