Пример #1
0
    def __init__(self, client, parent):

        CentralDialog.__init__(self, parent)
        self.main_window = parent
        self.ui = Ui_ConfigDialog()
        self.ui.setupUi(self)

        self.client = client
        self.firewall = ''

        if self.client.call('CORE', 'hasComponent', 'multisite_master'):
            firewalls = self.client.call('multisite_master', 'listFirewalls')
            self.ui.firewall.addItem(self.tr('EMF appliance'), QVariant(''))
            firewalls.sort()
            for fw, state, error, lastseen, ip in firewalls:
                self.ui.firewall.addItem(unicode(self.tr('Remote: %s')) % fw, QVariant(fw))
            self.connect(self.ui.firewall, SIGNAL('currentIndexChanged(int)'), self.firewallChanged)
        else:
            self.ui.firewall.hide()
            self.ui.firewall_label.hide()

        self.connectButtons(self.ui.buttonBox)
        self.setRegExpValidator(self.ui.hostnameEdit, IP_OR_HOSTNAME_OR_FQDN_REGEXP)
        self.setRegExpValidator(self.ui.databaseEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.usernameEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.passwordEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.tableEdit, ASCII7_REGEXP)

        # To determine if there are changes, change the variable state when any
        # field is changed.
        self.changed = False
        for name in dir(self.ui):
            if name == 'firewall':
                continue
            widget = getattr(self.ui, name)
            if isinstance(widget, QLineEdit):
                self.connect(widget, SIGNAL('textChanged(const QString&)'), self.settingsChanged)
            elif isinstance(widget, QComboBox):
                self.connect(widget, SIGNAL('currentIndexChanged(int)'), self.settingsChanged)
            elif isinstance(widget, QSpinBox):
                self.connect(widget, SIGNAL('valueChanged(int)'), self.settingsChanged)
            elif isinstance(widget, QCheckBox):
                self.connect(widget, SIGNAL('toggled(bool)'), self.settingsChanged)

        # Prevent the user from changing database settings on an Edenwall
        if self.main_window.use_edenwall:
            self.ui.databaseGroupBox.hide()
Пример #2
0
class ConfigDialog(CentralDialog):
    def __init__(self, client, parent):

        CentralDialog.__init__(self, parent)
        self.main_window = parent
        self.ui = Ui_ConfigDialog()
        self.ui.setupUi(self)

        self.client = client
        self.firewall = ''

        if self.client.call('CORE', 'hasComponent', 'multisite_master'):
            firewalls = self.client.call('multisite_master', 'listFirewalls')
            self.ui.firewall.addItem(self.tr('EMF appliance'), QVariant(''))
            firewalls.sort()
            for fw, state, error, lastseen, ip in firewalls:
                self.ui.firewall.addItem(unicode(self.tr('Remote: %s')) % fw, QVariant(fw))
            self.connect(self.ui.firewall, SIGNAL('currentIndexChanged(int)'), self.firewallChanged)
        else:
            self.ui.firewall.hide()
            self.ui.firewall_label.hide()

        self.connectButtons(self.ui.buttonBox)
        self.setRegExpValidator(self.ui.hostnameEdit, IP_OR_HOSTNAME_OR_FQDN_REGEXP)
        self.setRegExpValidator(self.ui.databaseEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.usernameEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.passwordEdit, ASCII7_REGEXP)
        self.setRegExpValidator(self.ui.tableEdit, ASCII7_REGEXP)

        # To determine if there are changes, change the variable state when any
        # field is changed.
        self.changed = False
        for name in dir(self.ui):
            if name == 'firewall':
                continue
            widget = getattr(self.ui, name)
            if isinstance(widget, QLineEdit):
                self.connect(widget, SIGNAL('textChanged(const QString&)'), self.settingsChanged)
            elif isinstance(widget, QComboBox):
                self.connect(widget, SIGNAL('currentIndexChanged(int)'), self.settingsChanged)
            elif isinstance(widget, QSpinBox):
                self.connect(widget, SIGNAL('valueChanged(int)'), self.settingsChanged)
            elif isinstance(widget, QCheckBox):
                self.connect(widget, SIGNAL('toggled(bool)'), self.settingsChanged)

        # Prevent the user from changing database settings on an Edenwall
        if self.main_window.use_edenwall:
            self.ui.databaseGroupBox.hide()


    def settingsChanged(self, *args, **kwargs):
        self.changed = True

    def firewallChanged(self, i):
        firewall = unicode(self.ui.firewall.itemData(i).toString())

        if firewall == self.firewall:
            return

        if self.changed:
            reply = QMessageBox.question(self, self.tr("Save?"),
                                         self.tr("Do you want to save the changes to this firewall settings?"),
                                         QMessageBox.Save|QMessageBox.Cancel|QMessageBox.Discard);
            if reply == QMessageBox.Cancel:
                index = self.ui.firewall.findData(QVariant(self.firewall))
                self.ui.firewall.setCurrentIndex(index)
                return
            if reply == QMessageBox.Save:
                self.save()

        self.firewall = firewall
        self.load()

    def call(self, *args):
        if self.firewall:
            return self.client.call('multisite_master', 'callRemote', self.firewall, *args)
        else:
            return self.client.call(*args)

    def __load_ufwi_log(self):

        config_data = self.call('ufwi_log', 'getConfig')

        self.ui.hostnameEdit.setText(config_data['hostname'])
        self.ui.databaseEdit.setText(config_data['database'])
        self.ui.usernameEdit.setText(config_data['username'])
        self.ui.passwordEdit.setText(config_data['password'])
        index = self.ui.dbtypeEdit.findText(config_data['dbtype'])
        if index >= 0:
            self.ui.dbtypeEdit.setCurrentIndex(index)
        index = self.ui.typeEdit.findText(config_data['type'])
        if index >= 0:
            self.ui.typeEdit.setCurrentIndex(index)
        index = self.ui.ipEdit.findText(config_data['ip'])
        if index >= 0:
            self.ui.ipEdit.setCurrentIndex(index)

        self.ui.tableEdit.setText(config_data['table'])
        self.ui.maxrotateEdit.setValue(int(config_data['maxrotate']))

        if self.call('CORE', 'hasComponent', 'multisite_slave'):
            self.ui.importCheckbox.setEnabled(False)
            self.ui.importRotationLabel.setEnabled(False)
            self.ui.importRotation.setEnabled(False)
            self.ui.importCheckbox.setChecked(False)
            self.ui.exportCheckbox.setEnabled(True)
            self.ui.exportPeriodLabel.setEnabled(True)
            self.ui.exportPeriod.setEnabled(True)
            self.ui.exportCheckbox.setChecked(int(config_data['export_period']) > 0)
            self.ui.exportPeriod.setValue(int(config_data['export_period']))
        elif self.call('CORE', 'hasComponent', 'multisite_master'):
            self.ui.exportCheckbox.setEnabled(False)
            self.ui.exportPeriodLabel.setEnabled(False)
            self.ui.exportPeriod.setEnabled(False)
            self.ui.exportCheckbox.setChecked(False)
            self.ui.importCheckbox.setEnabled(True)
            self.ui.importRotationLabel.setEnabled(True)
            self.ui.importRotation.setEnabled(True)
            self.ui.importCheckbox.setChecked(int(config_data['import_rotation']) > 0)
            self.ui.importRotation.setValue(int(config_data['import_rotation']))
        else:
            #self.ui.exportCheckbox.setEnabled(False)
            #self.ui.exportPeriodLabel.setEnabled(False)
            #self.ui.exportPeriod.setEnabled(False)
            self.ui.exportCheckbox.setChecked(False)
            #self.ui.importCheckbox.setEnabled(False)
            #self.ui.importRotationLabel.setEnabled(False)
            #self.ui.importRotation.setEnabled(False)
            self.ui.importCheckbox.setChecked(False)
            self.ui.multisiteGroupBox.setEnabled(False)

        entities = config_data['anonymization'].split()
        self.ui.anonUser.setChecked('user' in entities)
        self.ui.anonIP.setChecked('ipaddr' in entities)
        self.ui.anonApp.setChecked('app' in entities)

    def __save_ufwi_log(self):

        config_data = {}

        config_data['hostname'] = unicode(self.ui.hostnameEdit.text())
        config_data['database'] = unicode(self.ui.databaseEdit.text())
        config_data['username'] = unicode(self.ui.usernameEdit.text())
        config_data['password'] = unicode(self.ui.passwordEdit.text())
        config_data['dbtype'] = unicode(self.ui.dbtypeEdit.currentText())
        config_data['type'] = unicode(self.ui.typeEdit.currentText())
        config_data['ip'] = unicode(self.ui.ipEdit.currentText())
        config_data['table'] = unicode(self.ui.tableEdit.text())
        config_data['maxrotate'] = unicode(self.ui.maxrotateEdit.value())
        if self.ui.exportCheckbox.isChecked():
            config_data['export_period'] = self.ui.exportPeriod.value()
        else:
            config_data['export_period'] = 0
        if self.ui.importCheckbox.isChecked():
            config_data['import_rotation'] = self.ui.importRotation.value()
        else:
            config_data['import_rotation'] = 0

        entities = []
        if self.ui.anonUser.isChecked(): entities.append('user')
        if self.ui.anonIP.isChecked():   entities.append('ipaddr')
        if self.ui.anonApp.isChecked():  entities.append('app')
        config_data['anonymization'] = ' '.join(entities)

        try:
            self.call('ufwi_log', 'setConfig', config_data)
        except Exception, err:
            self.main_window.exception(err)
            return False
        return True