|
Packit Service |
84cb3c |
#!/bin/python
|
|
Packit Service |
84cb3c |
# -*- coding: utf-8 -*-
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
# Copyright (C) 2010-2015 Red Hat, Inc.
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
# Authors:
|
|
Packit Service |
84cb3c |
# Thomas Woerner <twoerner@redhat.com>
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
# This program is free software; you can redistribute it and/or modify
|
|
Packit Service |
84cb3c |
# it under the terms of the GNU General Public License as published by
|
|
Packit Service |
84cb3c |
# the Free Software Foundation; either version 2 of the License, or
|
|
Packit Service |
84cb3c |
# (at your option) any later version.
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
# This program is distributed in the hope that it will be useful,
|
|
Packit Service |
84cb3c |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
84cb3c |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit Service |
84cb3c |
# GNU General Public License for more details.
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
# You should have received a copy of the GNU General Public License
|
|
Packit Service |
84cb3c |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
84cb3c |
#
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
import sys
|
|
Packit Service |
84cb3c |
from PyQt5 import QtGui, QtCore, QtWidgets
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
import gi
|
|
Packit Service |
84cb3c |
gi.require_version('Notify', '0.7')
|
|
Packit Service |
84cb3c |
from gi.repository import Notify
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
import os
|
|
Packit Service |
84cb3c |
from dbus.mainloop.pyqt5 import DBusQtMainLoop
|
|
Packit Service |
84cb3c |
import functools
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
from firewall import config
|
|
Packit Service |
84cb3c |
from firewall.core.fw_nm import nm_is_imported, nm_get_zone_of_connection, \
|
|
Packit Service |
84cb3c |
nm_set_zone_of_connection, \
|
|
Packit Service |
84cb3c |
nm_get_dbus_interface, \
|
|
Packit Service |
84cb3c |
nm_get_connections
|
|
Packit Service |
84cb3c |
from firewall.core.watcher import Watcher
|
|
Packit Service |
84cb3c |
from firewall.client import FirewallClient
|
|
Packit Service |
84cb3c |
import slip.dbus
|
|
Packit Service |
84cb3c |
import dbus
|
|
Packit Service |
84cb3c |
import signal
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
import gettext
|
|
Packit Service |
84cb3c |
gettext.textdomain(config.DOMAIN)
|
|
Packit Service |
84cb3c |
_ = gettext.gettext
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
PATH = [ ]
|
|
Packit Service |
84cb3c |
for p in os.getenv("PATH").split(":"):
|
|
Packit Service |
84cb3c |
if p not in PATH:
|
|
Packit Service |
84cb3c |
PATH.append(p)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def search_app(app):
|
|
Packit Service |
84cb3c |
for p in PATH:
|
|
Packit Service |
84cb3c |
_app = "%s/%s" % (p, app)
|
|
Packit Service |
84cb3c |
if os.path.exists(_app):
|
|
Packit Service |
84cb3c |
return _app
|
|
Packit Service |
84cb3c |
return None
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
NM_CONNECTION_EDITOR = ""
|
|
Packit Service |
84cb3c |
for binary in [ "/usr/bin/nm-connection-editor",
|
|
Packit Service |
84cb3c |
"/bin/nm-connection-editor",
|
|
Packit Service |
84cb3c |
"/usr/bin/kde5-nm-connection-editor",
|
|
Packit Service |
84cb3c |
"/bin/kde5-nm-connection-editor",
|
|
Packit Service |
84cb3c |
"/usr/bin/kde-nm-connection-editor",
|
|
Packit Service |
84cb3c |
"/bin/kde-nm-connection-editor" ]:
|
|
Packit Service |
84cb3c |
if os.path.exists(binary):
|
|
Packit Service |
84cb3c |
NM_CONNECTION_EDITOR = binary
|
|
Packit Service |
84cb3c |
break
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
PY2 = sys.version < '3'
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def escape(text):
|
|
Packit Service |
84cb3c |
text = text.replace('&', '&')
|
|
Packit Service |
84cb3c |
text = text.replace('>', '>')
|
|
Packit Service |
84cb3c |
text = text.replace('<', '<')
|
|
Packit Service |
84cb3c |
return text
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def fromUTF8(text):
|
|
Packit Service |
84cb3c |
if PY2 and QtCore.QT_VERSION < 0x050000:
|
|
Packit Service |
84cb3c |
return QtCore.QString.fromUtf8(text)
|
|
Packit Service |
84cb3c |
return text
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# ZoneInterfaceEditor #########################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class ZoneInterfaceEditor(QtWidgets.QDialog):
|
|
Packit Service |
84cb3c |
def __init__(self, fw, interface, zone):
|
|
Packit Service |
84cb3c |
self.fw = fw
|
|
Packit Service |
84cb3c |
self.interface = interface
|
|
Packit Service |
84cb3c |
self.zone = None
|
|
Packit Service |
84cb3c |
self.title = _("Select zone for interface '%s'") % self.interface
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
QtWidgets.QDialog.__init__(self)
|
|
Packit Service |
84cb3c |
self.create_ui(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def create_ui(self, zone):
|
|
Packit Service |
84cb3c |
self.setWindowTitle(fromUTF8(escape(self.title)))
|
|
Packit Service |
84cb3c |
self.rejected.connect(self.hide)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.resize(100, 50)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
vbox.setSpacing(6)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(fromUTF8(escape(self.title)))
|
|
Packit Service |
84cb3c |
vbox.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.combo = QtWidgets.QComboBox()
|
|
Packit Service |
84cb3c |
self.fill_zone_combo()
|
|
Packit Service |
84cb3c |
vbox.addWidget(self.combo)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok
|
|
Packit Service |
84cb3c |
| QtWidgets.QDialogButtonBox.Cancel)
|
|
Packit Service |
84cb3c |
self.ok_button = buttonBox.button(QtWidgets.QDialogButtonBox.Ok)
|
|
Packit Service |
84cb3c |
buttonBox.accepted.connect(self.ok)
|
|
Packit Service |
84cb3c |
buttonBox.rejected.connect(self.hide)
|
|
Packit Service |
84cb3c |
vbox.addWidget(buttonBox)
|
|
Packit Service |
84cb3c |
self.ok_button.setDisabled(True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.combo.activated.connect(self.combo_changed)
|
|
Packit Service |
84cb3c |
self.setLayout(vbox)
|
|
Packit Service |
84cb3c |
self.set_zone(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def combo_changed(self):
|
|
Packit Service |
84cb3c |
self.ok_button.setDisabled(self.get_zone() == self.zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def set_zone(self, zone):
|
|
Packit Service |
84cb3c |
self.zone = zone
|
|
Packit Service |
84cb3c |
if zone == "":
|
|
Packit Service |
84cb3c |
self.combo.setCurrentIndex(self.combo.findText(
|
|
Packit Service |
84cb3c |
escape(_("Default Zone"))))
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.combo.setCurrentIndex(self.combo.findText(self.zone))
|
|
Packit Service |
84cb3c |
self.combo_changed()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def get_zone(self):
|
|
Packit Service |
84cb3c |
text = str(self.combo.currentText())
|
|
Packit Service |
84cb3c |
if text == escape(_("Default Zone")):
|
|
Packit Service |
84cb3c |
text = ""
|
|
Packit Service |
84cb3c |
return text
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def fill_zone_combo(self):
|
|
Packit Service |
84cb3c |
self.combo.clear()
|
|
Packit Service |
84cb3c |
self.combo.addItem(fromUTF8(escape(_("Default Zone"))))
|
|
Packit Service |
84cb3c |
for z in self.fw.getZones():
|
|
Packit Service |
84cb3c |
self.combo.addItem(z)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zones_changed(self):
|
|
Packit Service |
84cb3c |
zone = self.get_zone()
|
|
Packit Service |
84cb3c |
self.fill_zone_combo()
|
|
Packit Service |
84cb3c |
self.set_zone(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def ok(self):
|
|
Packit Service |
84cb3c |
self.fw.changeZoneOfInterface(self.get_zone(), self.interface)
|
|
Packit Service |
84cb3c |
self.hide()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# ZoneConnectionEditor ########################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class ZoneConnectionEditor(ZoneInterfaceEditor):
|
|
Packit Service |
84cb3c |
def __init__(self, fw, connection, connection_name, zone):
|
|
Packit Service |
84cb3c |
self.fw = fw
|
|
Packit Service |
84cb3c |
self.connection = connection
|
|
Packit Service |
84cb3c |
self.connection_name = connection_name
|
|
Packit Service |
84cb3c |
self.zone = None
|
|
Packit Service |
84cb3c |
self.title = _("Select zone for connection '%s'") % self.connection_name
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
QtWidgets.QDialog.__init__(self)
|
|
Packit Service |
84cb3c |
self.create_ui(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def ok(self):
|
|
Packit Service |
84cb3c |
# apply changes
|
|
Packit Service |
84cb3c |
try:
|
|
Packit Service |
84cb3c |
nm_set_zone_of_connection(self.get_zone(), self.connection)
|
|
Packit Service |
84cb3c |
except Exception:
|
|
Packit Service |
84cb3c |
text = _("Failed to set zone {zone} for connection {connection_name}")
|
|
Packit Service |
84cb3c |
QtWidgets.QMessageBox.warning(None, fromUTF8(escape(self.title)),
|
|
Packit Service |
84cb3c |
escape(text.format(
|
|
Packit Service |
84cb3c |
zone=self.get_zone(),
|
|
Packit Service |
84cb3c |
connection_name=self.connection_name)))
|
|
Packit Service |
84cb3c |
self.hide()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# ZoneSourceEditor ############################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class ZoneSourceEditor(ZoneInterfaceEditor):
|
|
Packit Service |
84cb3c |
def __init__(self, fw, source, zone):
|
|
Packit Service |
84cb3c |
self.fw = fw
|
|
Packit Service |
84cb3c |
self.source = source
|
|
Packit Service |
84cb3c |
self.zone = None
|
|
Packit Service |
84cb3c |
self.title = _("Select zone for source '%s'") % self.source
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
QtWidgets.QDialog.__init__(self)
|
|
Packit Service |
84cb3c |
self.create_ui(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def ok(self):
|
|
Packit Service |
84cb3c |
self.fw.changeZoneOfSource(self.get_zone(), self.source)
|
|
Packit Service |
84cb3c |
self.hide()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# ShieldsEditor #########################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class ShieldsEditor(QtWidgets.QDialog):
|
|
Packit Service |
84cb3c |
def __init__(self, fw, settings, shields_up, shields_down):
|
|
Packit Service |
84cb3c |
self.fw = fw
|
|
Packit Service |
84cb3c |
self.settings = settings
|
|
Packit Service |
84cb3c |
self.shields_up = shields_up
|
|
Packit Service |
84cb3c |
self.shields_down = shields_down
|
|
Packit Service |
84cb3c |
self.title = _("Configure Shields Up/Down Zones")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
QtWidgets.QDialog.__init__(self)
|
|
Packit Service |
84cb3c |
self.create_ui()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def create_ui(self):
|
|
Packit Service |
84cb3c |
self.setWindowTitle(fromUTF8(escape(self.title)))
|
|
Packit Service |
84cb3c |
self.rejected.connect(self.hide)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
vbox.setSpacing(6)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(fromUTF8(escape(
|
|
Packit Service |
84cb3c |
_("Here you can select the zones used for Shields Up and "
|
|
Packit Service |
84cb3c |
"Shields Down."))))
|
|
Packit Service |
84cb3c |
label.setWordWrap(True)
|
|
Packit Service |
84cb3c |
vbox.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(fromUTF8(escape(
|
|
Packit Service |
84cb3c |
_("This feature is useful for people using the default zones "
|
|
Packit Service |
84cb3c |
"mostly. For users, that are changing zones of connections, it "
|
|
Packit Service |
84cb3c |
"might be of limited use."))))
|
|
Packit Service |
84cb3c |
label.setWordWrap(True)
|
|
Packit Service |
84cb3c |
vbox.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
grid = QtWidgets.QGridLayout()
|
|
Packit Service |
84cb3c |
grid.setSpacing(6)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(fromUTF8(escape(_("Shields Up Zone:"))))
|
|
Packit Service |
84cb3c |
label.setWordWrap(True)
|
|
Packit Service |
84cb3c |
grid.addWidget(label, 0, 0, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shields_up_combo = QtWidgets.QComboBox()
|
|
Packit Service |
84cb3c |
#self.fill_combo(self.shields_up_combo)
|
|
Packit Service |
84cb3c |
#self.set_shields_up(self.shields_up)
|
|
Packit Service |
84cb3c |
grid.addWidget(self.shields_up_combo, 0, 1, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
button = QtWidgets.QPushButton(_("Reset To Default"))
|
|
Packit Service |
84cb3c |
button.clicked.connect(self.reset_shields_up)
|
|
Packit Service |
84cb3c |
grid.addWidget(button, 0, 2, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(fromUTF8(escape(_("Shields Down Zone:"))))
|
|
Packit Service |
84cb3c |
label.setWordWrap(True)
|
|
Packit Service |
84cb3c |
grid.addWidget(label, 1, 0, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shields_down_combo = QtWidgets.QComboBox()
|
|
Packit Service |
84cb3c |
#self.fill_combo(self.shields_down_combo)
|
|
Packit Service |
84cb3c |
#self.set_shields_down(self.shields_down)
|
|
Packit Service |
84cb3c |
grid.addWidget(self.shields_down_combo, 1, 1, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
button = QtWidgets.QPushButton(_("Reset To Default"))
|
|
Packit Service |
84cb3c |
button.clicked.connect(self.reset_shields_down)
|
|
Packit Service |
84cb3c |
grid.addWidget(button, 1, 2, 1, 1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox.addLayout(grid)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Ok
|
|
Packit Service |
84cb3c |
| QtWidgets.QDialogButtonBox.Cancel)
|
|
Packit Service |
84cb3c |
self.ok_button = buttonBox.button(QtWidgets.QDialogButtonBox.Ok)
|
|
Packit Service |
84cb3c |
buttonBox.accepted.connect(self.ok)
|
|
Packit Service |
84cb3c |
buttonBox.rejected.connect(self.hide)
|
|
Packit Service |
84cb3c |
vbox.addWidget(buttonBox)
|
|
Packit Service |
84cb3c |
self.ok_button.setDisabled(True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shields_up_combo.activated.connect(self.shields_combo_changed)
|
|
Packit Service |
84cb3c |
self.shields_down_combo.activated.connect(self.shields_combo_changed)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.setLayout(vbox)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def shields_combo_changed(self):
|
|
Packit Service |
84cb3c |
self.ok_button.setDisabled(
|
|
Packit Service |
84cb3c |
self.get_shields_up() == self.shields_up and \
|
|
Packit Service |
84cb3c |
self.get_shields_down() == self.shields_down)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def set_shields_up(self, zone):
|
|
Packit Service |
84cb3c |
self.shields_up = zone
|
|
Packit Service |
84cb3c |
if self.shields_up_combo.count() > 0:
|
|
Packit Service |
84cb3c |
self.shields_up_combo.setCurrentIndex(
|
|
Packit Service |
84cb3c |
self.shields_up_combo.findText(self.shields_up))
|
|
Packit Service |
84cb3c |
self.shields_combo_changed()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def set_shields_down(self, zone):
|
|
Packit Service |
84cb3c |
self.shields_down = zone
|
|
Packit Service |
84cb3c |
if self.shields_down_combo.count() > 0:
|
|
Packit Service |
84cb3c |
self.shields_down_combo.setCurrentIndex(
|
|
Packit Service |
84cb3c |
self.shields_down_combo.findText(self.shields_down))
|
|
Packit Service |
84cb3c |
self.shields_combo_changed()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def reset_shields_up(self):
|
|
Packit Service |
84cb3c |
self.set_shields_up(self.shields_up)
|
|
Packit Service |
84cb3c |
# remove user key to get fallback again
|
|
Packit Service |
84cb3c |
self.settings.remove("shields-up")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def reset_shields_down(self):
|
|
Packit Service |
84cb3c |
self.set_shields_down(self.shields_down)
|
|
Packit Service |
84cb3c |
# remove user key to get fallback again
|
|
Packit Service |
84cb3c |
self.settings.remove("shields-down")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def get_shields_up(self):
|
|
Packit Service |
84cb3c |
return str(self.shields_up_combo.currentText())
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def get_shields_down(self):
|
|
Packit Service |
84cb3c |
return str(self.shields_down_combo.currentText())
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zones_changed(self):
|
|
Packit Service |
84cb3c |
up_zone = self.shields_up
|
|
Packit Service |
84cb3c |
if self.get_shields_up():
|
|
Packit Service |
84cb3c |
up_zone = self.get_shields_up()
|
|
Packit Service |
84cb3c |
down_zone = self.shields_down
|
|
Packit Service |
84cb3c |
if self.get_shields_down():
|
|
Packit Service |
84cb3c |
down_zone = self.get_shields_down()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
for z in self.fw.getZones():
|
|
Packit Service |
84cb3c |
self.shields_up_combo.addItem(z)
|
|
Packit Service |
84cb3c |
self.shields_down_combo.addItem(z)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.set_shields_up(up_zone)
|
|
Packit Service |
84cb3c |
self.set_shields_down(down_zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def ok(self):
|
|
Packit Service |
84cb3c |
if self.shields_up != self.get_shields_up():
|
|
Packit Service |
84cb3c |
self.settings.setValue("shields-up", self.get_shields_up())
|
|
Packit Service |
84cb3c |
if self.shields_down != self.get_shields_down():
|
|
Packit Service |
84cb3c |
self.settings.setValue("shields-down", self.get_shields_down())
|
|
Packit Service |
84cb3c |
self.settings.sync()
|
|
Packit Service |
84cb3c |
self.hide()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# AboutDialog #################################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class AboutDialog(QtWidgets.QDialog):
|
|
Packit Service |
84cb3c |
def __init__(self, name, icon, version, url, copyright, authors, license):
|
|
Packit Service |
84cb3c |
QtWidgets.QDialog.__init__(self)
|
|
Packit Service |
84cb3c |
self.setWindowIcon(icon)
|
|
Packit Service |
84cb3c |
self.setWindowTitle(fromUTF8(escape(_("About %s" % name))))
|
|
Packit Service |
84cb3c |
self.resize(500, 250)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
vbox.setSpacing(6)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
hbox = QtWidgets.QHBoxLayout()
|
|
Packit Service |
84cb3c |
hbox.setSpacing(24)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel()
|
|
Packit Service |
84cb3c |
label.setPixmap(icon.pixmap(96))
|
|
Packit Service |
84cb3c |
label.setMinimumSize(96, 96)
|
|
Packit Service |
84cb3c |
label.setMaximumSize(96, 96)
|
|
Packit Service |
84cb3c |
hbox.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox2 = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
vbox2.setSpacing(3)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel(name)
|
|
Packit Service |
84cb3c |
font = label.font()
|
|
Packit Service |
84cb3c |
font.setPointSize(font.pointSize()*2)
|
|
Packit Service |
84cb3c |
font.setBold(True)
|
|
Packit Service |
84cb3c |
label.setFont(font)
|
|
Packit Service |
84cb3c |
vbox2.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox2.addWidget(QtWidgets.QLabel(version))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
label = QtWidgets.QLabel("%s" % (url, url))
|
|
Packit Service |
84cb3c |
label.setTextFormat(QtCore.Qt.RichText)
|
|
Packit Service |
84cb3c |
label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
|
|
Packit Service |
84cb3c |
label.setOpenExternalLinks(True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox2.addWidget(label)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox2.addWidget(QtWidgets.QLabel(copyright))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
hbox.addLayout(vbox2)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox.addLayout(hbox)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
tabs = QtWidgets.QTabWidget()
|
|
Packit Service |
84cb3c |
tabs.setStyleSheet("QTabWidget::tab { padding: 1px 1px 1px 1px; }")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
tab = QtWidgets.QWidget()
|
|
Packit Service |
84cb3c |
vbox3 = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
textedit = QtWidgets.QPlainTextEdit()
|
|
Packit Service |
84cb3c |
#textedit.setStyleSheet("QPlainTextEdit { border: 0; padding: 0; }")
|
|
Packit Service |
84cb3c |
textedit.setReadOnly(True)
|
|
Packit Service |
84cb3c |
textedit.setPlainText(fromUTF8("\n".join(authors)))
|
|
Packit Service |
84cb3c |
vbox3.addWidget(textedit)
|
|
Packit Service |
84cb3c |
tab.setLayout(vbox3)
|
|
Packit Service |
84cb3c |
tabs.addTab(tab, fromUTF8(escape(_("Authors"))))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
tab = QtWidgets.QWidget()
|
|
Packit Service |
84cb3c |
vbox3 = QtWidgets.QVBoxLayout()
|
|
Packit Service |
84cb3c |
textedit = QtWidgets.QPlainTextEdit()
|
|
Packit Service |
84cb3c |
#textedit.setStyleSheet("QPlainTextEdit { border: 0; padding: 0; }")
|
|
Packit Service |
84cb3c |
textedit.setReadOnly(True)
|
|
Packit Service |
84cb3c |
textedit.setPlainText(license)
|
|
Packit Service |
84cb3c |
vbox3.addWidget(textedit)
|
|
Packit Service |
84cb3c |
tab.setLayout(vbox3)
|
|
Packit Service |
84cb3c |
tabs.addTab(tab, fromUTF8(escape(_("License"))))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
vbox.addWidget(tabs)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
buttonBox = QtWidgets.QDialogButtonBox(QtWidgets.QDialogButtonBox.Close)
|
|
Packit Service |
84cb3c |
buttonBox.rejected.connect(self.hide)
|
|
Packit Service |
84cb3c |
vbox.addWidget(buttonBox)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.setLayout(vbox)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# TrayApplet ##################################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
class TrayApplet(QtWidgets.QSystemTrayIcon):
|
|
Packit Service |
84cb3c |
def __init__(self):
|
|
Packit Service |
84cb3c |
super(TrayApplet, self).__init__()
|
|
Packit Service |
84cb3c |
self.name = _("Firewall Applet")
|
|
Packit Service |
84cb3c |
self.prog = "firewall-applet"
|
|
Packit Service |
84cb3c |
self.icon_name = "firewall-applet"
|
|
Packit Service |
84cb3c |
self.icons = {
|
|
Packit Service |
84cb3c |
"normal": QtGui.QIcon.fromTheme(self.icon_name),
|
|
Packit Service |
84cb3c |
"error": QtGui.QIcon.fromTheme(self.icon_name+"-error"),
|
|
Packit Service |
84cb3c |
"panic": QtGui.QIcon.fromTheme(self.icon_name+"-panic"),
|
|
Packit Service |
84cb3c |
"normal-shields_up": QtGui.QIcon.fromTheme(self.icon_name+"-shields_up"),
|
|
Packit Service |
84cb3c |
"normal-shields_down": QtGui.QIcon.fromTheme(self.icon_name+"-shields_down"),
|
|
Packit Service |
84cb3c |
}
|
|
Packit Service |
84cb3c |
self.timer = None
|
|
Packit Service |
84cb3c |
self.mode = None
|
|
Packit Service |
84cb3c |
self.blink = False
|
|
Packit Service |
84cb3c |
self.blink_count = 0
|
|
Packit Service |
84cb3c |
self._blink = False
|
|
Packit Service |
84cb3c |
self._blink_count = 0
|
|
Packit Service |
84cb3c |
self.show_inactive = False
|
|
Packit Service |
84cb3c |
self.tooltip_messages = [ ]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.active_zones = { }
|
|
Packit Service |
84cb3c |
self.connections = { }
|
|
Packit Service |
84cb3c |
self.connections_name = { }
|
|
Packit Service |
84cb3c |
self.default_zone = None
|
|
Packit Service |
84cb3c |
self.zone_connection_editors = { }
|
|
Packit Service |
84cb3c |
self.zone_interface_editors = { }
|
|
Packit Service |
84cb3c |
self.zone_source_editors = { }
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# settings
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.settings = QtCore.QSettings("firewall", "applet")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# file system watcher
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.watcher = Watcher(self.load_settings, 2)
|
|
Packit Service |
84cb3c |
self.watcher.add_watch_file("/etc/firewall/applet.conf")
|
|
Packit Service |
84cb3c |
self.watcher.add_watch_file(str(self.settings.fileName()))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# about dialog
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.about_dialog = AboutDialog(self.name,
|
|
Packit Service |
84cb3c |
self.icons["normal"],
|
|
Packit Service |
84cb3c |
config.VERSION, config.WEBSITE,
|
|
Packit Service |
84cb3c |
config.COPYRIGHT, config.AUTHORS,
|
|
Packit Service |
84cb3c |
config.LICENSE)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# urgencies
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.urgencies = { "noicon": QtWidgets.QSystemTrayIcon.NoIcon,
|
|
Packit Service |
84cb3c |
"information": QtWidgets.QSystemTrayIcon.Information,
|
|
Packit Service |
84cb3c |
"warning": QtWidgets.QSystemTrayIcon.Warning,
|
|
Packit Service |
84cb3c |
"critical": QtWidgets.QSystemTrayIcon.Critical }
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# actions
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shieldsupAction = QtWidgets.QAction(fromUTF8(escape(_("Shields Up"))),
|
|
Packit Service |
84cb3c |
self)
|
|
Packit Service |
84cb3c |
self.shieldsupAction.setCheckable(True)
|
|
Packit Service |
84cb3c |
self.shieldsupAction.setChecked(False)
|
|
Packit Service |
84cb3c |
self.shieldsupAction.triggered.connect(self.shieldsup_changed_cb)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.notificationsAction = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(_("Enable Notifications"))), self)
|
|
Packit Service |
84cb3c |
self.notificationsAction.setCheckable(True)
|
|
Packit Service |
84cb3c |
self.notificationsAction.setChecked(False)
|
|
Packit Service |
84cb3c |
self.notificationsAction.triggered.connect(self.notification_changed_cb)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.settingsAction = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(_("Edit Firewall Settings..."))), self)
|
|
Packit Service |
84cb3c |
self.settingsAction.triggered.connect(self.configure_cb)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.changeZonesAction = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(_("Change Zones of Connections..."))), self)
|
|
Packit Service |
84cb3c |
self.changeZonesAction.triggered.connect(self.nm_connection_editor)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shieldsAction = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(_("Configure Shields UP/Down Zones..."))), self)
|
|
Packit Service |
84cb3c |
self.shieldsAction.triggered.connect(self.configure_shields)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.panicAction = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(_("Block all network traffic"))), self)
|
|
Packit Service |
84cb3c |
self.panicAction.setCheckable(True)
|
|
Packit Service |
84cb3c |
self.panicAction.setChecked(False)
|
|
Packit Service |
84cb3c |
self.panicAction.triggered.connect(self.panic_mode_cb)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.aboutAction = QtWidgets.QAction(fromUTF8(escape(_("About"))), self)
|
|
Packit Service |
84cb3c |
self.aboutAction.triggered.connect(self.about_dialog.exec_)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
#self.quitAction = QtWidgets.QAction(fromUTF8(escape(_("Quit"))), self,
|
|
Packit Service |
84cb3c |
# triggered=self.quit)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.connectionsAction = QtWidgets.QWidgetAction(self)
|
|
Packit Service |
84cb3c |
self.connectionsAction.setDefaultWidget(QtWidgets.QLabel(
|
|
Packit Service |
84cb3c |
fromUTF8(""+escape(_("Connections"))+" ")))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.interfacesAction = QtWidgets.QWidgetAction(self)
|
|
Packit Service |
84cb3c |
self.interfacesAction.setDefaultWidget(QtWidgets.QLabel(
|
|
Packit Service |
84cb3c |
fromUTF8(""+escape(_("Interfaces"))+" ")))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.sourcesAction = QtWidgets.QWidgetAction(self)
|
|
Packit Service |
84cb3c |
self.sourcesAction.setDefaultWidget(QtWidgets.QLabel(
|
|
Packit Service |
84cb3c |
fromUTF8(""+escape(_("Sources"))+" ")))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# init
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.left_menu = QtWidgets.QMenu()
|
|
Packit Service |
84cb3c |
self.left_menu.setStyleSheet('QMenu { margin: 5px; }')
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.right_menu = QtWidgets.QMenu()
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.shieldsupAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.notificationsAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addSeparator()
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.settingsAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.changeZonesAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.shieldsAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addSeparator()
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.panicAction)
|
|
Packit Service |
84cb3c |
self.right_menu.addSeparator()
|
|
Packit Service |
84cb3c |
self.right_menu.addAction(self.aboutAction)
|
|
Packit Service |
84cb3c |
#self.right_menu.addSeparator()
|
|
Packit Service |
84cb3c |
#self.right_menu.addAction(self.quitAction)
|
|
Packit Service |
84cb3c |
self.setContextMenu(self.right_menu)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.activated.connect(self.activated_cb)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.set_mode("error")
|
|
Packit Service |
84cb3c |
self.set_icon()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.setVisible(self.show_inactive)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# init notification
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
Notify.init(self.prog)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# connect to firewalld
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
DBusQtMainLoop(set_as_default=True)
|
|
Packit Service |
84cb3c |
try:
|
|
Packit Service |
84cb3c |
self.bus = slip.dbus.SystemBus()
|
|
Packit Service |
84cb3c |
self.bus.default_timeout = None
|
|
Packit Service |
84cb3c |
except Exception as msg:
|
|
Packit Service |
84cb3c |
print("Not using slip", msg)
|
|
Packit Service |
84cb3c |
self.bus = dbus.SystemBus()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if nm_is_imported():
|
|
Packit Service |
84cb3c |
self.bus.add_signal_receiver(
|
|
Packit Service |
84cb3c |
self.nm_signal_receiver,
|
|
Packit Service |
84cb3c |
dbus_interface=nm_get_dbus_interface(),
|
|
Packit Service |
84cb3c |
signal_name='PropertiesChanged',
|
|
Packit Service |
84cb3c |
member_keyword='member')
|
|
Packit Service |
84cb3c |
self.nm_signal_receiver()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.fw = FirewallClient(self.bus, wait=1)
|
|
Packit Service |
84cb3c |
self.fw.setExceptionHandler(self._exception_handler)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.fw.connect("connection-established", self.connection_established)
|
|
Packit Service |
84cb3c |
self.fw.connect("connection-lost", self.connection_lost)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.fw.connect("reloaded", self.reloaded),
|
|
Packit Service |
84cb3c |
self.fw.connect("default-zone-changed", self.default_zone_changed)
|
|
Packit Service |
84cb3c |
self.fw.connect("panic-mode-enabled", self.panic_mode_enabled)
|
|
Packit Service |
84cb3c |
self.fw.connect("panic-mode-disabled", self.panic_mode_disabled)
|
|
Packit Service |
84cb3c |
self.fw.connect("interface-added", self.interface_added)
|
|
Packit Service |
84cb3c |
self.fw.connect("interface-removed", self.interface_removed)
|
|
Packit Service |
84cb3c |
self.fw.connect("zone-of-interface-changed",
|
|
Packit Service |
84cb3c |
self.zone_of_interface_changed)
|
|
Packit Service |
84cb3c |
self.fw.connect("source-added", self.source_added)
|
|
Packit Service |
84cb3c |
self.fw.connect("source-removed", self.source_removed)
|
|
Packit Service |
84cb3c |
self.fw.connect("zone-of-source-changed",
|
|
Packit Service |
84cb3c |
self.zone_of_source_changed)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shields_editor = ShieldsEditor(self.fw, self.settings, None, None)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.load_settings()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def _exception_handler(self, exception_message):
|
|
Packit Service |
84cb3c |
if "NotAuthorizedException" in exception_message:
|
|
Packit Service |
84cb3c |
self.error(fromUTF8(escape(_("Authorization failed."))))
|
|
Packit Service |
84cb3c |
elif "INVALID_NAME" in exception_message:
|
|
Packit Service |
84cb3c |
msg = exception_message.replace("INVALID_NAME", _("Invalid name"))
|
|
Packit Service |
84cb3c |
self.warning(fromUTF8(escape(msg)))
|
|
Packit Service |
84cb3c |
elif "NAME_CONFLICT" in exception_message:
|
|
Packit Service |
84cb3c |
msg = exception_message.replace("NAME_CONFLICT",
|
|
Packit Service |
84cb3c |
_("Name already exists"))
|
|
Packit Service |
84cb3c |
self.warning(fromUTF8(escape(msg)))
|
|
Packit Service |
84cb3c |
elif "NO_DEFAULTS" in exception_message:
|
|
Packit Service |
84cb3c |
pass
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.error(fromUTF8(exception_message))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def quit(self):
|
|
Packit Service |
84cb3c |
sys.exit(1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def set_icon(self, mode=None):
|
|
Packit Service |
84cb3c |
if mode is not None:
|
|
Packit Service |
84cb3c |
self.setIcon(self.icons[mode])
|
|
Packit Service |
84cb3c |
elif self.mode != "normal":
|
|
Packit Service |
84cb3c |
self.setIcon(self.icons[self.mode])
|
|
Packit Service |
84cb3c |
elif self.default_zone == self.shields_up:
|
|
Packit Service |
84cb3c |
self.setIcon(self.icons["normal-shields_up"])
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.setIcon(self.icons["normal-shields_down"])
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def load_settings(self, name=None):
|
|
Packit Service |
84cb3c |
self.settings.sync()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
notifications = self.settings.value("notifications", False, type=bool)
|
|
Packit Service |
84cb3c |
self.notificationsAction.setChecked(notifications)
|
|
Packit Service |
84cb3c |
self.show_inactive = self.settings.value("show-inactive", False,
|
|
Packit Service |
84cb3c |
type=bool)
|
|
Packit Service |
84cb3c |
self.blink = self.settings.value("blink", False, type=bool)
|
|
Packit Service |
84cb3c |
self.blink_count = self.settings.value("blink-count", 5, type=int)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.shields_up = self.settings.value("shields-up", "block", type=str)
|
|
Packit Service |
84cb3c |
if self.default_zone:
|
|
Packit Service |
84cb3c |
self.shieldsupAction.setChecked(
|
|
Packit Service |
84cb3c |
self.default_zone == self.shields_up)
|
|
Packit Service |
84cb3c |
self.shields_editor.set_shields_up(self.shields_up)
|
|
Packit Service |
84cb3c |
self.shields_down = self.settings.value("shields-down", "public",
|
|
Packit Service |
84cb3c |
type=str)
|
|
Packit Service |
84cb3c |
self.shields_editor.set_shields_down(self.shields_down)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
#print("shields-up=%s" % self.shields_up)
|
|
Packit Service |
84cb3c |
#print("notifications=%s" % notifications)
|
|
Packit Service |
84cb3c |
#print("blink=%s" % self.blink)
|
|
Packit Service |
84cb3c |
#print("blink-count=%s" % self.blink_count)
|
|
Packit Service |
84cb3c |
#print("show-inactive=%s" % self.show_inactive)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if not self.fw.connected:
|
|
Packit Service |
84cb3c |
self.setVisible(self.show_inactive)
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.setVisible(True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def activated_cb(self, reason):
|
|
Packit Service |
84cb3c |
if reason == QtWidgets.QSystemTrayIcon.Trigger:
|
|
Packit Service |
84cb3c |
self.left_menu.popup(QtGui.QCursor.pos())
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def update_active_zones(self):
|
|
Packit Service |
84cb3c |
self.active_zones.clear()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# remove all entries for the left menu
|
|
Packit Service |
84cb3c |
self.left_menu.clear()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# add connections entry
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(self.connectionsAction)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if not self.fw.connected:
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
active_zones = self.fw.getActiveZones()
|
|
Packit Service |
84cb3c |
if active_zones:
|
|
Packit Service |
84cb3c |
self.active_zones = active_zones
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# get all active connections (NM) and interfaces
|
|
Packit Service |
84cb3c |
connections = { }
|
|
Packit Service |
84cb3c |
interfaces = { }
|
|
Packit Service |
84cb3c |
sources = { }
|
|
Packit Service |
84cb3c |
for zone in sorted(self.active_zones):
|
|
Packit Service |
84cb3c |
if "interfaces" in self.active_zones[zone]:
|
|
Packit Service |
84cb3c |
for interface in sorted(self.active_zones[zone]["interfaces"]):
|
|
Packit Service |
84cb3c |
if interface not in self.connections:
|
|
Packit Service |
84cb3c |
interfaces[interface] = zone
|
|
Packit Service |
84cb3c |
if "sources" in self.active_zones[zone]:
|
|
Packit Service |
84cb3c |
for source in sorted(self.active_zones[zone]["sources"]):
|
|
Packit Service |
84cb3c |
sources[source] = zone
|
|
Packit Service |
84cb3c |
# NM controlled connections
|
|
Packit Service |
84cb3c |
for interface in self.connections:
|
|
Packit Service |
84cb3c |
connection = self.connections[interface]
|
|
Packit Service |
84cb3c |
if connection not in self.connections_name:
|
|
Packit Service |
84cb3c |
connection_name = None
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
connection_name = self.connections_name[connection]
|
|
Packit Service |
84cb3c |
zone = nm_get_zone_of_connection(connection)
|
|
Packit Service |
84cb3c |
connections[connection] = [ zone, connection_name ]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
binding = _("{entry} (Zone: {zone})")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# add NM controlled bindings
|
|
Packit Service |
84cb3c |
for connection in sorted(connections):
|
|
Packit Service |
84cb3c |
zone = connections[connection][0]
|
|
Packit Service |
84cb3c |
connection_name = connections[connection][1]
|
|
Packit Service |
84cb3c |
if zone == "":
|
|
Packit Service |
84cb3c |
_binding = _("{entry} (Default Zone: {default_zone})")
|
|
Packit Service |
84cb3c |
action = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(
|
|
Packit Service |
84cb3c |
_binding.format(default_zone=self.default_zone,
|
|
Packit Service |
84cb3c |
entry=connection_name))), self)
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
action = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(binding.format(zone=zone,
|
|
Packit Service |
84cb3c |
entry=connection_name))), self)
|
|
Packit Service |
84cb3c |
action.triggered.connect(functools.partial(
|
|
Packit Service |
84cb3c |
self.zone_connection_editor, connection, connection_name, zone))
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(action)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# add interfaces entry
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(self.interfacesAction)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# add other interfaces
|
|
Packit Service |
84cb3c |
for interface in sorted(interfaces):
|
|
Packit Service |
84cb3c |
zone = interfaces[interface]
|
|
Packit Service |
84cb3c |
action = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(binding.format(zone=zone, entry=interface))),
|
|
Packit Service |
84cb3c |
self)
|
|
Packit Service |
84cb3c |
action.triggered.connect(functools.partial(
|
|
Packit Service |
84cb3c |
self.zone_interface_editor, interface, zone))
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(action)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# add interfaces entry
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(self.sourcesAction)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
for source in sorted(sources):
|
|
Packit Service |
84cb3c |
zone = sources[source]
|
|
Packit Service |
84cb3c |
action = QtWidgets.QAction(
|
|
Packit Service |
84cb3c |
fromUTF8(escape(binding.format(zone=zone, entry=source))),
|
|
Packit Service |
84cb3c |
self)
|
|
Packit Service |
84cb3c |
action.triggered.connect(functools.partial(
|
|
Packit Service |
84cb3c |
self.zone_source_editor, source, zone))
|
|
Packit Service |
84cb3c |
self.left_menu.addAction(action)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zone_interface_editor(self, interface, zone):
|
|
Packit Service |
84cb3c |
if interface in self.zone_interface_editors:
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[interface].set_zone(zone)
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[interface].show()
|
|
Packit Service |
84cb3c |
return self.zone_interface_editors[interface].raise_()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
editor = ZoneInterfaceEditor(self.fw, interface, zone)
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[interface] = editor
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
editor.raise_()
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zone_connection_editor(self, connection, connection_name, zone):
|
|
Packit Service |
84cb3c |
if connection in self.zone_connection_editors:
|
|
Packit Service |
84cb3c |
self.zone_connection_editors[connection].set_zone(zone)
|
|
Packit Service |
84cb3c |
self.zone_connection_editors[connection].show()
|
|
Packit Service |
84cb3c |
return self.zone_connection_editors[connection].raise_()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
editor = ZoneConnectionEditor(self.fw, connection, connection_name, zone)
|
|
Packit Service |
84cb3c |
self.zone_connection_editors[connection] = editor
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
editor.raise_()
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zone_source_editor(self, source, zone):
|
|
Packit Service |
84cb3c |
if source in self.zone_source_editors:
|
|
Packit Service |
84cb3c |
self.zone_source_editors[source].set_zone(zone)
|
|
Packit Service |
84cb3c |
self.zone_source_editors[source].show()
|
|
Packit Service |
84cb3c |
return self.zone_source_editors[source].raise_()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
editor = ZoneSourceEditor(self.fw, source, zone)
|
|
Packit Service |
84cb3c |
self.zone_source_editors[source] = editor
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
editor.raise_()
|
|
Packit Service |
84cb3c |
editor.show()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def nm_signal_receiver(self, *args, **kwargs):
|
|
Packit Service |
84cb3c |
self.connections.clear()
|
|
Packit Service |
84cb3c |
self.connections_name.clear()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# do not use NMClient could result in python core dump
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if nm_is_imported():
|
|
Packit Service |
84cb3c |
text = _("Failed to get connections from NetworkManager")
|
|
Packit Service |
84cb3c |
try:
|
|
Packit Service |
84cb3c |
nm_get_connections(self.connections, self.connections_name)
|
|
Packit Service |
84cb3c |
except Exception:
|
|
Packit Service |
84cb3c |
self.notify(escape(text), urgency=Notify.Urgency.CRITICAL)
|
|
Packit Service |
84cb3c |
if text not in self.tooltip_messages:
|
|
Packit Service |
84cb3c |
self.tooltip_messages.append(text)
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
if text in self.tooltip_messages:
|
|
Packit Service |
84cb3c |
self.tooltip_messages.remove(text)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
text = _("No NetworkManager imports available")
|
|
Packit Service |
84cb3c |
self.notify(escape(text), urgency=Notify.Urgency.CRITICAL)
|
|
Packit Service |
84cb3c |
if text not in self.tooltip_messages:
|
|
Packit Service |
84cb3c |
self.tooltip_messages.append(text)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def notify(self, msg, urgency="noicon", timeout=5):
|
|
Packit Service |
84cb3c |
#self.showMessage(fromUTF8(escape(self.name)), msg, self.urgencies[urgency], timeout*1000)
|
|
Packit Service |
84cb3c |
n = Notify.Notification.new(escape(self.name), msg, self.icon_name)
|
|
Packit Service |
84cb3c |
n.set_urgency(Notify.Urgency.NORMAL)
|
|
Packit Service |
84cb3c |
try:
|
|
Packit Service |
84cb3c |
n.show()
|
|
Packit Service |
84cb3c |
except:
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def shieldsup_changed_cb(self):
|
|
Packit Service |
84cb3c |
if self.shieldsupAction.isChecked():
|
|
Packit Service |
84cb3c |
zone = str(self.shields_up)
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
zone = str(self.shields_down)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.fw.connected and self.default_zone != zone:
|
|
Packit Service |
84cb3c |
try:
|
|
Packit Service |
84cb3c |
self.fw.setDefaultZone(zone)
|
|
Packit Service |
84cb3c |
except dbus.exceptions.DBusException as e:
|
|
Packit Service |
84cb3c |
print("Error: %s" % e.get_dbus_message())
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def notification_changed_cb(self):
|
|
Packit Service |
84cb3c |
self.settings.setValue("notifications",
|
|
Packit Service |
84cb3c |
self.notificationsAction.isChecked())
|
|
Packit Service |
84cb3c |
self.settings.sync()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def __blink(self, arg=None):
|
|
Packit Service |
84cb3c |
if self._blink_count != 0:
|
|
Packit Service |
84cb3c |
if self._blink_count > 0 and self._blink:
|
|
Packit Service |
84cb3c |
self._blink_count -= 1
|
|
Packit Service |
84cb3c |
self._blink = not self._blink
|
|
Packit Service |
84cb3c |
if not self.timer:
|
|
Packit Service |
84cb3c |
self.timer = QtCore.QTimer(self)
|
|
Packit Service |
84cb3c |
self.timer.timeout.connect(self.__blink)
|
|
Packit Service |
84cb3c |
self.timer.setInterval(1000)
|
|
Packit Service |
84cb3c |
self.timer.start()
|
|
Packit Service |
84cb3c |
if not self._blink:
|
|
Packit Service |
84cb3c |
self.set_icon()
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.set_icon("normal")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def get_mode(self):
|
|
Packit Service |
84cb3c |
return self.mode
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def set_mode(self, mode):
|
|
Packit Service |
84cb3c |
if self.mode != mode:
|
|
Packit Service |
84cb3c |
if self.timer and self.timer.isActive():
|
|
Packit Service |
84cb3c |
self.timer.stop()
|
|
Packit Service |
84cb3c |
self._blink = False
|
|
Packit Service |
84cb3c |
self.mode = mode
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
elif self.mode == mode and self.timer:
|
|
Packit Service |
84cb3c |
if self._blink_count == 0:
|
|
Packit Service |
84cb3c |
self._blink_count += 1
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if mode == "normal":
|
|
Packit Service |
84cb3c |
self.set_icon()
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.blink:
|
|
Packit Service |
84cb3c |
if self.blink_count != 0:
|
|
Packit Service |
84cb3c |
self._blink = True
|
|
Packit Service |
84cb3c |
self._blink_count = self.blink_count
|
|
Packit Service |
84cb3c |
self.__blink()
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.set_icon()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def update_tooltip(self):
|
|
Packit Service |
84cb3c |
if self.get_mode() == "error":
|
|
Packit Service |
84cb3c |
self.setToolTip(fromUTF8("<big>" + \
|
|
Packit Service |
84cb3c |
_("No connection to firewall daemon") + \
|
|
Packit Service |
84cb3c |
"</big>"))
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
messages = [ ]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.panicAction.isChecked():
|
|
Packit Service |
84cb3c |
messages.append("<big>" + \
|
|
Packit Service |
84cb3c |
_("All network traffic is blocked.") + \
|
|
Packit Service |
84cb3c |
"</big>")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.default_zone:
|
|
Packit Service |
84cb3c |
messages.append(_("Default Zone: '%s'") % self.default_zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
for interface in self.connections:
|
|
Packit Service |
84cb3c |
connection = self.connections[interface]
|
|
Packit Service |
84cb3c |
zone = nm_get_zone_of_connection(connection)
|
|
Packit Service |
84cb3c |
if zone == "":
|
|
Packit Service |
84cb3c |
text = _("Default Zone '{default_zone}' active for connection "
|
|
Packit Service |
84cb3c |
"'{connection}' on interface '{interface}'")
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' active for connection "
|
|
Packit Service |
84cb3c |
"'{connection}' on interface '{interface}'")
|
|
Packit Service |
84cb3c |
messages.append(text.format(zone=zone,
|
|
Packit Service |
84cb3c |
default_zone=self.default_zone,
|
|
Packit Service |
84cb3c |
connection=connection,
|
|
Packit Service |
84cb3c |
interface=interface))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if len(self.active_zones) > 0:
|
|
Packit Service |
84cb3c |
for zone in sorted(self.active_zones):
|
|
Packit Service |
84cb3c |
if "interfaces" in self.active_zones[zone]:
|
|
Packit Service |
84cb3c |
for interface in sorted(self.active_zones[zone]["interfaces"]):
|
|
Packit Service |
84cb3c |
if interface not in self.connections:
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' active for interface "
|
|
Packit Service |
84cb3c |
"'{interface}'")
|
|
Packit Service |
84cb3c |
connection = None
|
|
Packit Service |
84cb3c |
messages.append(text.format(zone=zone,
|
|
Packit Service |
84cb3c |
connection=connection,
|
|
Packit Service |
84cb3c |
interface=interface))
|
|
Packit Service |
84cb3c |
if "sources" in self.active_zones[zone]:
|
|
Packit Service |
84cb3c |
for source in sorted(self.active_zones[zone]["sources"]):
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' active for source {source}")
|
|
Packit Service |
84cb3c |
connection = None
|
|
Packit Service |
84cb3c |
messages.append(text.format(zone=zone, source=source))
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
messages.append(_("No Active Zones."))
|
|
Packit Service |
84cb3c |
messages.extend(self.tooltip_messages)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
tooltip = "<nobr>"+"</nobr> <nobr>".join(messages)+"</nobr>"
|
|
Packit Service |
84cb3c |
self.setToolTip(fromUTF8("<font size=\"3\">"+tooltip+"</font>"))
|
|
Packit Service |
84cb3c |
self.set_icon()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def show(self):
|
|
Packit Service |
84cb3c |
# do not automatically show the applet
|
|
Packit Service |
84cb3c |
pass
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def panic_mode_cb(self):
|
|
Packit Service |
84cb3c |
if not self.fw or not self.fw.connected:
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
if self.panicAction.isChecked():
|
|
Packit Service |
84cb3c |
self.fw.enablePanicMode()
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.fw.disablePanicMode()
|
|
Packit Service |
84cb3c |
self.panicAction.setChecked(not self.panicAction.isChecked())
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def configure_shields(self):
|
|
Packit Service |
84cb3c |
self.shields_editor.show()
|
|
Packit Service |
84cb3c |
self.shields_editor.raise_()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def nm_connection_editor(self, item, uuid=None):
|
|
Packit Service |
84cb3c |
if NM_CONNECTION_EDITOR == "":
|
|
Packit Service |
84cb3c |
self.warning("NetworkManager connection editor is missing.")
|
|
Packit Service |
84cb3c |
return
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if uuid:
|
|
Packit Service |
84cb3c |
if "kde-" in NM_CONNECTION_EDITOR:
|
|
Packit Service |
84cb3c |
os.system("%s %s &" % (NM_CONNECTION_EDITOR, uuid))
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
os.system("%s --edit=%s &" % (NM_CONNECTION_EDITOR, uuid))
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
os.system("%s &" % NM_CONNECTION_EDITOR)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def warning(self, text):
|
|
Packit Service |
84cb3c |
QtWidgets.QMessageBox.warning(None, fromUTF8(escape(self.name)), text)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def error(self, text):
|
|
Packit Service |
84cb3c |
QtWidgets.QMessageBox.critical(None, fromUTF8(escape(self.name)), text)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def configure_cb(self, widget):
|
|
Packit Service |
84cb3c |
os.system("firewall-config &")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# firewallClient signal receivers
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def connection_established(self, first=False):
|
|
Packit Service |
84cb3c |
self.default_zone = self.fw.getDefaultZone()
|
|
Packit Service |
84cb3c |
self.panicAction.setChecked(self.fw.queryPanicMode())
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.shields_editor.zones_changed()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.shields_up:
|
|
Packit Service |
84cb3c |
self.shieldsupAction.setChecked(
|
|
Packit Service |
84cb3c |
self.default_zone == self.shields_up)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("Connection to FirewallD established.")))
|
|
Packit Service |
84cb3c |
self.setVisible(True)
|
|
Packit Service |
84cb3c |
self.set_mode("normal")
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def connection_lost(self):
|
|
Packit Service |
84cb3c |
self.default_zone = None
|
|
Packit Service |
84cb3c |
self.set_mode("error")
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
self.panicAction.setChecked(False)
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("Connection to FirewallD lost.")))
|
|
Packit Service |
84cb3c |
self.setVisible(self.show_inactive)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def reloaded(self):
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("FirewallD has been reloaded.")))
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def default_zone_changed(self, zone):
|
|
Packit Service |
84cb3c |
self.default_zone = zone
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("Default zone changed to '%s'.") % zone))
|
|
Packit Service |
84cb3c |
if self.shields_up:
|
|
Packit Service |
84cb3c |
self.shieldsupAction.setChecked(
|
|
Packit Service |
84cb3c |
self.default_zone == self.shields_up)
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def _panic_mode(self, enable):
|
|
Packit Service |
84cb3c |
self.panicAction.setChecked(enable)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if enable:
|
|
Packit Service |
84cb3c |
self.set_mode("panic")
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
self.set_mode("normal")
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
ed = { 1: _("All network traffic is blocked."),
|
|
Packit Service |
84cb3c |
0: _("Network traffic is not blocked anymore.") }
|
|
Packit Service |
84cb3c |
self.notify(escape(ed[enable]))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def panic_mode_enabled(self):
|
|
Packit Service |
84cb3c |
self._panic_mode(True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def panic_mode_disabled(self):
|
|
Packit Service |
84cb3c |
self._panic_mode(False)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def _interface(self, zone, interface, enable):
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# close dialog of removed interface
|
|
Packit Service |
84cb3c |
if not enable:
|
|
Packit Service |
84cb3c |
if interface in self.connections:
|
|
Packit Service |
84cb3c |
connection = self.connections[interface]
|
|
Packit Service |
84cb3c |
if connection in self.zone_connection_editors:
|
|
Packit Service |
84cb3c |
self.zone_connection_editors[connection].hide()
|
|
Packit Service |
84cb3c |
del self.zone_connection_editors[connection]
|
|
Packit Service |
84cb3c |
elif interface in self.zone_interface_editors:
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[interface].hide()
|
|
Packit Service |
84cb3c |
del self.zone_interface_editors[interface]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# send notification if enabled
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
ed = { 1: _("activated"),
|
|
Packit Service |
84cb3c |
0: _("deactivated") }
|
|
Packit Service |
84cb3c |
if interface in self.connections:
|
|
Packit Service |
84cb3c |
connection = self.connections[interface]
|
|
Packit Service |
84cb3c |
zone = nm_get_zone_of_connection(connection)
|
|
Packit Service |
84cb3c |
if zone == "":
|
|
Packit Service |
84cb3c |
text = _("Default zone '{default_zone}' "
|
|
Packit Service |
84cb3c |
"{activated_deactivated} for "
|
|
Packit Service |
84cb3c |
"connection '{connection}' on "
|
|
Packit Service |
84cb3c |
"interface '{interface}'")
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' {activated_deactivated} for "
|
|
Packit Service |
84cb3c |
"connection '{connection}' on "
|
|
Packit Service |
84cb3c |
"interface '{interface}'")
|
|
Packit Service |
84cb3c |
else:
|
|
Packit Service |
84cb3c |
connection = None
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' {activated_deactivated} for "
|
|
Packit Service |
84cb3c |
"interface '{interface}'")
|
|
Packit Service |
84cb3c |
self.notify(escape(text.format(
|
|
Packit Service |
84cb3c |
zone=zone,
|
|
Packit Service |
84cb3c |
default_zone=self.default_zone,
|
|
Packit Service |
84cb3c |
activated_deactivated=ed[enable],
|
|
Packit Service |
84cb3c |
connection=connection, interface=interface)))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def interface_added(self, zone, interface):
|
|
Packit Service |
84cb3c |
self._interface(zone, interface, True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def interface_removed(self, zone, interface):
|
|
Packit Service |
84cb3c |
self._interface(zone, interface, False)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zone_of_interface_changed(self, zone, interface):
|
|
Packit Service |
84cb3c |
# update zone editor
|
|
Packit Service |
84cb3c |
if interface in self.zone_interface_editors:
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[interface].set_zone(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("Zone '%s' activated for interface '%s'") % \
|
|
Packit Service |
84cb3c |
(zone, interface)))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def _source(self, zone, source, enable):
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# close dialog of removed source
|
|
Packit Service |
84cb3c |
if not enable:
|
|
Packit Service |
84cb3c |
if source in self.zone_source_editors:
|
|
Packit Service |
84cb3c |
self.zone_source_editors[source].hide()
|
|
Packit Service |
84cb3c |
del self.zone_source_editors[source]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# send notification if enabled
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
ed = { 1: _("activated"),
|
|
Packit Service |
84cb3c |
0: _("deactivated") }
|
|
Packit Service |
84cb3c |
text = _("Zone '{zone}' {activated_deactivated} for "
|
|
Packit Service |
84cb3c |
"source '{source}'")
|
|
Packit Service |
84cb3c |
self.notify(escape(text.format(
|
|
Packit Service |
84cb3c |
zone=zone, activated_deactivated=ed[enable], source=source)))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def source_added(self, zone, source):
|
|
Packit Service |
84cb3c |
self._source(zone, source, True)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def source_removed(self, zone, source):
|
|
Packit Service |
84cb3c |
self._source(zone, source, False)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
def zone_of_source_changed(self, zone, source):
|
|
Packit Service |
84cb3c |
index = source
|
|
Packit Service |
84cb3c |
if source in self.zone_source_editors:
|
|
Packit Service |
84cb3c |
self.zone_source_editors[source].set_zone(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# update zone editor
|
|
Packit Service |
84cb3c |
if index in self.zone_interface_editors:
|
|
Packit Service |
84cb3c |
self.zone_interface_editors[index].set_zone(zone)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
self.update_active_zones()
|
|
Packit Service |
84cb3c |
self.update_tooltip()
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if self.notificationsAction.isChecked():
|
|
Packit Service |
84cb3c |
self.notify(escape(_("Zone '%s' activated for source '%s'") % \
|
|
Packit Service |
84cb3c |
(zone, source)))
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# MAIN ########################################################################
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
if len(sys.argv) > 1:
|
|
Packit Service |
84cb3c |
print("""Usage: %s [options]
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
Options:
|
|
Packit Service |
84cb3c |
-h, --help show this help message and exit
|
|
Packit Service |
84cb3c |
""" % sys.argv[0])
|
|
Packit Service |
84cb3c |
sys.exit(1)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
# reset SIGINT signal to default
|
|
Packit Service |
84cb3c |
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
app = QtWidgets.QApplication(sys.argv)
|
|
Packit Service |
84cb3c |
app.setQuitOnLastWindowClosed(False)
|
|
Packit Service |
84cb3c |
|
|
Packit Service |
84cb3c |
applet = TrayApplet()
|
|
Packit Service |
84cb3c |
applet.show()
|
|
Packit Service |
84cb3c |
sys.exit(app.exec_())
|