Simplify variable names in TorSettingsDialog, and start adding UI for moat

This commit is contained in:
Micah Lee 2021-10-15 14:25:18 -07:00
parent 66a744c9da
commit d1ae4e454f
No known key found for this signature in database
GPG Key ID: 403C2657CD994F73
2 changed files with 103 additions and 117 deletions

View File

@ -62,13 +62,13 @@
"gui_settings_password_label": "Password", "gui_settings_password_label": "Password",
"gui_settings_tor_bridges": "Connect using a Tor bridge?", "gui_settings_tor_bridges": "Connect using a Tor bridge?",
"gui_settings_tor_bridges_label": "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.", "gui_settings_tor_bridges_label": "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.",
"gui_settings_tor_bridges_no_bridges_radio_option": "Don't use a bridge", "gui_settings_bridge_none_radio_option": "Don't use a bridge",
"gui_settings_tor_bridges_obfs4_radio_option": "Use built-in obfs4 bridge", "gui_settings_bridge_obfs4_radio_option": "Use built-in obfs4 bridge",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Use built-in meek-azure bridge", "gui_settings_bridge_meek_azure_radio_option": "Use built-in meek-azure bridge",
"gui_settings_tor_bridges_snowflake_radio_option": "Use built-in snowflake bridge", "gui_settings_bridge_snowflake_radio_option": "Use built-in snowflake bridge",
"gui_settings_meek_lite_expensive_warning": "Warning: The meek-azure bridges are very costly for the Tor Project to run.<br><br>Only use them if unable to connect to Tor directly, via obfs4 transports, or other normal bridges.", "gui_settings_meek_lite_expensive_warning": "Warning: The meek-azure bridges are very costly for the Tor Project to run.<br><br>Only use them if unable to connect to Tor directly, via obfs4 transports, or other normal bridges.",
"gui_settings_tor_bridges_moat_radio_option": "Request a bridge from torproject.org", "gui_settings_bridge_moat_radio_option": "Request a bridge from torproject.org",
"gui_settings_tor_bridges_custom_radio_option": "Provide a bridge you learned about from a trusted source", "gui_settings_bridge_custom_radio_option": "Provide a bridge you learned about from a trusted source",
"gui_settings_tor_bridges_invalid": "None of the bridges you added work.\nDouble-check them or add others.", "gui_settings_tor_bridges_invalid": "None of the bridges you added work.\nDouble-check them or add others.",
"gui_settings_button_save": "Save", "gui_settings_button_save": "Save",
"gui_settings_button_cancel": "Cancel", "gui_settings_button_cancel": "Cancel",

View File

@ -93,12 +93,10 @@ class TorSettingsDialog(QtWidgets.QDialog):
bridges_label.setWordWrap(True) bridges_label.setWordWrap(True)
# No bridges option radio # No bridges option radio
self.tor_bridges_no_bridges_radio = QtWidgets.QRadioButton( self.bridge_none_radio = QtWidgets.QRadioButton(
strings._("gui_settings_tor_bridges_no_bridges_radio_option") strings._("gui_settings_bridge_none_radio_option")
)
self.tor_bridges_no_bridges_radio.toggled.connect(
self.tor_bridges_no_bridges_radio_toggled
) )
self.bridge_none_radio.toggled.connect(self.bridge_none_radio_toggled)
( (
self.tor_path, self.tor_path,
@ -110,12 +108,10 @@ class TorSettingsDialog(QtWidgets.QDialog):
# obfs4 option radio # obfs4 option radio
# if the obfs4proxy binary is missing, we can't use obfs4 transports # if the obfs4proxy binary is missing, we can't use obfs4 transports
self.tor_bridges_use_obfs4_radio = QtWidgets.QRadioButton( self.bridge_obfs4_radio = QtWidgets.QRadioButton(
strings._("gui_settings_tor_bridges_obfs4_radio_option") strings._("gui_settings_bridge_obfs4_radio_option")
)
self.tor_bridges_use_obfs4_radio.toggled.connect(
self.tor_bridges_use_obfs4_radio_toggled
) )
self.bridge_obfs4_radio.toggled.connect(self.bridge_obfs4_radio_toggled)
if not self.obfs4proxy_file_path or not os.path.isfile( if not self.obfs4proxy_file_path or not os.path.isfile(
self.obfs4proxy_file_path self.obfs4proxy_file_path
): ):
@ -124,15 +120,15 @@ class TorSettingsDialog(QtWidgets.QDialog):
"__init__", "__init__",
f"missing binary {self.obfs4proxy_file_path}, hiding obfs4 bridge", f"missing binary {self.obfs4proxy_file_path}, hiding obfs4 bridge",
) )
self.tor_bridges_use_obfs4_radio.hide() self.bridge_obfs4_radio.hide()
# meek-azure option radio # meek-azure option radio
# if the obfs4proxy binary is missing, we can't use meek_lite-azure transports # if the obfs4proxy binary is missing, we can't use meek_lite-azure transports
self.tor_bridges_use_meek_lite_azure_radio = QtWidgets.QRadioButton( self.bridge_meek_azure_radio = QtWidgets.QRadioButton(
strings._("gui_settings_tor_bridges_meek_lite_azure_radio_option") strings._("gui_settings_bridge_meek_azure_radio_option")
) )
self.tor_bridges_use_meek_lite_azure_radio.toggled.connect( self.bridge_meek_azure_radio.toggled.connect(
self.tor_bridges_use_meek_lite_azure_radio_toggled self.bridge_meek_azure_radio_toggled
) )
if not self.obfs4proxy_file_path or not os.path.isfile( if not self.obfs4proxy_file_path or not os.path.isfile(
self.obfs4proxy_file_path self.obfs4proxy_file_path
@ -142,89 +138,65 @@ class TorSettingsDialog(QtWidgets.QDialog):
"__init__", "__init__",
f"missing binary {self.obfs4proxy_file_path}, hiding meek-azure bridge", f"missing binary {self.obfs4proxy_file_path}, hiding meek-azure bridge",
) )
self.tor_bridges_use_meek_lite_azure_radio.hide() self.bridge_meek_azure_radio.hide()
# snowflake option radio # snowflake option radio
# if the snowflake-client binary is missing, we can't use snowflake transports # if the snowflake-client binary is missing, we can't use snowflake transports
self.tor_bridges_use_snowflake_radio = QtWidgets.QRadioButton( self.bridge_snowflake_radio = QtWidgets.QRadioButton(
strings._("gui_settings_tor_bridges_snowflake_radio_option") strings._("gui_settings_bridge_snowflake_radio_option")
)
self.tor_bridges_use_snowflake_radio.toggled.connect(
self.tor_bridges_use_snowflake_radio_toggled
) )
self.bridge_snowflake_radio.toggled.connect(self.bridge_snowflake_radio_toggled)
if not self.snowflake_file_path or not os.path.isfile(self.snowflake_file_path): if not self.snowflake_file_path or not os.path.isfile(self.snowflake_file_path):
self.common.log( self.common.log(
"TorSettingsDialog", "TorSettingsDialog",
"__init__", "__init__",
f"missing binary {self.snowflake_file_path}, hiding snowflake bridge", f"missing binary {self.snowflake_file_path}, hiding snowflake bridge",
) )
self.tor_bridges_use_snowflake_radio.hide() self.bridge_snowflake_radio.hide()
# Request a bridge from torproject.org (moat) # Request a bridge from torproject.org (moat)
# self.tor_bridges_use_moat_radio = QtWidgets.QRadioButton( self.bridge_moat_radio = QtWidgets.QRadioButton(
# strings._("gui_settings_tor_bridges_moat_radio_option") strings._("gui_settings_bridge_moat_radio_option")
# ) )
# self.tor_bridges_use_moat_radio.toggled.connect( self.bridge_moat_radio.toggled.connect(self.bridge_moat_radio_toggled)
# self.tor_bridges_use_moat_radio_toggled self.bridge_moat_textbox = QtWidgets.QPlainTextEdit()
# ) self.bridge_moat_textbox.setMaximumHeight(200)
self.bridge_moat_textbox.setEnabled(False)
# self.tor_bridges_use_moat_label = QtWidgets.QLabel( bridge_moat_textbox_options_layout = QtWidgets.QVBoxLayout()
# strings._("gui_settings_tor_bridges_moat_label") bridge_moat_textbox_options_layout.addWidget(self.bridge_moat_textbox)
# ) self.bridge_moat_textbox_options = QtWidgets.QWidget()
# self.tor_bridges_use_custom_label.setOpenExternalLinks(True) self.bridge_moat_textbox_options.setLayout(bridge_moat_textbox_options_layout)
# self.tor_bridges_use_custom_textbox = QtWidgets.QPlainTextEdit() self.bridge_moat_textbox_options.hide()
# self.tor_bridges_use_custom_textbox.setMaximumHeight(200)
# self.tor_bridges_use_custom_textbox.setPlaceholderText(
# "[address:port] [identifier]"
# )
# tor_bridges_use_custom_textbox_options_layout = QtWidgets.QVBoxLayout()
# tor_bridges_use_custom_textbox_options_layout.addWidget(
# self.tor_bridges_use_custom_label
# )
# tor_bridges_use_custom_textbox_options_layout.addWidget(
# self.tor_bridges_use_custom_textbox
# )
# self.tor_bridges_use_custom_textbox_options = QtWidgets.QWidget()
# self.tor_bridges_use_custom_textbox_options.setLayout(
# tor_bridges_use_custom_textbox_options_layout
# )
# self.tor_bridges_use_custom_textbox_options.hide()
# Custom bridges radio and textbox # Custom bridges radio and textbox
self.tor_bridges_use_custom_radio = QtWidgets.QRadioButton( self.bridge_custom_radio = QtWidgets.QRadioButton(
strings._("gui_settings_tor_bridges_custom_radio_option") strings._("gui_settings_bridge_custom_radio_option")
)
self.tor_bridges_use_custom_radio.toggled.connect(
self.tor_bridges_use_custom_radio_toggled
)
self.tor_bridges_use_custom_textbox = QtWidgets.QPlainTextEdit()
self.tor_bridges_use_custom_textbox.setMaximumHeight(200)
self.tor_bridges_use_custom_textbox.setPlaceholderText(
"[address:port] [identifier]"
) )
self.bridge_custom_radio.toggled.connect(self.bridge_custom_radio_toggled)
self.bridge_custom_textbox = QtWidgets.QPlainTextEdit()
self.bridge_custom_textbox.setMaximumHeight(200)
self.bridge_custom_textbox.setPlaceholderText("[address:port] [identifier]")
tor_bridges_use_custom_textbox_options_layout = QtWidgets.QVBoxLayout() bridge_custom_textbox_options_layout = QtWidgets.QVBoxLayout()
tor_bridges_use_custom_textbox_options_layout.addWidget( bridge_custom_textbox_options_layout.addWidget(self.bridge_custom_textbox)
self.tor_bridges_use_custom_textbox
)
self.tor_bridges_use_custom_textbox_options = QtWidgets.QWidget() self.bridge_custom_textbox_options = QtWidgets.QWidget()
self.tor_bridges_use_custom_textbox_options.setLayout( self.bridge_custom_textbox_options.setLayout(
tor_bridges_use_custom_textbox_options_layout bridge_custom_textbox_options_layout
) )
self.tor_bridges_use_custom_textbox_options.hide() self.bridge_custom_textbox_options.hide()
# Bridges layout/widget # Bridges layout/widget
bridges_layout = QtWidgets.QVBoxLayout() bridges_layout = QtWidgets.QVBoxLayout()
bridges_layout.addWidget(bridges_label) bridges_layout.addWidget(bridges_label)
bridges_layout.addWidget(self.tor_bridges_no_bridges_radio) bridges_layout.addWidget(self.bridge_none_radio)
bridges_layout.addWidget(self.tor_bridges_use_obfs4_radio) bridges_layout.addWidget(self.bridge_obfs4_radio)
bridges_layout.addWidget(self.tor_bridges_use_meek_lite_azure_radio) bridges_layout.addWidget(self.bridge_meek_azure_radio)
bridges_layout.addWidget(self.tor_bridges_use_snowflake_radio) bridges_layout.addWidget(self.bridge_snowflake_radio)
bridges_layout.addWidget(self.tor_bridges_use_custom_radio) bridges_layout.addWidget(self.bridge_moat_radio)
bridges_layout.addWidget(self.tor_bridges_use_custom_textbox_options) bridges_layout.addWidget(self.bridge_moat_textbox_options)
bridges_layout.addWidget(self.bridge_custom_radio)
bridges_layout.addWidget(self.bridge_custom_textbox_options)
self.bridges = QtWidgets.QWidget() self.bridges = QtWidgets.QWidget()
self.bridges.setLayout(bridges_layout) self.bridges.setLayout(bridges_layout)
@ -450,36 +422,36 @@ class TorSettingsDialog(QtWidgets.QDialog):
) )
if self.old_settings.get("no_bridges"): if self.old_settings.get("no_bridges"):
self.tor_bridges_no_bridges_radio.setChecked(True) self.bridge_none_radio.setChecked(True)
self.tor_bridges_use_obfs4_radio.setChecked(False) self.bridge_obfs4_radio.setChecked(False)
self.tor_bridges_use_meek_lite_azure_radio.setChecked(False) self.bridge_meek_azure_radio.setChecked(False)
self.tor_bridges_use_snowflake_radio.setChecked(False) self.bridge_snowflake_radio.setChecked(False)
self.tor_bridges_use_custom_radio.setChecked(False) self.bridge_custom_radio.setChecked(False)
else: else:
self.tor_bridges_no_bridges_radio.setChecked(False) self.bridge_none_radio.setChecked(False)
self.tor_bridges_use_obfs4_radio.setChecked( self.bridge_obfs4_radio.setChecked(
self.old_settings.get("tor_bridges_use_obfs4") self.old_settings.get("tor_bridges_use_obfs4")
) )
self.tor_bridges_use_meek_lite_azure_radio.setChecked( self.bridge_meek_azure_radio.setChecked(
self.old_settings.get("tor_bridges_use_meek_lite_azure") self.old_settings.get("tor_bridges_use_meek_lite_azure")
) )
self.tor_bridges_use_snowflake_radio.setChecked( self.bridge_snowflake_radio.setChecked(
self.old_settings.get("tor_bridges_use_snowflake") self.old_settings.get("tor_bridges_use_snowflake")
) )
if self.old_settings.get("tor_bridges_use_custom_bridges"): if self.old_settings.get("bridge_custom_bridges"):
self.tor_bridges_use_custom_radio.setChecked(True) self.bridge_custom_radio.setChecked(True)
# Remove the 'Bridge' lines at the start of each bridge. # Remove the 'Bridge' lines at the start of each bridge.
# They are added automatically to provide compatibility with # They are added automatically to provide compatibility with
# copying/pasting bridges provided from https://bridges.torproject.org # copying/pasting bridges provided from https://bridges.torproject.org
new_bridges = [] new_bridges = []
bridges = self.old_settings.get("tor_bridges_use_custom_bridges").split( bridges = self.old_settings.get("bridge_custom_bridges").split(
"Bridge " "Bridge "
) )
for bridge in bridges: for bridge in bridges:
new_bridges.append(bridge) new_bridges.append(bridge)
new_bridges = "".join(new_bridges) new_bridges = "".join(new_bridges)
self.tor_bridges_use_custom_textbox.setPlainText(new_bridges) self.bridge_custom_textbox.setPlainText(new_bridges)
def connection_type_bundled_toggled(self, checked): def connection_type_bundled_toggled(self, checked):
""" """
@ -491,26 +463,30 @@ class TorSettingsDialog(QtWidgets.QDialog):
self.connection_type_socks.hide() self.connection_type_socks.hide()
self.connection_type_bridges_radio_group.show() self.connection_type_bridges_radio_group.show()
def tor_bridges_no_bridges_radio_toggled(self, checked): def bridge_none_radio_toggled(self, checked):
""" """
'No bridges' option was toggled. If checked, enable other bridge options. 'No bridges' option was toggled. If checked, enable other bridge options.
""" """
if checked: if checked:
self.tor_bridges_use_custom_textbox_options.hide() self.bridge_custom_textbox_options.hide()
self.bridge_moat_textbox_options.hide()
def tor_bridges_use_obfs4_radio_toggled(self, checked): def bridge_obfs4_radio_toggled(self, checked):
""" """
obfs4 bridges option was toggled. If checked, disable custom bridge options. obfs4 bridges option was toggled. If checked, disable custom bridge options.
""" """
if checked: if checked:
self.tor_bridges_use_custom_textbox_options.hide() self.bridge_custom_textbox_options.hide()
self.bridge_moat_textbox_options.hide()
def tor_bridges_use_meek_lite_azure_radio_toggled(self, checked): def bridge_meek_azure_radio_toggled(self, checked):
""" """
meek_lite_azure bridges option was toggled. If checked, disable custom bridge options. meek_lite_azure bridges option was toggled. If checked, disable custom bridge options.
""" """
if checked: if checked:
self.tor_bridges_use_custom_textbox_options.hide() self.bridge_custom_textbox_options.hide()
self.bridge_moat_textbox_options.hide()
# Alert the user about meek's costliness if it looks like they're turning it on # Alert the user about meek's costliness if it looks like they're turning it on
if not self.old_settings.get("tor_bridges_use_meek_lite_azure"): if not self.old_settings.get("tor_bridges_use_meek_lite_azure"):
Alert( Alert(
@ -519,19 +495,29 @@ class TorSettingsDialog(QtWidgets.QDialog):
QtWidgets.QMessageBox.Warning, QtWidgets.QMessageBox.Warning,
) )
def tor_bridges_use_snowflake_radio_toggled(self, checked): def bridge_snowflake_radio_toggled(self, checked):
""" """
snowflake bridges option was toggled. If checked, disable custom bridge options. snowflake bridges option was toggled. If checked, disable custom bridge options.
""" """
if checked: if checked:
self.tor_bridges_use_custom_textbox_options.hide() self.bridge_custom_textbox_options.hide()
self.bridge_moat_textbox_options.hide()
def tor_bridges_use_custom_radio_toggled(self, checked): def bridge_moat_radio_toggled(self, checked):
"""
Moat (request bridge) bridges option was toggled. If checked, show moat bridge options.
"""
if checked:
self.bridge_custom_textbox_options.hide()
self.bridge_moat_textbox_options.show()
def bridge_custom_radio_toggled(self, checked):
""" """
Custom bridges option was toggled. If checked, show custom bridge options. Custom bridges option was toggled. If checked, show custom bridge options.
""" """
if checked: if checked:
self.tor_bridges_use_custom_textbox_options.show() self.bridge_custom_textbox_options.show()
self.bridge_moat_textbox_options.hide()
def connection_type_automatic_toggled(self, checked): def connection_type_automatic_toggled(self, checked):
""" """
@ -659,7 +645,7 @@ class TorSettingsDialog(QtWidgets.QDialog):
"no_bridges", "no_bridges",
"tor_bridges_use_obfs4", "tor_bridges_use_obfs4",
"tor_bridges_use_meek_lite_azure", "tor_bridges_use_meek_lite_azure",
"tor_bridges_use_custom_bridges", "bridge_custom_bridges",
], ],
): ):
@ -761,31 +747,31 @@ class TorSettingsDialog(QtWidgets.QDialog):
settings.set("auth_password", self.authenticate_password_extras_password.text()) settings.set("auth_password", self.authenticate_password_extras_password.text())
# Whether we use bridges # Whether we use bridges
if self.tor_bridges_no_bridges_radio.isChecked(): if self.bridge_none_radio.isChecked():
settings.set("no_bridges", True) settings.set("no_bridges", True)
settings.set("tor_bridges_use_obfs4", False) settings.set("tor_bridges_use_obfs4", False)
settings.set("tor_bridges_use_meek_lite_azure", False) settings.set("tor_bridges_use_meek_lite_azure", False)
settings.set("tor_bridges_use_snowflake", False) settings.set("tor_bridges_use_snowflake", False)
settings.set("tor_bridges_use_custom_bridges", "") settings.set("bridge_custom_bridges", "")
if self.tor_bridges_use_obfs4_radio.isChecked(): if self.bridge_obfs4_radio.isChecked():
settings.set("no_bridges", False) settings.set("no_bridges", False)
settings.set("tor_bridges_use_obfs4", True) settings.set("tor_bridges_use_obfs4", True)
settings.set("tor_bridges_use_meek_lite_azure", False) settings.set("tor_bridges_use_meek_lite_azure", False)
settings.set("tor_bridges_use_snowflake", False) settings.set("tor_bridges_use_snowflake", False)
settings.set("tor_bridges_use_custom_bridges", "") settings.set("bridge_custom_bridges", "")
if self.tor_bridges_use_meek_lite_azure_radio.isChecked(): if self.bridge_meek_azure_radio.isChecked():
settings.set("no_bridges", False) settings.set("no_bridges", False)
settings.set("tor_bridges_use_obfs4", False) settings.set("tor_bridges_use_obfs4", False)
settings.set("tor_bridges_use_meek_lite_azure", True) settings.set("tor_bridges_use_meek_lite_azure", True)
settings.set("tor_bridges_use_snowflake", False) settings.set("tor_bridges_use_snowflake", False)
settings.set("tor_bridges_use_custom_bridges", "") settings.set("bridge_custom_bridges", "")
if self.tor_bridges_use_snowflake_radio.isChecked(): if self.bridge_snowflake_radio.isChecked():
settings.set("no_bridges", False) settings.set("no_bridges", False)
settings.set("tor_bridges_use_obfs4", False) settings.set("tor_bridges_use_obfs4", False)
settings.set("tor_bridges_use_meek_lite_azure", False) settings.set("tor_bridges_use_meek_lite_azure", False)
settings.set("tor_bridges_use_snowflake", True) settings.set("tor_bridges_use_snowflake", True)
settings.set("tor_bridges_use_custom_bridges", "") settings.set("bridge_custom_bridges", "")
if self.tor_bridges_use_custom_radio.isChecked(): if self.bridge_custom_radio.isChecked():
settings.set("no_bridges", False) settings.set("no_bridges", False)
settings.set("tor_bridges_use_obfs4", False) settings.set("tor_bridges_use_obfs4", False)
settings.set("tor_bridges_use_meek_lite_azure", False) settings.set("tor_bridges_use_meek_lite_azure", False)
@ -795,7 +781,7 @@ class TorSettingsDialog(QtWidgets.QDialog):
# This makes it easier to copy/paste a set of bridges # This makes it easier to copy/paste a set of bridges
# provided from https://bridges.torproject.org # provided from https://bridges.torproject.org
new_bridges = [] new_bridges = []
bridges = self.tor_bridges_use_custom_textbox.toPlainText().split("\n") bridges = self.bridge_custom_textbox.toPlainText().split("\n")
bridges_valid = False bridges_valid = False
for bridge in bridges: for bridge in bridges:
if bridge != "": if bridge != "":
@ -819,7 +805,7 @@ class TorSettingsDialog(QtWidgets.QDialog):
if bridges_valid: if bridges_valid:
new_bridges = "".join(new_bridges) new_bridges = "".join(new_bridges)
settings.set("tor_bridges_use_custom_bridges", new_bridges) settings.set("bridge_custom_bridges", new_bridges)
else: else:
Alert(self.common, strings._("gui_settings_tor_bridges_invalid")) Alert(self.common, strings._("gui_settings_tor_bridges_invalid"))
settings.set("no_bridges", True) settings.set("no_bridges", True)