summaryrefslogtreecommitdiffstats
path: root/src/newfirstrunwizard.ui.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/newfirstrunwizard.ui.h')
-rw-r--r--src/newfirstrunwizard.ui.h770
1 files changed, 770 insertions, 0 deletions
diff --git a/src/newfirstrunwizard.ui.h b/src/newfirstrunwizard.ui.h
new file mode 100644
index 0000000..32d33a4
--- /dev/null
+++ b/src/newfirstrunwizard.ui.h
@@ -0,0 +1,770 @@
+/***************************************************************************
+ ** $Id: newfirstrunwizard.ui.h,v 1.29 2008/12/08 19:39:02 hoganrobert Exp $
+ * Copyright (C) 2006 - 2008 Robert Hogan *
+ * robert@roberthogan.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., *
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include "torkconfig.h"
+#include "update.h"
+#include "crypto.h"
+#include "torclient.h"
+
+#include <kapplication.h>
+#include <qpushbutton.h>
+#include <qpixmap.h>
+#include <qtimer.h>
+#include <stdlib.h>
+#include <kstandarddirs.h>
+#include <kurl.h>
+#include <kprocio.h>
+#include <kdebug.h>
+#include <stdlib.h>
+#include <dcopref.h>
+#include <kconfig.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <krun.h>
+#include <qvaluevector.h>
+
+#include "functions.h"
+
+TorClient* client;
+KProcIO *whichproc;
+bool torRunning;
+bool privoxyRunning;
+QString tor;
+QString privoxy;
+QString netstat;
+QString torknetstat;
+
+QString OriginalHttpProxy;
+QString OriginalHttpsProxy;
+QString OriginalFtpProxy;
+QString OriginalProxyType;
+
+QString KonqHttpProxy;
+QString KonqHttpsProxy;
+QString KonqFtpProxy;
+uint KonqHttpProxyPort;
+uint KonqHttpsProxyPort;
+uint KonqFtpProxyPort;
+
+QString OriginalCookies;
+QString OriginalUseCache;
+QString OriginalSendUserAgent;
+QString OriginalEnableJavascript;
+QString OriginalEnableJava;
+QString OriginalEnablePlugins;
+
+QValueVector<QString> descriptions(6);
+
+void
+FirstRunWizard::init()
+{
+
+ torRunning = false;
+ privoxyRunning = false;
+
+ descriptions[0] = i18n("This will run a client and an exit server with Tor's default settings.<br>"
+ "An exit server carries the can for traffic leaving the Tor network.");
+ descriptions[1] = i18n("This will run a client and a relay server with Tor's default settings.<br>"
+ "A relay server carries traffic along the Tor network but does not transmit"
+ "tor traffic outside the network.");
+ descriptions[2] = i18n("This will run an exit server with Tor's default settings.<br>"
+ "An exit server carries the can for traffic leaving the Tor network.");
+ descriptions[3] = i18n("This will run a relay server with Tor's default settings.<br>"
+ "A relay server carries traffic along the Tor network but does not transmit"
+ "tor traffic outside the network.");
+ descriptions[4] = i18n("This will run a client with Tor's default settings.<br>");
+ descriptions[5] = i18n("You're too clever for your own good.<br>");
+
+
+
+ settingsDescription->setText(descriptions[0]);
+
+ setAppropriate ( CheckNotUsing, false );
+ setAppropriate ( CheckUsing, false );
+ setAppropriate ( NonPrivoxyConfirmation, false );
+ setAppropriate ( Remote_Tor, false );
+ setAppropriate ( Locate_Tor, false );
+ setAppropriate ( Locate_Privoxy, false );
+ setNextEnabled ( Locate_Tor,false );
+ setAppropriate ( TorServer, false );
+
+ TorkConfig::setUser(getenv("USER"));
+ const char *paths = ":/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin";
+
+ privoxy = getFullLocation(paths,"privoxy");
+ tor = getFullLocation(paths,"tor");
+ netstat = getFullLocation(paths,"netstat");
+
+
+ if (!tor)
+ setAppropriate ( Locate_Tor, true );
+ else
+ TorLocation_2->setURL(tor);
+
+ if (!privoxy){
+ setAppropriate ( Locate_Privoxy, true );
+ whichProxyText->setText(i18n("I did not find an installation of Privoxy on your system."));
+ }else{
+ PrivoxyLocation_2->setURL(privoxy);
+ whichProxyText->setText(i18n("I found an installation of Privoxy on your system."));
+ }
+
+ serverName->setText("TorKServer");
+
+ KConfig emailConf( QString::fromLatin1("emaildefaults") );
+ emailConf.setGroup(QString::fromLatin1("Defaults"));
+ QString profile = QString::fromLatin1("PROFILE_");
+ profile += emailConf.readEntry(QString::fromLatin1("Profile"), QString::fromLatin1("Default"));
+ emailConf.setGroup(profile);
+
+ contactMail->setText(emailConf.readEntry(QString::fromLatin1("EmailAddress")));
+
+ guessDataDir();
+ //aesthetics
+ cancelButton()->setFixedSize( cancelButton()->sizeHint() );
+ helpButton()->hide();
+
+
+ whichproc = new KProcIO();
+ whichproc->setUseShell(TRUE);
+ QString whichCommand="ps -C tor;ps -C privoxy";
+
+ *whichproc<<whichCommand;
+
+ connect( whichproc, SIGNAL(readReady(KProcIO * )),
+ SLOT(processWhich(KProcIO * )) );
+ whichproc->start(KProcIO::NotifyOnExit,TRUE);
+
+
+}
+
+void FirstRunWizard::monitorRemote_toggled( bool remoteTor)
+{
+
+ if ((!tor) && (!remoteTor))
+ setAppropriate ( Locate_Tor, true );
+ else
+ setAppropriate ( Locate_Tor, false );
+ setAppropriate ( HowDoesTorStart, !remoteTor );
+ setAppropriate ( TorUsage, !remoteTor );
+ setAppropriate ( TorServer, !remoteTor );
+ setAppropriate ( Remote_Tor, remoteTor );
+ setAppropriate ( TestingTor, remoteTor );
+}
+
+void FirstRunWizard::usingAnotherProxy_toggled( bool state)
+{
+
+ setAppropriate ( CheckNotUsing, state );
+ setAppropriate ( CheckUsing, state );
+ setAppropriate ( NonPrivoxyConfirmation, state );
+ setAppropriate ( PrivoxyConfirmation, !state );
+ if ((!privoxy) && (!state))
+ setAppropriate ( Locate_Privoxy, !state );
+ setAppropriate ( HowDoesPrivoxyStart, !state );
+ setAppropriate ( PrivoxyConfiguration, !state );
+ setAppropriate ( FinalPrivoxy, !state );
+}
+
+void FirstRunWizard::torStartsAutomatically_toggled( bool state)
+{
+ setAppropriate ( TorUsage, !state );
+ setAppropriate ( TorServer, !state );
+ setAppropriate ( TestingTor , state );
+}
+
+void FirstRunWizard::torStartsManually_toggled( bool state)
+{
+ setAppropriate ( TorUsage, state );
+ setAppropriate ( TorServer, state );
+ setAppropriate ( TestingTor , !state );
+}
+
+void FirstRunWizard::processWhich(KProcIO *whichproc)
+{
+ QString item = "";
+ int pos;
+
+ while ((pos = (whichproc->readln(item,true))) != -1) {
+ if (item.find("tor") != -1)
+ torRunning = true;
+ if (item.find("privoxy") != -1)
+ privoxyRunning = true;
+ }
+ whichproc->ackRead();
+
+}
+
+void
+FirstRunWizard::showPage( QWidget *w ) //virtual
+{
+ QWizard::showPage( w );
+
+
+ if (currentPage() == HowDoesTorStart){
+ torStartsAutomatically->setChecked(torRunning);
+ torStartsManually->setChecked(!torRunning);
+ }
+
+ if (currentPage() == LocalOrRemote){
+ torStartsAutomatically->setChecked(false);
+ torStartsManually->setChecked(false);
+ }
+
+ if (currentPage() == HowDoesPrivoxyStart){
+ privoxyStartsAutomatically->setChecked(privoxyRunning);
+ privoxyStartsManually->setChecked(!privoxyRunning);
+ if (privoxyRunning){
+ privoxyText->setText(i18n("<p>To be honest, I'm not that bright."
+ "It looks as if Privoxy is configured to start up by itself when "
+ "your computer boots up, but I can't be sure. So can you help me?"
+ "Does Privoxy start by itself at boot-time?</p>"));
+ }else{
+ privoxyText->setText(i18n("<p>To be honest, I'm not that bright."
+ "It looks as if Privoxy does not start up by itself when "
+ "your computer boots up, but I can't be sure. So can you help me?"
+ "Does Privoxy start by itself at boot-time?</p>"));
+
+ }
+ }
+
+ if (currentPage() == CheckUsing){
+ saveAnonymousProxySettings();
+ }
+
+ if (currentPage() == TestingTor){
+ testTor();
+ }
+
+
+ if (currentPage() == NonPrivoxyConfirmation){
+ saveNonAnonymousProxySettings();
+ }
+ if (currentPage() == PrivoxyConfirmation){
+ saveNonAnonymousProxySettings();
+ }
+
+ setFinishEnabled ( Final,true );
+
+
+// cancelButton()->setText( w == WizardPage_0 ? i18n("&Skip") : i18n("&Cancel") );
+}
+
+
+
+void FirstRunWizard::downloadPrivoxy_clicked()
+{
+ TorkUpdate* updater = new TorkUpdate(this);
+ updater->checkForNewPrivoxyDirectly();
+
+}
+
+
+void FirstRunWizard::downloadTor_clicked()
+{
+
+ TorkUpdate* updater = new TorkUpdate(this);
+ updater->checkForNewTorDirectly(false);
+
+}
+
+void
+FirstRunWizard::accept()
+{
+
+ QString paths;
+ paths = ":/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin";
+ paths.replace("::",":");
+
+ torknetstat = getFullLocation(paths,"torknetstat");;
+
+ if (torknetstat)
+ TorkConfig::setNetstatLocation("torknetstat");
+ else
+ TorkConfig::setNetstatLocation("netstat");
+
+ if (torStartsAutomatically->isChecked())
+ TorkConfig::setQuickConfigure(7);
+ else if (monitorRemote->isChecked())
+ TorkConfig::setQuickConfigure(6);
+ else
+ TorkConfig::setQuickConfigure(WizardQuickConfigure->currentItem());
+
+ TorkConfig::setTorLocation(TorLocation_2->url());
+ TorkConfig::setPrivoxyLocation(PrivoxyLocation_2->url());
+ TorkConfig::setNickName(serverName->text());
+ TorkConfig::setContactInfo(contactMail->text());
+
+ if (monitorRemote->isChecked()){
+ TorkConfig::setRemoteTorAddress(RemoteTorAddress->text());
+ TorkConfig::setRemoteTorPort(RemoteTorPort->text().toInt());
+ }
+
+ if ((usingAnotherProxy->isChecked()) || (privoxyStartsAutomatically->isChecked())){
+ TorkConfig::setSystemProxy(true);
+ TorkConfig::setTorkProxy(false);
+ }else{
+ TorkConfig::setSystemProxy(false);
+ TorkConfig::setTorkProxy(true);
+ }
+
+
+ //Non-Anon Proxy Settings
+ TorkConfig::setOriginalHttpProxy(OriginalHttpProxy);
+ TorkConfig::setOriginalHttpsProxy(OriginalHttpsProxy);
+ TorkConfig::setOriginalProxyType(OriginalProxyType);
+ TorkConfig::setOriginalCookies(OriginalCookies);
+ TorkConfig::setOriginalUseCache(OriginalUseCache);
+ TorkConfig::setOriginalSendUserAgent(OriginalSendUserAgent);
+ TorkConfig::setOriginalEnableJavascript(OriginalEnableJavascript);
+ TorkConfig::setOriginalEnableJava(OriginalEnableJava);
+ TorkConfig::setOriginalEnablePlugins(OriginalEnablePlugins);
+
+ //Anon Proxy Settings
+
+ TorkConfig::setKonqHttpProxy(KonqHttpProxy);
+ TorkConfig::setKonqHttpProxyPort(KonqHttpProxyPort);
+ TorkConfig::setKonqHttpsProxy(KonqHttpsProxy);
+ TorkConfig::setKonqHttpsProxyPort(KonqHttpsProxyPort);
+ TorkConfig::setKonqFtpProxy(KonqFtpProxy);
+ TorkConfig::setKonqFtpProxyPort(KonqFtpProxyPort);
+
+ if (!usingAnotherProxy->isChecked()){
+ TorkConfig::setKonqHttpProxy("http://localhost");
+ TorkConfig::setKonqHttpProxyPort(8118);
+ TorkConfig::setKonqHttpsProxy("http://localhost");
+ TorkConfig::setKonqHttpsProxyPort(8118);
+ }
+
+ TorkConfig::writeConfig();
+ QDialog::accept();
+}
+void
+FirstRunWizard::reject()
+{
+ QDialog::reject();
+}
+
+void FirstRunWizard::WizardQuickConfigure_activated( int item)
+{
+
+ if (item == 4)
+ setAppropriate ( TorServer, false );
+ else
+ setAppropriate ( TorServer, true );
+
+ settingsDescription->setText(descriptions[item]);
+
+}
+
+void
+FirstRunWizard::saveNonAnonymousProxySettings()
+{
+
+
+ KConfig* config = new KConfig("kioslaverc", false, false);
+ config->setGroup( "Proxy Settings" );
+ OriginalHttpProxy = config->readEntry( "httpProxy" );
+ OriginalHttpsProxy = config->readEntry( "httpsProxy" );
+ OriginalProxyType = config->readEntry( "ProxyType" );
+ config = new KConfig("kcookiejarrc", false, false);
+ config->setGroup( "Cookie Policy" );
+ OriginalCookies = config->readEntry( "Cookies" );
+ config = new KConfig("kio_httprc", false, false);
+ OriginalUseCache = config->readEntry( "UseCache" );
+ OriginalSendUserAgent = config->readEntry( "SendUserAgent" );
+ config = new KConfig("konquerorrc", false, false);
+ config->setGroup( "Java/JavaScript Settings" );
+ OriginalEnableJavascript = config->readEntry( "EnableJavaScript" );
+ OriginalEnableJava = config->readEntry( "EnableJava" );
+ OriginalEnablePlugins = config->readEntry( "EnablePlugins" );
+
+ if (currentPage() == PrivoxyConfirmation){
+ KonqHttpProxy = "http://localhost";
+ KonqHttpProxyPort = 8118;
+ KonqHttpsProxy = "http://localhost";
+ KonqHttpsProxyPort = 8118;
+ KonqFtpProxy = "http://localhost";
+ KonqFtpProxyPort = 8118;
+ }
+
+}
+
+void
+FirstRunWizard::saveAnonymousProxySettings()
+{
+
+
+
+ KConfig* config = new KConfig("kioslaverc", false, false);
+ config->setGroup( "Proxy Settings" );
+ KonqHttpProxy = config->readEntry( "httpProxy" ).section(":",0,1);
+ KonqHttpProxyPort = config->readEntry( "httpProxy" ).section(":",-1,-1).toInt();
+ KonqHttpsProxy = config->readEntry( "httpsProxy" ).section(":",0,1);
+ KonqHttpsProxyPort = config->readEntry( "httpsProxy" ).section(":",-1,-1).toInt();
+ KonqFtpProxy = config->readEntry( "ftpProxy" ).section(":",0,1);
+ KonqFtpProxyPort = config->readEntry( "ftpProxy" ).section(":",-1,-1).toInt();
+
+}
+
+void FirstRunWizard::TorLocation_textChanged( const QString & text)
+{
+ if (text.contains("tor"))
+ setNextEnabled ( Locate_Tor,true );
+}
+
+
+
+
+void FirstRunWizard::pushButton1_clicked()
+{
+ KRun::runCommand( "kcmshell proxy" );
+
+}
+
+
+void FirstRunWizard::pushButton1_2_clicked()
+{
+ KRun::runCommand( "kcmshell proxy" );
+}
+
+
+void FirstRunWizard::pushButton1_3_clicked()
+{
+ KRun::runCommand( "kcmshell proxy" );
+}
+
+void FirstRunWizard::testTorAgain_clicked()
+{
+ testTor();
+
+}
+
+void FirstRunWizard::testTor()
+{
+ kdDebug() << "testing tor" << endl;
+ QString host;
+ int port;
+ if (monitorRemote->isChecked()){
+ host = RemoteTorAddress->text();
+ port = RemoteTorPort->text().toInt();
+ TorkConfig::setCookieAuthentication(false);
+ }else{
+ host = "localhost";
+ port = TorkConfig::controlPort();
+ TorkConfig::setCookieAuthentication(false);
+ }
+
+ if (!TorPassword->text().isEmpty() && TorPassword->isEnabled())
+ TorkConfig::setHashedControlPassword(TorPassword->text());
+
+ if (client)
+ delete client;
+
+ client = new TorClient(host,port);
+ connect( client, SIGNAL(fatalError()),this, SLOT(cannotContactTor()));
+ connect( client, SIGNAL(authenticationFailed()),this, SLOT(cannotContactTor()));
+ connect( client, SIGNAL(authenticated()),this, SLOT(contactedTor()) );
+ client->authenticate();
+
+}
+
+void FirstRunWizard::modifyConfs_clicked()
+{
+ examineConfigFiles();
+}
+
+void FirstRunWizard::cannotContactTor()
+{
+
+ disconnect( client, SIGNAL(fatalError()),this, SLOT(cannotContactTor()));
+ disconnect( client, SIGNAL(authenticationFailed()),this, SLOT(cannotContactTor()));
+ disconnect( client, SIGNAL(authenticated()),this, SLOT(contactedTor()) );
+ if (client != 0L){
+ client->socketReadyRead();
+ client->deleteLater();
+ client = 0L;
+ }
+
+ if (monitorRemote->isChecked()){
+ torControlStatus->setText(i18n("<p>I can't contact or authenticate to Tor.<br>"
+ "This means you will need to modify Tor's settings if it is to be usable by Tork in future.</p>"
+ "On the machine that your remote Tor installation runs on add the following to Tor's config file:<br>"
+ "<br>"
+ "<b>ControlPort %2</b><br>"
+ "<br>"
+ "Alternatively, you may have entered the wrong password in the previous page.<br>"
+ "When you've attempted to fix the problem, click <b>'Test Tor'</b> to try connecting again.")
+ .arg(RemoteTorPort->text()));
+ }else{
+ torControlStatus->setText(i18n("<p>I can't contact or authenticate to Tor.<br>"
+ "This means Tork will need to modify Tor's settings if it is to be usable by Tork in future.</p>"
+ "To the right is a list of the possible files that Tor may be using for it's configuration.<br>"
+ "If you click the <b>'Modify Tor's Control File'</b> button, I'll modify any that exist to make Tor controllable by TorK.<br>"
+ "Once that's done you can click <b>'Test Tor'</b> to re-test the connection."));
+ modifyConfigs->setEnabled(true);
+ }
+ testTorAgain->setEnabled(true);
+
+}
+
+void FirstRunWizard::contactedTor()
+{
+
+ disconnect( client, SIGNAL(fatalError()),this, SLOT(cannotContactTor()));
+ disconnect( client, SIGNAL(authenticated()),this, SLOT(contactedTor()) );
+ if (client != 0L){
+ client->socketReadyRead();
+ client->deleteLater();
+ client = 0L;
+ }
+
+ if (!monitorRemote->isChecked())
+ torControlStatus->setText(i18n("<p>I contacted Tor successfully.<br>"
+ "This means TorK can contact and control Tor. That's a good thing.<br>"
+ "<b>By default, TorK will secure its session with Tor using a random "
+ "password.</b> However, you should consider using a security option on "
+ "Tor that will secure it even when you're not using TorK.<br>"
+ "See the 'My Tor Client' configuration section for more info"
+ " when you're finished the wizard. <br>"
+ "You can now click <b>'Next'</b>."));
+ else
+ torControlStatus->setText(i18n("<p>I contacted Tor successfully.<br>"
+ "This means TorK can contact and control Tor. That's a good thing. "
+ "As a security precaution, you should configure your remote instance "
+ "of Tor to require a password. You can inform TorK of the password "
+ "using the 'My Tor Client' configuration section. "
+ ));
+
+ modifyConfigs->setEnabled(false);
+ testTorAgain->setEnabled(true);
+ TorkConfig::setGenerateRandomPassword(true);
+// if (!monitorRemote->isChecked())
+// QTimer::singleShot( 3000, this, SLOT(examineConfigFiles()) );
+
+}
+
+void FirstRunWizard::examineConfigFiles()
+{
+
+ bool foundone = false;
+
+ for (unsigned int index = 0; index != configCandidates->count(); ++index){
+ if (QFile::exists(configCandidates->item(index)->text()))
+ {
+ appendControlDirective(configCandidates->item(index)->text());
+ foundone = true;
+ }
+ }
+
+ if (!foundone){
+ appendControlDirective("/usr/local/etc/tor/torrc");
+ appendControlDirective("/etc/tor/torrc");
+ appendControlDirective("/usr/etc/tor/torrc");
+ torControlStatus->setText(i18n("<p>OK, I didn't find any of the config files in the list.<br>"
+ "To make tor usable I'm creating config files in three locations: /usr/local/etc/tor/torrc, /usr/etc/tor/torrc and /etc/tor/torrc."
+ "I've also asked Tor to reload and it will catch and use one of these files. "
+ "<b> You'll be asked for your root password in a moment. "
+ "<b> This is to modify the file and necessary to get Tor working.</b> "
+ "When you've entered your password "
+ "click <b>'Test Tor'</b> to see if it worked. "));
+ }
+}
+
+void FirstRunWizard::pushButton6_clicked()
+{
+ rootifyNetstat();
+}
+
+void FirstRunWizard::rootifyNetstat()
+{
+
+ QString newnetstat = QString(netstat).replace("netstat","torknetstat");
+
+ KProcIO *catproc = new KProcIO();
+ catproc->setUseShell(TRUE);
+ QString whichCommand= QString("kdesu -t -c 'cp %1 %2;chmod u+s %3'").arg(netstat).arg(newnetstat).arg(newnetstat);
+ *catproc<<whichCommand;
+ catproc->start(KProcIO::NotifyOnExit,TRUE);
+
+}
+
+void FirstRunWizard::sighupTor(const QString& text)
+{
+
+ KProcIO *catproc = new KProcIO();
+ catproc->setUseShell(TRUE);
+ QString whichCommand= QString("killall -s HUP %1").arg(text);
+ *catproc<<whichCommand;
+ catproc->start(KProcIO::NotifyOnExit,TRUE);
+
+}
+
+void FirstRunWizard::appendControlDirective(const QString& text)
+{
+
+ int result = KMessageBox::questionYesNo(this,
+ i18n( "<p>I'm going to modify the Tor configuration file: <b>%1</b>.<br>"
+ "This is so that I can ensure"
+ "TorK can communicate with Tor.<br>"
+ " If you say Yes, I may have to ask for your <b>root password</b>.").arg(text));
+ switch (result) {
+ case KMessageBox::No :
+ return;
+ }
+
+ QFile inf(text);
+ if ( inf.open(IO_WriteOnly | IO_Append) ) {
+
+ QTextStream ts( &inf );
+
+ ts << "ControlPort 9051" << "\n";
+
+ inf.close();
+ sighupTor("tor");
+
+ }else{
+
+ QString directory = KURL(text).directory();
+ KProcIO *catproc = new KProcIO();
+ catproc->setUseShell(TRUE);
+ QString whichCommand= QString("kdesu -c \"sh -c 'mkdir -p %1;printf \\\"ControlPort 9051\\n\\\""
+ " >> %2;killall -s HUP tor'\"").arg(directory).arg(text);
+ *catproc<<whichCommand;
+ catproc->start(KProcIO::NotifyOnExit,TRUE);
+ //-c "sh -c 'printf \"ControlPort 9051\n\" >> /etc/tor/torrc'"
+
+ }
+
+}
+
+void FirstRunWizard::guessDataDir( )
+{
+
+ QStringList dataDirCands;
+ dataDirCands << QString("%1/.tor/").arg(getenv("HOME"));
+ dataDirCands << QString("/var/lib/tor/");
+
+ for ( QStringList::Iterator it = dataDirCands.begin(); it != dataDirCands.end(); ++it ) {
+ QDir inf((*it));
+ if ( inf.exists() ) {
+ TorkConfig::setDataDirectory((*it));
+ return;
+ }
+ }
+}
+
+
+void FirstRunWizard::RemoteTorAddress_textChanged( const QString & text)
+{
+ if ((text == "127.0.0.1") || (text == "localhost"))
+ TorPassword->setEnabled(false);
+ else
+ TorPassword->setEnabled(true);
+}
+
+
+void FirstRunWizard::modifyConfPrivoxy_clicked()
+{
+ examinePrivoxyConfigFiles();
+}
+
+void FirstRunWizard::examinePrivoxyConfigFiles()
+{
+
+ bool foundone = false;
+
+ for (unsigned int index = 0; index != configCandidatesPrivoxy->count(); ++index){
+ if (QFile::exists(configCandidatesPrivoxy->item(index)->text()))
+ {
+ appendPrivoxyConfig(configCandidatesPrivoxy->item(index)->text());
+ foundone = true;
+ }
+ }
+
+
+ if (!foundone){
+ appendPrivoxyConfig("/etc/privoxy/config");
+ privoxyStatus->setText(i18n("<p>OK, I didn't find any of the config files in the list.<br>"
+ "Tork has created a basic config in /etc/privoxy/config."
+ "This <i>may</i> get things working, but possibly not.<br>"
+ "You should:"
+ "- Check Privoxy is properly installed."
+ "- Re-install privoxy and try running the wizard again."
+ ));
+ }
+}
+
+void FirstRunWizard::appendPrivoxyConfig(const QString& text)
+{
+
+ QString privoxyConf = QString(
+ "confdir %1\\n"
+ "logdir .\\n"
+ "listen-address %2:%3\\n"
+ "debug 1 # URLs\\n"
+ "debug 4096 # Info\\n"
+ "debug 8192 # Errors\\n"
+ "toggle 1\\n"
+ "buffer-limit 4069\\n"
+ "forward 192.168.*.*/ .\\n"
+ "forward 10.*.*.*/ .\\n"
+ "forward 127.*.*.*/ .\\n"
+ "forward-socks4a / %4:%5 .\\n")
+ .arg(locate("data","tork/privoxy/"))
+ .arg(TorkConfig::konqHttpProxy().replace("http://",""))
+ .arg(TorkConfig::konqHttpProxyPort())
+ .arg(TorkConfig::sOCKSBindAddressHost())
+ .arg(TorkConfig::sOCKSBindAddressPort());
+
+ int result = KMessageBox::questionYesNo(this,
+ i18n( "<p>I'm going to modify the Privoxy configuration file: <b>%1</b>.<br>"
+ "This is so that I can ensure"
+ "Privoxy can communicate with Tor.<br>"
+ " If you say Yes, I'll ask for your root password.").arg(text));
+ switch (result) {
+ case KMessageBox::No :
+ return;
+ }
+
+ QFile inf(text);
+ if ( inf.open(IO_WriteOnly | IO_Append) ) {
+
+ QTextStream ts( &inf );
+
+ ts << privoxyConf;
+
+ inf.close();
+ sighupTor("privoxy");
+
+ }else{
+
+ KProcIO *catproc = new KProcIO();
+ catproc->setUseShell(TRUE);
+ QString whichCommand= QString("kdesu -c \"sh -c 'printf \\\"%1\\\""
+ " >> %2;killall -s HUP privoxy'\"")
+ .arg(privoxyConf)
+ .arg(text);
+ *catproc<<whichCommand;
+ catproc->start(KProcIO::NotifyOnExit,TRUE);
+
+ }
+
+}