Changes in version 0.11.0 - 2020-07-08 * FIXES https://bugs.torproject.org/31422 Make BridgeDB report internal metrics, like the median number of users that bridges were handed out to. * FIXES https://bugs.torproject.org/34260 Parse bridge blocking information from SQL database. * FIXES https://gitlab.torproject.org/tpo/anti-censorship/bridgedb/-/issues/40001 Remove the --reload command line switch. It doesn't actually do anything. * FIXES https://bugs.torproject.org/29184 Add a new configuration option, BLACKLISTED_TOR_VERSIONS, which contains a list of Tor versions. BridgeDB won't hand out bridges whose Tor version is present in this blacklist. * FIXES https://bugs.torproject.org/19774 Add a favicon to BridgeDB's web UI. Changes in version 0.10.1 - 2020-05-27 * FIXES https://bugs.torproject.org/33945 This patch fixes a bug that caused the email autoresponder to fail after a while. * FIXES https://bugs.torproject.org/34154 Add new fields to the SQLite table BlockedBridges in preparation for taking into account OONI's bridge measurement results. * FIXES https://bugs.torproject.org/31528 BridgeDB's UI uses a bunch of obscure "chatspeak" references in its UI. One example is that it responds with "Uh oh, spaghettios!" if there are currently no bridges available. While funny to some, this is difficult to translate and shouldn't be part of software that's used by an international audience. This patch removes such references. * FIXES https://bugs.torproject.org/12802 Add a script that sends a bridge request over email, and then checks if it received a response from BridgeDB. We use this script as part of our nagios setup, so we notice when our autoresponder breaks. * FIXES https://bugs.torproject.org/17548 This patch removes PGP support. BridgeDB's signing key expired on 2015-09-11. Nobody ever complained and maintaining the bits and pieces necessary to sign emails isn't worth the effort, so this patch removes that feature. * FIXES https://bugs.torproject.org/30941 Make our email responder more usable. This patch removes the concept of "valid" email commands and returns bridges (obfs4, for now) no matter what the user sends. BridgeDB still supports email commands in case the user needs a vanilla or IPv6 bridge. * FIXES https://bugs.torproject.org/29686 Rename files that contain "Bridges" to "bridgerings", to eliminate headache on file systems that are case insensitive. Changes in version 0.10.0 - 2020-04-01 * FIXES https://bugs.torproject.org/30317 Update our "howto" box, which explains how one adds bridges to Tor Browser. In addition to updating the instructions, this patch also links to instructions for Android. * FIXES https://bugs.torproject.org/33631 So far, BridgeDB remembered only the first distribution mechanism it ever learned for a given bridge. That means that if a bridge would change its mind and re-configure its distribution mechanism using BridgeDistribution, BridgeDB would ignore it. This patch changes this behavior, so bridges can actually change their distribution mechanism. * FIXES https://bugs.torproject.org/31967 Use a CSPRNG for selecting cached CAPTCHAs. * FIXES https://bugs.torproject.org/33008 Add an info page, available at bridges.torproject.org/info. Relay Search links to this info page to explain to bridge operators what their bridge distribution mechanism means. Changes in version 0.9.4 - 2020-02-19 * FIXES https://bugs.torproject.org/30946 This patch ports BridgeDB to Python 3. Python 2 is no longer supported since Jan 1, 2020. Changes in version 0.9.3 - 2020-02-18 * FIXES This patch disables the distribution of FTE, ScrambleSuit, and obfs3. Changes in version 0.9.2 - 2020-02-04 * FIXES This patch updates the AUTHORS file, HACKING.md, contact information, the Trac URL to report bugs, our instructions on BridgeDB's landing page, and it fixes a small bug in descriptor generation. Changes in version 0.9.1 - 2019-10-29 * FIXES https://bugs.torproject.org/32203 The metrics code used to weed out vanilla bridges, so they did not show up in our metrics. This patch fixes this issue. * FIXES https://bugs.torproject.org/32134 While implementing our language switcher (#26543), we added a new string, "Language", that requires translations. This patch adds a new translation request and also updates our instructions on how to request new translations. * FIXES https://bugs.torproject.org/32105 Mention an undocumented OS-level dependency: python3-dkim. Changes in version 0.9.0 - 2019-10-16 * FIXES https://bugs.torproject.org/26543 Implement a language switcher that allows users to override the locale that BridgeDB automatically selects by inspecting the client's request headers. Changes in version 0.8.3 - 2019-10-03 * FIXES https://bugs.torproject.org/31903 Update existing translations and request new translations. Thanks to all volunteers who helped translate BridgeDB! * FIXES https://bugs.torproject.org/31780 We implemented BridgeDB's metrics in #9316 but haven't specified its format until now. In addition to adding a specification, this patch also makes our implementation consistent with our (slightly updated) specification. * FIXES https://bugs.torproject.org/29484 Update BridgeDB's requirements to the latest respective versions. Among others, this patch set updates Twisted to 19.7.0, pyOpenSSL to 19.0.0, and replaces (the abandoned) PyCrypto with PyCryptodome, which fixes security vulnerabilities. Changes in version 0.8.2 - 2019-09-20 Updated translations for the following languages: bn, da, eo, fa, it, ko, nl, pt_BR, pt_PT, sr, zh_CN. Changes in version 0.8.1 - 2019-09-11 * FIXES https://bugs.torproject.org/17626 BridgeDB gets confused when users reply to a "get help" email. The issue is that BridgeDB interprets commands anywhere in the email body, even if it's in quoted text. To fix this issue, we are ignoring commands whose email body line starts with a '>' character, which is typically used for email quotes. * FIXES https://bugs.torproject.org/28533 The frontdesk is seeing plenty of empty bogus emails. This fix removes the email links and instead encourages users to take a look at the Tor Browser Manual and at our Support Portal. Changes in version 0.8.0 - 2019-08-20 * FIXES https://bugs.torproject.org/9316 Make BridgeDB export usage metrics every 24 hours. At the end of each 24-hour measurement interval, BridgeDB will append usage metrics to the file METRICS_FILE, which is configured in bridgedb.conf. Our metrics keep track of the number of (un)successful requests per transport type per country code (or email provider) per distribution method. This way, we get to learn that, say, over the last 24 hours there were 31-40 users in Iran who successfully requested an obfs4 bridge over Moat. * FIXES #26542 https://bugs.torproject.org/26542 Make BridgeDB distribute vanilla IPv6 bridges again. * FIXES #22755 https://bugs.torproject.org/22755 Use stem instead of leekspin to create test descriptors. We now don't need to depend on leekspin anymore. * FIXES #31252 https://bugs.torproject.org/31252 Add an anti-bot mechanism that allows us to detect bots by matching HTTP request headers for blacklisted patterns. For example, bots may have their Accept-Language set to "Klingon". Blacklisted patterns are configured in BLACKLISTED_REQUEST_HEADERS_FILE. When BridgeDB detects a bot request, we can answer their request with a decoy bridge that's only handed out to bots. Decoy bridges are configured in DECOY_BRIDGES_FILE. Changes in version 0.7.1 - 2019-06-07 * FIXES #28496 https://bugs.torproject.org/28496 Remove Yahoo from the list of allowed email domains. Yahoo allows you to create up to 500 disposable email addresses, which BridgeDB interprets as unique: https://bugs.torproject.org/28496#comment:8 We could address this issue in BridgeDB but at this point we seem better off dropping support for Yahoo because the provider likely also fell behind in Sybil protection. Changes in version 0.7.0 - 2019-06-07 * FIXES #28655 https://bugs.torproject.org/28655 When a bridge supports an active probing-resistant transport, it should not give out flavors that are vulnerable to active probing. For example, if a bridge supports obfs4 and obfs3, it should only give out obfs4. * FIXES #30706 https://bugs.torproject.org/30706 Do some simple BridgeDB housekeeping: Add missing CHANGELOG entries, add Philipp's contact info to the support section, fix a broken Trac URL, and turn HTTP link into HTTPS. * FIXES #30157: https://bugs.torproject.org/30157 Update BridgeDB translations. This ticket both adds new translations and updates existing ones. Changes in version 0.6.9 - 2018-11-20 * FIXES #23894 https://bugs.torproject.org/23894 Really change the contact address, in the correct place this time. Changes in version 0.6.8 - 2018-11-19 * FIXES #28528 https://bugs.torproject.org/28528 Change maintainer info. * FIXES #23894 https://bugs.torproject.org/23894 Change contact email address. Changes in version 0.6.7 - 2018-05-21 Print fingerprints in hex thank you very much. Changes in version 0.6.6 - 2018-05-21 * FIXES #26150 https://bugs.torproject.org/26150 Hotfix for strange bridges missing address fields. Changes in version 0.6.5 - 2018-05-04 * FIXES #26023 https://bugs.torproject.org/26023 There's few bridges whose ed25519 certificates contain the year 491869, which the datetime module (called from Stem) believes "out of range". So instead we'll parse the descriptors one at a time and catch the errors as we go. * FIXES #25246 https://bugs.torproject.org/25246 Add script for assigning unallocated bridges to another distributor. Changes in version 0.6.4 - 2018-02-13 * FIXES #24432 https://bugs.torproject.org/24432 Add config option to skip loopback addresses in X-Forwarded-For parsing. Changes in version 0.6.3 - 2018-01-23 * FIXES #24432 https://bugs.torproject.org/24432 The production moat server had issues related to redirecting to resources properly, which are now fixed. * FIXES #24701 https://bugs.torproject.org/24701 Adds a special surprise for the special someone who has been automatedly requesting bridges not through driving a browser, but through a script which is so thoroughly stupid that it doesn't even send the URL parameters for the CAPTCHA challenge and solution. Their script will now be delayed for quite some time and then rickrolled. Mess with the best, die like the rest. * FIXES #24704 https://bugs.torproject.org/24704 Bridges returned to a single request are now filtered such that there will never be two bridges from the same IPv4 /16 or IPv6 /64. And includes the following general changes: * ADDS unittests for the legacy code in bridgedb/Bridges.py, bringing the total test coverage above 90% for the first time. Changes in version 0.6.2 - 2017-12-20 * FIXES #24636 https://bugs.torproject.org/24636 The moat API specification included an extra response type which could be sent if there was no overlap between transports the client supported and those which the server supported. This has been removed from the specification, which now describes the behaviour moat has always exhibited: if there is no overlap, the server responds with a CAPTCHA image response which includes the list of transports it does support. * FIXES #24637 https://bugs.torproject.org/24637 The moat server did not respond correctly with the specified JSON API error type when there were no bridges available. It now responds correctly with a 404 error whose details describe why the request could not be fulfilled. The moat server also now logs messages if there were not the configured MOAT_BRIDGES_PER_RESPONSE number of bridges available. Changes in version 0.6.1 - 2017-12-13 * ADDS a shell script, scripts/test-moat, for testing either a locally-running moat server, or a remote one through a meek tunnel. Thanks to David Fifield for his work on meek, assistance setting it up, and providing the first version of this script. * FIXES #24433 https://bugs.torproject.org/24433 The test-moat script wasn't sending an X-Forwarded-For header, which triggered a bug in the moat server, since the CAPTCHA solution includes an HMAC based on the client's IP (forwarded through all the several layers of tunnels/proxies). * FIXES #24443 https://bugs.torproject.org/24443 Due to a difference between how booleans are parsed by Python's json library and normal Python booleans, the moat server was generating and returning QRCodes… regardless of whether the remote client application asked for one. This is now fixed. * FIXES #24460 https://bugs.torproject.org/24460 There was an unhandled error when sending certain (what appears to be possibly malicious? but in a very strange way) requests to BridgeDB's HTTPS distributor. The robots making the requests were attempting to request bridges, but were presenting a CAPTCHA solution without the correct HTML form field parameters present, which isn't possible through normal usage of the web interface. Whoever or whatever is doing this is now going to be endlessly redirected so that they may forever spiral in their own private internet hell. I reserve the right come up with a worse fate for them later, should I get bored. * FIXES #3015 https://bugs.torproject.org/3015 BridgeDB has had a partially-implemented concept of "buckets" since the age of the dinosaurs: write some of the unallocated bridges to a file which should (somehow) be manually distributed. In addition to be unused and untested, there were several issues with the buckets, the most significant of which were the inability to request pluggable transports in a bucket and the fact that buckets were not persistent in any way (e.g. if i request a bucket of 50 bridges for Gomez and another with 50 for Morticia, they might end up with some of the same bridges, further, tomorrow they'll end up with 50 possibly different bridges than those they received today). All of this code is now removed. And includes the following general changes: * FIXES issues with JSON quote syntax and a mistaken JSON API "type" parameter in the specification of the moat server (in the README). Thanks to Mark Smith and Kathy Brade for pointing out the issues. Changes in version 0.6.0 - 2017-11-15 * ADDS a new JSON API distributor called "moat", which is intended for use for Tor Launcher to use to build an in-browser UI for retrieving bridges. * CHANGES the organisation of code to add a new bridgedb.distributors package as well as a bridgedb.distributors.common package for code shared between multiple distributors. Changes in version 0.5.0 - 2017-10-28 * FIXES #23957 https://bugs.torproject.org/23957 BridgeDB now supports bridge operators choosing how their bridge will be distributed. See the "BridgeDistribution" torrc option in tor's manpage for details. * FIXES #16650 https://bugs.torproject.org/16650 BridgeDB is now accessible via select remote user interfaces through a meek tunnel. * FIXES #22998 https://bugs.torproject.org/23033 * FIXES #23033 https://bugs.torproject.org/23033 * FIXES #23034 https://bugs.torproject.org/23034 Upgrades BridgeDB to newer versions of Twisted and PyOpenSSL, and fixes several issues due to non-backwards compatible changes within those libraries. Changes in version 0.4.0 - 2017-01-09 * FIXES #21162 https://bugs.torproject.org/21162 BridgeDB now supports arbitrarily blacklisting suspected bad bridges from being distributed to clients. This is in response to a suspected sybil attack by an unknown party. For more details, see: https://lists.torproject.org/pipermail/tor-project/2016-December/000851.html Changes in version 0.3.8 - 2016-09-22 * FIXES #20088 https://bugs.torproject.org/20088 BridgeDB now supports receiving descriptors from multiple Bridge Authorities. See also #19690. * FIXES #20087 https://bugs.torproject.org/20087 BridgeDB's version of Stem now supports parsing transport lines in bridge extrainfo descriptors which contain IPv6 addresses contained within square brackets. Changes in version 0.3.7 - 2016-08-04 * FIXES #19691 https://bugs.torproject.org BridgeDB (as running on Tor Project infrastructure) is now invocated with a redirection of stdout and stderr to the flog utility, in order to ensure that file handles are properly closed and reopened when BridgeDB receives a SIGHUP. And includes the following general changes: * ADDS some files which were missing from BridgeDB PyPI packages to the MANIFEST.in, so that they are now included. Changes in version 0.3.6 - 2016-07-28 * FIXES #18237 https://bugs.torproject.org/18237 During descriptor parsing, BridgeDB saves copies of descriptor files which couldn't be parsed, for later debugging purposes. To avoid filing up the runtime directory with these files, we now delete files older than 24 hours, every 24 hours. * FIXES #18949 https://bugs.torproject.org/18949 Since we've upgraded the host machine which runs The Tor Project's BridgeDB instance to Debian Jessie, this patch updates the testing configurations and continuous integration infrastructure to run tests on versions of Python dependencies in Debian Jessie and Stretch. Changes in version 0.3.4 - 0.3.5 - 2015-11-30 * FIXES #14685 https://bugs.torproject.org/14685 This disables distribution of obfs2 bridges. This pluggable transport has known distiguishers which allow adversaries to identify client connections to obfs2 bridges, which in turn allows these connections to be blocked/censored. With numerous obfs3 and obfs4 bridges both readily available, users should not be presented with an easily-configurable choice that is known to be unsafe for the majority of users. And includes the following general changes: * ADDS error pages to BridgeDB's web interface, to provide friendlier explanations for downtime, missing pages, and internal server errors. For example: https://bridges.torproject.org/404 Changes in version 0.3.3 - 2015-10-25 * FIXES #12029 https://bugs.torproject.org/12029 BridgeDB now has an API for creating Bridge Distributors. See the bridgedb.distribute module, or its developer documentation at https://pythonhosted.org/bridgedb/bridgedb.distribute.html. * FIXES PART OF #12506 https://bugs.torproject.org/12506 BridgeDB's two Distributors (HTTPS and Email) are now entirely modularised and self-contained within separate subdirectories in the source code. This is the first step to redesigning these Distributors into their own separate processes, which will allow the Distributors to remain functional while BridgeDB is reparsing bridge descriptors. * FIXES #15968 https://bugs.torproject.org/15968 BridgeDB now sends a Content-Security-Policy header which explicitly allows Javascript, images, CSS, and fonts, from https://bridges.torproject.org. All other types of content are forbidden, including: - embedding https://bridges.torproject.org within