Skip to content
Snippets Groups Projects
tl-bridgedb.jsm 26.24 KiB
// Copyright (c) 2020, The Tor Project, Inc.
// See LICENSE for licensing information.
//
// vim: set sw=2 sts=2 ts=8 et syntax=javascript:

/*************************************************************************
 * Tor Launcher BridgeDB Communication Module
 * https://github.com/isislovecruft/bridgedb/#accessing-the-moat-interface
 *************************************************************************/

let EXPORTED_SYMBOLS = [ "TorLauncherBridgeDB" ];

const Cc = Components.classes;
const Ci = Components.interfaces;
const Cr = Components.results;
const Cu = Components.utils;

Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Subprocess.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");

XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherUtil",
                          "resource://torlauncher/modules/tl-util.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "TorLauncherLogger",
                          "resource://torlauncher/modules/tl-logger.jsm");

let TorLauncherBridgeDB =  // Public
{
  get isMoatConfigured()
  {
    let pref = _MoatRequestor.prototype.kPrefMoatService;
    return !!TorLauncherUtil.getCharPref(pref);
  },

  // Returns an _MoatRequestor object.
  createMoatRequestor: function()
  {
    return new _MoatRequestor();
  },

  // Extended Error object which is used when we have a numeric code and
  // a text error message.
  error: function(aCode, aMessage)
  {
    this.code = aCode;
    this.message = aMessage;
  },

  errorCodeBadCaptcha: 419
};

TorLauncherBridgeDB.error.prototype = Error.prototype;  // subclass Error

Object.freeze(TorLauncherBridgeDB);


function _MoatRequestor()
{
}

_MoatRequestor.prototype =
{
  kMaxResponseLength: 1024 * 400,
  kMoatContentType: "application/vnd.api+json",
  kMoatVersion: "0.1.0",
  kPrefBridgeDBFront: "extensions.torlauncher.bridgedb_front",
  kPrefBridgeDBReflector: "extensions.torlauncher.bridgedb_reflector",
  kPrefMoatService: "extensions.torlauncher.moat_service",
  kMoatFetchURLPath: "/fetch",
  kMoatFetchRequestType: "client-transports",