[tor-commits] [Git][tpo/applications/tor-browser][tor-browser-115.6.0esr-13.5-1] fixup! Bug 40597: Implement TorSettings module

Pier Angelo Vendrame (@pierov) git at gitlab.torproject.org
Tue Jan 9 16:58:42 UTC 2024



Pier Angelo Vendrame pushed to branch tor-browser-115.6.0esr-13.5-1 at The Tor Project / Applications / Tor Browser


Commits:
afe1be79 by Pier Angelo Vendrame at 2024-01-09T17:57:06+01:00
fixup! Bug 40597: Implement TorSettings module

Bug 42359: Handle firewall and proxy in setSettings.

- - - - -


1 changed file:

- toolkit/modules/TorSettings.sys.mjs


Changes:

=====================================
toolkit/modules/TorSettings.sys.mjs
=====================================
@@ -301,8 +301,12 @@ class TorSettingsImpl {
           return this.#parsePort(val, false) ?? 0;
         },
       },
-      username: {},
-      password: {},
+      username: {
+        transform: val => val ?? "",
+      },
+      password: {
+        transform: val => val ?? "",
+      },
       uri: {
         getter: () => {
           const { type, address, port, username, password } = this.proxy;
@@ -910,7 +914,11 @@ class TorSettingsImpl {
   }
 
   /**
-   * Set all of our settings at once from a settings object.
+   * Set blocks of settings at once from an object.
+   *
+   * It is possible to set all settings, or only some sections (e.g., only
+   * bridges), but if a key is present, its settings must make sense (e.g., if
+   * bridges are enabled, a valid source must be provided).
    *
    * @param {object} settings The settings object to set
    */
@@ -924,35 +932,59 @@ class TorSettingsImpl {
     // Hold off on lots of notifications until all settings are changed.
     this.freezeNotifications();
     try {
-      this.bridges.enabled = !!settings.bridges.enabled;
-      this.bridges.source = settings.bridges.source;
-      switch (settings.bridges.source) {
-        case TorBridgeSource.BridgeDB:
-        case TorBridgeSource.UserProvided:
-          this.bridges.bridge_strings = settings.bridges.bridge_strings;
-          break;
-        case TorBridgeSource.BuiltIn: {
-          this.bridges.builtin_type = settings.bridges.builtin_type;
-          if (!this.bridges.bridge_strings.length) {
-            // No bridges were found when setting the builtin_type.
-            throw new Error(
-              `No available builtin bridges of type ${settings.bridges.builtin_type}`
-            );
-          }
-          break;
+      if ("bridges" in settings) {
+        this.bridges.enabled = !!settings.bridges.enabled;
+        // Currently, disabling bridges in the UI does not remove the lines,
+        // because we call only the `enabled` setter.
+        // So, if the bridge source is undefined but bridges are disabled,
+        // do not force Invalid. Instead, keep the current source.
+        if (this.bridges.enabled || settings.bridges.source !== undefined) {
+          this.bridges.source = settings.bridges.source;
         }
-        case TorBridgeSource.Invalid:
-          break;
-        default:
-          if (settings.bridges.enabled) {
-            throw new Error(
-              `Bridge source '${settings.source}' is not a valid source`
-            );
+        switch (settings.bridges.source) {
+          case TorBridgeSource.BridgeDB:
+          case TorBridgeSource.UserProvided:
+            this.bridges.bridge_strings = settings.bridges.bridge_strings;
+            break;
+          case TorBridgeSource.BuiltIn: {
+            this.bridges.builtin_type = settings.bridges.builtin_type;
+            if (!this.bridges.bridge_strings.length) {
+              // No bridges were found when setting the builtin_type.
+              throw new Error(
+                `No available builtin bridges of type ${settings.bridges.builtin_type}`
+              );
+            }
+            break;
           }
-          break;
+          case TorBridgeSource.Invalid:
+            break;
+          default:
+            if (settings.bridges.enabled) {
+              throw new Error(
+                `Bridge source '${settings.source}' is not a valid source`
+              );
+            }
+            break;
+        }
       }
 
-      // TODO: proxy and firewall
+      if ("proxy" in settings) {
+        this.proxy.enabled = !!settings.proxy.enabled;
+        if (this.proxy.enabled) {
+          this.proxy.type = settings.proxy.type;
+          this.proxy.address = settings.proxy.address;
+          this.proxy.port = settings.proxy.port;
+          this.proxy.username = settings.proxy.username;
+          this.proxy.password = settings.proxy.password;
+        }
+      }
+
+      if ("firewall" in settings) {
+        this.firewall.enabled = !!settings.firewall.enabled;
+        if (this.firewall.enabled) {
+          this.firewall.allowed_ports = settings.firewall.allowed_ports;
+        }
+      }
     } catch (ex) {
       // Restore the old settings without any new notifications generated from
       // the above code.



View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/afe1be797c9b0aab70e56f3a858653b49f445b9e

-- 
View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/commit/afe1be797c9b0aab70e56f3a858653b49f445b9e
You're receiving this email because of your account on gitlab.torproject.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.torproject.org/pipermail/tor-commits/attachments/20240109/d85062dd/attachment-0001.htm>


More information about the tor-commits mailing list