/*************************************************************************** * Copyright (C) 2012 by Timothy Pearson * * kb9vqf@pearsoncomputing.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "bondintropage.h" #include "bondrealmpage.h" #include "bondfinishpage.h" #include "bondwizard.h" #include "bondwizard.moc" BondWizard::BondWizard(LDAPRealmConfigList *realmlist, LDAPConfig *ldapconfig, TQWidget *parent, const char *name) : KWizard(parent, name, true), m_realmList(realmlist), m_ldapConfig(ldapconfig) { setCaption(i18n("LDAP Bonding Wizard")); intropage = new BondIntroPage(this); addPage (intropage, i18n( "Step 1: Introduction" ) ); setHelpEnabled(TQWizard::page(0), false); realmpage = new BondRealmPage(this); addPage (realmpage, i18n( "Step 2: Add New Realm" ) ); setHelpEnabled(TQWizard::page(1), false); finishpage = new BondFinishPage(this); addPage (finishpage, i18n( "Step 3: Bond to New Realm" ) ); setHelpEnabled(TQWizard::page(2), false); // Set up some defaults realmpage->txtKDCPort->setValue(88); realmpage->txtAdminServerPort->setValue(749); realmpage->txtUIDOffset->setValue(5000); realmpage->txtGIDOffset->setValue(5000); // Other setup finishpage->ldapAdminRealm->setEnabled(false); setFinishEnabled(TQWizard::page(2), true); setPosition(); } BondWizard::~BondWizard() { } void BondWizard::next() { if (currentPage()==intropage) { TQWizard::next(); realmpage->validateEntries(); // Focus the first entry field on the new wizard page realmpage->txtRealmName->setFocus(); realmpage->txtRealmName->selectAll(); } else if (currentPage()==realmpage) { // Save realm information LDAPRealmConfig realm; realm.name = realmpage->txtRealmName->text(); realm.bonded = false; realm.uid_offset = realmpage->txtUIDOffset->value(); realm.gid_offset = realmpage->txtGIDOffset->value(); realm.domain_mappings = TQStringList::split("\n", realmpage->txtDomains->text(), FALSE); realm.kdc = realmpage->txtKDC->text(); realm.kdc_port = realmpage->txtKDCPort->value(); realm.admin_server = realmpage->txtAdminServer->text(); realm.admin_server_port = realmpage->txtAdminServerPort->value(); realm.pkinit_require_eku = realmpage->checkRequireEKU->isChecked(); realm.pkinit_require_krbtgt_otherName = realmpage->checkRequireKrbtgtOtherName->isChecked(); realm.win2k_pkinit = realmpage->checkWin2k->isChecked(); realm.win2k_pkinit_require_binding = realmpage->checkWin2kPkinitRequireBinding->isChecked(); if (!m_realmList->contains(realm.name)) { m_realmList->insert(realm.name, realm); m_ldapConfig->save(); finishpage->ldapAdminRealm->setText(realm.name); m_finalRealm = realm; TQWizard::next(); // Focus the first entry field on the new wizard page finishpage->ldapAdminUsername->setFocus(); finishpage->ldapAdminUsername->selectAll(); } else { KMessageBox::error(this, i18n("The specified realm is already known to this system.

If the realm name is correct, please exit the Wizard and select 'Re-Bond to Realm' in the LDAP configuration module."), i18n("Duplicate Realm Entry Detected")); } } if (currentPage()==finishpage) { backButton()->setEnabled(false); } } void BondWizard::slotNext() { TQWizard::next(); } void BondWizard::back() { TQWizard::back(); } bool BondWizard::askClose(){ TQString text; if (currentPage()==intropage) { return true; } else { if (currentPage()==realmpage) { text = i18n("

Are you sure you want to quit the LDAP Bonding Wizard?

" "

If yes, click Quit and all changes will be lost." "
If not, click Cancel to return and finish your setup.

"); } else if (currentPage()==finishpage) { text = i18n("

Are you sure you want to quit the LDAP Bonding Wizard?

" "

If yes, click Quit and the new realm will remain deactivated pending bonding." "
If not, click Cancel to return and finish your setup.

"); } else { text = i18n("

Are you sure you want to quit the LDAP Bonding Wizard?

" "

If not, click Cancel to return and finish bonding.

"); } int status = KMessageBox::warningContinueCancel(this, text, i18n("All Changes Will Be Lost"), KStdGuiItem::quit()); if(status==KMessageBox::Continue){ setDefaults(); return true; } else { return false; } } } /** the cancel button is connected to the reject() slot of TQDialog, * so we have to reimplement this here to add a dialogbox to ask if we * really want to quit the wizard. */ void BondWizard::reject(){ if (askClose()){ done(0); } } void BondWizard::closeEvent(TQCloseEvent* e){ if ( askClose() ) done(0); else e->ignore(); } /** maybe call a dialog that the wizard has finished. */ void BondWizard::accept(){ // Try to bond TQString errorString; backButton()->setEnabled(false); nextButton()->setEnabled(false); finishButton()->setEnabled(false); cancelButton()->setEnabled(false); finishpage->setEnabled(false); if (LDAPManager::bondRealm(finishpage->ldapAdminUsername->text(), finishpage->ldapAdminPassword->password(), finishpage->ldapAdminRealm->text(), &errorString) == 0) { m_finalRealm.bonded = true; if (m_realmList->contains(m_finalRealm.name)) { m_realmList->remove(m_finalRealm.name); } m_realmList->insert(m_finalRealm.name, m_finalRealm); m_ldapConfig->save(); done(0); } else { KMessageBox::error(this, i18n("Unable to bond to realm!

Details: %1").arg(errorString), i18n("Unable to Bond to Realm")); } finishpage->setEnabled(true); backButton()->setEnabled(true); finishButton()->setEnabled(true); cancelButton()->setEnabled(true); } /** calls all save functions after resetting all features/ OS/ theme selections to Trinity default */ void BondWizard::setDefaults(){ // if(realm_dirty) // realmpage->save(false); } /** there seems to be a bug in TQWizard, that makes this evil hack necessary */ void BondWizard::setPosition() { TQSize hint = intropage->sizeHint(); TQSize realm_size = realmpage->sizeHint(); TQSize finish_size = finishpage->sizeHint(); // get the width of the broadest child-widget if ( hint.width() < realm_size.width() ) hint.setWidth(realm_size.width()); if ( hint.width() < finish_size.width() ) hint.setWidth(finish_size.width()); // get the height of the highest child-widget if ( hint.height() < realm_size.height() ) hint.setHeight(realm_size.height()); if ( hint.height() < finish_size.height() ) hint.setHeight(finish_size.height()); // set the position TQRect rect = TDEGlobalSettings::desktopGeometry(TQCursor::pos()); int w = rect.x() + (rect.width() - hint.width())/2 - 9; int h = rect.y() + (rect.height() - hint.height())/2; move(w, h); }