Loading bridgedb/metrics.py +10 −7 Original line number Diff line number Diff line Loading @@ -83,17 +83,20 @@ def setSupportedTransports(supportedTransports): SUPPORTED_TRANSPORTS = supportedTransports def isTransportSupported(transport): """Return `True' if the given transport is supported or `False' otherwise. def isBridgeTypeSupported(bridgeType): """Return `True' or `False' depending on if the given bridge type is supported. :param str transport: The transport protocol. :param str bridgeType: The bridge type, e.g., "vanilla" or "obfs4". """ if SUPPORTED_TRANSPORTS is None: logging.error("Bug: Variable SUPPORTED_TRANSPORTS is None.") return False return transport in SUPPORTED_TRANSPORTS # Note that "vanilla" isn't a transport protocol (in fact, it's the absence # of a transport), which is why it isn't in SUPPORTED_TRANSPORTS. return (bridgeType in SUPPORTED_TRANSPORTS) or (bridgeType == "vanilla") def export(fh, measurementInterval): Loading Loading @@ -334,7 +337,7 @@ class HTTPSMetrics(Metrics): # BridgeDB's HTTPS interface exposes transport types as a drop down # menu but users can still request anything by manipulating HTTP # parameters. if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over HTTPS." % bridgeType) return Loading Loading @@ -393,7 +396,7 @@ class EmailMetrics(Metrics): # Over email, transports are requested by typing them. Typos happen # and users can request anything, really. if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over email." % bridgeType) return Loading Loading @@ -439,7 +442,7 @@ class MoatMetrics(Metrics): logging.warning("Could not decode request: %s" % err) return if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over moat." % bridgeType) return Loading bridgedb/test/test_metrics.py +11 −0 Original line number Diff line number Diff line Loading @@ -202,3 +202,14 @@ class StateTest(unittest.TestCase): key2 = "moat.obfs4.us.fail.none" self.assertTrue(metrix.hotMetrics[key1] == 1) self.assertTrue(metrix.hotMetrics[key2] == 1) def test_is_bridge_type_supported(self): oldTransports = metrics.SUPPORTED_TRANSPORTS metrics.setSupportedTransports({}) self.assertFalse(metrics.isBridgeTypeSupported("obfs4")) metrics.setSupportedTransports(oldTransports) self.assertTrue(metrics.isBridgeTypeSupported("obfs4")) self.assertTrue(metrics.isBridgeTypeSupported("vanilla")) self.assertFalse(metrics.isBridgeTypeSupported("xxx")) Loading
bridgedb/metrics.py +10 −7 Original line number Diff line number Diff line Loading @@ -83,17 +83,20 @@ def setSupportedTransports(supportedTransports): SUPPORTED_TRANSPORTS = supportedTransports def isTransportSupported(transport): """Return `True' if the given transport is supported or `False' otherwise. def isBridgeTypeSupported(bridgeType): """Return `True' or `False' depending on if the given bridge type is supported. :param str transport: The transport protocol. :param str bridgeType: The bridge type, e.g., "vanilla" or "obfs4". """ if SUPPORTED_TRANSPORTS is None: logging.error("Bug: Variable SUPPORTED_TRANSPORTS is None.") return False return transport in SUPPORTED_TRANSPORTS # Note that "vanilla" isn't a transport protocol (in fact, it's the absence # of a transport), which is why it isn't in SUPPORTED_TRANSPORTS. return (bridgeType in SUPPORTED_TRANSPORTS) or (bridgeType == "vanilla") def export(fh, measurementInterval): Loading Loading @@ -334,7 +337,7 @@ class HTTPSMetrics(Metrics): # BridgeDB's HTTPS interface exposes transport types as a drop down # menu but users can still request anything by manipulating HTTP # parameters. if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over HTTPS." % bridgeType) return Loading Loading @@ -393,7 +396,7 @@ class EmailMetrics(Metrics): # Over email, transports are requested by typing them. Typos happen # and users can request anything, really. if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over email." % bridgeType) return Loading Loading @@ -439,7 +442,7 @@ class MoatMetrics(Metrics): logging.warning("Could not decode request: %s" % err) return if not isTransportSupported(bridgeType): if not isBridgeTypeSupported(bridgeType): logging.warning("User requested unsupported transport type %s " "over moat." % bridgeType) return Loading
bridgedb/test/test_metrics.py +11 −0 Original line number Diff line number Diff line Loading @@ -202,3 +202,14 @@ class StateTest(unittest.TestCase): key2 = "moat.obfs4.us.fail.none" self.assertTrue(metrix.hotMetrics[key1] == 1) self.assertTrue(metrix.hotMetrics[key2] == 1) def test_is_bridge_type_supported(self): oldTransports = metrics.SUPPORTED_TRANSPORTS metrics.setSupportedTransports({}) self.assertFalse(metrics.isBridgeTypeSupported("obfs4")) metrics.setSupportedTransports(oldTransports) self.assertTrue(metrics.isBridgeTypeSupported("obfs4")) self.assertTrue(metrics.isBridgeTypeSupported("vanilla")) self.assertFalse(metrics.isBridgeTypeSupported("xxx"))