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.
kvpnc/src/newprofiledialog.cpp

671 lines
21 KiB

/***************************************************************************
* Copyright (C) 2004 by Christoph Thielecke *
* crissi99@gmx.de *
* *
* 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. *
***************************************************************************/
//BEGIN includes
#include "newprofiledialog.h"
#include <kcombobox.h>
#include <klineedit.h>
#include <tqcheckbox.h>
#include <kurlrequester.h>
#include <tdemessagebox.h>
#include <tqlistbox.h>
#include <klineedit.h>
#include <klineeditdlg.h>
#include <tdelocale.h>
#include <knuminput.h>
#include <tqobject.h>
#include <ktextedit.h>
#include <tqlabel.h>
#include "utils.h"
#include "networkinterface.h"
#include "importcertificatedialog.h"
#include "importprofiledialog.h"
#include "vpnaccountdata.h"
//END includes
NewProfileDialog::NewProfileDialog( TQApplication *app,TQWidget *parent, const TQString& caption, KVpncConfig *GlobalConfig)
: KDialogBase( parent, "New_profile", true, caption,
KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
{
this->GlobalConfig = GlobalConfig;
main = new NewProfileDialogbase(this);
setMainWidget(main);
main->setMinimumSize(main->sizeHint());
connect( main->ConnectionTypeComboBox, TQT_SIGNAL( activated( const TQString& ) ), this, TQT_SLOT( connectiontypeChanged( const TQString& ) ) );
connect( main->AuthTypeComboBox , TQT_SIGNAL( activated( const TQString& ) ), this, TQT_SLOT( authTypeChanged( const TQString& ) ) );
// connect( main->buttonCancel , TQT_SIGNAL( clicked () ), this, TQT_SLOT( reject() ) );
connect( main->ImportCertificatePushButton, TQT_SIGNAL( clicked () ), this, TQT_SLOT( importCertificate() ) );
connect( main->AdvancedSettingsPushButton, TQT_SIGNAL( clicked () ), this, TQT_SLOT( advancedSettingsClicked() ) );
connect( main->ImportPcfProfilePushButton , TQT_SIGNAL( clicked () ), this, TQT_SLOT( importPcfFileClicked() ) );
connect( main->GroupPasswordEdit, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( groupPasswordContentChanged() ) );
connect( main->PasswordEdit, TQT_SIGNAL( textChanged(const TQString&) ), this, TQT_SLOT( passwordContentChanged() ) );
newProfileCreated = FALSE;
Name = "";
// currently static for new profile
VpnAccountData::ConnectionType ConnType = VpnAccountData::ConnectionType(VpnAccountData::other);
Port = 500;
Gateway = "";
ID = "";
Username = "";
UserPassword = "";
PreSharedKey = "";
ApplicationVersion = "";
NtDomainName = "";
PerfectForwardSecrecy = "";
IkeGroup = "";
Description ="";
useApplicationVersion = false;
useGlobalIpsecSecret = false;
useIkeGroup = false;
useLocalPort = false;
useNtDomainName = false;
useSingleDes = false;
useAdvancedSettings = false;
usePerfectSecrecy = false;
saveUserPassword = false;
savePsk = false;
useUdp=false;
useUdpPort=false;
useDnsServer=false;
DnsServer="";
useGetDnsFromPeer=true;
refuse40BitEncryption=true;
refuse128BitEncryption=false;
allowStatefulMode=false;
requireMppe=true;
refuseEap=false;
useNoBsdComp=true;
useNoDeflate=true;
savePsk=false;
profileData = new VpnAccountData( ConnType, Name );
profileData->setGateway ( Gateway );
profileData->setID( ID );
profileData->setPreSharedKey( PreSharedKey);
profileData->setSavePsk( savePsk );
profileData->setUserName( Username );
profileData->setUserPassword( UserPassword );
profileData->setSaveUserPassword( saveUserPassword );
profileData->setSavePsk( savePsk );
profileData->setApplicationVersion( ApplicationVersion );
profileData->setUseLocalPort( useLocalPort );
profileData->setLocalPort( Port );
profileData->setUseSingleDes ( useSingleDes );
profileData->setPerfectForwardSecrety ( PerfectForwardSecrecy );
profileData->setIkeGroup( IkeGroup );
profileData->setUseGlobalIpsecSecret (useGlobalIpsecSecret );
profileData->setUseIkeGroup ( useIkeGroup );
profileData->setNtDomainName (NtDomainName );
profileData->setUseAdvancedSettings ( useAdvancedSettings );
profileData->setUsePerfectForwardSecrety (usePerfectSecrecy );
NetworkInterface iface(GlobalConfig,app);
TQStringList list = iface.getAllNetworkInterfaces();
main->NetworkDeviceComboBox->insertItem( "default" );
for ( TQStringList::Iterator it = list.begin(); it != list.end(); ++it )
{
main->NetworkDeviceComboBox->insertItem( TQString( *it ) );
}
main->NetworkDeviceComboBox->setEnabled( TRUE );
main->NetworkDeviceComboBox->setCurrentText( "default" );
main->certpathURLRequester->setURL( "/etc/racoon/certs" );
main->certpathURLRequester->setMode( 2 ); // directory
main->ConnectionTypeComboBox->insertItem( i18n( "Cisco (vpnc)" ) );
main->ConnectionTypeComboBox->insertItem( i18n( "IPSec (racoon)" ) );
main->ConnectionTypeComboBox->insertItem( i18n( "IPSec (FreeS/WAN)" ) );
main->ConnectionTypeComboBox->insertItem( i18n( "PPTP" ) );
main->ConnectionTypeComboBox->insertItem( i18n( "OpenVPN" ) );
main->AuthTypeComboBox->setCurrentItem(1); // cisco
main->RemoteNetMaskComboBox->setCurrentText("24");
authTypeChanged( "" );
connectiontypeChanged( "" );
}
NewProfileDialog::~NewProfileDialog()
{}
void NewProfileDialog::accept()
{
bool canSave = TRUE;
if ( main->ConnectionTypeComboBox->currentItem() == 0 ) {
profileData->setConnectionType( VpnAccountData::cisco );
UdpPort=10000;
}
else if ( main->ConnectionTypeComboBox->currentItem() == 1 )
{
profileData->setConnectionType( VpnAccountData::racoon );
if (main->AuthTypeComboBox->currentItem() == 0)
profileData->setAuthType( VpnAccountData::cert );
else
profileData->setAuthType( VpnAccountData::psk );
profileData->setX509Certificate( main->x509certURLRequester->url() );
profileData->setCertPath( main->certpathURLRequester->url() );
UdpPort=4500;
}
else if ( main->ConnectionTypeComboBox->currentItem() == 2 )
{
profileData->setConnectionType( VpnAccountData::freeswan );
UdpPort=4500;
}
else if ( main->ConnectionTypeComboBox->currentItem() == 3 )
{
profileData->setConnectionType( VpnAccountData::pptp );
}
else if ( main->ConnectionTypeComboBox->currentItem() == 4 )
{
profileData->setConnectionType( VpnAccountData::openvpn );
}
else
profileData->setConnectionType( VpnAccountData::other );
bool validAddr = TRUE;
if ( profileData->getConnectionType() != VpnAccountData::cisco && profileData->getConnectionType() != VpnAccountData::openvpn )
{
if ( main->RemoteNetAddrLineEdit->text().contains( '.' ) != 3 )
{
KMessageBox::error ( this, i18n( "No IP address for remote network entered!" ), i18n( "No IP Address" ) );
GlobalConfig->appendLogEntry( i18n( "No IP address for remote network entered!" ),GlobalConfig->error);
validAddr = canSave = FALSE;
}
else
{
if (!Utils(GlobalConfig).isValidIPv4Address(main->RemoteNetAddrLineEdit->text()))
{
KMessageBox::error ( this, i18n( "IP address of remote network is not valid!" ), i18n( "Invalid IP Address" ) );
GlobalConfig->appendLogEntry( i18n( "IP address of remote network not valid!" ) ,GlobalConfig->error);
validAddr = canSave = FALSE;
}
if ( validAddr )
{
profileData->setRemoteNetAddr( main->RemoteNetAddrLineEdit->text());
profileData->setRemoteNetMask( main->RemoteNetMaskComboBox->currentText() );
}
}
}
// profileData->setSavePsk( main->CheckGroupPass->isChecked() );
// profileData->setSaveUserPassword( main->CheckUserPass->isChecked () );
profileData->setSavePsk( !main->PSKLineEdit->text().isEmpty() );
profileData->setSaveUserPassword( !main->PasswordEdit->text().isEmpty() );
profileData->setID( main->IDLineEdit->text() );
profileData->setDescription( main->DescriptionLineEdit->text() );
profileData->setUserName( main->UsernameLineEdit->text () );
if ( main->CheckUserPass->isChecked ())
{
profileData->setUserPassword( main->PasswordEdit->text ( ) );
profileData->setSaveUserPassword(true);
}
profileData->setGateway( main->gatewayLineEdit->text() );
if ( main->CheckGroupPass->isChecked())
{
if (!profileData->getConnectionType() == VpnAccountData::cisco)
profileData->setPreSharedKey( main->PSKLineEdit->text() );
else
profileData->setPreSharedKey( main->GroupPasswordEdit->text() );
profileData->setSavePsk(true);
}
profileData->setX509Certificate( main->x509certURLRequester->url() );
profileData->setCertPath( main->certpathURLRequester->url() );
profileData->setNetworkDevice( main->NetworkDeviceComboBox->currentText() );
if (main->AuthTypeComboBox->currentItem() == 0)
profileData->setAuthType( VpnAccountData::cert );
else
profileData->setAuthType( VpnAccountData::psk );
if ( canSave )
{
bool nameOk = TRUE;
Name = main->ProfileLineEdit->text();
if (Name.contains(' '))
{
KMessageBox::error ( this, i18n( "Profile name can not contain spaces!" ), i18n( "Spaces Not Allowed" ) );
GlobalConfig->appendLogEntry( i18n( "Profile name can not contain spaces!" ) ,GlobalConfig->error);
nameOk = FALSE;
}
if (Name.isEmpty())
{
KMessageBox::error ( this, i18n( "Profile name can not be empty!" ), i18n( "No Name Entered" ) );
GlobalConfig->appendLogEntry( i18n( "Profile name can not be empty!" ) ,GlobalConfig->error);
nameOk = FALSE;
}
VpnAccountData * it;
for ( it = GlobalConfig->AccountList->first(); it; it = GlobalConfig->AccountList->next() )
{
if ( it->getName() == Name )
{
KMessageBox::error ( this, i18n( "Profile name already exists!" ), i18n( "Name Already Exists" ) );
GlobalConfig->appendLogEntry(i18n( "Profile name already exists!" ) ,GlobalConfig->error);
nameOk = FALSE;
break;
}
}
if ( nameOk )
{
profileData->setName(Name);
GlobalConfig->AccountList->append( profileData );
newProfileCreated = TRUE;
TQDialog::accept();
}
}
}
void NewProfileDialog::importCertificate()
{
//FIXME make dynamiclly
ImportCertificateDialog importdlg( this, i18n("Import certificate...").ascii(), GlobalConfig);
//dlg.resize(dlg.height(),600);
//int result =
importdlg.exec();
}
void NewProfileDialog::connectiontypeChanged( const TQString& )
{
// First we should set a type
//buttonOk->setEnabled( FALSE );
main->AdvancedSettingsPushButton->setEnabled( FALSE );
int item = main->ConnectionTypeComboBox->currentItem();
if ( item == VpnAccountData::ConnectionType(VpnAccountData::cisco) )
{
GlobalConfig->appendLogEntry( i18n("New type: %1").arg("cisco"),GlobalConfig->debug );
profileData->setConnectionType( VpnAccountData::cisco );
main->CheckGroupPass->setEnabled( TRUE );
main->CheckUserPass->setEnabled( TRUE );
main->IDLineEdit->setEnabled( TRUE );
main->LabelID->setEnabled( TRUE );
main->UsernameLineEdit->setEnabled( TRUE );
main->LabelUsername->setEnabled( TRUE );
main->PasswordEdit->setEnabled( TRUE );
main->LabelPassword->setEnabled( TRUE );
main->AdvancedSettingsPushButton->setEnabled( TRUE );
main->x509certURLRequester->setEnabled( FALSE );
main->LabelCertificate->setEnabled( FALSE );
main->certpathURLRequester->setEnabled( FALSE );
main->LabelCertificatePath->setEnabled( FALSE );
main->NetworkDeviceComboBox->setEnabled( FALSE );
main->LabelNetworkDevice->setEnabled( FALSE );
main->AuthTypeComboBox->setEnabled( FALSE );
main->LabelAuthType->setEnabled( FALSE );
main->PSKLineEdit->setEnabled( FALSE );
main->LabelPsk->setEnabled( FALSE );
//buttonCancel->setEnabled( TRUE );
//buttonOk->setEnabled( TRUE );
main->RemoteNetAddrLineEdit->setEnabled( FALSE );
main->LabelRemoteNetwork->setEnabled( FALSE );
main->RemoteNetMaskComboBox->setEnabled( FALSE );
} // vpnc
else if ( item == VpnAccountData::ConnectionType(VpnAccountData::racoon) )
{
GlobalConfig->appendLogEntry( i18n("New type: %1").arg("racoon"),GlobalConfig->debug );
// KURLRequester* main->x509certURLRequester;
// KComboBox* main->AuthTypeComboBox;
// KPushButton* ImportCertificatePushButton;
// KLineEdit* main->PSKLineEdit;
profileData->setConnectionType( VpnAccountData::racoon );
main->x509certURLRequester->setEnabled( TRUE );
main->LabelCertificate->setEnabled( TRUE );
main->certpathURLRequester->setEnabled( TRUE );
main->LabelCertificatePath->setEnabled( TRUE );
main->NetworkDeviceComboBox->setEnabled ( TRUE );
main->LabelNetworkDevice->setEnabled( TRUE );
main->AuthTypeComboBox->setEnabled( TRUE );
main->LabelAuthType->setEnabled( TRUE );
main->PSKLineEdit->setEnabled( TRUE );
main->LabelPsk->setEnabled( TRUE );
main->RemoteNetAddrLineEdit->setEnabled( TRUE );
main->LabelRemoteNetwork->setEnabled( TRUE );
main->RemoteNetMaskComboBox->setEnabled( TRUE );
main->PasswordEdit->setEnabled( FALSE );
main->LabelPassword->setEnabled( FALSE );
main->CheckGroupPass->setEnabled( FALSE );
main->CheckUserPass->setEnabled( FALSE );
main->IDLineEdit->setEnabled( FALSE );
main->LabelID->setEnabled( FALSE );
main->UsernameLineEdit->setEnabled( FALSE );
main->LabelUsername->setEnabled( FALSE );
main->GroupPasswordEdit->setEnabled( FALSE );
main->LabelGroupPassword->setEnabled( FALSE );
//buttonCancel->setEnabled( TRUE );
//buttonOk->setEnabled( TRUE );
main->AdvancedSettingsPushButton->setEnabled( TRUE );
} // racoon
else if ( item == VpnAccountData::ConnectionType(VpnAccountData::freeswan) )
{
GlobalConfig->appendLogEntry( i18n("New type: %1").arg("freeswan"), GlobalConfig->debug );
// KURLRequester* main->x509certURLRequester;
// KComboBox* main->AuthTypeComboBox;
// KPushButton* ImportCertificatePushButton;
// KLineEdit* main->PSKLineEdit;
profileData->setConnectionType( VpnAccountData::freeswan );
main->x509certURLRequester->setEnabled( TRUE );
main->LabelCertificate->setEnabled( TRUE );
main->certpathURLRequester->setEnabled( TRUE );
main->LabelCertificatePath->setEnabled( TRUE );
main->NetworkDeviceComboBox->setEnabled ( TRUE );
main->LabelNetworkDevice->setEnabled( TRUE );
main->AuthTypeComboBox->setEnabled( TRUE );
main->LabelAuthType->setEnabled( TRUE );
main->PSKLineEdit->setEnabled( TRUE );
main->LabelPsk->setEnabled( TRUE );
main->RemoteNetAddrLineEdit->setEnabled( TRUE );
main->LabelRemoteNetwork->setEnabled( TRUE );
main->RemoteNetMaskComboBox->setEnabled( TRUE );
main->CheckGroupPass->setEnabled( FALSE );
main->CheckUserPass->setEnabled( FALSE );
main->IDLineEdit->setEnabled( FALSE );
main->LabelID->setEnabled( FALSE );
main->PasswordEdit->setEnabled( FALSE );
main->LabelPassword->setEnabled( FALSE );
main->UsernameLineEdit->setEnabled( FALSE );
main->LabelUsername->setEnabled( FALSE );
main->GroupPasswordEdit->setEnabled( FALSE );
main->LabelGroupPassword->setEnabled( FALSE );
// buttonCancel->setEnabled( TRUE );
// buttonOk->setEnabled( TRUE );
main->AdvancedSettingsPushButton->setEnabled( TRUE );
} // freeswan
else if ( item == VpnAccountData::ConnectionType(VpnAccountData::pptp) )
{
GlobalConfig->appendLogEntry( i18n("New type: %1").arg("pptp"),GlobalConfig->debug );
// KURLRequester* main->x509certURLRequester;
// KComboBox* main->AuthTypeComboBox;
// KPushButton* ImportCertificatePushButton;
// KLineEdit* main->PSKLineEdit;
profileData->setConnectionType( VpnAccountData::pptp );
main->x509certURLRequester->setEnabled( FALSE );
main->LabelCertificate->setEnabled( FALSE );
main->certpathURLRequester->setEnabled( FALSE );
main->LabelCertificatePath->setEnabled( FALSE );
main->NetworkDeviceComboBox->setEnabled ( FALSE );
main->LabelNetworkDevice->setEnabled( FALSE );
main->AuthTypeComboBox->setEnabled( FALSE );
main->LabelAuthType->setEnabled( FALSE );
main->PSKLineEdit->setEnabled( FALSE );
main->LabelPsk->setEnabled( FALSE );
main->RemoteNetAddrLineEdit->setEnabled( TRUE );
main->LabelRemoteNetwork->setEnabled( TRUE );
main->RemoteNetMaskComboBox->setEnabled( TRUE );
main->CheckGroupPass->setEnabled( FALSE );
main->CheckUserPass->setEnabled( TRUE );
main->IDLineEdit->setEnabled( FALSE );
main->LabelID->setEnabled( FALSE );
main->PasswordEdit->setEnabled( TRUE );
main->LabelPassword->setEnabled( TRUE );
main->UsernameLineEdit->setEnabled( TRUE );
main->LabelUsername->setEnabled( TRUE );
main->GroupPasswordEdit->setEnabled( FALSE );
main->LabelGroupPassword->setEnabled( FALSE );
//buttonCancel->setEnabled( TRUE );
//buttonOk->setEnabled( TRUE );
main->AdvancedSettingsPushButton->setEnabled( TRUE );
} // pptp
else if ( item == VpnAccountData::ConnectionType(VpnAccountData::openvpn) )
{
if (GlobalConfig->KvpncDebugLevel > 0)
GlobalConfig->appendLogEntry( i18n("New type: %1").arg("openvpn"),GlobalConfig->debug );
// KURLRequester* main->x509certURLRequester;
// KComboBox* main->AuthTypeComboBox;
// KPushButton* ImportCertificatePushButton;
// KLineEdit* main->PSKLineEdit;
profileData->setConnectionType( VpnAccountData::openvpn );
main->x509certURLRequester->setEnabled( TRUE );
main->LabelCertificate->setEnabled( TRUE );
main->certpathURLRequester->setEnabled( TRUE );
main->LabelCertificatePath->setEnabled( TRUE );
main->NetworkDeviceComboBox->setEnabled ( TRUE );
main->LabelNetworkDevice->setEnabled( TRUE );
main->AuthTypeComboBox->setEnabled( TRUE );
main->LabelAuthType->setEnabled( TRUE );
main->PSKLineEdit->setEnabled( TRUE );
main->LabelPsk->setEnabled( TRUE );
main->RemoteNetAddrLineEdit->setEnabled( FALSE );
main->LabelRemoteNetwork->setEnabled( FALSE );
main->RemoteNetMaskComboBox->setEnabled( TRUE );
main->PasswordEdit->setEnabled( FALSE );
main->LabelPassword->setEnabled( FALSE );
main->CheckGroupPass->setEnabled( FALSE );
main->CheckUserPass->setEnabled( FALSE );
main->IDLineEdit->setEnabled( FALSE );
main->LabelID->setEnabled( FALSE );
main->UsernameLineEdit->setEnabled( FALSE );
main->LabelUsername->setEnabled( FALSE );
main->GroupPasswordEdit->setEnabled( FALSE );
main->LabelGroupPassword->setEnabled( FALSE );
//buttonCancel->setEnabled( TRUE );
//buttonOk->setEnabled( TRUE );
main->AdvancedSettingsPushButton->setEnabled( TRUE );
} // openvpn
// other
else
{
if (GlobalConfig->KvpncDebugLevel > 0)
GlobalConfig->appendLogEntry( "new type: other",GlobalConfig->debug );
// main->x509certURLRequester->setEnabled( FALSE );
// main->AuthTypeComboBox->setEnabled( FALSE );
// main->PSKLineEdit->setEnabled( FALSE );
//
// main->CheckGroupPass->setEnabled( FALSE );
// main->CheckUserPass->setEnabled( FALSE );
// main->IDLineEdit->setEnabled( FALSE );
// main->UsernameLineEdit->setEnabled( FALSE );
// main->AdvancedSettingsPushButton->setEnabled( FALSE );
// buttonCancel->setEnabled( FALSE );
//buttonOk->setEnabled( FALSE );
}
}
void NewProfileDialog::authTypeChanged( const TQString& )
{
if ( main->AuthTypeComboBox->currentItem() == VpnAccountData::AuthenticationType(VpnAccountData::cert ))
{
// certificate
main->PSKLineEdit->setEnabled( FALSE );
main->LabelPsk->setEnabled( FALSE );
main->x509certURLRequester->setEnabled( TRUE );
main->LabelCertificate->setEnabled( TRUE );
main->certpathURLRequester->setEnabled( TRUE );
main->LabelCertificatePath->setEnabled( TRUE );
}
if ( main->AuthTypeComboBox->currentItem() == VpnAccountData::AuthenticationType(VpnAccountData::psk ))
{
// psk
main->PSKLineEdit->setEnabled( TRUE );
main->LabelPsk->setEnabled( TRUE );
main->x509certURLRequester->setEnabled( FALSE );
main->LabelCertificate->setEnabled( FALSE );
main->certpathURLRequester->setEnabled( FALSE );
main->LabelCertificatePath->setEnabled( FALSE );
}
}
void NewProfileDialog::reject()
{
TQDialog::reject();
}
void NewProfileDialog::profileNameChanged( const TQString& )
{
// LogOutput->append ( "text changed!" );
// if ( main->ProfileLineEdit->text().isEmpty() )
// buttonOk->setEnabled( FALSE );
// else
// buttonOk->setEnabled( TRUE );
}
TQString NewProfileDialog::getName()
{
return Name;
}
void NewProfileDialog::importPcfFileClicked()
{
ImportProfileDialog dlg(GlobalConfig,this, i18n("Import Cisco PCF Profile..."),"");
dlg.exec();
dlg.resize(800,dlg.height());
}
void NewProfileDialog::groupPasswordContentChanged()
{
if (!main->GroupPasswordEdit->text().isEmpty())
main->CheckGroupPass->setChecked(true);
else
main->CheckGroupPass->setChecked(false);
}
void NewProfileDialog::passwordContentChanged()
{
if (!main->PasswordEdit->text().isEmpty())
main->CheckUserPass ->setChecked(true);
else
main->CheckUserPass->setChecked(false);
}
#include "newprofiledialog.moc"