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)