Verified Commit 4a11c2b4 authored by meskio's avatar meskio 🏔️
Browse files

Support multiple shim tokens

parent de9c15da
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -165,11 +165,14 @@ def loadConfig(configFile=None, configCls=None):

    if os.path.isfile(config.MOAT_SHIM_TOKEN_FILE):
        with open(config.MOAT_SHIM_TOKEN_FILE) as f:
            setattr(config, "MOAT_SHIM_TOKEN", f.read())
            tokens = f.read().split("\n")
            while "" in tokens:
                tokens.remove("")
            setattr(config, "MOAT_SHIM_TOKENS", tokens)
        if not os.path.isfile(config.MOAT_DUMMY_BRIDGES_FILE):
            logging.warning("The dummy bridges file '%s' doesn't exist" % (config.MOAT_DUMMY_BRIDGES_FILE,))
    else:
        config.MOAT_SHIM_TOKEN = None
        config.MOAT_SHIM_TOKENS = []
        logging.info("No shim-token provided, moat will answer each request with bridge authority bridges.")

    return config
+6 −6
Original line number Diff line number Diff line
@@ -493,7 +493,7 @@ class CaptchaCheckResource(CaptchaResource):
    def __init__(self, distributor, schedule, N=1,
                 hmacKey=None, publicKey=None, secretKey=None,
                 useForwardedHeader=True, skipInvalid=False,
                 shim_token=None):
                 shim_tokens=None):
        """Create a new resource for checking CAPTCHA solutions and returning
        bridges to a client.

@@ -508,7 +508,7 @@ class CaptchaCheckResource(CaptchaResource):
            X-Forwarded-For header instead of the source IP address.
        :param bool skipInvalid: Skip invalid (e.g., loopback, private) addresses
            when parsing the X-Forwarded-For header.
        :param bytes shim_token: the token that should be included on the header
        :param bytes shim_tokens: a list of tokens that should be included on the header
            'shim-token' on each request or dummy bridges will be provided.
        """
        CaptchaResource.__init__(self, hmacKey, publicKey, secretKey,
@@ -517,7 +517,7 @@ class CaptchaCheckResource(CaptchaResource):
        self.schedule = schedule
        self.nBridgesToGive = N
        self.useForwardedHeader = useForwardedHeader
        self.shim_token = shim_token
        self.shim_tokens = shim_tokens

    def createBridgeRequest(self, ip, data):
        """Create an appropriate :class:`MoatBridgeRequest` from the ``data``
@@ -763,7 +763,7 @@ class CaptchaCheckResource(CaptchaResource):
            qrcode = None
            bridgeRequest = self.createBridgeRequest(clientIP, client_data)
            bridges = []
            dummyBridges = self.shim_token and request.getHeader('shim-token') == self.shim_token
            dummyBridges = self.shim_tokens and request.getHeader('shim-token') in self.shim_tokens
            bridges = self.getBridges(bridgeRequest, dummyBridges)
            bridgeLines = self.getBridgeLines(bridgeRequest, bridges)
            moatMetrix.recordValidMoatRequest(request)
@@ -837,7 +837,7 @@ def addMoatServer(config, distributor):
    fwdHeaders = config.MOAT_USE_IP_FROM_FORWARDED_HEADER
    numBridges = config.MOAT_BRIDGES_PER_ANSWER
    skipInvalid = config.MOAT_SKIP_LOOPBACK_ADDRESSES
    shim_token = config.MOAT_SHIM_TOKEN
    shim_tokens = config.MOAT_SHIM_TOKENS

    logging.info("Starting moat servers...")

@@ -868,7 +868,7 @@ def addMoatServer(config, distributor):
    check = CaptchaCheckResource(distributor, sched, numBridges,
                                 hmacKey, publicKey, secretKey,
                                 fwdHeaders, skipInvalid,
                                 shim_token)
                                 shim_tokens)

    moat.putChild(b"fetch", fetch)
    moat.putChild(b"check", check)
+1 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ MOAT_N_IP_CLUSTERS = %r
MOAT_ROTATION_PERIOD = %r
MOAT_GIMP_CAPTCHA_HMAC_KEYFILE = %r
MOAT_GIMP_CAPTCHA_RSA_KEYFILE = %r
MOAT_SHIM_TOKEN = ""
MOAT_SHIM_TOKENS = ""
""" % (GIMP_CAPTCHA_DIR,
       SERVER_PUBLIC_FQDN,
       SUPPORTED_TRANSPORTS,