Exemplo n.º 1
0
    def test_dialog(self):
        dialog = QDialog()
        self.testui = Ui_radius_test()
        self.testui.setupUi(dialog)
        self.testui.results_box.hide()
        self.__filldialog(self.testui)
        self.connect(
            self.testui.testbutton,
            SIGNAL('pressed()'),
            self.sendtest
            )

        self.testui.report_cancelled = False

        self.connect(
            self.testui.closebutton,
            SIGNAL('pressed()'),
            self.cancel_test_report
            )

        dialog.exec_()
Exemplo n.º 2
0
class RadiusFrame(QFrame, Ui_Radius, ValidateWidgets):
    def __init__(self, client, parent=None, radiusserverconf=None):
        QFrame.__init__(self, parent)

        self.__client = client
        self._target = None
        self._radiusserverconf = None

        ValidateWidgets.__init__(self)
        self.setupUi(self)
        self.lineedits = self.server, self.port, self.shared_secret, self.timeout

        self.__setupvalidators()

        if radiusserverconf is None:
            radiusserverconf = RadiusConf.defaultServer()
        self.setRadiusserverconf(radiusserverconf)

    def setRadiusserverconf(self, radiusserverconf):
        self._radiusserverconf = radiusserverconf

        self.port.setText(
            unicode(self._radiusserverconf.port)
            )

        self.shared_secret.setText(
            self._radiusserverconf.secret
            )

        self.timeout.setText(
            unicode(self._radiusserverconf.timeout)
            )

        self.server.setText(self._radiusserverconf.server)
        self.__setupsignals()

    def getRadiusserverconf(self):
        return self._radiusserverconf

    def __setupvalidators(self):
        self.setRegExpValidator(self.server, IP_OR_HOSTNAME_OR_FQDN_REGEXP)
        self.setIntValidator(self.port, 1, 65535)
        self.setNonEmptyValidator(self.shared_secret)
        self.setIntValidator(self.timeout, 1, INT32_MAX)

    def __setupsignals(self):
        if self._target is self._radiusserverconf:
            return
        if self._target is not None:
            _disconnectsignals(self, self._target)
        self._target = self._radiusserverconf
        _connectsignals(self, self._target)

    def __filldialog(self, dialog):
        dialog.port.setText(self.port.text())
        dialog.shared_secret.setText(self.shared_secret.text())
        dialog.timeout.setText(self.timeout.text())
        dialog.server.setText(self.server.text())

    def cancel_test_report(self):
        self.testui.report_cancelled = True

    def test_dialog(self):
        dialog = QDialog()
        self.testui = Ui_radius_test()
        self.testui.setupUi(dialog)
        self.testui.results_box.hide()
        self.__filldialog(self.testui)
        self.connect(
            self.testui.testbutton,
            SIGNAL('pressed()'),
            self.sendtest
            )

        self.testui.report_cancelled = False

        self.connect(
            self.testui.closebutton,
            SIGNAL('pressed()'),
            self.cancel_test_report
            )

        dialog.exec_()

    def __dialogvalues(self):
        conf = RadiusServer(
            server=unicode(self.testui.server.text()),
            port=unicode(self.testui.port.text()),
            timeout=unicode(self.testui.timeout.text()),
            secret=unicode(self.testui.shared_secret.text())
        )

        ok, msg = conf.isValidWithMsg()
        if not ok:
            QMessageBox.warning(
                self,
                tr("Input error"),
                msg
                )
            return

        username = unicode(self.testui.username.text())
        password = unicode(self.testui.password.text())

        return conf, username, password

    def sendtest(self):
        #can make another call if not in nuconf?
        #Currently, the service is exposed by nuconf/nuauth,
        #but it may be moved
        self.testui.testbutton.setEnabled(False)
        self.testui.testbutton.setText(tr("Ongoing test, please wait"))
        serverconf, user, password = self.__dialogvalues()
        async = self.__client.async()
        async.call('nuauth', 'testRADIUS',
            serverconf.serialize(),
            user,
            password,
            callback=self._test_ok,
            errback=self._test_err
            )

    def _test_ok(self, result):
        if self.testui.report_cancelled:
            return
        self.testui.results_box.show()

        ok, msg = result
        if ok:
            css = 'background-color: #a2ca5d;'
            prefix = 'Success'
        else:
            css = 'background-color: #e6a9ab;'
            prefix = 'Error'

        for line in (self.testui.username, self.testui.password):
            line.setStyleSheet(css)

        self.testui.results_text.append(
            '[%s] %s' % (prefix, msg)
            )
        self.testui.testbutton.setEnabled(True)
        self.testui.testbutton.setText(tr("Test"))

    def _test_err(self, result):
        if self.testui.report_cancelled:
            return
        if isinstance(result, RpcdError):
            err_message = result.unicode_message
        else:
            #unexpected
            err_message = "a diagnostic file analysis may be needed."
        QMessageBox.warning(
            self,
            tr("An error occured"),
            tr("Could not perform radius test:") + err_message
            )
        self.testui.testbutton.setEnabled(True)

    def __resetdisplay(self):
        for line in (self.testui.username, self.testui.password):
            line.setStyleSheet('')