示例#1
0
class ADBaseWidget(DirectoryWidget):
    def __init__(self, config, specific_config, mainwindow, parent=None):
        DirectoryWidget.__init__(self, config, specific_config, mainwindow, parent=None)
        self.qhostname_object = QHostnameObject.getInstance()
        self.buildInterface(config)
        self.updateView()
        self._poll()

    def register_qobjects(self):
        self.qhostname_object.registerCallbacks(
            self.acceptHostnameChange,
            self.handleHostnameChange,
            attach=self
            )

    def _poll(self):
        self.ad_status.fetch_data(self.mainwindow.client)
        timer = QTimer()
        timer.setSingleShot(True)
        timer.setInterval(20000) # ms
        timer.start()
        self.connect(timer, SIGNAL('timeout()'), self._poll)
        self.connect(self, SIGNAL('destroyed()'), timer.stop)

    def unregister_qobjects(self):
        self.qhostname_object.forget(self)

    def updateView(self, config=None):
        if config is None:
            config = self.specific_config
        self.setText(self.controller_ip, config.controller_ip)
        self.setDefaultText(self.user, config.user)
        self.setDefaultText(self.password, config.password)
        self.setDefaultText(self.workgroup, config.workgroup)
        self.setDefaultText(self.domain, config.domain)
        self.setDefaultText(self.dns_domain, config.dns_domain)
        self.setText(self.wins_ip, config.wins_ip)
        self.displayHostname()

    def acceptHostnameChange(self):
        button = QMessageBox.warning(
            self,
            tr("Hostname change"),
            tr("Warning: this hostname change will cause the appliance to register again on Active Directory."),
            QMessageBox.Cancel | QMessageBox.Ok

        )
        if button == QMessageBox.Ok:
            self.signalModified()
            return True

        return False

    def handleHostnameChange(self):
        self.displayHostname()

    def displayHostname(self):
        self.netbios_name.setText(u"<b>%s</b>" % unicode(self.qhostname_object.hostnamecfg.hostname))

    def buildInterface(self, config):

        fqdn_tooltip = tr("IP address, FQDN or Hostname")

        self.controller_ip = QLineEdit()
        self.texts.add(self.controller_ip)
        self.connect(self.controller_ip, SIGNAL('textChanged(QString)'), self.setControllerIp)
        self.form.addRow(tr('Authentication server'), self.controller_ip)
        self.controller_ip.setToolTip(help_ps_tooltip)
        self.connect(self.controller_ip, SIGNAL('returnPressed()'), self.signalModified)

        self.ps_message_area = MessageArea()
        self.empty_ps_label = QLabel()
        self.form.addRow(self.empty_ps_label, self.ps_message_area)
        self.empty_ps_label.hide()
        self.ps_message_area.hide()
        self.ps_message_area.setMessage(help_ps_title, help_ps_message_area)

        self.wins_ip = IpOrHostnameOrFqdnEdit(accept_empty=True)
        self.texts.add(self.wins_ip)
        self.connect(self.wins_ip, SIGNAL('textChanged(QString)'), self.setWinsIp)
        self.form.addRow(tr('WINS server (optional)'), self.wins_ip)
        self.wins_ip.setToolTip(
            "%s\n%s" % (
                fqdn_tooltip, tr("This field is useful if the AD and EdenWall appliances don't share the same subnet")
            )
        )
        self.connect(self.wins_ip, SIGNAL('returnPressed()'), self.signalModified)

        for args in (
            ('domain', tr('Active Directory Domain'), self.setDomain),
            ('dns_domain', tr('Active Directory DNS Domain (if different from the AD domain)'), self.setDNSDomain),
            ('workgroup', tr('Workgroup (optional)'), self.setWorkgroup)
        ):
            setattr(self, args[0], self.addTextInput(*args[1:]))
            #flagWriteAccess(text_input)


        self.netbios_name = QLabel()
        self.form.addRow(tr("Netbios name"), self.netbios_name)

        for args in (
            ('user', tr('Name used to join the domain'), self.setUser),
            ('password', tr('Password used to join the domain'), self.setPassword, False)
        ):
            setattr(self, args[0], self.addTextInput(*args[1:]))
            #flagWriteAccess(text_input)

        #flagWriteAccess(password_server)
        self.connect(self.controller_ip, SIGNAL('textEdited(QString)'), self.helpPS)
        self.connect(self.controller_ip, SIGNAL('editingFinished()'), self.noHelpPS)

        self.ad_status = ADStatus()
        self.form.addRow('', self.ad_status)

    def helpPS(self, text):
        self.ps_message_area.show()

    def noHelpPS(self):
        self.controller_ip.setText(
            unicode(
                self.controller_ip.text()
                ).strip()
            )
        self.ps_message_area.hide()

    def setControllerIp(self, server):
        self.specific_config.controller_ip = unicode(server).strip()
        self.signalModified()

    def setWinsIp(self, server):
        self.specific_config.wins_ip = unicode(server)
        self.signalModified()

    def setDomain(self, domain):
        self.specific_config.domain = domain

    def setDNSDomain(self, domain):
        self.specific_config.dns_domain = domain

    def setUser(self, user):
        self.specific_config.user = user

    def setPassword(self, password):
        self.specific_config.password = password

    def setWorkgroup(self, workgroup):
        self.specific_config.workgroup = workgroup

    def signalModified(self):
        self.config.org = self.specific_config
        DirectoryWidget.signalModified(self)