You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmyfirewall/kmyfirewall/kmfconfigdialog.cpp

416 lines
16 KiB

/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
/*
Author: Christian Hubinger <chubinger@irrsinnig.org>, (C) 2001-2004
*/
#include "kmfconfigdialog.h"
#include "kmfconfigdialog.moc"
// QT includes
#include <tqstring.h>
#include <tqframe.h>
#include <tqlabel.h>
#include <tqlayout.h>
#include <tqcheckbox.h>
#include <tqradiobutton.h>
#include <tqbuttongroup.h>
#include <tqregexp.h>
#include <tqmessagebox.h>
// KDE includes
#include <kapplication.h>
#include <kdebug.h>
#include <klocale.h>
#include <kurlrequester.h>
#include <kguiitem.h>
#include <kpushbutton.h>
#include <knuminput.h>
#include <klistbox.h>
#include <kcombobox.h>
#include <kiconloader.h>
#include <kglobal.h>
#include <kmessagebox.h>
#include <klistview.h>
#include <ktrader.h>
#include <tdeparts/part.h>
#include <tdeparts/plugin.h>
#include <tdeparts/factory.h>
// Project includes
#include "core/kmfdoc.h"
#include "core/kmfprotocollibrary.h"
#include "core/kmfconfig.h"
#include "core/kmftarget.h"
#include "core/kmftargetconfig.h"
#include "core/kmfnetwork.h"
#include "kmfwidgets/kmfchecklistoutput.h"
#include "kmfwidgets/kmfinterfacewidget.h"
#include "kmfwidgets/kmfmynetworkwidget.h"
#include "kmfwidgets/kmfgenericinterfaceeditprotocol.h"
#include "core/kmfcompilerinterface.h"
#include "core/xmlnames.h"
namespace KMF {
KMFConfigDialog::KMFConfigDialog( TQWidget *parent, const char *name, bool modal ) : KDialogBase( IconList, i18n( "Configure" ), Ok | Apply | Cancel,
Ok, parent, name, modal, true ) {
loadIcons();
m_backends = new TQPtrList<TQStringList>;
setupGeneral();
setupCustomProtocols();
setupListView();
setupPlugins();
checkPlugins();
slotReadConfig();
setBaseSize( 800, 600 );
}
KMFConfigDialog::~KMFConfigDialog() {}
void KMFConfigDialog::setNetwork( KMFNetwork* net ) {
m_network = net;
m_protocolPageEditProtocol->loadDoc( net );
m_protocolPageEditProtocol->slotUpdateView();
}
void KMFConfigDialog::slotApply() {
kdDebug() << "void KMFConfigDialog::slotApply()" << endl;
slotSaveConfig();
KMFConfig::writeConfig();
emit sigConfigChanged();
}
void KMFConfigDialog::accept() {
kdDebug() << "void KMFConfigDialog::accept()" << endl;
slotSaveConfig();
KMFConfig::writeConfig();
emit sigConfigChanged();
TQDialog::accept();
}
void KMFConfigDialog::reject() {
kdDebug() << "void KMFConfigDialog::reject()" << endl;
}
void KMFConfigDialog::exec() {
TQDialog::exec();
}
void KMFConfigDialog::convertConfig() {
kdDebug() << "void KMFConfigDialog::convertConfig()" << endl;
const TQString & msg = i18n( "<qt><p><b>Importing installation target Settings</b><br>"
"The settings will be applied to the <b>My Local Computer</b> Host. Remote hosts must be configureed seperately.</p></qt>" );
if( KMessageBox::questionYesNo( this, msg ) != 3 ) {
return;
}
m_network->currentTarget();
KMFTargetConfig *conf = m_network->netzone()->findTargetByName( Constants::Localhost_Name )->config();
conf->setOS( KMFConfig::oS().lower() );
conf->setBackend( KMFConfig::backend().lower() );
conf->setDistribution( KMFConfig::distribution() );
conf->setIPTPath( KMFConfig::iPTPath() );
conf->setInitPath( KMFConfig::initPath() );
conf->setModprobePath( KMFConfig::modprobePath() );
conf->setRcDefaultPath( KMFConfig::rcDefaultPath() );
conf->setInterfaces( KMFConfig::interfaces() );
KMFConfig::setConfigurationConverted( true );
KMFConfig::writeConfig();
const TQString & msg2 = i18n( "<qt><p><b>Configuration Imported!</b><br>"
"The current configuration was imported to <b>My Local Computer</b>.<br>"
"Please check the imported configuration before you install the firewall</qt>" );
KMessageBox::information( this, msg2, i18n( "Information" ) );
}
void KMFConfigDialog::slotReadConfig() {
KMFConfig::self()->readConfig();
m_cb_show_splash->setChecked( KMFConfig::showSplash() );
m_cb_generic_interface->setChecked( KMFConfig::useGenericInterface() );
m_cb_show_desc->setChecked( KMFConfig::showDocumentation() );
m_cb_show_cmds->setChecked( KMFConfig::showCommandLine() );
m_cb_show_objectID->setChecked( KMFConfig::showObjectID() );
m_cb_useSSHForLocalhost->setChecked( KMFConfig::useSSHForLocalhost() );
m_sb_max_undo->setValue( KMFConfig::maxUndo() );
}
void KMFConfigDialog::slotSaveConfig() {
KMFConfig::setFirstRun( false );
KMFConfig::setShowSplash( m_cb_show_splash->isChecked() );
KMFConfig::setUseGenericInterface( m_cb_generic_interface->isChecked() );
KMFConfig::setShowDocumentation( m_cb_show_desc->isChecked() );
KMFConfig::setShowCommandLine( m_cb_show_cmds->isChecked() );
KMFConfig::setShowObjectID( m_cb_show_objectID->isChecked() );
KMFConfig::setShowSelInterface( m_cb_show_selInterface->isChecked() );
KMFConfig::setMaxUndo( m_sb_max_undo->value() );
KMFConfig::setUseSSHForLocalhost( m_cb_useSSHForLocalhost->isChecked() );
KMFConfig::self()->writeConfig();
m_protocolPageEditProtocol->saveProtocols();
}
void KMFConfigDialog::setupGeneral() {
TQFrame * page = addPage( i18n( "General Setting" ), TQString(), icon_general );
TQGridLayout *lay = new TQGridLayout( page, 5, 2, 2 );
m_cb_show_splash = new TQCheckBox( i18n( "Show splash screen on startup" ), page );
m_cb_show_splash->setChecked( true );
m_cb_show_selInterface = new TQCheckBox( i18n( "Show interface selection dialog at startup" ), page );
m_cb_show_selInterface->setChecked( KMFConfig::showSelInterface() );
TQGroupBox* gb_generic = new TQGroupBox( 2, Qt::Vertical, i18n("Generic Interface"), page, "gb_generic" );
/*TQLabel *text1 = */new TQLabel( i18n( "<qt>By using the Generic Interface the creation of rulesets is much easier but it is not as flexible as the Normal Interface.</qt>" ), gb_generic );
m_cb_generic_interface = new TQCheckBox( i18n( "Use the Generic Interface" ), gb_generic );
m_cb_generic_interface->setChecked( KMFConfig::useGenericInterface() );
connect( m_cb_generic_interface, TQT_SIGNAL( toggled( bool ) ),
this, TQT_SLOT( slotEnableGenericInterface( bool ) ) );
TQLabel *text2 = new TQLabel( i18n( "<qt>Max. stored Undos:</qt>" ), page );
m_sb_max_undo = new KIntSpinBox( 0, 100, 1, 10, 10, page, "spin_box" );
m_sb_max_undo->setValue( 10 );
m_b_enable_warnings = new KPushButton( i18n( "Reenable All Messages" ), page );
m_b_enable_warnings->setFixedHeight( 30 );
connect( m_b_enable_warnings, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotEnableWarnings() ) );
TQLabel *text3 = new TQLabel( i18n( "<qt>By enabling KMyFirewall will communicate with the local computer using SSH. This will enable password keeping (e.g. KWallet support).</qt>" ), page );
m_cb_useSSHForLocalhost = new TQCheckBox( i18n( "Use SSH for localhost communication" ), page );
m_cb_useSSHForLocalhost->setChecked( KMFConfig::useSSHForLocalhost() );
// connect( m_cb_useSSHForLocalhost, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotEnableLocalSSHUsage( bool ) ) );
lay->addMultiCellWidget( gb_generic, 0, 0, 0, 1 );
lay->addMultiCellWidget( m_cb_show_splash, 1, 1 , 0, 0 );
lay->addMultiCellWidget( m_cb_show_selInterface, 1, 1, 1, 1 );
lay->addMultiCellWidget( m_cb_useSSHForLocalhost, 2, 2, 0, 0, TQt::AlignTop );
lay->addMultiCellWidget( text3, 2, 2, 1, 1, TQt::AlignTop );
lay->addMultiCellWidget( text2, 3, 3 , 0, 0 );
lay->addMultiCellWidget( m_sb_max_undo, 3, 3, 1, 1 );
lay->addMultiCellWidget( m_b_enable_warnings, 4, 4, 0, 1 );
TQSpacerItem* spacer = new TQSpacerItem( 0, 20, TQSizePolicy::Minimum, TQSizePolicy::Preferred );
lay->addItem( spacer, 5, 0 );
}
void KMFConfigDialog::setupCustomProtocols(){
TQFrame* editProtocolFrame = addPage(i18n("Custom Protocols"), i18n("Define your Custom Protocols here"), icon_edit_protocol_page );
TQGridLayout *editProtocolLayout = new TQGridLayout( editProtocolFrame, 1, 1, 2, 2 );
m_protocolPageEditProtocol = new KMFGenericInterfaceEditProtocol( editProtocolFrame ,"m_protocolPageEditProtocol");
editProtocolLayout->addWidget( m_protocolPageEditProtocol,0,0 );
}
void KMFConfigDialog::registerCompiler( KMFCompilerInterface* compiler ) {
kdDebug() << "KMFConfigDialog::registerCompiler: OS: " << compiler->osGUIName() << " Backend: " << compiler->backendGUIName() << endl;
// m_cb_os->insertItem( compiler->osGUIName() );
TQStringList *stl = new TQStringList();
stl->append( compiler->osName() );
stl->append( compiler->osGUIName() );
stl->append( compiler->backendName() );
stl->append( compiler->backendGUIName() );
m_backends->append( stl );
}
void KMFConfigDialog::setupListView() {
TQFrame * page = addPage( i18n( "Listview Preferences" ), TQString(), icon_listview );
TQGridLayout *lay = new TQGridLayout( page, 5, 1, 2 );
m_lvp_text1 = new TQLabel( i18n( "<qt>Define here if you like to see the documentation "
"for tables and built-in chains in the main listview.</qt>" ), page );
lay->addWidget( m_lvp_text1, 0, 0 );
m_cb_show_desc = new TQCheckBox( i18n( "Show documentation for all Objects." ), page );
lay->addWidget( m_cb_show_desc, 1, 0 );
m_lvp_text2 = new TQLabel( i18n( "<qt>Turn this box on of you like to see the "
"generated iptables command lines in the main listview</qt>" ), page );
lay->addWidget( m_lvp_text2, 2, 0 );
m_cb_show_cmds = new TQCheckBox( i18n( "Show iptables commands." ), page );
lay->addWidget( m_cb_show_cmds, 3, 0 );
m_lvp_text3 = new TQLabel( i18n( "<qt>Enable this to show the internally-used Object IDs in the listview. Mainly useful for debuging.</qt>" ), page );
lay->addWidget( m_lvp_text3, 4, 0 );
m_cb_show_objectID = new TQCheckBox( i18n( "Show objectIDs." ), page );
lay->addWidget( m_cb_show_objectID, 5, 0 );
TQLabel *m_lvp_text4 = new TQLabel( i18n( "<qt><b>Note:</b> Those settings are only available for the normal interface. This options are disabled when using the generic interface.</qt>" ), page );
lay->addWidget( m_lvp_text4, 6, 0 );
TQSpacerItem* spacer = new TQSpacerItem( 0, 20, TQSizePolicy::Minimum, TQSizePolicy::Preferred );
lay->addItem( spacer, 7, 0 );
}
void KMFConfigDialog::setupPlugins(){
kdDebug() << "\nvoid KMFConfigDialog::setupPlugins()" << endl;
TQFrame * page = addPage( i18n( "Plugins" ), TQString(), icon_listview );
TQVBoxLayout *lay = new TQVBoxLayout( page );
TQLabel *text1 = new TQLabel( i18n( "<qt>In the list you can see which plugins have been found.</qt>" ), page );
lay->addWidget( text1 );
m_lv_plugins = new KListView( page );
m_lv_plugins->addColumn( i18n("Name") );
m_lv_plugins->addColumn( i18n("Description") );
m_lv_plugins->addColumn( i18n("Library") );
lay->addWidget( m_lv_plugins );
}
void KMFConfigDialog::checkPlugins() {
kdDebug() << "void KMFConfigDialog::checkPlugins()" << endl;
m_lv_plugins->clear();
KListViewItem *item_installers = new KListViewItem( m_lv_plugins, 0,0 );
item_installers->setText( 0, i18n("Installers") );
item_installers->setOpen( true );
KListViewItem *item_compilers = new KListViewItem( m_lv_plugins, 0,0 );
item_compilers->setText( 0, i18n("Compilers") );
item_compilers->setOpen( true );
KListViewItem *item_optioneditors = new KListViewItem( m_lv_plugins, 0,0 );
item_optioneditors->setText( 0, i18n("Rule Option Editors") );
item_optioneditors->setOpen( true );
KListViewItem *item_targetoptioneditors = new KListViewItem( m_lv_plugins, 0,0 );
item_targetoptioneditors->setText( 0, i18n("Rule Target Option Editors") );
item_targetoptioneditors->setOpen( true );
// kdDebug() << "Start query" << endl;
TDETrader::OfferList offers = TDETrader::self()->query( "KMyFirewall/Installer");
// kdDebug() << "Query performed for KMyFirewall/Installer" << endl;
TDETrader::OfferList::iterator it;
if ( offers.empty() ) {
KListViewItem *item = new KListViewItem( item_installers, 0,0);
item->setText(0, i18n("No installer plugins found!") );
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
}
for ( it = offers.begin(); it != offers.end(); ++it ) {
KService::Ptr ptr = *it;
KListViewItem *item = new KListViewItem( item_installers, 0,0);
item->setText(0, ptr->name() );
item->setText(1, ptr->comment() );
item->setText(2, ptr->library().local8Bit().data() );
}
TDETrader::OfferList offers2 = TDETrader::self()->query( "KMyFirewall/Compiler" );
// kdDebug() << "Query performed for KMyFirewall/Compiler" << endl;
if ( offers2.empty() ) {
KListViewItem *item = new KListViewItem( item_compilers, 0,0);
item->setText(0, i18n("No compiler plugins found!") );
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
}
for ( it = offers2.begin(); it != offers2.end(); ++it ) {
KService::Ptr ptr = *it;
KListViewItem *item = new KListViewItem( item_compilers, 0,0);
item->setText(0, ptr->name() );
item->setText(1, ptr->comment() );
item->setText(2, ptr->library().local8Bit().data() );
// kdDebug() << "Found Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
KLibFactory *factory = KLibLoader::self()->factory( ptr->library().local8Bit().data() );
kdDebug() << KLibLoader::self()->lastErrorMessage() << endl;
if ( !factory ) {
KMessageBox::error( 0, i18n("<qt><b>Compiler plugin could not be loaded.</b></qt>") );
kdDebug() << "Couldn't load plugin: " << ptr->name() << endl;
}
if ( KMFCompilerInterface *part = dynamic_cast<KMFCompilerInterface*> ( factory->create( TQT_TQOBJECT(this) , "KMFCompilerInterface") ) ) {
// kdDebug() << "Returning Compiler Plugin." << endl;
registerCompiler( part );
}
}
TDETrader::OfferList offers3 = TDETrader::self()->query( "KMyFirewall/RuleOptionEdit" );
// kdDebug() << "Query performed for KMyFirewall/RuleOptionEdit" << endl;
if ( offers3.empty() ) {
KListViewItem *item = new KListViewItem( item_optioneditors, 0,0);
item->setText(0, i18n("No RuleOptionEdit plugins found.") );
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
}
for ( it = offers3.begin(); it != offers3.end(); ++it ) {
KService::Ptr ptr = *it;
KListViewItem *item = new KListViewItem( item_optioneditors, 0,0);
item->setText(0, ptr->name() );
item->setText(1, ptr->comment() );
item->setText(2, ptr->library().local8Bit().data() );
// kdDebug() << "Found Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
}
TDETrader::OfferList offers4 = TDETrader::self()->query( "KMyFirewall/RuleTargetOptionEdit" );
// kdDebug() << "Query performed for KMyFirewall/RuleTargetOptionEdit" << endl;
if ( offers4.empty() ) {
KListViewItem *item = new KListViewItem( item_targetoptioneditors, 0,0);
item->setText(0, i18n("No RuleTargetOptionEdit plugins found.") );
kdDebug() << "NO MATCHING PLUGIN FOUND" << endl;
}
for ( it = offers4.begin(); it != offers4.end(); ++it ) {
KService::Ptr ptr = *it;
KListViewItem *item = new KListViewItem( item_targetoptioneditors, 0,0);
item->setText(0, ptr->name() );
item->setText(1, ptr->comment() );
item->setText(2, ptr->library().local8Bit().data() );
// kdDebug() << "Found Plugin: " << ptr->name() << "\nLibrary: "<< ptr->library().local8Bit().data() <<endl;
}
}
void KMFConfigDialog::slotEnableGenericInterface( bool enable ) {
if ( enable != KMFConfig::useGenericInterface() )
KMessageBox::information( this, i18n( "<qt>Please not that you have to restart KMyFirewall to make the changes take effect. </qt>" ), TQString( "" ), "info_change_interface" );
}
// void KMFConfigDialog::slotEnableLocalSSHUsage( bool enable ) {
// KMFConfig::setUseSSHForLocalhost( enable );
// }
void KMFConfigDialog::slotEnableWarnings() {
kdDebug() << "KMFConfigDialog::slotEnableWarnings()" << endl;
KMessageBox::enableAllMessages();
KMessageBox::information( this, i18n( "Reenabled all warnings." ) );
}
void KMFConfigDialog::loadIcons() {
KIconLoader * loader = TDEGlobal:: iconLoader();
TQString icon_name;
icon_name = "about_kde";
icon_general = loader->loadIcon( icon_name, KIcon::Desktop );
icon_name = "folder";
icon_paths = loader->loadIcon( icon_name, KIcon::Desktop );
icon_name = "network";
icon_interfaces = loader->loadIcon( icon_name, KIcon::Desktop );
icon_name = "view_tree";
icon_listview = loader->loadIcon( icon_name, KIcon::Desktop );
icon_name = "nfs_unmount";
icon_edit_protocol_page = loader->loadIcon( icon_name, KIcon::Desktop );
}
}