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.
406 lines
11 KiB
406 lines
11 KiB
/***************************************************************************
|
|
* *
|
|
* Copyright (C) 2005, 2006 by Kevin Gilbert *
|
|
* kev.gilbert@cdu.edu.au *
|
|
* *
|
|
* 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 <ntqdir.h>
|
|
#include <ntqlineedit.h>
|
|
|
|
#include <tdeaction.h>
|
|
#include <tdeapplication.h>
|
|
#include <tdeconfig.h>
|
|
#include <kdebug.h>
|
|
#include <kedittoolbar.h>
|
|
#include <tdefiledialog.h>
|
|
#include <tdeglobalsettings.h>
|
|
#include <kinputdialog.h>
|
|
#include <kkeydialog.h>
|
|
#include <tdelocale.h>
|
|
#include <tdemainwindow.h>
|
|
#include <tdemessagebox.h>
|
|
#include <kstandarddirs.h>
|
|
#include <kstatusbar.h>
|
|
#include <kstdaction.h>
|
|
|
|
#include "htmlwidget.h"
|
|
#include "knmap.h"
|
|
#include "mainwidget.h"
|
|
#include "scanwidget.h"
|
|
|
|
// constructor
|
|
// ===========
|
|
|
|
Knmap::Knmap( )
|
|
: TDEMainWindow( NULL, "knmap" ),
|
|
m_mainWidget( new MainWidget( this, "main widget" ))
|
|
{ findNmap( );
|
|
setCentralWidget( m_mainWidget );
|
|
readSettings( );
|
|
createMenu( );
|
|
setAutoSaveSettings( );
|
|
|
|
connect( m_mainWidget,
|
|
SIGNAL( outputAvailable( const bool, const bool )),
|
|
SLOT( slotOutputAvailable( const bool, const bool)));
|
|
|
|
connect( m_mainWidget,
|
|
SIGNAL( setManPageActionStuff( const bool )),
|
|
SLOT( slotSetManPageActionStuff( const bool )));
|
|
|
|
connect( m_mainWidget,
|
|
SIGNAL( setCaption( const TQString& )),
|
|
SLOT( slotSetCaption( const TQString& )));
|
|
|
|
connect( m_mainWidget,
|
|
SIGNAL( statusBarText( const TQString& )), statusBar( ),
|
|
SLOT( message( const TQString& )));
|
|
|
|
connect( m_mainWidget,
|
|
SIGNAL( visibleScanWidgetChanged( ScanWidget* )),
|
|
SLOT( slotVisibleScanWidgetChanged( ScanWidget* )));
|
|
}
|
|
|
|
// createMenu
|
|
// ==========
|
|
|
|
void Knmap::createMenu( )
|
|
{ KStdAction::configureToolbars( this, SLOT( slotConfigureToolbars( )), actionCollection( ));
|
|
KStdAction::keyBindings( this, SLOT( slotConfigureShortcuts( )), actionCollection( ));
|
|
KStdAction::quit( kapp, SLOT( quit( )), actionCollection( ));
|
|
|
|
m_fileSaveAction = KStdAction::save( m_mainWidget,
|
|
SLOT( slotFileSave( )),
|
|
actionCollection( ));
|
|
|
|
m_fileSaveAsAction = KStdAction::saveAs( m_mainWidget,
|
|
SLOT( slotFileSaveAs( )),
|
|
actionCollection( ));
|
|
|
|
m_settingsManAction = new TDEAction( i18n( "&Use local man page" ),
|
|
"localman.png",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotSwitchManPages( )),
|
|
actionCollection( ),
|
|
"settings_local" );
|
|
|
|
m_useTargetHostAction = new TDEToggleAction( i18n( "Use target host name" ),
|
|
NULL,
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotUseTargetHost( )),
|
|
actionCollection( ),
|
|
"scan_use" );
|
|
|
|
m_wrapTextAction = new TDEToggleAction( i18n( "Wrap text" ),
|
|
NULL,
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotWrapText( )),
|
|
actionCollection( ),
|
|
"settings_wrap_text" );
|
|
|
|
new TDEAction( i18n( "Close scan" ),
|
|
"scanclose",
|
|
CTRL+Key_W,
|
|
m_mainWidget,
|
|
SLOT( slotScanClose( )),
|
|
actionCollection( ),
|
|
"scan_close" );
|
|
|
|
new TDEAction( i18n( "Copy profile..." ),
|
|
"profilecopy",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileCopy( )),
|
|
actionCollection( ),
|
|
"profile_copy" );
|
|
|
|
new TDEAction( i18n( "Delete profile..." ),
|
|
"profiledelete",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileDelete( )),
|
|
actionCollection( ),
|
|
"profile_delete" );
|
|
|
|
new TDEAction( i18n( "Display nmap man page" ),
|
|
"manpage",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotShowManPage( )),
|
|
actionCollection( ),
|
|
"help_man_page" );
|
|
|
|
new TDEAction( i18n( "Duplicate scan" ),
|
|
"scanduplicate",
|
|
CTRL+Key_C,
|
|
m_mainWidget,
|
|
SLOT( slotScanDuplicate( )),
|
|
actionCollection( ),
|
|
"scan_duplicate" );
|
|
|
|
new TDEAction( i18n( "Load profile..." ),
|
|
"profileload",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileLoad( )),
|
|
actionCollection( ),
|
|
"profile_load" );
|
|
|
|
new TDEAction( i18n( "man page stylesheet..." ),
|
|
"manstylesheet",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotSetStylesheet( )),
|
|
actionCollection( ),
|
|
"settings_stylesheet" );
|
|
|
|
new TDEAction( i18n( "New scan..." ),
|
|
"scannew",
|
|
CTRL+Key_N,
|
|
m_mainWidget,
|
|
SLOT( slotScanNew( )),
|
|
actionCollection( ),
|
|
"scan_new" );
|
|
|
|
new TDEAction( i18n( "Rename profile..." ),
|
|
"profilerename",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileRename( )),
|
|
actionCollection( ),
|
|
"profile_rename" );
|
|
|
|
new TDEAction( i18n( "Rename scan..." ),
|
|
"scanrename",
|
|
Key_F2,
|
|
m_mainWidget,
|
|
SLOT( slotScanRename( )),
|
|
actionCollection( ),
|
|
"scan_rename" );
|
|
|
|
new TDEAction( i18n( "Save profile..." ),
|
|
"profilesave",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileSave( )),
|
|
actionCollection( ),
|
|
"profile_save" );
|
|
|
|
new TDEAction( i18n( "Save profile as..." ),
|
|
"profilesaveas",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotProfileSaveAs( )),
|
|
actionCollection( ),
|
|
"profile_save_as" );
|
|
|
|
new TDEAction( i18n( "Zoom custom" ),
|
|
"zoomcustom",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotZoomCustom( )),
|
|
actionCollection( ),
|
|
"settings_zoom_custom" );
|
|
|
|
new TDEAction( i18n( "Zoom in" ),
|
|
"zoomin",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotZoomIn( )),
|
|
actionCollection( ),
|
|
"settings_zoom_in" );
|
|
|
|
new TDEAction( i18n( "Zoom out" ),
|
|
"zoomout",
|
|
0,
|
|
m_mainWidget,
|
|
SLOT( slotZoomOut( )),
|
|
actionCollection( ),
|
|
"settings_zoom_out" );
|
|
|
|
m_fileSaveAction->setEnabled( false );
|
|
m_fileSaveAsAction->setEnabled( false );
|
|
m_wrapTextAction->setChecked( m_mainWidget->wrapText( ));
|
|
|
|
createStandardStatusBarAction( );
|
|
setStandardToolBarMenuEnabled( true );
|
|
|
|
#ifdef _DEBUG
|
|
createGUI( TQDir::homeDirPath( ) + "/.kde/share/apps/knmap/knmapui.rc" );
|
|
#else
|
|
createGUI( );
|
|
#endif
|
|
}
|
|
|
|
// findNmap
|
|
// ========
|
|
|
|
void Knmap::findNmap( )
|
|
{ TQString nmapPath = TDEStandardDirs::findExe( "nmap" );
|
|
|
|
if( nmapPath.isEmpty( ))
|
|
{ KMessageBox::error( this,
|
|
i18n( "nmap is not installed on the computer - we cannot proceed without it. To download nmap go to \"http://www.insecure.org/nmap\"" ),
|
|
i18n( "nmap not found" ));
|
|
kapp->quit( );
|
|
}
|
|
}
|
|
|
|
// getDirPath
|
|
// ==========
|
|
|
|
bool Knmap::getDirPath( const TQString& caption, TQString& path )
|
|
{ TQString startDir = (path.isEmpty( )) ? TDEGlobalSettings::documentPath( ) : path;
|
|
TQString tempPath = KFileDialog::getExistingDirectory( startDir, NULL, caption );
|
|
|
|
if( tempPath.isEmpty( ))
|
|
return false;
|
|
|
|
path = tempPath;
|
|
return true;
|
|
}
|
|
|
|
// getDirPath
|
|
// ==========
|
|
|
|
void Knmap::getDirPath( const TQString& caption, TQString& path, TQLineEdit* lineEdit )
|
|
{ if( getDirPath( caption, path ))
|
|
lineEdit->setText( path );
|
|
}
|
|
|
|
// getFilePath
|
|
// ===========
|
|
|
|
bool Knmap::getFilePath( const TQString& caption, TQString& path, const bool save )
|
|
{ TQString filter = "*.txt|Text files\n*.*|All files";
|
|
TQString startDir = (path.isEmpty( )) ? TDEGlobalSettings::documentPath( ) : path;
|
|
TQString tempPath = KFileDialog::getSaveFileName( startDir, filter, NULL, caption );
|
|
|
|
if( tempPath.isEmpty( ))
|
|
return false;
|
|
|
|
if( save && TQFile::exists( tempPath ))
|
|
{ if( KMessageBox::Yes != KMessageBox::questionYesNo( NULL, TQString( i18n( "File \"%1\" exists.\nOverwrite?" )).arg( tempPath ), i18n( "File exists" )))
|
|
return false;
|
|
}
|
|
|
|
path = tempPath;
|
|
return true;
|
|
}
|
|
|
|
// getFilePath
|
|
// ===========
|
|
|
|
void Knmap::getFilePath( const TQString& caption, TQString& path, TQLineEdit* lineEdit, const bool save )
|
|
{ if( getFilePath( caption, path, save ))
|
|
lineEdit->setText( path );
|
|
}
|
|
|
|
// queryExit
|
|
// =========
|
|
|
|
bool Knmap::queryExit( )
|
|
{ if( m_mainWidget->isDirty( ) && KMessageBox::Yes == KMessageBox::questionYesNo( this, i18n( "Some profiles has been updated - save them now?" ), i18n( "Profile data updated" )))
|
|
m_mainWidget->saveAllDirtyProfiles( );
|
|
|
|
saveSettings( );
|
|
return true;
|
|
}
|
|
|
|
// readSettings
|
|
// ============
|
|
|
|
void Knmap::readSettings( )
|
|
{ m_mainWidget->readSettings( );
|
|
}
|
|
|
|
// saveSettings
|
|
// ============
|
|
|
|
void Knmap::saveSettings( )
|
|
{ m_mainWidget->saveSettings( );
|
|
}
|
|
|
|
// slotConfigureShortcuts
|
|
// ======================
|
|
|
|
void Knmap::slotConfigureShortcuts( )
|
|
{ KKeyDialog::configure( actionCollection( ), this);
|
|
}
|
|
|
|
// slotConfigureToolbars
|
|
// =====================
|
|
|
|
void Knmap::slotConfigureToolbars( )
|
|
{ saveMainWindowSettings( TDEGlobal::config( ), autoSaveGroup( ));
|
|
|
|
KEditToolbar dlg( actionCollection( ));
|
|
connect( &dlg, SIGNAL( newToolbarConfig( )),this, SLOT( slotNewToolbarConfig( )));
|
|
dlg.exec( );
|
|
}
|
|
|
|
// slotNewToolbarConfig
|
|
// ====================
|
|
|
|
void Knmap::slotNewToolbarConfig( )
|
|
{
|
|
#ifdef _DEBUG
|
|
createGUI( TQDir::homeDirPath( ) + "/.kde/share/apps/knmap/knmapui.rc" );
|
|
#else
|
|
createGUI( );
|
|
#endif
|
|
|
|
applyMainWindowSettings( TDEGlobal::config( ), autoSaveGroup( ));
|
|
}
|
|
|
|
// slotOutputAvailable
|
|
// ===================
|
|
|
|
void Knmap::slotOutputAvailable( const bool saveState, const bool saveAsState )
|
|
{ m_fileSaveAction->setEnabled( saveState );
|
|
m_fileSaveAsAction->setEnabled( saveAsState );
|
|
}
|
|
|
|
// slotSetCaption
|
|
// ==============
|
|
|
|
void Knmap::slotSetCaption( const TQString& caption )
|
|
{ setCaption( caption );
|
|
}
|
|
|
|
// slotSetManPageActionStuff
|
|
// =========================
|
|
|
|
void Knmap::slotSetManPageActionStuff( const bool useLocalManPage )
|
|
{ m_settingsManAction->setIcon( useLocalManPage ? "knmapman.png" : "localman.png" );
|
|
m_settingsManAction->setText( useLocalManPage ? i18n( "&Use Knmap man page" ) : i18n( "&Use local man page" ));
|
|
}
|
|
|
|
// slotVisibleScanWidgetChanged
|
|
// ============================
|
|
|
|
void Knmap::slotVisibleScanWidgetChanged( ScanWidget* scanWidget )
|
|
{ m_useTargetHostAction->setChecked( scanWidget->useTargetHost( ));
|
|
}
|
|
|
|
#include "knmap.moc"
|