Skip to content

Commit

Permalink
Option to allow console connections to any local IP address when usin…
Browse files Browse the repository at this point in the history
…g the local server.
  • Loading branch information
grossmj committed Nov 10, 2014
1 parent 75cb485 commit ec07873
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 30 deletions.
2 changes: 1 addition & 1 deletion gns3/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -1108,7 +1108,7 @@ def startupLoading(self):
error=e))

self._createTemporaryProject()
if self._settings["launch_project_dialog_at_startup"]:
if self._settings["auto_launch_project_dialog"]:
project_dialog = NewProjectDialog(self, showed_from_startup=True)
project_dialog.show()
create_new_project = project_dialog.exec_()
Expand Down
4 changes: 2 additions & 2 deletions gns3/pages/general_preferences_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ def _populateGeneralSettingWidgets(self, settings):
self.uiProjectsPathLineEdit.setText(settings["projects_path"])
self.uiImagesPathLineEdit.setText(settings["images_path"])
self.uiTemporaryFilesPathLineEdit.setText(settings["temporary_files_path"])
self.uiLaunchNewProjectDialogCheckBox.setChecked(settings["launch_project_dialog_at_startup"])
self.uiLaunchNewProjectDialogCheckBox.setChecked(settings["auto_launch_project_dialog"])
self.uiCheckForUpdateCheckBox.setChecked(settings["check_for_update"])
self.uiLinkManualModeCheckBox.setChecked(settings["link_manual_mode"])
self.uiSlowStartAllSpinBox.setValue(settings["slow_device_start_all"])
Expand Down Expand Up @@ -254,7 +254,7 @@ def savePreferences(self):
new_settings["projects_path"] = self.uiProjectsPathLineEdit.text()
new_settings["images_path"] = self.uiImagesPathLineEdit.text()
new_settings["temporary_files_path"] = self.uiTemporaryFilesPathLineEdit.text()
new_settings["launch_project_dialog_at_startup"] = self.uiLaunchNewProjectDialogCheckBox.isChecked()
new_settings["auto_launch_project_dialog"] = self.uiLaunchNewProjectDialogCheckBox.isChecked()
new_settings["check_for_update"] = self.uiCheckForUpdateCheckBox.isChecked()
new_settings["link_manual_mode"] = self.uiLinkManualModeCheckBox.isChecked()
new_settings["slow_device_start_all"] = self.uiSlowStartAllSpinBox.value()
Expand Down
21 changes: 18 additions & 3 deletions gns3/pages/server_preferences_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ def loadPreferences(self):
self.uiLocalServerPortSpinBox.setValue(local_server.port)
self.uiLocalServerPathLineEdit.setText(servers.localServerPath())
self.uiLocalServerAutoStartCheckBox.setChecked(servers.localServerAutoStart())
self.uiConsoleConnectionsToAnyIPCheckBox.setChecked(servers.localServerAllowConsoleFromAnywhere())

# load remote server preferences
self._remote_servers.clear()
Expand Down Expand Up @@ -206,6 +207,7 @@ def savePreferences(self):
local_server_port = self.uiLocalServerPortSpinBox.value()
local_server_path = self.uiLocalServerPathLineEdit.text()
local_server_auto_start = self.uiLocalServerAutoStartCheckBox.isChecked()
local_server_allow_console_from_anywhere = self.uiConsoleConnectionsToAnyIPCheckBox.isChecked()

if local_server_path:
if not os.path.isfile(local_server_path):
Expand All @@ -214,7 +216,10 @@ def savePreferences(self):
QtGui.QMessageBox.critical(self, "Local server", "{} is not an executable".format(local_server_path))
else:
server = servers.localServer()
if servers.localServerPath() != local_server_path or server.host != local_server_host or server.port != local_server_port:
if servers.localServerPath() != local_server_path or \
server.host != local_server_host or \
server.port != local_server_port or \
servers.localServerAllowConsoleFromAnywhere() != local_server_allow_console_from_anywhere:

# first check if we have nodes on the local server
local_nodes = []
Expand All @@ -228,6 +233,12 @@ def savePreferences(self):
MessageBox(self, "Local server", "Please close your project or delete all the nodes running on the local server before changing settings", nodes)
return

servers.setLocalServer(local_server_path,
local_server_host,
local_server_port,
local_server_auto_start,
local_server_allow_console_from_anywhere)

# local server settings have changed, let's stop the current local server.
if server.connected() and not sys.platform.startswith('win'):
server.close_connection()
Expand All @@ -240,8 +251,12 @@ def savePreferences(self):
dialog.exec_()
else:
QtGui.QMessageBox.critical(self, "Local server", "Could not start the local server process: {}".format(local_server_path))

servers.setLocalServer(local_server_path, local_server_host, local_server_port, local_server_auto_start)
else:
servers.setLocalServer(local_server_path,
local_server_host,
local_server_port,
local_server_auto_start,
local_server_allow_console_from_anywhere)

# save the remote server preferences
servers.updateRemoteServers(self._remote_servers)
Expand Down
30 changes: 27 additions & 3 deletions gns3/servers.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ def __init__(self):
self._cloud_servers = {}
self._local_server_path = ""
self._local_server_auto_start = True
self._local_server_allow_console_from_anywhere = False
self._local_server_proccess = None
self._settings = self._loadSettings()
self._remote_server_iter_pos = 0
Expand All @@ -78,8 +79,15 @@ def _loadSettings(self):
local_server_port = settings.value("local_server_port", DEFAULT_LOCAL_SERVER_PORT, type=int)
local_server_path = settings.value("local_server_path", DEFAULT_LOCAL_SERVER_PATH)
local_server_auto_start = settings.value("local_server_auto_start", True, type=bool)
local_server_allow_console_from_anywhere = settings.value("local_server_allow_console_from_anywhere", False, type=bool)
heartbeat_freq = settings.value("heartbeat_freq", DEFAULT_HEARTBEAT_FREQ, type=int)
self.setLocalServer(local_server_path, local_server_host, local_server_port, local_server_auto_start, heartbeat_freq)

self.setLocalServer(local_server_path,
local_server_host,
local_server_port,
local_server_auto_start,
local_server_allow_console_from_anywhere,
heartbeat_freq)

# load the remote servers
size = settings.beginReadArray("remote")
Expand Down Expand Up @@ -109,6 +117,7 @@ def _saveSettings(self):
settings.setValue("local_server_port", self._local_server.port)
settings.setValue("local_server_path", self._local_server_path)
settings.setValue("local_server_auto_start", self._local_server_auto_start)
settings.setValue("local_server_allow_console_from_anywhere", self._local_server_allow_console_from_anywhere)

# save the remote servers
settings.beginWriteArray("remote", len(self._remote_servers))
Expand All @@ -131,6 +140,16 @@ def localServerAutoStart(self):

return self._local_server_auto_start

def localServerAllowConsoleFromAnywhere(self):
"""
Returns either the local server
is allows console connections to any local IP address.
:returns: boolean
"""

return self._local_server_allow_console_from_anywhere

def localServerPath(self):
"""
Returns the local server path.
Expand All @@ -145,7 +164,10 @@ def startLocalServer(self, path, host, port):
Starts the local server process.
"""

command = '"{executable}" --host={host} --port={port}'.format(executable=path, host=host, port=port)
command = '"{executable}" --host={host} --port={port} --console_bind_to_any={bind}'.format(executable=path,
host=host,
port=port,
bind=self._local_server_allow_console_from_anywhere)

# settings_dir = os.path.dirname(QtCore.QSettings().fileName())
# if os.path.isdir(settings_dir):
Expand Down Expand Up @@ -191,7 +213,7 @@ def stopLocalServer(self, wait=False):
if wait:
self._local_server_proccess.wait()

def setLocalServer(self, path, host, port, auto_start, heartbeat_freq=DEFAULT_HEARTBEAT_FREQ):
def setLocalServer(self, path, host, port, auto_start, allow_console_from_anywhere, heartbeat_freq=DEFAULT_HEARTBEAT_FREQ):
"""
Sets the local server.
Expand All @@ -200,11 +222,13 @@ def setLocalServer(self, path, host, port, auto_start, heartbeat_freq=DEFAULT_HE
:param port: port of the server (integer)
:param auto_start: either the local server should be
automatically started on startup (boolean)
:param allow_console_from_anywhere: allow console connections to any local IP address
:param heartbeat_freq: The interval to send heartbeats to the server
"""

self._local_server_path = path
self._local_server_auto_start = auto_start
self._local_server_allow_console_from_anywhere = allow_console_from_anywhere
if self._local_server:
if self._local_server.host == host and self._local_server.port == port:
return
Expand Down
4 changes: 2 additions & 2 deletions gns3/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@
"projects_path": DEFAULT_PROJECTS_PATH,
"images_path": DEFAULT_IMAGES_PATH,
"temporary_files_path": DEFAULT_TEMPORARY_FILES_PATH,
"launch_project_dialog_at_startup": True,
"auto_launch_project_dialog": True,
"check_for_update": True,
"last_check_for_update": 0,
"slow_device_start_all": 0,
Expand All @@ -219,7 +219,7 @@
"projects_path": str,
"images_path": str,
"temporary_files_path": str,
"launch_project_dialog_at_startup": bool,
"auto_launch_project_dialog": bool,
"check_for_update": bool,
"last_check_for_update": int,
"slow_device_start_all": int,
Expand Down
2 changes: 1 addition & 1 deletion gns3/ui/general_preferences_page.ui
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@
<item row="0" column="0">
<widget class="QCheckBox" name="uiLaunchNewProjectDialogCheckBox">
<property name="text">
<string>Launch the new project dialog at startup</string>
<string>Launch the new project dialog on startup</string>
</property>
<property name="checked">
<bool>true</bool>
Expand Down
4 changes: 2 additions & 2 deletions gns3/ui/general_preferences_page_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/general_preferences_page.ui'
#
# Created: Sun Nov 9 18:20:34 2014
# Created: Sun Nov 9 18:49:51 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
Expand Down Expand Up @@ -292,7 +292,7 @@ def retranslateUi(self, GeneralPreferencesPageWidget):
self.uiSlowStartAllLabel.setText(_translate("GeneralPreferencesPageWidget", "Delay between each device start when starting all devices:", None))
self.uiSlowStartAllSpinBox.setSuffix(_translate("GeneralPreferencesPageWidget", " seconds", None))
self.uiLinkManualModeCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Always use manual mode when adding links", None))
self.uiLaunchNewProjectDialogCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Launch the new project dialog at startup", None))
self.uiLaunchNewProjectDialogCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Launch the new project dialog on startup", None))
self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.uiGeneralTab), _translate("GeneralPreferencesPageWidget", "General", None))
self.uiTelnetConsoleSettingsGroupBox.setTitle(_translate("GeneralPreferencesPageWidget", "Console settings for Telnet connections", None))
self.uiTelnetConsolePreconfiguredCommandLabel.setText(_translate("GeneralPreferencesPageWidget", "Preconfigured commands:", None))
Expand Down
33 changes: 20 additions & 13 deletions gns3/ui/server_preferences_page.ui
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,19 @@
</item>
</layout>
</item>
<item row="9" column="0" colspan="2">
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>390</width>
<height>193</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QLabel" name="uiLocalServerHostLabel">
<property name="text">
Expand All @@ -65,19 +78,6 @@
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>390</width>
<height>193</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0" colspan="2">
<widget class="QSpinBox" name="uiLocalServerPortSpinBox">
<property name="suffix">
Expand All @@ -101,6 +101,13 @@
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QCheckBox" name="uiConsoleConnectionsToAnyIPCheckBox">
<property name="text">
<string>Allow console connections to any local IP address</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="uiRemoteTabWidget">
Expand Down
10 changes: 7 additions & 3 deletions gns3/ui/server_preferences_page_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/server_preferences_page.ui'
#
# Created: Fri Oct 10 10:46:44 2014
# Created: Sun Nov 9 18:49:51 2014
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
Expand Down Expand Up @@ -48,6 +48,8 @@ def setupUi(self, ServerPreferencesPageWidget):
self.uiLocalServerToolButton.setObjectName(_fromUtf8("uiLocalServerToolButton"))
self.horizontalLayout.addWidget(self.uiLocalServerToolButton)
self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 2)
spacerItem = QtGui.QSpacerItem(390, 193, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 9, 0, 1, 2)
self.uiLocalServerHostLabel = QtGui.QLabel(self.uiLocalTabWidget)
self.uiLocalServerHostLabel.setObjectName(_fromUtf8("uiLocalServerHostLabel"))
self.gridLayout.addWidget(self.uiLocalServerHostLabel, 2, 0, 1, 1)
Expand All @@ -57,8 +59,6 @@ def setupUi(self, ServerPreferencesPageWidget):
self.uiLocalServerPortLabel = QtGui.QLabel(self.uiLocalTabWidget)
self.uiLocalServerPortLabel.setObjectName(_fromUtf8("uiLocalServerPortLabel"))
self.gridLayout.addWidget(self.uiLocalServerPortLabel, 4, 0, 1, 1)
spacerItem = QtGui.QSpacerItem(390, 193, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 8, 0, 1, 2)
self.uiLocalServerPortSpinBox = QtGui.QSpinBox(self.uiLocalTabWidget)
self.uiLocalServerPortSpinBox.setSuffix(_fromUtf8(" TCP"))
self.uiLocalServerPortSpinBox.setMaximum(65535)
Expand All @@ -69,6 +69,9 @@ def setupUi(self, ServerPreferencesPageWidget):
self.uiLocalServerAutoStartCheckBox.setChecked(True)
self.uiLocalServerAutoStartCheckBox.setObjectName(_fromUtf8("uiLocalServerAutoStartCheckBox"))
self.gridLayout.addWidget(self.uiLocalServerAutoStartCheckBox, 6, 0, 1, 2)
self.uiConsoleConnectionsToAnyIPCheckBox = QtGui.QCheckBox(self.uiLocalTabWidget)
self.uiConsoleConnectionsToAnyIPCheckBox.setObjectName(_fromUtf8("uiConsoleConnectionsToAnyIPCheckBox"))
self.gridLayout.addWidget(self.uiConsoleConnectionsToAnyIPCheckBox, 7, 0, 1, 1)
self.uiTabWidget.addTab(self.uiLocalTabWidget, _fromUtf8(""))
self.uiRemoteTabWidget = QtGui.QWidget()
self.uiRemoteTabWidget.setObjectName(_fromUtf8("uiRemoteTabWidget"))
Expand Down Expand Up @@ -134,6 +137,7 @@ def retranslateUi(self, ServerPreferencesPageWidget):
self.uiLocalServerHostLabel.setText(_translate("ServerPreferencesPageWidget", "Host binding:", None))
self.uiLocalServerPortLabel.setText(_translate("ServerPreferencesPageWidget", "Port:", None))
self.uiLocalServerAutoStartCheckBox.setText(_translate("ServerPreferencesPageWidget", "Automatically start the server on startup", None))
self.uiConsoleConnectionsToAnyIPCheckBox.setText(_translate("ServerPreferencesPageWidget", "Allow console connections to any local IP address", None))
self.uiTabWidget.setTabText(self.uiTabWidget.indexOf(self.uiLocalTabWidget), _translate("ServerPreferencesPageWidget", "Local server", None))
self.uiRemoteServersTreeWidget.headerItem().setText(0, _translate("ServerPreferencesPageWidget", "Host", None))
self.uiRemoteServersTreeWidget.headerItem().setText(1, _translate("ServerPreferencesPageWidget", "Port", None))
Expand Down

0 comments on commit ec07873

Please sign in to comment.