[tor-commits] [arm/master] Input field validation for bridge destinations

atagar at torproject.org atagar at torproject.org
Mon Jul 4 15:40:31 UTC 2011


commit f3d73e6a80d4798963745c8ebb500eca29bd0c3e
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jul 1 16:25:23 2011 -0700

    Input field validation for bridge destinations
---
 src/cli/wizard.py |   19 +++++++++++++++++--
 1 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/cli/wizard.py b/src/cli/wizard.py
index 7c36598..219c6b6 100644
--- a/src/cli/wizard.py
+++ b/src/cli/wizard.py
@@ -9,7 +9,7 @@ import curses
 import cli.popups
 import cli.controller
 
-from util import enum, uiTools
+from util import enum, connections, uiTools
 
 # basic configuration types we can run as
 RelayType = enum.Enum("RELAY", "EXIT", "BRIDGE", "CLIENT")
@@ -210,6 +210,9 @@ def showWizard():
     else: config[option] = ConfigOption(option, "opt", default)
   
   # sets input validators
+  config[Options.BRIDGE1].setValidator(_bridgeDestinationValidator)
+  config[Options.BRIDGE2].setValidator(_bridgeDestinationValidator)
+  config[Options.BRIDGE3].setValidator(_bridgeDestinationValidator)
   
   # enables custom policies when 'custom' is selected and disables otherwise
   policyOpt = config[Options.POLICY]
@@ -387,7 +390,9 @@ def promptConfigOptions(relayType, config):
           newValue = popup.getstr(y + selection + 1, 33, options[selection].getValue(), curses.A_STANDOUT | uiTools.getColor(OPTION_COLOR), 23)
           if newValue:
             try: options[selection].setValue(newValue.strip())
-            except ValueError, exc: cli.popups.showMsg(str(exc), 3)
+            except ValueError, exc:
+              cli.popups.showMsg(str(exc), 2)
+              cli.controller.getController().requestRedraw(True)
       elif key == 27: selection, key = -1, curses.KEY_ENTER # esc - cancel
   finally:
     cli.popups.finalize()
@@ -423,3 +428,13 @@ def _toggleEnabledAction(toggleOptions, option, value):
   for opt in toggleOptions:
     opt.setEnabled(value)
 
+def _bridgeDestinationValidator(option, value):
+  if value.count(":") != 1:
+    raise ValueError("Bridges are of the form '<ip address>:<port>'")
+  
+  ipAddr, port = value.split(":", 1)
+  if not connections.isValidIpAddress(ipAddr):
+    raise ValueError("'%s' is not a valid ip address" % ipAddr)
+  elif not port.isdigit() or int(port) < 0 or int(port) > 65535:
+    raise ValueError("'%s' isn't a valid port number" % port)
+





More information about the tor-commits mailing list