|
|
|
/*
|
|
|
|
kenvvarproxydlg.cpp - Proxy configuration dialog
|
|
|
|
|
|
|
|
Copyright (C) 2001- Dawit Alemayehu <adawit@kde.org>
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public
|
|
|
|
License (GPL) version 2 as published by the Free Software
|
|
|
|
Foundation.
|
|
|
|
|
|
|
|
This library 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
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <tqlayout.h>
|
|
|
|
#include <tqcheckbox.h>
|
|
|
|
#include <tqwhatsthis.h>
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <klineedit.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
|
|
|
|
#include "envvarproxy_ui.h"
|
|
|
|
#include "kenvvarproxydlg.h"
|
|
|
|
|
|
|
|
|
|
|
|
#define ENV_FTP_PROXY "FTP_PROXY,ftp_proxy,FTPPROXY,ftpproxy,PROXY,proxy"
|
|
|
|
#define ENV_HTTP_PROXY "HTTP_PROXY,http_proxy,HTTPPROXY,httpproxy,PROXY,proxy"
|
|
|
|
#define ENV_HTTPS_PROXY "HTTPS_PROXY,https_proxy,HTTPSPROXY,httpsproxy,PROXY,proxy"
|
|
|
|
#define NO_PROXY "NO_PROXY,no_proxy"
|
|
|
|
|
|
|
|
|
|
|
|
static TQString getProxyEnv(const TQString& var)
|
|
|
|
{
|
|
|
|
return TQString::fromLocal8Bit(::getenv(var.local8Bit().data()));
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool autoDetectProxySetting(const TQString& type, TQString& proxyEnv)
|
|
|
|
{
|
|
|
|
TQStringList list = TQStringList::split( ',', type);
|
|
|
|
TQStringList::ConstIterator it = list.begin();
|
|
|
|
TQStringList::ConstIterator end = list.end();
|
|
|
|
|
|
|
|
for(; it != end; ++it)
|
|
|
|
{
|
|
|
|
if(!getProxyEnv(*it).isEmpty())
|
|
|
|
{
|
|
|
|
proxyEnv = *it;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
KEnvVarProxyDlg::KEnvVarProxyDlg( TQWidget* parent, const char* name )
|
|
|
|
:KProxyDialogBase( parent, name, true,
|
|
|
|
i18n( "Variable Proxy Configuration" ) )
|
|
|
|
{
|
|
|
|
mDlg = new EnvVarProxyDlgUI( this );
|
|
|
|
setMainWidget( mDlg );
|
|
|
|
mDlg->leHttp->setMinimumWidth( mDlg->leHttp->fontMetrics().maxWidth() * 20 );
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
|
|
|
KEnvVarProxyDlg::~KEnvVarProxyDlg ()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::init()
|
|
|
|
{
|
|
|
|
m_bHasValidData = false;
|
|
|
|
|
|
|
|
connect( mDlg->cbShowValue, TQT_SIGNAL( clicked() ), TQT_SLOT( showValuePressed() ) );
|
|
|
|
connect( mDlg->pbVerify, TQT_SIGNAL( clicked() ), TQT_SLOT( verifyPressed() ) );
|
|
|
|
connect( mDlg->pbDetect, TQT_SIGNAL( clicked() ), TQT_SLOT( autoDetectPressed() ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::setProxyData( const KProxyData& data )
|
|
|
|
{
|
|
|
|
// Setup HTTP Proxy...
|
|
|
|
if (!getProxyEnv(data.proxyList["http"]).isEmpty())
|
|
|
|
mEnvVarsMap["http"] = data.proxyList["http"];
|
|
|
|
|
|
|
|
// Setup HTTPS Proxy...
|
|
|
|
if (!getProxyEnv(data.proxyList["https"]).isEmpty())
|
|
|
|
mEnvVarsMap["https"] = data.proxyList["https"];
|
|
|
|
|
|
|
|
// Setup FTP Proxy...
|
|
|
|
if (!getProxyEnv(data.proxyList["ftp"]).isEmpty())
|
|
|
|
mEnvVarsMap["ftp"] = data.proxyList["ftp"];
|
|
|
|
|
|
|
|
// Setup NO Proxy For...
|
|
|
|
TQString noProxyFor = data.noProxyFor.join("");
|
|
|
|
if (!getProxyEnv(noProxyFor).isEmpty())
|
|
|
|
mEnvVarsMap["noProxy"] = noProxyFor;
|
|
|
|
|
|
|
|
mDlg->cbShowValue->setChecked( data.showEnvVarValue );
|
|
|
|
showValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
const KProxyData KEnvVarProxyDlg::data() const
|
|
|
|
{
|
|
|
|
KProxyData data;
|
|
|
|
|
|
|
|
if (m_bHasValidData)
|
|
|
|
{
|
|
|
|
data.proxyList["http"] = mEnvVarsMap["http"];
|
|
|
|
data.proxyList["https"] = mEnvVarsMap["https"];
|
|
|
|
data.proxyList["ftp"] = mEnvVarsMap["ftp"];
|
|
|
|
data.noProxyFor = mEnvVarsMap["noProxy"];
|
|
|
|
data.type = KProtocolManager::EnvVarProxy;
|
|
|
|
data.showEnvVarValue = mDlg->cbShowValue->isChecked();
|
|
|
|
}
|
|
|
|
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::verifyPressed()
|
|
|
|
{
|
|
|
|
if ( !validate() )
|
|
|
|
{
|
|
|
|
TQString msg = i18n("You must specify at least one valid proxy "
|
|
|
|
"environment variable.");
|
|
|
|
|
|
|
|
TQString details = i18n("<qt>Make sure you entered the actual environment "
|
|
|
|
"variable name rather than its value. For "
|
|
|
|
"example, if the environment variable is <br><b>"
|
|
|
|
"HTTP_PROXY=http://localhost:3128</b><br> you need "
|
|
|
|
"to enter <b>HTTP_PROXY</b> here instead of the "
|
|
|
|
"actual value http://localhost:3128.</qt>");
|
|
|
|
|
|
|
|
KMessageBox::detailedSorry( this, msg, details,
|
|
|
|
i18n("Invalid Proxy Setup") );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
KMessageBox::information( this, i18n("Successfully verified."),
|
|
|
|
i18n("Proxy Setup") );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::autoDetectPressed()
|
|
|
|
{
|
|
|
|
bool found = false;
|
|
|
|
|
|
|
|
setHighLight (mDlg->lbHttp, false);
|
|
|
|
setHighLight (mDlg->lbHttps, false);
|
|
|
|
setHighLight (mDlg->lbFtp, false);
|
|
|
|
setHighLight (mDlg->lbNoProxy, false);
|
|
|
|
|
|
|
|
// Detect HTTP proxy settings...
|
|
|
|
found |= autoDetectProxySetting (TQString::tqfromLatin1(ENV_HTTP_PROXY), mEnvVarsMap["http"]);
|
|
|
|
|
|
|
|
// Detect HTTPS proxy settings...
|
|
|
|
found |= autoDetectProxySetting (TQString::tqfromLatin1(ENV_HTTPS_PROXY), mEnvVarsMap["https"]);
|
|
|
|
|
|
|
|
// Detect FTP proxy settings...
|
|
|
|
found |= autoDetectProxySetting (TQString::tqfromLatin1(ENV_FTP_PROXY), mEnvVarsMap["ftp"]);
|
|
|
|
|
|
|
|
// Detect the NO_PROXY settings...
|
|
|
|
found |= autoDetectProxySetting (TQString::tqfromLatin1(NO_PROXY), mEnvVarsMap["noProxy"]);
|
|
|
|
|
|
|
|
if ( !found )
|
|
|
|
{
|
|
|
|
TQString msg = i18n("Did not detect any environment variables "
|
|
|
|
"commonly used to set system wide proxy "
|
|
|
|
"information.");
|
|
|
|
|
|
|
|
TQString details = i18n("<qt>To learn about the variable names the "
|
|
|
|
"automatic detection process searches for, "
|
|
|
|
"press OK, click on the quick help button "
|
|
|
|
"on the window title bar of the "
|
|
|
|
"previous dialog and then click on the "
|
|
|
|
"\"<b>Auto Detect</b>\" button.</qt>");
|
|
|
|
|
|
|
|
KMessageBox::detailedSorry( this, msg, details,
|
|
|
|
i18n("Automatic Proxy Variable Detection") );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
showValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::updateVariables()
|
|
|
|
{
|
|
|
|
TQString text = mDlg->leHttp->text();
|
|
|
|
if (mEnvVarsMap["http"] != text)
|
|
|
|
mEnvVarsMap["http"] = text;
|
|
|
|
|
|
|
|
text = mDlg->leHttps->text();
|
|
|
|
if (mEnvVarsMap["https"] != text)
|
|
|
|
mEnvVarsMap["https"] = text;
|
|
|
|
|
|
|
|
text = mDlg->leFtp->text();
|
|
|
|
if (mEnvVarsMap["ftp"] != text)
|
|
|
|
mEnvVarsMap["ftp"] = text;
|
|
|
|
|
|
|
|
text = mDlg->leNoProxy->text();
|
|
|
|
if (mEnvVarsMap["noProxy"] != text)
|
|
|
|
mEnvVarsMap["noProxy"] = text;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::showValuePressed()
|
|
|
|
{
|
|
|
|
// Only update the variables whenever
|
|
|
|
if (mDlg->cbShowValue->isChecked())
|
|
|
|
updateVariables();
|
|
|
|
|
|
|
|
showValue();
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::showValue()
|
|
|
|
{
|
|
|
|
bool enable = mDlg->cbShowValue->isChecked();
|
|
|
|
|
|
|
|
mDlg->leHttp->setReadOnly (enable);
|
|
|
|
mDlg->leHttps->setReadOnly (enable);
|
|
|
|
mDlg->leFtp->setReadOnly (enable);
|
|
|
|
mDlg->leNoProxy->setReadOnly (enable);
|
|
|
|
|
|
|
|
if (enable)
|
|
|
|
{
|
|
|
|
mDlg->leHttp->setText(getProxyEnv(mEnvVarsMap["http"]));
|
|
|
|
mDlg->leHttps->setText(getProxyEnv(mEnvVarsMap["https"]));
|
|
|
|
mDlg->leFtp->setText(getProxyEnv(mEnvVarsMap["ftp"]));
|
|
|
|
mDlg->leNoProxy->setText(getProxyEnv(mEnvVarsMap["noProxy"]));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mDlg->leHttp->setText(mEnvVarsMap["http"]);
|
|
|
|
mDlg->leHttps->setText(mEnvVarsMap["https"]);
|
|
|
|
mDlg->leFtp->setText(mEnvVarsMap["ftp"]);
|
|
|
|
mDlg->leNoProxy->setText(mEnvVarsMap["noProxy"]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool KEnvVarProxyDlg::validate(bool erase)
|
|
|
|
{
|
|
|
|
m_bHasValidData = false;
|
|
|
|
|
|
|
|
if(!mDlg->cbShowValue->isChecked())
|
|
|
|
updateVariables();
|
|
|
|
|
|
|
|
bool notFound = getProxyEnv(mEnvVarsMap["http"]).isEmpty();
|
|
|
|
m_bHasValidData |= !notFound;
|
|
|
|
setHighLight (mDlg->lbHttp, notFound);
|
|
|
|
if(notFound && erase) mEnvVarsMap["http"] = TQString::null;
|
|
|
|
|
|
|
|
notFound = getProxyEnv(mEnvVarsMap["https"]).isEmpty();
|
|
|
|
m_bHasValidData |= !notFound;
|
|
|
|
setHighLight (mDlg->lbHttps, notFound);
|
|
|
|
if(notFound && erase) mEnvVarsMap["https"] = TQString::null;
|
|
|
|
|
|
|
|
notFound = getProxyEnv(mEnvVarsMap["ftp"]).isEmpty();
|
|
|
|
m_bHasValidData |= !notFound;
|
|
|
|
setHighLight (mDlg->lbFtp, notFound);
|
|
|
|
if(notFound && erase) mEnvVarsMap["ftp"] = TQString::null;
|
|
|
|
|
|
|
|
notFound = getProxyEnv(mEnvVarsMap["noProxy"]).isEmpty();
|
|
|
|
m_bHasValidData |= !notFound;
|
|
|
|
setHighLight (mDlg->lbNoProxy, notFound);
|
|
|
|
if(notFound && erase) mEnvVarsMap["noProxy"] = TQString::null;
|
|
|
|
|
|
|
|
return m_bHasValidData;
|
|
|
|
}
|
|
|
|
|
|
|
|
void KEnvVarProxyDlg::slotOk()
|
|
|
|
{
|
|
|
|
if(!validate(true))
|
|
|
|
{
|
|
|
|
TQString msg = i18n("You must specify at least one valid proxy "
|
|
|
|
"environment variable.");
|
|
|
|
|
|
|
|
TQString details = i18n("<qt>Make sure you entered the actual environment "
|
|
|
|
"variable name rather than its value. For "
|
|
|
|
"example, if the environment variable is <br><b>"
|
|
|
|
"HTTP_PROXY=http://localhost:3128</b><br> you need "
|
|
|
|
"to enter <b>HTTP_PROXY</b> here instead of the "
|
|
|
|
"actual value http://localhost:3128.</qt>");
|
|
|
|
|
|
|
|
KMessageBox::detailedError( this, msg, details,
|
|
|
|
i18n("Invalid Proxy Setup") );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
KDialogBase::slotOk ();
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kenvvarproxydlg.moc"
|