[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r1969: - logic for group management - language independence (german (in branches/hidden-services/src: config entity gui/config gui/help/content/de gui/help/content/en lang)
Author: kloesing
Date: 2007-10-05 11:35:21 -0400 (Fri, 05 Oct 2007)
New Revision: 1969
Added:
branches/hidden-services/src/config/hiddenservicesettings.cpp
branches/hidden-services/src/config/hiddenservicesettings.h
branches/hidden-services/src/gui/config/adduserdialog.cpp
branches/hidden-services/src/gui/config/adduserdialog.h
branches/hidden-services/src/gui/config/adduserdialog.ui
branches/hidden-services/src/gui/config/groupdialog.cpp
branches/hidden-services/src/gui/config/groupdialog.h
branches/hidden-services/src/gui/config/userdialog.cpp
branches/hidden-services/src/gui/config/userdialog.h
branches/hidden-services/src/gui/config/userdialog.ui
Modified:
branches/hidden-services/src/config/config.pri
branches/hidden-services/src/config/vidaliasettings.cpp
branches/hidden-services/src/config/vidaliasettings.h
branches/hidden-services/src/entity/entity.pri
branches/hidden-services/src/entity/group.cpp
branches/hidden-services/src/entity/group.h
branches/hidden-services/src/entity/service.cpp
branches/hidden-services/src/entity/service.h
branches/hidden-services/src/entity/servicelist.cpp
branches/hidden-services/src/entity/servicelist.h
branches/hidden-services/src/entity/user.cpp
branches/hidden-services/src/entity/user.h
branches/hidden-services/src/gui/config/config.pri
branches/hidden-services/src/gui/config/configdialog.cpp
branches/hidden-services/src/gui/config/configdialog.h
branches/hidden-services/src/gui/config/hiddenservicepage.cpp
branches/hidden-services/src/gui/config/hiddenservicepage.h
branches/hidden-services/src/gui/config/hiddenservicepage.ui
branches/hidden-services/src/gui/help/content/de/config.html
branches/hidden-services/src/gui/help/content/de/contents.xml
branches/hidden-services/src/gui/help/content/en/config.html
branches/hidden-services/src/gui/help/content/en/contents.xml
branches/hidden-services/src/lang/vidalia_de.ts
Log:
- logic for group management
- language independence (german, english)
- implementation of three possible authentication methods
- serialization of entyties
Modified: branches/hidden-services/src/config/config.pri
===================================================================
--- branches/hidden-services/src/config/config.pri 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/config/config.pri 2007-10-05 15:35:21 UTC (rev 1969)
@@ -25,11 +25,13 @@
$$PWD/serversettings.h \
$$PWD/torsettings.h \
$$PWD/policy.h \
- $$PWD/exitpolicy.h
+ $$PWD/exitpolicy.h \
+ $$PWD/hiddenservicesettings.h
SOURCES += $$PWD/vidaliasettings.cpp \
$$PWD/serversettings.cpp \
$$PWD/torsettings.cpp \
$$PWD/policy.cpp \
- $$PWD/exitpolicy.cpp
+ $$PWD/exitpolicy.cpp \
+ $$PWD/hiddenservicesettings.cpp
Added: branches/hidden-services/src/config/hiddenservicesettings.cpp
===================================================================
--- branches/hidden-services/src/config/hiddenservicesettings.cpp (rev 0)
+++ branches/hidden-services/src/config/hiddenservicesettings.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,131 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+
+#include <QHostInfo>
+#include <util/net.h>
+#include <util/string.h>
+#include "hiddenservicesettings.h"
+#include "torsettings.h"
+
+/* Server-related torrc configuration parameters */
+#define SERVER_HIDDENSERVICE_DIR "HiddenServiceDir"
+
+
+//HiddenService Settings
+#define SETTING_SERVICE_LOCAL_PORT "HiddenService/LocalPort"
+#define SETTING_SERVICE_ADDRESS "HiddenService/ServiceAddress"
+#define SETTING_TOR_SERVICES "HiddenService/Services"
+
+
+
+
+/** Constructor.
+ * \param torControl a TorControl object used to read and apply the server
+ * configuration settings.
+ */
+HiddenServiceSettings::HiddenServiceSettings(TorControl *torControl)
+{
+ _torControl = torControl;
+ setDefault(SETTING_SERVICE_LOCAL_PORT , 80);
+ setDefault(SETTING_SERVICE_ADDRESS, "127.0.0.1");
+}
+
+
+
+/** Set ServiceList to serialise it */
+void
+HiddenServiceSettings::setServices(ServiceList service)
+{
+ QVariant v = new QVariant();
+ v.setValue(service);
+ setValue(SETTING_TOR_SERVICES, v);
+}
+
+
+/** Get serialised ServiceList */
+ServiceList
+HiddenServiceSettings::getServices()
+{
+ QVariant v = value(SETTING_TOR_SERVICES);
+ ServiceList services = v.value<ServiceList>();
+ return services;
+}
+
+/** Returns the service port for a specififc service*/
+quint16
+HiddenServiceSettings::getLocalServicePort()
+{
+ return (quint16)value(SETTING_SERVICE_LOCAL_PORT).toInt();
+}
+
+/** Set the service port for a specififc service*/
+void
+HiddenServiceSettings::setLocalServicePort(quint16 servicePort)
+{
+ setValue(SETTING_SERVICE_LOCAL_PORT, servicePort);
+}
+
+/** Returns the service address or hostname for a specific service */
+QHostAddress
+HiddenServiceSettings::getServiceAddress()
+{
+ QString addr = value(SETTING_SERVICE_ADDRESS).toString();
+ return QHostAddress(addr);
+}
+
+/** Set the service address or hostname for a specific service */
+void
+HiddenServiceSettings::setServiceAddress(QHostAddress addr)
+{
+ setValue(SETTING_SERVICE_ADDRESS, addr.toString());
+}
+
+/* Set HiddenServiceDir and send it to the Tor Controller */
+void
+HiddenServiceSettings::apply(QString value, QString *errmsg)
+{
+ _torControl->setConf("HiddenServiceDir", value, errmsg);
+ _torControl->saveConf(errmsg);
+}
+
+/* Get Tor Version */
+QString
+HiddenServiceSettings::getTorVersion()
+{
+ QString value;
+ _torControl->getInfo("version", value);
+ return value;
+}
+
+
+/* Unpublish all HiddenServices */
+void
+HiddenServiceSettings::unpublishAllServices(QString *errmsg)
+{
+ _torControl->resetConf(SERVER_HIDDENSERVICE_DIR, errmsg);
+}
+
+
+
+
+
Added: branches/hidden-services/src/config/hiddenservicesettings.h
===================================================================
--- branches/hidden-services/src/config/hiddenservicesettings.h (rev 0)
+++ branches/hidden-services/src/config/hiddenservicesettings.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,81 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+#ifndef _HIDDENSERVICESETTINGS_H
+#define _HIDDENSERVICESETTINGS_H
+
+#include <control/torcontrol.h>
+
+#include "vidaliasettings.h"
+#include "exitpolicy.h"
+#include <control/torcontrol.h>
+#include <config/hiddenservicesettings.h>
+#include <entity/servicelist.h>
+
+class HiddenServiceSettings : private VidaliaSettings {
+
+public:
+ /** Constructor */
+ HiddenServiceSettings(TorControl *torControl);
+
+ /** Returns the service port for a specififc service*/
+ quint16 getLocalServicePort();
+
+ /** Set the service port for a specififc service*/
+ void setLocalServicePort(quint16 servicePort);
+
+ /** Returns the service address or hostname for a specific service */
+ QHostAddress getServiceAddress();
+
+ /** Set the service address or hostname for a specific service */
+ void setServiceAddress(QHostAddress addr);
+
+ ServiceList getServices();
+
+ /** Set ServiceList to serialise it */
+ void setServices(ServiceList services);
+
+ /* Set HiddenServiceHir and send it to the Tor Controller */
+ void apply(QString value, QString *errmsg = 0);
+
+ /* Get HiddenServiceDir Directorys */
+ QString getHiddenServiceDirectorys();
+
+ /* Unpublish all HiddenServices */
+ void unpublishAllServices(QString *errmsg);
+
+ /* Get the DataDir from the Tor Controller */
+ QString getDataDirectory();
+
+ /* Get Tor Version */
+ QString getTorVersion();
+
+private:
+
+ /** A TorControl object used to talk to Tor. */
+ TorControl* _torControl;
+ /** Values of all stored settings at the last apply() point. */
+ QMap<QString, QVariant> _backupSettings;
+};
+
+#endif
+
Modified: branches/hidden-services/src/config/vidaliasettings.cpp
===================================================================
--- branches/hidden-services/src/config/vidaliasettings.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/config/vidaliasettings.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,17 +20,12 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file vidaliasettings.cpp
- * \version $Id$
- * \brief General Vidalia settings, such as language and interface style
- */
-
#include <QDir>
#include <QCoreApplication>
#include <QStyleFactory>
#include <lang/languagesupport.h>
#include <vidalia.h>
+#include <entity/servicelist.h>
#include "vidaliasettings.h"
@@ -56,7 +52,16 @@
/** Default Constructor */
VidaliaSettings::VidaliaSettings()
: QSettings(SETTINGS_FILE, QSettings::IniFormat)
-{
+{
+ qRegisterMetaType<User>("User");
+ qRegisterMetaTypeStreamOperators<User>("User");
+ qRegisterMetaType<Group>("Group");
+ qRegisterMetaTypeStreamOperators<Group>("Group");
+ qRegisterMetaType<Service>("Service");
+ qRegisterMetaTypeStreamOperators<Service>("Service");
+ qRegisterMetaType<ServiceList>("ServiceList");
+ qRegisterMetaTypeStreamOperators<ServiceList>("ServiceList");
+
#if defined(Q_WS_MAC)
setDefault(SETTING_STYLE, "macintosh (aqua)");
#else
Modified: branches/hidden-services/src/config/vidaliasettings.h
===================================================================
--- branches/hidden-services/src/config/vidaliasettings.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/config/vidaliasettings.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file vidaliasettings.h
- * \version $Id$
- * \brief General Vidalia settings, such as language and interface style
- */
-
#ifndef _VIDALIASETTINGS_H
#define _VIDALIASETTINGS_H
Modified: branches/hidden-services/src/entity/entity.pri
===================================================================
--- branches/hidden-services/src/entity/entity.pri 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/entity.pri 2007-10-05 15:35:21 UTC (rev 1969)
@@ -16,10 +16,10 @@
# 02110-1301, USA.
# ################################################################
HEADERS += $$PWD/service.h \
- $$PWD/user.h \
- $$PWD/group.h \
- $$PWD/servicelist.h
+ $$PWD/user.h \
+ $$PWD/group.h \
+ $$PWD/servicelist.h
SOURCES += $$PWD/servicelist.cpp \
- $$PWD/service.cpp \
- $$PWD/group.cpp \
- $$PWD/user.cpp
+ $$PWD/service.cpp \
+ $$PWD/group.cpp \
+ $$PWD/user.cpp
Modified: branches/hidden-services/src/entity/group.cpp
===================================================================
--- branches/hidden-services/src/entity/group.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/group.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file group.cpp
- * \version $Id: group.cpp 1563 2007-09-26 06:06:04Z klimabork $
- * \brief Group Entity File
- */
-
#include "group.h"
#include <entity/user.h>
@@ -37,6 +32,7 @@
Group::Group(QString groupName, QList<User> users) {
_groupName = groupName;
_groupMembers = users;
+ _isDeployed = false;
}
/** Destructor */
@@ -48,6 +44,11 @@
_groupName = groupName;
}
+/* Sets the secret cookie of the group */
+void Group::setCookieKey(QString cookieKey) {
+ _cookieKey = cookieKey;
+}
+
/* Sets the group members */
void Group::setGroupMembers(QList<User> groupMembers) {
_groupMembers = groupMembers;
@@ -60,42 +61,54 @@
/* Deletes a User to the list of known users */
void Group::deleteUser(User user) {
- QListIterator<User> i(_groupMembers);
- int index = 1;
- while (i.hasNext()) {
- User tempUser = i.next();
- if (user.compareTo(tempUser)) {
- _groupMembers.removeAt(index);
- }
- index++;
- }
+ QListIterator<User> i(_groupMembers);
+ int index = 1;
+ while (i.hasNext()) {
+ User tempUser = i.next();
+ if (user.compareTo(tempUser)) {
+ _groupMembers.removeAt(index);
+ }
+ index++;
+ }
}
+/** sets the group as (un)deployed) */
+void Group::setIsDeployed(bool deployed) {
+ _isDeployed = deployed;
+}
+
+
/** Writes Group class data from <b>myObj</b> to the QDataStream
* <b>out</b>. */
QDataStream&operator<<(QDataStream &out, const Group &myObj) {
- out << myObj.groupName(); /* Write the QString groupname */
- out << myObj.groupMembers();
- return out;
+ out << myObj.groupName(); /* Write the QString groupname */
+ out << myObj.groupMembers();
+ out << myObj.isDeployed();
+ out << myObj.cookieKey();
+ return out;
}
/** Reads Group class data in from the QDataStream <b>in</b> and
populates * the <b>myObj</b> object accordingly. */
QDataStream&operator>>(QDataStream &in, Group &myObj) {
- QString groupname;
- QList<User> userList;
- QList<User*> userRefList;
+ QString groupname;
+ QList<User> userList;
+ bool isDeployed;
+ QString cookieKey;
- /* Read in from the data stream */
- in >> groupname >> userList;
+ /* Read in from the data stream */
+ in >> groupname >> userList >> isDeployed >> cookieKey;
- /* Set the appropriate class member variables */
+ /* Set the appropriate class member variables */
- myObj.setGroupName(groupname);
- myObj.setGroupMembers(userList);
+ myObj.setGroupName(groupname);
+ myObj.setGroupMembers(userList);
+ myObj.setIsDeployed(isDeployed);
+ myObj.setCookieKey(cookieKey);
- /* Return the updated data stream */
- return in;
+ /* Return the updated data stream */
+ return in;
}
+
Modified: branches/hidden-services/src/entity/group.h
===================================================================
--- branches/hidden-services/src/entity/group.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/group.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file group.h
- * \version $Id: group.h 1563 2007-09-26 06:06:04Z klimabork $
- * \brief group entity file
- */
-
#ifndef GROUP_H_
#define GROUP_H_
@@ -46,6 +41,9 @@
/* Gets the name of the group */
QString groupName() const { return _groupName; }
+
+ /* Gets the cookieKey of the group */
+ QString cookieKey() const { return _cookieKey; }
/* Gets the group members */
QList<User> groupMembers() const { return _groupMembers; }
@@ -53,6 +51,9 @@
/* Sets the name of the group */
void setGroupName(QString groupName);
+ /* Sets the secret cookie of the group */
+ void setCookieKey(QString cookieKey);
+
/* Sets the group members */
void setGroupMembers(QList<User> groupMembers);
@@ -69,6 +70,10 @@
/** Reads Group class data in from the QDataStream <b>in</b> and
populates * the <b>myObj</b> object accordingly. */
friend QDataStream& operator>>(QDataStream &in, Group &myObj);
+ /** shows either the group is deployed or not */
+ bool isDeployed() const { return _isDeployed; }
+ /** sets the group as (un)deployed) */
+ void setIsDeployed(bool deployed);
private:
@@ -76,7 +81,13 @@
QString _groupName;
/** List of Users which are the groupMembers */
QList<User> _groupMembers;
+ /** shows either the group is deployed or not */
+ bool _isDeployed;
+ /** Secret Cookie Key of the group */
+ QString _cookieKey;
};
Q_DECLARE_METATYPE(Group);
#endif /*GROUP_H_*/
+
+
Modified: branches/hidden-services/src/entity/service.cpp
===================================================================
--- branches/hidden-services/src/entity/service.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/service.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file service.cpp
- * \version $Id: service.cpp 1563 2007-09-26 06:06:04Z klimabork $
- * \brief Service Entity File
- */
-
#include "service.h"
/** Default Constructor */
@@ -33,11 +28,13 @@
/** Constructor to create a new Service with initial settings */
Service::Service(QString serviceName, QString serviceAdress,
- QString localServicePort, QString listeningServicePort) {
- _serviceName = serviceName;
- _serviceAdress = serviceAdress;
- _localServicePort = localServicePort;
- _listeningServicePort = listeningServicePort;
+ QString localServicePort, QString listeningServicePort, AuthenticationVersion version) {
+ _serviceName = serviceName;
+ _serviceAdress = serviceAdress;
+ _localServicePort = localServicePort;
+ _listeningServicePort = listeningServicePort;
+ _authenticationVersion = version;
+ _deployed = false;
}
/** Destructor */
@@ -46,77 +43,120 @@
/** Sets the deploy status of a service */
void Service::setDeployed(bool deployed) {
- _deployed = deployed;
+ _deployed = deployed;
}
/** Sets the name of a service */
void Service::setServiceName(QString serviceName) {
- _serviceName = serviceName;
+ _serviceName = serviceName;
}
/** Sets the adress of a service */
void Service::setServiceAdress(QString serviceAdress) {
- _serviceAdress = serviceAdress;
+ _serviceAdress = serviceAdress;
}
/** Sets the localServicePort of a service */
void Service::setLocalServicePort(QString localServicePort) {
- _localServicePort = localServicePort;
+ _localServicePort = localServicePort;
}
/** Sets the listeningPort of a service */
void Service::setListeningServicePort(QString listeningServicePort) {
- _listeningServicePort = listeningServicePort;
+ _listeningServicePort = listeningServicePort;
}
/** Sets a list of groups of a service */
void Service::setGroups(QList<Group> groups) {
- _groups = groups;
+ _groups = groups;
}
+/** Returns the string description of the authentication method specified by
+ * <b>method</b>. The authentication method string is stored in Vidalia's
+ * configuration file. */
+QString
+Service::toString(AuthenticationVersion version) const
+{
+ switch (version) {
+ case V0: return "V0";
+ case V2: return "V2";
+ case V0V2: return "V0V2";
+ default: break;
+ }
+ return "V0";
+}
+
+/** returns the AthenticationVersion corresponding to the QString */
+Service::AuthenticationVersion
+Service::getAuthenticationVersion(QString authenticationVersion)
+{
+ Service::AuthenticationVersion version;
+ if (authenticationVersion == toString(Service::V0))
+ version = Service::V0;
+ else if (authenticationVersion == toString(Service::V2))
+ version = Service::V2;
+ else
+ version = Service::V0V2;
+ return version;
+}
+
/** Compares this service with another and return true if they are the same */
bool Service::compareTo(Service other) {
- bool result = false;
- if (_serviceName == other._serviceName) {
- result = true;
- } else {
- result = false;
- }
- return result;
+ bool result = false;
+ if (_serviceName == other._serviceName) {
+ result = true;
+ } else {
+ result = false;
+ }
+ return result;
}
+/** Sets the given version as AuthenticationVersion of the service */
+void Service::setAuthenticationVersion(AuthenticationVersion version) {
+ _authenticationVersion = version;
+}
+
/** Writes service class data from <b>myObj</b> to the QDataStream
* <b>out</b>. */
QDataStream&operator<<(QDataStream &out, const Service &myObj) {
- out << myObj.serviceName(); /* Write the QString groupname */
- out << myObj.serviceAdress();
- out << myObj.localServicePort();
- out << myObj.listeningServicePort();
- out << myObj.groups();
- return out;
+ const Service::AuthenticationVersion version = myObj.authenticationVersion();
+ const QString versionString = myObj.toString(version);
+
+ //QString version = myObj.toString(myObj.authenticationVersion());
+ out << myObj.serviceName(); /* Write the QString groupname */
+ out << myObj.serviceAdress();
+ out << myObj.localServicePort();
+ out << myObj.listeningServicePort();
+ out << versionString;
+ out << myObj.groups();
+ return out;
}
/** Reads service class data in from the QDataStream <b>in</b> and
populates * the <b>myObj</b> object accordingly. */
QDataStream&operator>>(QDataStream &in, Service &myObj) {
- QString serviceName;
- QString serviceAdress;
- QString localServicePort;
- QString listeningServicePort;
- QList<Group> groups;
+ QString serviceName;
+ QString serviceAdress;
+ QString localServicePort;
+ QString listeningServicePort;
+ QList<Group> groups;
+ QString version;
- /* Read in from the data stream */
- in >> serviceName >> serviceAdress >> localServicePort
- >> listeningServicePort >> groups;
+ /* Read in from the data stream */
+ in >> serviceName >> serviceAdress >> localServicePort
+ >> listeningServicePort >> version >> groups;
- /* Set the appropriate class member variables */
- myObj.setServiceName(serviceName);
- myObj.setServiceAdress(serviceAdress);
- myObj.setLocalServicePort(localServicePort);
- myObj.setListeningServicePort(listeningServicePort);
- myObj.setGroups(groups);
+ /* Set the appropriate class member variables */
+ myObj.setServiceName(serviceName);
+ myObj.setServiceAdress(serviceAdress);
+ myObj.setLocalServicePort(localServicePort);
+ myObj.setListeningServicePort(listeningServicePort);
+ myObj.setGroups(groups);
+ myObj.setAuthenticationVersion(myObj.getAuthenticationVersion(version));
+ myObj.setDeployed(false);
- /* Return the updated data stream */
- return in;
+ /* Return the updated data stream */
+ return in;
}
+
Modified: branches/hidden-services/src/entity/service.h
===================================================================
--- branches/hidden-services/src/entity/service.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/service.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,13 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file service.h
- * \version $Id: service.h 1563 2007-09-26 06:06:04Z klimabork $
- * \brief Service Entity File
- */
-
-
#ifndef SERVICE_H_
#define SERVICE_H_
@@ -37,11 +31,18 @@
class Service
{
public:
+
+ /** Available Tor authentication methods. */
+ enum AuthenticationVersion {
+ V0,
+ V2,
+ V0V2
+ };
/** Default constructor. */
Service();
/** Constructor to create a new Service with initial settings */
- Service(QString serviceName, QString serviceAdress, QString localServicePort, QString listeningServicePort);
+ Service(QString serviceName, QString serviceAdress, QString localServicePort, QString listeningServicePort, AuthenticationVersion version);
/** Destructor */
virtual ~Service();
@@ -81,7 +82,12 @@
/** Sets the deployed status a service */
void setDeployed(bool deployed);
-
+
+ /** Returns the string description of the authentication method specified by
+ * <b>method</b>. The authentication method string is stored in Vidalia's
+ * configuration file. */
+ QString toString(AuthenticationVersion version) const;
+
/** Compares this service with another and return true if they are the same */
bool compareTo(Service other);
@@ -92,6 +98,16 @@
/** Reads service class data in from the QDataStream <b>in</b> and
populates * the <b>myObj</b> object accordingly. */
friend QDataStream& operator>>(QDataStream &in, Service &myObj);
+
+ /** Returns the AuthenticationVersion of the service*/
+ Service::AuthenticationVersion
+ authenticationVersion() const { return _authenticationVersion; }
+
+ /** returns the AthenticationVersion corresponding to the QString */
+ Service::AuthenticationVersion getAuthenticationVersion(QString authenticationVersion);
+
+ /** Sets the given version as AuthenticationVersion of the service */
+ void setAuthenticationVersion(AuthenticationVersion version);
private:
/** The name of the service */
@@ -106,7 +122,11 @@
QList<Group> _groups;
/** The Deployed status of the service */
bool _deployed;
+ /** Tor authentication mechanism */
+ AuthenticationVersion _authenticationVersion;
};
Q_DECLARE_METATYPE(Service);
#endif /*SERIVCE_H_*/
+
+
Modified: branches/hidden-services/src/entity/servicelist.cpp
===================================================================
--- branches/hidden-services/src/entity/servicelist.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/servicelist.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file servicelist.cpp
- * \version $Id: servicelist.cpp 1563 2007-09-26 06:06:04Z klimabork $
- * \brief ServiceList Entity File
- */
-
#include "servicelist.h"
/** Default constructor. */
Modified: branches/hidden-services/src/entity/servicelist.h
===================================================================
--- branches/hidden-services/src/entity/servicelist.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/servicelist.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file servicelist.h
- * \version $Id: servicelist.h 1563 2007-09-26 06:06:04Z klimabork $
- * \brief ServiceList Entity File
- */
-
#ifndef SERVICELIST_H_
#define SERVICELIST_H_
#include <QList>
Modified: branches/hidden-services/src/entity/user.cpp
===================================================================
--- branches/hidden-services/src/entity/user.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/user.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,11 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file user.cpp
- * \version $Id: user.cpp 1563 2007-09-26 06:06:04Z klimabork $
- * \brief User Entity File
- */
#include "user.h"
@@ -51,8 +47,8 @@
}
/** Sets the hiddenserviceAuthentification of a service */
-void User::setAuthentificationPassword(QString authentificationPassword) {
- _hiddenserviceAuthentification = authentificationPassword;
+void User::setAuthenticationPassword(QString authenticationPassword) {
+ _hiddenserviceAuthentication = authenticationPassword;
}
/** Sets the publicKey of a service */
@@ -64,7 +60,6 @@
/** Compares this user with another one and returns true if they are the same */
bool User::compareTo(User other) {
bool result = false;
- ;
if (_userName == other._userName) {
result = true;
} else {
@@ -77,9 +72,9 @@
* <b>out</b>. */
QDataStream&operator<<(QDataStream &out, const User &myObj) {
out << myObj.userName(); /* Write the QString username */
- out << myObj.introductionPassword(); /* Write the QString password for the introduction point */
- out << myObj.authentificationPassword(); /* Write the QString password for authetification */
- out << myObj.publicKey(); /* Write the QString publicKey */
+ out << myObj.introductionPassword(); /* Write the QString password */
+ out << myObj.authenticationPassword();
+ out << myObj.publicKey();
return out;
}
@@ -88,20 +83,20 @@
QDataStream&operator>>(QDataStream &in, User &myObj) {
QString username;
QString introductionPassword;
- QString authentificationPassword;
+ QString authenticationPassword;
QString publicKey;
/* Read in from the data stream */
- in >> username >> introductionPassword >> authentificationPassword >> publicKey;
+ in >> username >> introductionPassword >> authenticationPassword >> publicKey;
/* Set the appropriate class member variables */
myObj.setUserName(username);
myObj.setIntroductionPassword(introductionPassword);
- myObj.setAuthentificationPassword(authentificationPassword);
+ myObj.setAuthenticationPassword(authenticationPassword);
myObj.setPublicKey(publicKey);
-
/* Return the updated data stream */
return in;
}
+
Modified: branches/hidden-services/src/entity/user.h
===================================================================
--- branches/hidden-services/src/entity/user.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/entity/user.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -19,12 +20,6 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
-/**
- * \file user.h
- * \version $Id: user.h 1563 2007-09-26 06:06:04Z klimabork $
- * \brief User Entity File
- */
-
#ifndef USER_H_
#define USER_H_
@@ -51,7 +46,7 @@
QString introductionPassword() const { return _introductionPassword; }
/** Returns the hiddenserviceAuthentification of an user */
- QString authentificationPassword() const { return _hiddenserviceAuthentification; }
+ QString authenticationPassword() const { return _hiddenserviceAuthentication; }
/** Returns the publicKey of an user */
QString publicKey() const { return _publicKey; }
@@ -63,7 +58,7 @@
void setIntroductionPassword(QString introductionPassword);
/** Sets the hiddenserviceAuthentification of a service */
- void setAuthentificationPassword(QString authentificationPassword);
+ void setAuthenticationPassword(QString authenticationPassword);
/** Sets the publicKey of a service */
void setPublicKey(QString publicKey);
@@ -73,11 +68,10 @@
/** Writes user class data from <b>myObj</b> to the QDataStream
* <b>out</b>. */
-
friend QDataStream& operator<<(QDataStream &out, const User &myObj);
+
/** Reads user class data in from the QDataStream <b>in</b> and
populates * the <b>myObj</b> object accordingly. */
-
friend QDataStream& operator>>(QDataStream &in, User &myObj);
@@ -88,7 +82,7 @@
/** The introductionPoint password */
QString _introductionPassword;
/** The hiddenserviceAuthentificationPassword */
-QString _hiddenserviceAuthentification;
+QString _hiddenserviceAuthentication;
/** The publicKey */
QString _publicKey;
@@ -96,3 +90,5 @@
Q_DECLARE_METATYPE(User);
#endif /*User_H_*/
+
+
Added: branches/hidden-services/src/gui/config/adduserdialog.cpp
===================================================================
--- branches/hidden-services/src/gui/config/adduserdialog.cpp (rev 0)
+++ branches/hidden-services/src/gui/config/adduserdialog.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,68 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+#include "adduserdialog.h"
+
+
+
+Adduserdialog::Adduserdialog(QWidget *parent) :
+ QDialog(parent)
+{
+ setupUi(this);
+}
+
+Adduserdialog::~Adduserdialog()
+{
+}
+
+
+void
+Adduserdialog::showWindow()
+{
+
+}
+
+void
+Adduserdialog::setUsers(QList<QString> userNames)
+{
+ int i = 0;
+ while(i < userNames.size())
+ {
+ QString temp = userNames.value(i);
+ QListWidgetItem *item = new QListWidgetItem(temp, addUserWidget, 0);
+ item->setText(temp);
+ i++;
+ }
+
+}
+
+QString
+Adduserdialog::selectedUser()
+{
+ QListWidgetItem *currentItem = addUserWidget->currentItem();
+ if(currentItem != NULL) {
+ return currentItem->text();
+ }
+ else {
+ return "";
+ }
+}
Property changes on: branches/hidden-services/src/gui/config/adduserdialog.cpp
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/hidden-services/src/gui/config/adduserdialog.h
===================================================================
--- branches/hidden-services/src/gui/config/adduserdialog.h (rev 0)
+++ branches/hidden-services/src/gui/config/adduserdialog.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,52 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+#ifndef ADDUSERDIALOG_H_
+#define ADDUSERDIALOG_H_
+
+#include "ui_adduserdialog.h"
+#include "hiddenservicepage.h"
+
+class Adduserdialog : public QDialog, Ui_Adduserdialog
+{
+public:
+ /** Konstruktor */
+ Adduserdialog(QWidget *parent = 0);
+ /** Destruktor */
+ virtual ~Adduserdialog();
+
+public slots:
+
+ /** Overriden VidaliaWindow::showWindow() */
+ void showWindow();
+
+ QString selectedUser();
+
+ void setUsers(QList<QString> userNames);
+
+private:
+
+ /** Qt Designer generated QObject **/
+ Ui::Adduserdialog ui;
+};
+
+#endif /*ADDUSERDIALOG_H_*/
Property changes on: branches/hidden-services/src/gui/config/adduserdialog.h
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/hidden-services/src/gui/config/adduserdialog.ui
===================================================================
--- branches/hidden-services/src/gui/config/adduserdialog.ui (rev 0)
+++ branches/hidden-services/src/gui/config/adduserdialog.ui 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,1569 @@
+<ui version="4.0" >
+ <class>Adduserdialog</class>
+ <widget class="QDialog" name="Adduserdialog" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="windowTitle" >
+ <string>Add User</string>
+ </property>
+ <widget class="QGroupBox" name="groupBox" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>371</width>
+ <height>271</height>
+ </rect>
+ </property>
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="title" >
+ <string>All Users</string>
+ </property>
+ <widget class="QListWidget" name="addUserWidget" >
+ <property name="geometry" >
+ <rect>
+ <x>20</x>
+ <y>30</y>
+ <width>211</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="alternatingRowColors" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QWidget" name="layoutWidget" >
+ <property name="geometry" >
+ <rect>
+ <x>248</x>
+ <y>79</y>
+ <width>91</width>
+ <height>71</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+ <property name="margin" >
+ <number>0</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="okButton" >
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="text" >
+ <string>Ok</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelButton" >
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="text" >
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>okButton</sender>
+ <signal>clicked()</signal>
+ <receiver>Adduserdialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>307</x>
+ <y>111</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>199</x>
+ <y>149</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>Adduserdialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>307</x>
+ <y>161</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>199</x>
+ <y>149</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>addUserWidget</sender>
+ <signal>doubleClicked(QModelIndex)</signal>
+ <receiver>Adduserdialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>135</x>
+ <y>155</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>199</x>
+ <y>149</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Property changes on: branches/hidden-services/src/gui/config/adduserdialog.ui
___________________________________________________________________
Name: svn:executable
+ *
Modified: branches/hidden-services/src/gui/config/config.pri
===================================================================
--- branches/hidden-services/src/gui/config/config.pri 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/config.pri 2007-10-05 15:35:21 UTC (rev 1969)
@@ -1,55 +1,55 @@
-#################################################################
-# $Id$
-#
-# Vidalia is distributed under the following license:
-#
-# Copyright (C) 2006, Matt Edman, Justin Hipple
-#
-# 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 Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#################################################################
-
+# ################################################################
+# $Id$
+# Vidalia is distributed under the following license:
+# Copyright (C) 2006, Matt Edman, Justin Hipple
+# 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 Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+# ################################################################
FORMS += $$PWD/configdialog.ui \
- $$PWD/generalpage.ui \
- $$PWD/serverpage.ui \
- $$PWD/advancedpage.ui \
- $$PWD/appearancepage.ui \
- $$PWD/hiddenservicepage.ui
-
-HEADERS += $$PWD/configdialog.h \
- $$PWD/domainvalidator.h \
- $$PWD/ipvalidator.h \
- $$PWD/portvalidator.h \
- $$PWD/nicknamevalidator.h \
- $$PWD/configpage.h \
- $$PWD/configpagestack.h \
- $$PWD/generalpage.h \
- $$PWD/serverpage.h \
- $$PWD/advancedpage.h \
- $$PWD/appearancepage.h \
- $$PWD/hiddenservicepage.h
-
-SOURCES += $$PWD/configdialog.cpp \
- $$PWD/domainvalidator.cpp \
- $$PWD/ipvalidator.cpp \
- $$PWD/portvalidator.cpp \
- $$PWD/nicknamevalidator.cpp \
- $$PWD/configpagestack.cpp \
- $$PWD/generalpage.cpp \
- $$PWD/serverpage.cpp \
- $$PWD/advancedpage.cpp \
- $$PWD/appearancepage.cpp \
- $$PWD/hiddenservicepage.cpp
-
+ $$PWD/generalpage.ui \
+ $$PWD/serverpage.ui \
+ $$PWD/advancedpage.ui \
+ $$PWD/appearancepage.ui \
+ $$PWD/hiddenservicepage.ui \
+ $$PWD/groupdialog.ui \
+ $$PWD/userdialog.ui \
+ $$PWD/adduserdialog.ui
+HEADERS += $$PWD/adduserdialog.h \
+ $$PWD/hiddenservicepage.h \
+ $$PWD/configdialog.h \
+ $$PWD/domainvalidator.h \
+ $$PWD/ipvalidator.h \
+ $$PWD/portvalidator.h \
+ $$PWD/nicknamevalidator.h \
+ $$PWD/configpage.h \
+ $$PWD/configpagestack.h \
+ $$PWD/generalpage.h \
+ $$PWD/serverpage.h \
+ $$PWD/advancedpage.h \
+ $$PWD/appearancepage.h \
+ $$PWD/groupdialog.h \
+ $$PWD/userdialog.h
+SOURCES += $$PWD/adduserdialog.cpp \
+ $$PWD/hiddenservicepage.cpp \
+ $$PWD/configdialog.cpp \
+ $$PWD/domainvalidator.cpp \
+ $$PWD/ipvalidator.cpp \
+ $$PWD/portvalidator.cpp \
+ $$PWD/nicknamevalidator.cpp \
+ $$PWD/configpagestack.cpp \
+ $$PWD/generalpage.cpp \
+ $$PWD/serverpage.cpp \
+ $$PWD/advancedpage.cpp \
+ $$PWD/appearancepage.cpp \
+ $$PWD/groupdialog.cpp \
+ $$PWD/userdialog.cpp
Modified: branches/hidden-services/src/gui/config/configdialog.cpp
===================================================================
--- branches/hidden-services/src/gui/config/configdialog.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/configdialog.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -38,7 +39,7 @@
#define IMAGE_SAVE ":/images/22x22/media-floppy.png"
#define IMAGE_CANCEL ":/images/22x22/emblem-unreadable.png"
#define IMAGE_HELP ":/images/22x22/help-browser.png"
-#define IMAGE_SERVICE ":/images/22x22/hidden-service.png"
+#define IMAGE_SERVICE ":/images/22x22/hidden-service.png"
/** Constructor */
ConfigDialog::ConfigDialog(QWidget* parent)
@@ -58,14 +59,16 @@
createPageAction(QIcon(IMAGE_SERVER), tr("Server"), grp));
ui.stackPages->add(new AppearancePage(ui.stackPages),
- createPageAction(QIcon(IMAGE_APPEARANCE), tr("Appearance"), grp));
+ createPageAction(QIcon(IMAGE_APPEARANCE), tr("Appearance"), grp));
ui.stackPages->add(new AdvancedPage(ui.stackPages),
createPageAction(QIcon(IMAGE_ADVANCED), tr("Advanced"), grp));
+
+ui.stackPages->add(new HiddenservicePage(ui.stackPages),
+ createPageAction(QIcon(IMAGE_SERVICE), tr("Hidden Services"), grp));
+
+
- ui.stackPages->add(new HiddenservicePage(ui.stackPages),
- createPageAction(QIcon(IMAGE_SERVICE), tr("Hidden Service"), grp));
-
/* Create the toolbar */
ui.toolBar->addActions(grp->actions());
ui.toolBar->addSeparator();
Modified: branches/hidden-services/src/gui/config/configdialog.h
===================================================================
--- branches/hidden-services/src/gui/config/configdialog.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/configdialog.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -2,6 +2,7 @@
* Vidalia is distributed under the following license:
*
* Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
Added: branches/hidden-services/src/gui/config/groupdialog.cpp
===================================================================
--- branches/hidden-services/src/gui/config/groupdialog.cpp (rev 0)
+++ branches/hidden-services/src/gui/config/groupdialog.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,82 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+/**
+ * \file groupdialog.cpp
+ * \version $Id: aboutdialog.cpp 1563 2006-12-26 06:06:04Z klimabork $
+ * \brief Displays information about Vidalia, Tor, and Qt
+ */
+
+#include "groupdialog.h"
+
+/** Default Constructor **/
+Groupdialog::Groupdialog(QWidget *parent) :
+ QDialog(parent)
+
+{
+ setupUi(this);
+ groupnameline->setText("");
+ groupnameline->setFocus();
+}
+
+void
+Groupdialog::showWindow()
+{
+}
+
+QString
+Groupdialog::groupName()
+{
+ return groupnameline->text();
+}
+
+void
+Groupdialog::setGroupName(QString name)
+{
+ groupnameline->setText(name);
+}
+
+QString
+Groupdialog::secretCookie()
+{
+ return cookiekeyline->text();
+}
+
+void
+Groupdialog::setSecretCookie(QString secretCookie)
+{
+ cookiekeyline->setText(secretCookie);
+}
+
+QString
+Groupdialog::secretCookieConfirmation()
+{
+ return confirmationline->text();
+}
+
+void
+Groupdialog::setSecretCookieConfirmation(QString secretCookieConfirmation)
+{
+ confirmationline->setText(secretCookieConfirmation);
+}
+
+
Property changes on: branches/hidden-services/src/gui/config/groupdialog.cpp
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/hidden-services/src/gui/config/groupdialog.h
===================================================================
--- branches/hidden-services/src/gui/config/groupdialog.h (rev 0)
+++ branches/hidden-services/src/gui/config/groupdialog.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,67 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+/**
+ * \file aboutdialog.h
+ * \version $Id: aboutdialog.h 1563 2006-12-26 06:06:04Z edmanm $
+ * \brief Displays information about Vidalia, Tor, and Qt
+ */
+#ifndef GROUPDIALOG_H_
+#define GROUPDIALOG_H_
+
+
+#include "ui_groupdialog.h"
+#include "hiddenservicepage.h"
+
+
+class Groupdialog : public QDialog, Ui_Groupdialog
+{
+
+
+public:
+ /** Default constructor **/
+ Groupdialog(QWidget *parent = 0);
+
+public slots:
+ /** Overriden VidaliaWindow::showWindow() */
+ void showWindow();
+ QString groupName();
+ void setGroupName(QString);
+ QString secretCookie();
+ void setSecretCookie(QString secretCookie);
+ QString secretCookieConfirmation();
+ void setSecretCookieConfirmation(QString secretCookieConfirmation);
+
+
+private:
+
+ /** Qt Designer generated QObject **/
+ Ui::Groupdialog ui;
+
+
+};
+
+#endif
+
+
+
+
Property changes on: branches/hidden-services/src/gui/config/groupdialog.h
___________________________________________________________________
Name: svn:executable
+ *
Modified: branches/hidden-services/src/gui/config/hiddenservicepage.cpp
===================================================================
--- branches/hidden-services/src/gui/config/hiddenservicepage.cpp 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/hiddenservicepage.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -1,70 +1,1004 @@
-/****************************************************************
- * Vidalia is distributed under the following license:
- *
- * Copyright (C) 2006, Matt Edman, Justin Hipple
- *
- * 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 Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- ****************************************************************/
-
-/**
- * \file hiddenservicepage.cpp
- * \version $Id: hiddenservicepage.cpp 1563 2007-09-26 06:06:04Z klimabork $
- * \brief Hidden service configuration options
- */
-
-#include <qlistview.h>
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+#include <vidalia.h>
+#include <qlistview.h>
+#include <qdir.h>
#include <qheaderview.h>
-#include <gui/common/vmessagebox.h>
-#include "hiddenservicepage.h"
-#include "entity/service.h"
-#include "entity/servicelist.h"
-#include "entity/user.h"
-#include "entity/group.h"
+#include <QTextStream>
+#include <qfileinfo.h>
+#include "util/file.h"
+#include <gui/common/vmessagebox.h>
+#include "hiddenservicepage.h"
+#include "groupdialog.h"
+#include "userdialog.h"
+#include "adduserdialog.h"
+
+using namespace std;
+
+/** Constructor */
+HiddenservicePage::HiddenservicePage(QWidget *parent) :
+ ConfigPage(parent) {
+ /* Keep a pointer to the TorControl object used to talk to Tor */
+ _torControl = Vidalia::torControl();
+ /* Create ServerSettings object */
+ _settings = new ServerSettings(_torControl);
+ _parent = parent;
+ /* Invoke the Qt Designer generated object setup routine */
+ ui.setupUi(this);
+ /* Create settings objects */
+ _torSettings = new TorSettings;
+ _hiddenServiceSettings = new HiddenServiceSettings(_torControl);
+ /* Accept valid port numbers only */
+ ui.localPortLine->setValidator(new QIntValidator(1, 65535, this));
+ /* Accept valid port numbers only */
+ ui.listeningPortLine->setValidator(new QIntValidator(1, 65535, this));
+ /* Connect the gui events with the local methods */
+ connect(ui.addServiceButton, SIGNAL(clicked()), this,
+ SLOT(addHiddenService()));
+ connect(ui.deleteServiceButton, SIGNAL(clicked()), this,
+ SLOT(deleteHiddenService()));
+ connect(ui.publishServiceButton, SIGNAL(clicked()), this,
+ SLOT(publishButtonClicked()));
+ connect(ui.deleteUserButton, SIGNAL(clicked()), this, SLOT(deleteUser()));
+ connect(ui.createUserButton, SIGNAL(clicked()), this, SLOT(createUser()));
+ connect(ui.modifyUserButton, SIGNAL(clicked()), this, SLOT(modifyUser()));
+ connect(ui.addUserButton, SIGNAL(clicked()), this, SLOT(addUser()));
+ connect(ui.deleteGroupButton, SIGNAL(clicked()), this, SLOT(deleteGroup()));
+ connect(ui.createGroupButton, SIGNAL(clicked()), this, SLOT(createGroup()));
+ connect(ui.modifyGroupButton, SIGNAL(clicked()), this, SLOT(modifyGroup()));
+ connect(ui.groupListView, SIGNAL(itemDoubleClicked(QTableWidgetItem*)),
+ this, SLOT(modifyGroup()));
+ connect(ui.userManagementView, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
+ this, SLOT(modifyUser()));
+ connect(ui.serviceListView, SIGNAL(itemClicked(QTableWidgetItem*)), this,
+ SLOT(serviceSelectionChanged()));
+ connect(ui.groupListView, SIGNAL(itemClicked(QTableWidgetItem*)), this,
+ SLOT(groupSelectionChanged()));
+ connect(ui.userManagementView, SIGNAL(itemClicked(QListWidgetItem*)), this,
+ SLOT(userSelectionChanged(QListWidgetItem*)));
+ /* A QTableWidget object representing the table of services in Vidalia*/
+ _serviceWidget = ui.serviceListView;
+ /* A QTableWidget object representing the table of groups in Vidalia */
+ _groupWidget = ui.groupListView;
+ /* A QListWidget object representing the list of users in Vidalia*/
+ _userWidget = ui.userManagementView;
+ /* A QMap, mapping from QString groupname to the Entity group */
+ _groups = new QMap<QString, Group>();
+ /* A QMap, mapping from QString username to the Entity user */
+ _users = new QMap<QString, User>();
+ /* A QMap, mapping from QString servicename to the Entity service */
+ _services = new QMap<QString, Service>();
+ /* strech the horizontal header of the service table */
+ _serviceWidget->horizontalHeader()->setStretchLastSection(true);
+ /* strech the horizontal header of the group table */
+ _groupWidget->horizontalHeader()->setStretchLastSection(true);
+ /*a boolean that shows whether the installed Tor version supports V2 or not*/
+ _v2Support = supportV2();
+}
+
+/** Destructor */
+HiddenservicePage::~HiddenservicePage() {
+ delete _hiddenServiceSettings;
+ delete _torSettings;
+}
+
+/** Saves all settings for this page */
+bool HiddenservicePage::save(QString &errmsg) {
+ errmsg = tr("Problems while trying to store data.");
+ QList<Service> serviceList = _services->values();
+ ServiceList sList;
+ sList.setServices(serviceList);
+ _hiddenServiceSettings->setServices(sList);
+ while(_groupWidget->currentRow() >= 0) {
+ _groupWidget->removeRow(0);
+ }
+ _userWidget->clear();
+ _selectedService.clear();
+ _selectedGroup.clear();
+ _selectedUser.clear();
+ _services->clear();
+ return true;
+}
+
+/** Adds a new hidden service to the list of known services */
+void HiddenservicePage::addHiddenService() {
+ /* read the data fields */
+ QHostAddress serviceAddress(ui.serviceAdressLine->text());
+ QString serviceName(ui.serviceNameLine->text());
+ QString localPort(ui.localPortLine->text());
+ QString listenPort(ui.listeningPortLine->text());
+ // only if all values are set
+ if (serviceAddress.isNull() || serviceName.isEmpty() ||
+ localPort.isEmpty() || listenPort.isEmpty() ) {
+ VMessageBox::warning(this, tr("Error"), tr("Please set all fields."),
+ VMessageBox::Ok);
+ } else {
+ if(_services->keys().contains(serviceName) == false) {
+ int rows = ui.serviceListView->rowCount();
+ ui.serviceListView->insertRow(rows);
+ QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(serviceName);
+ ui.serviceListView->setItem(rows, 1, cubesHeaderItem);
+ QTableWidgetItem *cboxitem = new QTableWidgetItem();
+ cboxitem->setFlags(Qt::ItemIsSelectable);
+ cboxitem->setCheckState(Qt::Unchecked);
+ cboxitem->setTextAlignment(Qt::AlignCenter);
+ ui.serviceListView->setItem(rows, 0, cboxitem);
+ //Saved checkbox states
+ Service::AuthenticationVersion version = Service::V0;
+ if (ui.rbV2->isChecked() == true)
+ {
+ version = Service::V2;
+ }
+ else if (ui.rbV0V2->isChecked() == true)
+ {
+ version = Service::V0V2;
+ }
+ Service newService(serviceName, serviceAddress.toString(), localPort,
+ listenPort, version);
+ _services->insert(serviceName, newService);
+ initDataStructures();
+ } else {
+ VMessageBox::warning(this,tr("Error"),
+ tr("Service name already in use, select a different one."), VMessageBox::Ok);
+ }
+ }
+}
+
+
+/** Deletes selected hidden services */
+void HiddenservicePage::deleteHiddenService() {
+ while(_groupWidget->currentRow() >= 0) {
+ _groupWidget->removeRow(0);
+ }
+ ui.serviceNameLine->clear();
+ ui.listeningPortLine->clear();
+ _selectedGroup.clear();
+ _userWidget->clear();
+ _serviceWidget->removeRow(_serviceWidget->currentRow());
+ _services->remove(_selectedService);
+ _selectedService.clear();
+ initDataStructures();
+ showServices();
+ showGroups();
+}
+
+/** Loads previously saved settings */
+void HiddenservicePage::load() {
+ ui.serviceAdressLine->setText(_hiddenServiceSettings->getServiceAddress().
+ toString());
+ ui.localPortLine->setText(QString::number(
+ _hiddenServiceSettings->getLocalServicePort()));
+ ServiceList serviceList = _hiddenServiceSettings->getServices();
+ QList<Service> services = serviceList.services();
+ QListIterator<Service> i(services);
+ while (i.hasNext()) {
+ Service tempService = i.next();
+ _services->insert(tempService.serviceName(), tempService);
+ }
+ checkPublishedServices();
+ initDataStructures();
+ showServices();
+}
+
+/** this method is called whenever the publish/unpublish button is clicked */
+void HiddenservicePage::publishButtonClicked() {
+ /* only publish if services are available */
+ if (_serviceWidget->rowCount() != 0) {
+ /* set Service objects and GUI checkboxes */
+ int f = _serviceWidget->currentRow();
+ QTableWidgetItem* widgetName = _serviceWidget->item(f,1);
+ QTableWidgetItem* widgetChecked = _serviceWidget->item(f,0);
+ QString serviceName = widgetName->text();
+ Service service;
+ service = _services->take(serviceName);
+ if (service.deployed() == false){
+ service.setDeployed(true);
+ widgetChecked->setCheckState(Qt::Checked);
+ }
+ else{
+ service.setDeployed(false);
+ widgetChecked->setCheckState(Qt::Unchecked);
+ }
+ _services->insert(serviceName, service);
+ /* get QList of checked services only */
+ QList<Service> allServices = _services->values();
+ QList<Service> checkedServices;
+ foreach (Service service, allServices) {
+ if(service.deployed() == true){
+ checkedServices.append(service);
+ }
+ }
+ /*reset hiddenServiceSettings configuration if all services are unpublished*/
+ if (checkedServices.size()== 0){
+ QString errmsg1 = tr("Error while trying to unpublish hidden service.");
+ QString &errmsg = errmsg1;
+ _hiddenServiceSettings->unpublishAllServices(&errmsg);
+ return;
+ }
+ /* communicate with Tor controller to publish checked services */
+ QString hiddenServiceConf;
+ QList<Service>::iterator i;
+ for (i = checkedServices.begin(); i != checkedServices.end(); ++i) {
+ if((i->authenticationVersion() == Service::V0V2 ||
+ i->authenticationVersion() == Service::V2) && _v2Support == false)
+ {
+ VMessageBox::information(this, tr("Old Tor Version"),
+ tr("Your Version of Tor does not support V2 and V0V2 support."),
+ VMessageBox::Ok);
+ }
+ if (i != checkedServices.begin()){
+ hiddenServiceConf.append("HiddenServiceDir=\" ");
+ }
+ QString serviceName = i->serviceName();
+ QString localServicePort = i->localServicePort();
+ QString listeningServicePort = i->listeningServicePort();
+ QString serviceAdress = i->serviceAdress();
+ QString authenticationVersion = i->toString(i->authenticationVersion());
+ QString dataDirectory;
+ dataDirectory = Vidalia::dataDirectory();
+ dataDirectory.append("/");
+ dataDirectory.append( serviceName);
+ hiddenServiceConf.append(dataDirectory + "\" ");
+ hiddenServiceConf.append("HiddenServicePort=\"" + listeningServicePort
+ + " " + serviceAdress + ":" + localServicePort);
+ //Check for v2 Support
+ if(_v2Support == true){
+ hiddenServiceConf.append(" HiddenServiceVersion=\""
+ + authenticationVersion);
+ }
+ if (i+1 != checkedServices.end()){
+ hiddenServiceConf.append("\" ");
+ }
+ hiddenServiceConf.replace(QString("\\"), QString("/"));
+
+ }
+ VMessageBox::warning(this, tr("Error"),hiddenServiceConf ,
+ VMessageBox::Ok);
+ QString errmsg1 = tr("Error while trying to publish hidden service.");
+ QString &errmsg = errmsg1;
+ _hiddenServiceSettings->apply(hiddenServiceConf, &errmsg);
+ createUserFile();
+ }
+}
+
+/** this method decides whether the local Tor version can work with V2 or not*/
+bool HiddenservicePage::supportV2(){
+ QString version = _hiddenServiceSettings->getTorVersion();
+ //Second number has to be higher than 2 => support for V2
+ QString versionNumber = version.section('.', 2, 2);
+ if (versionNumber.toInt() > 2){
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/** create the authtentication data file needed by V2 services */
+void HiddenservicePage::createUserFile() {
+ /* get all services */
+ QList<Service> servicelist = _services->values();
+ /* get checked services only */
+ QList<Service> checkedServices;
+ foreach (Service service, servicelist) {
+ if(service.deployed() == true) {
+ checkedServices.append(service);
+ }
+ }
+ /* write files for checked services */
+ QListIterator<Service> i(checkedServices);
+ while (i.hasNext()) {
+ /* for each checked service */
+ Service tempService;
+ tempService = i.next();
+ QList<Group> groups;
+ groups = tempService.groups();
+ /* only checked groups */
+ QList<Group> checkedGroups;
+ foreach (Group group, groups) {
+ if(group.isDeployed() == true){
+ checkedGroups.append(group);
+ }
+ }
+ /* only if there are groups write a group file */
+ if (checkedGroups.size() >0){
+ /* get Data Directory path to write User Files */
+ QString dataDirectory;
+ dataDirectory = Vidalia::dataDirectory();
+ dataDirectory.append("/");
+ dataDirectory.append(tempService.serviceName());
+ dataDirectory.append("/");
+ dataDirectory.append("authdata");
+ touch_file(dataDirectory, true, new QString);
+ QFile file(dataDirectory);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
+ return;
+ QTextStream out(&file);
+ /* for all groups */
+ QListIterator<Group> i2(checkedGroups);
+ while (i2.hasNext()) {
+ /* for each group */
+ Group tempGroup;
+ tempGroup = i2.next();
+ out << "SecretCookieName " << tempGroup.groupName() << "\n";
+ out << "SecretCookieKey " << tempGroup.cookieKey() << "\n";
+ /* for all users; */
+ QList<User> users;
+ users = tempGroup.groupMembers();
+ QListIterator<User> i3(users);
+ while (i3.hasNext()) {
+ User tempUser;
+ tempUser = i3.next();
+ /* write in file */
+ out << "User " << tempUser.userName() << "\n";
+ out << "IntroductionPointAuthentication ";
+ out << tempUser.introductionPassword() << "\n";
+ out << "HiddenServiceAuthentication ";
+ out << tempUser.authenticationPassword() << "\n";
+ out << "-----BEGIN RSA PUBLIC KEY----- " << "\n";
+ out << tempUser.publicKey() << "\n";
+ out << "-----END RSA PUBLIC KEY----- " << "\n";
+ }
+ }
+ }
+ }
+}
-using namespace std;
+/** Search for Services which are deployed */
+void HiddenservicePage::checkPublishedServices() {
+ QString directory;
+ directory = _torSettings->getTorrc();
+ QFile file(directory);
+ if (!file.open(QIODevice::ReadOnly
+ | QIODevice::Text))
+ return;
+ QTextStream in(&file);
+ while (!in.atEnd()) {
+ QString line = in.readLine();
+ if (line.contains("HiddenServiceDir")) {
+ line.remove("HiddenServiceDir");
+ QStringList sList;
+ sList = line.split("/");
+ if (sList.size() != 0) {
+ QList<Service>
+ serviceList = _services->values();
+ for (int i=0; i<serviceList.size(); ++i) {
+ Service service = serviceList.value(i);
+ if (service.serviceName() == sList.at(sList.size()-1)) {
+ service.setDeployed(true);
+ _services->insert(
+ service.serviceName(),
+ service);
+ }
-/** Constructor */
-HiddenservicePage::HiddenservicePage(QWidget *parent) :
- ConfigPage(parent) {
- _parent = parent;
- /* Invoke the Qt Designer generated object setup routine */
- ui.setupUi(this);
- /* Accept valid port numbers only */
- ui.localPortLine->setValidator(new QIntValidator(1, 65535, this));
- ui.listeningPortLine->setValidator(new QIntValidator(1, 65535, this));
- /* Layout ServiceListView */
- ui.serviceListView->horizontalHeader()->setStretchLastSection(true);
+ }
+ }
+ }
+ }
- _serviceWidget = ui.serviceListView;
- _groupWidget = ui.groupManagementView;
- _userWidget = ui.userManagementView;
+}
+
+/** craete the data structures needed during runtime */
+void HiddenservicePage::initDataStructures() {
+ _groups->clear();
+ _users->clear();
+ int index = 0;
+ QList<Service> serviceList = _services->values();
+ while (index < serviceList.size()) {
+ /* for each service */
+ Service tempService;
+ tempService = serviceList.value(index);
+ QList<Group> groups;
+ groups = tempService.groups();
+ QListIterator<Group> i2(groups);
+ while (i2.hasNext()) {
+ /* for each group */
+ Group tempGroup;
+ tempGroup = i2.next();
+ _groups->insert(tempGroup.groupName(), tempGroup);
+ QList<User> users;
+ users = tempGroup.groupMembers();
+ QListIterator<User> i3(users);
+ while (i3.hasNext()) {
+ /* for each user */
+ User tempUser = i3.next();
+ if (_users->keys().contains(tempUser.userName()) == false) {
+ /* if the map does not contain the username yet */
+ _users->insert(tempUser.userName(), tempUser);
+ }
+ }
+ }
+ index++;
+ }
+}
+
+/** display all services in the service widget */
+void HiddenservicePage::showServices() {
+ QList<QString> keys;
+ QList<Service> serviceList = _services->values();
+ QListIterator<Service> i(serviceList);
+ int currentRow = 0;
+ while (i.hasNext()) {
+ Service service = i.next();
+ if(currentRow >= _serviceWidget->rowCount()) {
+ _serviceWidget->insertRow(currentRow);
+ }
+ QTableWidgetItem *cubesHeaderItem = new
+ QTableWidgetItem(service.serviceName());
+ _serviceWidget->setItem(currentRow, 1, cubesHeaderItem);
+ QTableWidgetItem *cboxitem = new QTableWidgetItem();
+ cboxitem->setFlags(Qt::ItemIsSelectable);
+ /* default value */
+ cboxitem->setCheckState(Qt::Unchecked);
+ if(service.deployed() == true) {
+ cboxitem->setCheckState(Qt::Checked);
+ }
+ cboxitem->setTextAlignment(Qt::AlignCenter);
+ _serviceWidget->setItem(currentRow, 0, cboxitem);
+ currentRow++;
+ }
}
-/** Destructor */
-HiddenservicePage::~HiddenservicePage() {
-
+/** this method is called when the user selects a different service */
+void HiddenservicePage::serviceSelectionChanged() {
+ int currentRow = _serviceWidget->currentRow();
+ QTableWidgetItem* widget = _serviceWidget->item(currentRow, 1);
+ _selectedService = widget->text();
+ showGroups();
}
+
+/** this method is called when the user selects a different group */
+void HiddenservicePage::groupSelectionChanged() {
+ int currentRow = _groupWidget->currentRow();
+ QTableWidgetItem* widget = _groupWidget->item(currentRow, 1);
+ _selectedGroup = widget->text();
+ QTableWidgetItem* widgetChecked = _groupWidget->item(currentRow,0);
+ Service s = _services->value(_selectedService);
+ QList<Group> groups = s.groups();
+ Group g;
+ int index = 0;
+ while(index < groups.size()) {
+ Group tempGroup = groups.value(index);
+ int comp = tempGroup.groupName().compare(_selectedGroup);
+ if(comp == 0) {
+ g = groups.takeAt(index);
+ }
+ index++;
+ }
+ bool state = false;
+ if(widgetChecked->checkState() == Qt::Checked) {
+ state = true;
+ } else {
+ }
+ g.setIsDeployed(state);
+ groups.append(g);
+ s.setGroups(groups);
+ _services->insert(_selectedService, s);
+ initDataStructures();
+ showUsers();
+}
+
+/** this method is called when the user selects a different user */
+void HiddenservicePage::userSelectionChanged(QListWidgetItem* current) {
+ _selectedUser = current->text();
+}
-/** Saves all settings for this page */
-bool HiddenservicePage::save(QString &errmsg) {
- return true;
-}
-
-/** Loads previously saved settings */
-void HiddenservicePage::load() {
-
-}
-
+/** display all groups in the group widget */
+void HiddenservicePage::showGroups() {
+ while(_groupWidget->rowCount() >= 1) {
+ _groupWidget->removeRow(0);
+ }
+ _selectedGroup.clear();
+ _userWidget->clear();
+ if(_services->count() != 0) {
+ Service s;
+ s = _services->value(_selectedService);
+ ui.serviceAdressLine->setText(s.serviceAdress());
+ ui.localPortLine->setText(s.localServicePort());
+ ui.serviceNameLine->setText(s.serviceName());
+ ui.listeningPortLine->setText(s.listeningServicePort());
+ /* update checkbox view */
+ if (s.authenticationVersion() == Service::V0) {
+ ui.rbV0->setChecked(true);
+ } else if (s.authenticationVersion() == Service::V2) {
+ ui.rbV2->setChecked(true);
+ } else if (s.authenticationVersion() == Service::V0V2) {
+ ui.rbV0V2->setChecked(true);
+ }
+ QList<Group> groups = s.groups();
+ QListIterator<Group> i(groups);
+ while (i.hasNext()) {
+ Group tempGroup = i.next();
+ int rows = _groupWidget->rowCount();
+ _groupWidget->insertRow(rows);
+ QTableWidgetItem *cubesHeaderItem = new
+ QTableWidgetItem(tempGroup.groupName());
+ _groupWidget->setItem(rows, 1, cubesHeaderItem);
+ QTableWidgetItem *cboxitem = new QTableWidgetItem( tr(""));
+ if(tempGroup.isDeployed() == false) {
+ cboxitem->setCheckState(Qt::Unchecked);
+ } else {
+ cboxitem->setCheckState(Qt::Checked);
+ }
+ cboxitem->setTextAlignment(Qt::AlignCenter);
+ _groupWidget->setItem(rows, 0, cboxitem);
+ }
+ }
+}
+
+/** display all users in the user widget */
+void HiddenservicePage::showUsers() {
+ _userWidget->clear();
+ _selectedUser.clear();
+ Group g;
+ Service s;
+ s = _services->value(_selectedService);
+ QList<Group> groups = s.groups();
+ QListIterator<Group> i(groups);
+ while (i.hasNext()) {
+ Group tempGroup = i.next();
+ QString tempString = tempGroup.groupName();
+ int comp = _selectedGroup.compare(tempString);
+ if (comp == 0) {
+ QList<User> users;
+ users = tempGroup.groupMembers();
+ QListIterator<User> i2(users);
+ while (i2.hasNext()) {
+ User tempUser;
+ tempUser = i2.next();
+ _userWidget->addItem(new QListWidgetItem(tempUser.userName(),
+ _userWidget, 0));
+ }
+ }
+ }
+}
+
+/** Adds a already known user to the selected Group */
+void HiddenservicePage::addUser() {
+ if ((_selectedService.isEmpty() == false &&
+ _selectedGroup.isEmpty()== false)) {
+ Service selectedService = _services->value(_selectedService);
+ QList<Group> groups = selectedService.groups();
+ Group selectedGroup;
+ int groupIndex = 0;
+ QList<QString> selectableUsers = _users->keys();
+ /* the selected service, delete all users from the selectableUsers */
+ int index = 0;
+ while(index < groups.size()) {
+ Group tempGroup = groups.value(index);
+ QList<User> tempUsers = tempGroup.groupMembers();
+ int index2 = 0;
+ while(index2 < tempUsers.size()) {
+ QString tempString = tempUsers.value(index2).userName();
+ if(selectableUsers.contains(tempString) == true) {
+ int pos = selectableUsers.indexOf(tempString, 0);
+ selectableUsers.removeAt(pos);
+ }
+ index2++;
+ }
+ int comp = tempGroup.groupName().compare(_selectedGroup);
+ if(comp == 0) {
+ /* found right group */
+ groupIndex = index;
+ } else {
+ }
+ index++;
+ }
+ Adduserdialog *adduserdialog = new Adduserdialog(this);
+ adduserdialog->setUsers(selectableUsers);
+ adduserdialog->show();
+ QString selectedUser;
+ if (adduserdialog->exec() == QDialog::Accepted) {
+ selectedUser = adduserdialog->selectedUser();
+ delete adduserdialog;
+ if(selectedUser.length() > 0) {
+ selectedGroup = groups.takeAt(groupIndex);
+ User user = _users->value(selectedUser);
+ selectedGroup.addUser(user);
+ groups.push_front(selectedGroup);
+ selectedService.setGroups(groups);
+ _services->insert(_selectedService, selectedService);
+ showUsers();
+ initDataStructures();
+ return;
+ }
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select service and group."), VMessageBox::Ok);
+ }
+}
+
+/** this method creates a new user object */
+void HiddenservicePage::createUser() {
+ if ((_selectedService.isEmpty() == false &&
+ _selectedGroup.isEmpty()== false)) {
+ Userdialog *userdialog = new Userdialog(this);
+ userdialog->show();
+ QString enteredName;
+ QString enteredIntroPassword;
+ QString enteredIntroConfirmation;
+ QString enteredAuthPassword;
+ QString enteredAuthConfirmation;
+ QString enteredPublicKey;
+ if (userdialog->exec() == QDialog::Accepted) {
+ enteredName = userdialog->userName();
+ enteredIntroPassword = userdialog->introductionPassword();
+ enteredAuthPassword = userdialog->authenticationPassword();
+ enteredPublicKey = userdialog->publicKey();
+ enteredIntroConfirmation = userdialog->introductionConfirmation();
+ enteredAuthConfirmation = userdialog->authenticationConfirmation();
+ if (enteredIntroPassword.isEmpty() || enteredName.isEmpty() ||
+ enteredAuthPassword.isEmpty() || enteredPublicKey.isEmpty() ) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please fill out all fields."), VMessageBox::Ok);
+ delete userdialog;
+ createUser();
+ return;
+ } else if(enteredIntroPassword != enteredIntroConfirmation ||
+ enteredAuthPassword != enteredAuthConfirmation) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("No match for passwords and confirmation fields."),
+ VMessageBox::Ok);
+ delete userdialog;
+ createUser();
+ return;
+ }
+ delete userdialog;
+ bool alreadyExists;
+ QList<QString> userNames;
+ userNames = _users->keys();
+ alreadyExists = userNames.contains(enteredName);
+ if (alreadyExists == false) {
+ User newUser;
+ newUser.setUserName(enteredName);
+ newUser.setIntroductionPassword(enteredIntroPassword);
+ newUser.setAuthenticationPassword(enteredAuthPassword);
+ newUser.setPublicKey(enteredPublicKey);
+ _userWidget->addItem(new QListWidgetItem(enteredName,
+ _userWidget, 0));
+ Service s = _services->value(_selectedService);
+ QList<Group> groups = s.groups();
+ QListIterator<Group> i(groups);
+ int index = 0;
+ while (i.hasNext()) {
+ i.next();
+ Group tempGroup = groups.takeAt(index);
+ QString tempString = tempGroup.groupName();
+ int comp = tempString.compare(_selectedGroup);
+ if (comp == 0) {
+ tempGroup.addUser(newUser);
+ }
+ groups.append(tempGroup);
+ }
+ s.setGroups(groups);
+ _services->insert(_selectedService, s);
+ initDataStructures();
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("The entered user name already exists. Please select a different one."),
+ VMessageBox::Ok);
+ createUser();
+ return;
+ }
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select a service and a group."), VMessageBox::Ok);
+ }
+}
+
+/** delete the selected user */
+void HiddenservicePage::deleteUser() {
+ QList<QListWidgetItem*> userItems = _userWidget->selectedItems();
+ if(userItems.size() > 0) {
+ QListWidgetItem *selectedUser = userItems.front();
+ _selectedUser = selectedUser->text();
+ int index = _userWidget->currentRow();
+ if (_selectedService.isEmpty() == false &&
+ _selectedGroup.isEmpty() == false) {
+ Service s = _services->value(_selectedService);
+ QList<Group> groups = s.groups();
+ int count = 0;
+ while (count < groups.size()) {
+ Group tempGroup = groups.takeAt(count);
+ QString tempString = tempGroup.groupName();
+ int compare = tempString.compare(_selectedGroup);
+ if (compare == 0) {
+ QList<User> users = tempGroup.groupMembers();
+ int pos = 0;
+ while (pos < users.size()) {
+ User tempUser = users.value(pos);
+ QString tempName = tempUser.userName();
+ int comp = tempName.compare(_selectedUser);
+ if (comp == 0) {
+ users.removeAt(pos);
+ _userWidget->takeItem(index);
+ }
+ pos++;
+ }
+ tempGroup.setGroupMembers(users);
+ groups.append(tempGroup);
+ s.setGroups(groups);
+ }
+ _services->insert(_selectedService, s);
+ initDataStructures();
+ _selectedUser.clear();
+ count++;
+ }
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select the user you want to delete."), VMessageBox::Ok);
+ }
+}
+
+/** create a new group */
+void HiddenservicePage::createGroup() {
+ if(_selectedService.isEmpty() == false) {
+ Groupdialog *groupdialog = new Groupdialog(this);
+ groupdialog->show();
+ QString groupName;
+ QString secretCookie;
+ QString secretCookieConfirmation;
+ if (groupdialog->exec() == QDialog::Accepted) {
+ groupName = groupdialog->groupName();
+ secretCookie = groupdialog->secretCookie();
+ secretCookieConfirmation = groupdialog->secretCookieConfirmation();
+ if (groupName.isEmpty() || secretCookie.isEmpty()) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please fill out all fields."), VMessageBox::Ok);
+ delete groupdialog;
+ createGroup();
+ return;
+ }
+ else if (secretCookie != secretCookieConfirmation) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("No match for cookieKey and confirmation field."),
+ VMessageBox::Ok);
+ delete groupdialog;
+ createGroup();
+ return;
+ }
+ delete groupdialog;
+ QList<QString> keys = _groups->keys();
+ if(keys.contains(groupName) == false) {
+ int rows = _groupWidget->rowCount();
+ _groupWidget->insertRow(rows);
+ QTableWidgetItem *cubesHeaderItem = new QTableWidgetItem(groupName);
+ _groupWidget->setItem(rows, 1, cubesHeaderItem);
+ QTableWidgetItem *cboxitem = new QTableWidgetItem();
+ cboxitem->setCheckState(Qt::Unchecked);
+ cboxitem->setTextAlignment(Qt::AlignCenter);
+ _groupWidget->setItem(rows, 0, cboxitem);
+ Group g;
+ g.setGroupName(groupName);
+ g.setCookieKey(secretCookie);
+ g.setIsDeployed(false);
+ Service s = _services->value(_selectedService);
+ QList<Group> gruppen = s.groups();
+ gruppen.append(g);
+ s.setGroups(gruppen);
+ _services->insert(_selectedService, s);
+ initDataStructures();
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Group name already in use, please select a different one."),
+ VMessageBox::Ok);
+ createGroup();
+ }
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select a service associated with the new group."),
+ VMessageBox::Ok);
+ }
+}
+
+/** delete the selected group and the group members */
+void HiddenservicePage::deleteGroup() {
+ if(_selectedService.isEmpty() == false && _selectedGroup.isEmpty() == false){
+ Service s = _services->value(_selectedService);
+ QList<Group> groups = s.groups();
+ QListIterator<Group> i(groups);
+ int index = 0;
+ while (i.hasNext()) {
+ Group g = i.next();
+ QString tempString = g.groupName();
+ int comp = tempString.compare(_selectedGroup);
+ if (comp == 0) {
+ groups.removeAt(index);
+ }
+ index++;
+ }
+ s.setGroups(groups);
+ _groupWidget->removeRow(_groupWidget->currentRow());
+ /* _services->insert(_selectedService, s); */
+ initDataStructures();
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select service and group."),
+ VMessageBox::Ok);
+ }
+}
+
+/** modify the values of the selected group */
+void HiddenservicePage::modifyGroup() {
+ if(_selectedService.isEmpty() == false && _selectedGroup.isEmpty() == false){
+ Group selectedGroup = _groups->value(_selectedGroup);
+ Groupdialog *groupdialog = new Groupdialog(this);
+ groupdialog->setGroupName(_selectedGroup);
+ groupdialog->setSecretCookie(selectedGroup.cookieKey());
+ groupdialog->setSecretCookieConfirmation(selectedGroup.cookieKey());
+ groupdialog->show();
+ QString newGroupName;
+ QString newsecretCookie;
+ QString confirmation;
+ if (groupdialog->exec() == QDialog::Accepted) {
+ newGroupName = groupdialog->groupName();
+ newsecretCookie = groupdialog->secretCookie();
+ confirmation = groupdialog->secretCookieConfirmation();
+ if(newsecretCookie != confirmation) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("No match for cookieKey and confirmation field."), VMessageBox::Ok);
+ delete groupdialog;
+ modifyGroup();
+ return;
+ }
+ delete groupdialog;
+ if (newGroupName.isEmpty() == false) {
+ bool alreadyExists = false;
+ Service s = _services->take(_selectedService);
+ QList<Group> groups = s.groups();
+ int index = 0;
+ while (index < groups.size()) {
+ Group g = groups.value(index);
+ QString tempGroupName = g.groupName();
+ int comp = tempGroupName.compare(newGroupName);
+ if (comp == 0 && tempGroupName != _selectedGroup) {
+ alreadyExists = true;
+ }
+ index++;
+ }
+ if (alreadyExists == false) {
+ int index2 = 0;
+ QList<Group> groups2 = s.groups();
+ while (index2 < groups2.size()) {
+ Group tempGroup = groups2.takeAt(index2);
+ QString tempString = tempGroup.groupName();
+ int comp2 = tempString.compare(_selectedGroup);
+ if (comp2 == 0) {
+ tempGroup.setGroupName(newGroupName);
+ tempGroup.setCookieKey(newsecretCookie);
+ }
+ groups2.insert(index2, tempGroup);
+ index2++;
+ }
+ s.setGroups(groups2);
+ _services->insert(_selectedService, s);
+ } else {
+ _services->insert(_selectedService, s);
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select a different group name."),
+ VMessageBox::Ok);
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Group name has to be entered."), VMessageBox::Ok);
+ }
+ _selectedGroup = newGroupName;
+ initDataStructures();
+ showGroups();
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select service and group."), VMessageBox::Ok);
+ }
+}
+
+/** Modifes settings of an already known user */
+void HiddenservicePage::modifyUser() {
+ if(_selectedService.isEmpty() == false && _selectedGroup.isEmpty() == false
+ && _selectedUser.isEmpty() == false) {
+ User selectedUser = _users->value(_selectedUser);
+ QString oldName = _selectedUser;
+ Userdialog *userdialog = new Userdialog(this);
+ userdialog->setUserName(selectedUser.userName());
+ userdialog->setIntroductionPassword(selectedUser.
+ introductionPassword());
+ userdialog->setIntroductionConfirmation(selectedUser.
+ introductionPassword());
+ userdialog->setAuthenticationPassword(selectedUser.
+ authenticationPassword());
+ userdialog->setAuthenticationConfirmation(selectedUser.
+ authenticationPassword());
+ userdialog->setPublicKey(selectedUser.publicKey());
+ userdialog->show();
+ QString enteredName;
+ QString enteredIntroPassword;
+ QString enteredAuthPassword;
+ QString enteredPublicKey;
+ QString enteredIntroConfirmation;
+ QString enteredAuthConfirmation;
+ if (userdialog->exec() == QDialog::Accepted) {
+ enteredName = userdialog->userName();
+ enteredIntroPassword = userdialog->introductionPassword();
+ enteredAuthPassword = userdialog->authenticationPassword();
+ enteredPublicKey = userdialog->publicKey();
+ enteredIntroConfirmation = userdialog->introductionConfirmation();
+ enteredAuthConfirmation = userdialog->authenticationConfirmation();
+ if (enteredIntroPassword.isEmpty() || enteredName.isEmpty() ||
+ enteredAuthPassword.isEmpty() || enteredPublicKey.isEmpty() ) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please fill out all fields."), VMessageBox::Ok);
+ delete userdialog;
+ modifyUser();
+ return;
+ } else if(enteredIntroPassword != enteredIntroConfirmation ||
+ enteredAuthPassword != enteredAuthConfirmation) {
+ VMessageBox::warning(this, tr("Error"),
+ tr("No match for passwords & confirmation fields, please check."),
+ VMessageBox::Ok);
+ delete userdialog;
+ modifyUser();
+ return;
+ } else if(_users->keys().contains(enteredName) == false ||
+ (_users->keys().contains(enteredName)
+ == true && enteredName.compare(_selectedUser) == 0)) {
+ QList<Service> services = _services->values();
+ for(int i = 0; i < services.size(); ++i) {
+ Service tempService = services.value(i);
+ QList<Group> groups = tempService.groups();
+ for(int j = 0; j < groups.size(); ++j) {
+ Group tempGroup = groups.takeAt(j);
+ QList<User> users = tempGroup.groupMembers();
+ for(int o = 0; o < users.size(); ++o) {
+ User tempUser = users.takeAt(o);
+ if(tempUser.userName().compare(oldName) == 0) {
+ //user found, change values
+ tempUser.setUserName(enteredName);
+ tempUser.setIntroductionPassword(enteredIntroPassword);
+ tempUser.setAuthenticationPassword(enteredAuthPassword);
+ tempUser.setPublicKey(enteredPublicKey);
+ }
+ users.push_front(tempUser);
+ tempGroup.setGroupMembers(users);
+ }
+ groups.push_front(tempGroup);
+ }
+ tempService.setGroups(groups);
+ _services->insert(tempService.serviceName(), tempService);
+ }
+ initDataStructures();
+ showUsers();
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Name already in use please try another one."),
+ VMessageBox::Ok);
+ }
+ }
+ } else {
+ VMessageBox::warning(this, tr("Error"),
+ tr("Please select service, group and user."), VMessageBox::Ok);
+ }
+}
+
Modified: branches/hidden-services/src/gui/config/hiddenservicepage.h
===================================================================
--- branches/hidden-services/src/gui/config/hiddenservicepage.h 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/hiddenservicepage.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -1,70 +1,132 @@
-/****************************************************************
- * Vidalia is distributed under the following license:
- *
- * Copyright (C) 2006, Matt Edman, Justin Hipple
- *
- * 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 Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- ****************************************************************/
-
-/**
- * \file generalpage.h
- * \version $Id: hiddenservicepage.cpp 1563 2006-12-26 06:06:04Z klimabork $
- * \brief Hiddenservice configuration options
- */
-
-#ifndef _HIDDENSERVICEPAGE_H
-#define _HIDDENSERVICEPAGE_H
-
-#include <entity/servicelist.h>
-#include <entity/service.h>
-#include <entity/group.h>
-#include <entity/user.h>
-
-#include "configpage.h"
-#include "ui_hiddenservicepage.h"
-
-class HiddenservicePage : public ConfigPage
-{
- Q_OBJECT
-
-public:
- /** Default Constructor */
- HiddenservicePage(QWidget *parent = 0);
- /** Default Destructor */
- ~HiddenservicePage();
- /** Saves the changes on this page */
- bool save(QString &errmsg);
- /** Loads the settings for this page */
- void load();
-
-private slots:
-
-private:
- /** Qt Designer generated object */
- Ui::HiddenservicePage ui;
- QWidget *_parent;
- /** A QListWidget object */
- QListWidget *_groupWidget;
- /** A ListWidget object */
- QListWidget *_userWidget;
- /** A ListWidget object */
- QTableWidget *_serviceWidget;
- /** The selected Service */
-
-};
-
-#endif
-
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+#ifndef _HIDDENSERVICEPAGE_H
+#define _HIDDENSERVICEPAGE_H
+
+#include <config/torsettings.h>
+#include <entity/servicelist.h>
+
+#include "configpage.h"
+#include "ui_hiddenservicepage.h"
+#include <control/torcontrol.h>
+#include <config/serversettings.h>
+#include <config/hiddenservicesettings.h>
+
+class HiddenservicePage : public ConfigPage
+{
+ Q_OBJECT
+
+public:
+ /** Default Constructor */
+ HiddenservicePage(QWidget *parent = 0);
+ /** Default Destructor */
+ virtual ~HiddenservicePage();
+ /** Saves the changes on this page */
+ bool save(QString &errmsg);
+ /** Loads the settings for this page */
+ void load();
+
+private slots:
+
+ /** Called when the user clicks "Add" */
+ void addHiddenService();
+ /** delete the selected services */
+ void deleteHiddenService();
+ /** Adds a already known user to the selected Group */
+ void addUser();
+ /** this method creates a new user object */
+ void createUser();
+ /** delete the selected user */
+ void deleteUser();
+ /** Modifes settings of an already known user */
+ void modifyUser();
+ /** modify the values of the selected group */
+ void modifyGroup();
+ /** create a new group */
+ void createGroup();
+ /** delete the selected group and the group members */
+ void deleteGroup();
+ /** this method is called when the user selects a different service */
+ void serviceSelectionChanged();
+ /** this method is called when the user selects a different user */
+ void userSelectionChanged(QListWidgetItem* current);
+ /** this method is called when the user selects a different group */
+ void groupSelectionChanged();
+ /** this method is called whenever the publish/unpublish button is clicked */
+ void publishButtonClicked();
+
+
+private:
+
+ /**Search for Services which are deployed */
+ void checkPublishedServices();
+ /** create the authtentication data file needed by V2 services */
+ void createUserFile();
+ /** this method decides whether the local Tor version can work with V2 or not*/
+ bool supportV2();
+ /** display all users in the user widget */
+ void showUsers();
+ /** display all groups in the group widget */
+ void showGroups();
+ /** craete the data structures needed during runtime */
+ void initDataStructures();
+ /** display all services in the service widget */
+ void showServices();
+ /** A TorControl object used to talk to Tor */
+ TorControl* _torControl;
+ /** A ServerSettings object used to get and set information about how a
+ local Tor server is configured. */
+ ServerSettings* _settings;
+ /** A HiddenServiceSettings object used for saving/loading hidden service settings*/
+ HiddenServiceSettings *_hiddenServiceSettings;
+ /** A TorSettings object used for saving/loading tor settings */
+ TorSettings *_torSettings;
+ /** Qt Designer generated object */
+ Ui::HiddenservicePage ui;
+ /** the map with all services, mapping service name to the Entity service */
+ QMap<QString, Service> *_services;
+ /** all users, mapping from username to the Entity user */
+ QMap<QString, User> *_users;
+ /** all groups, mapping from groupname to the Entity Group */
+ QMap<QString, Group> *_groups;
+ /** the parent widget */
+ QWidget *_parent;
+ /** A QTableWidget object represending the table of groups */
+ QTableWidget *_groupWidget;
+ /** A QListWidget object represending the list of users */
+ QListWidget *_userWidget;
+ /** A QTableWidget object represending the table of services */
+ QTableWidget *_serviceWidget;
+ /** represending the name of the currently selected user */
+ QString _selectedUser;
+ /** represending the name of the currently selected group */
+ QString _selectedGroup;
+ /** represending the name of the currently selected service */
+ QString _selectedService;
+ /*a boolean that shows whether the installed Tor version supports V2 or not*/
+ bool _v2Support;
+
+};
+
+#endif
+
Modified: branches/hidden-services/src/gui/config/hiddenservicepage.ui
===================================================================
--- branches/hidden-services/src/gui/config/hiddenservicepage.ui 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/config/hiddenservicepage.ui 2007-10-05 15:35:21 UTC (rev 1969)
@@ -5,10 +5,16 @@
<rect>
<x>0</x>
<y>0</y>
- <width>692</width>
- <height>617</height>
+ <width>674</width>
+ <height>585</height>
</rect>
</property>
+ <property name="minimumSize" >
+ <size>
+ <width>1</width>
+ <height>0</height>
+ </size>
+ </property>
<property name="windowTitle" >
<string>Form</string>
</property>
@@ -21,6 +27,12 @@
</property>
<item>
<widget class="QGroupBox" name="groupBox" >
+ <property name="minimumSize" >
+ <size>
+ <width>656</width>
+ <height>567</height>
+ </size>
+ </property>
<property name="palette" >
<palette>
<active>
@@ -88,71 +100,38 @@
<property name="title" >
<string>Service Management</string>
</property>
- <widget class="QTableWidget" name="serviceListView" >
+ <widget class="QPushButton" name="publishServiceButton" >
<property name="geometry" >
<rect>
- <x>10</x>
- <y>30</y>
- <width>321</width>
- <height>151</height>
+ <x>391</x>
+ <y>69</y>
+ <width>201</width>
+ <height>27</height>
</rect>
</property>
- <property name="minimumSize" >
- <size>
- <width>200</width>
- <height>0</height>
- </size>
+ <property name="text" >
+ <string>Publish/Unpublish Service</string>
</property>
- <property name="maximumSize" >
- <size>
- <width>16777215</width>
- <height>16777215</height>
- </size>
+ </widget>
+ <widget class="QPushButton" name="deleteServiceButton" >
+ <property name="geometry" >
+ <rect>
+ <x>391</x>
+ <y>105</y>
+ <width>201</width>
+ <height>27</height>
+ </rect>
</property>
- <property name="layoutDirection" >
- <enum>Qt::RightToLeft</enum>
+ <property name="text" >
+ <string>Delete Service</string>
</property>
- <property name="autoFillBackground" >
- <bool>true</bool>
- </property>
- <property name="autoScroll" >
- <bool>false</bool>
- </property>
- <property name="dragEnabled" >
- <bool>false</bool>
- </property>
- <property name="dragDropOverwriteMode" >
- <bool>true</bool>
- </property>
- <property name="selectionMode" >
- <enum>QAbstractItemView::SingleSelection</enum>
- </property>
- <property name="selectionBehavior" >
- <enum>QAbstractItemView::SelectItems</enum>
- </property>
- <property name="verticalScrollMode" >
- <enum>QAbstractItemView::ScrollPerItem</enum>
- </property>
- <property name="gridStyle" >
- <enum>Qt::SolidLine</enum>
- </property>
- <column>
- <property name="text" >
- <string>Active</string>
- </property>
- </column>
- <column>
- <property name="text" >
- <string>Service Name</string>
- </property>
- </column>
</widget>
<widget class="QTabWidget" name="settingsWidget" >
<property name="geometry" >
<rect>
<x>10</x>
<y>210</y>
- <width>631</width>
+ <width>611</width>
<height>331</height>
</rect>
</property>
@@ -230,122 +209,167 @@
<widget class="QGroupBox" name="grpboxcreateservice" >
<property name="geometry" >
<rect>
- <x>10</x>
- <y>40</y>
- <width>361</width>
+ <x>20</x>
+ <y>30</y>
+ <width>571</width>
<height>181</height>
</rect>
</property>
<property name="title" >
<string>Create new Service</string>
</property>
- <widget class="QLabel" name="lblservicename" >
+ <widget class="QPushButton" name="addServiceButton" >
+ <property name="enabled" >
+ <bool>true</bool>
+ </property>
<property name="geometry" >
<rect>
- <x>11</x>
- <y>25</y>
- <width>237</width>
- <height>16</height>
+ <x>13</x>
+ <y>117</y>
+ <width>301</width>
+ <height>24</height>
</rect>
</property>
<property name="text" >
- <string>Service name:</string>
+ <string>Add Service</string>
</property>
</widget>
- <widget class="QLineEdit" name="serviceNameLine" >
+ <widget class="QLineEdit" name="serviceAdressLine" >
<property name="geometry" >
<rect>
<x>11</x>
- <y>45</y>
+ <y>91</y>
<width>237</width>
<height>20</height>
</rect>
</property>
</widget>
- <widget class="QLineEdit" name="listeningPortLine" >
+ <widget class="QLabel" name="lblserviceadress" >
<property name="geometry" >
<rect>
- <x>254</x>
- <y>91</y>
- <width>61</width>
- <height>20</height>
+ <x>11</x>
+ <y>71</y>
+ <width>237</width>
+ <height>16</height>
</rect>
</property>
+ <property name="text" >
+ <string>Service adress:</string>
+ </property>
</widget>
- <widget class="QPushButton" name="addServiceButton" >
- <property name="enabled" >
- <bool>true</bool>
- </property>
+ <widget class="QLineEdit" name="listeningPortLine" >
<property name="geometry" >
<rect>
- <x>13</x>
- <y>117</y>
- <width>301</width>
- <height>24</height>
+ <x>260</x>
+ <y>45</y>
+ <width>61</width>
+ <height>20</height>
</rect>
</property>
- <property name="text" >
- <string>Add Service</string>
- </property>
</widget>
<widget class="QLineEdit" name="localPortLine" >
<property name="geometry" >
<rect>
- <x>254</x>
- <y>45</y>
+ <x>260</x>
+ <y>90</y>
<width>61</width>
<height>20</height>
</rect>
</property>
</widget>
- <widget class="QLabel" name="lbllocalport" >
+ <widget class="QWidget" name="layoutWidget" >
<property name="geometry" >
<rect>
- <x>254</x>
+ <x>410</x>
+ <y>40</y>
+ <width>114</width>
+ <height>83</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" >
+ <property name="margin" >
+ <number>0</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QRadioButton" name="rbV0" >
+ <property name="text" >
+ <string>Start as V0</string>
+ </property>
+ <property name="checked" >
+ <bool>true</bool>
+ </property>
+ <property name="autoExclusive" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="rbV2" >
+ <property name="text" >
+ <string>Start as V2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="rbV0V2" >
+ <property name="text" >
+ <string>Start as V0/V2</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QLabel" name="lbllisteningport" >
+ <property name="geometry" >
+ <rect>
+ <x>260</x>
<y>25</y>
- <width>236</width>
- <height>16</height>
+ <width>111</width>
+ <height>17</height>
</rect>
</property>
<property name="text" >
- <string>Local Port:</string>
+ <string>Listn. Port:</string>
</property>
</widget>
- <widget class="QLineEdit" name="serviceAdressLine" >
+ <widget class="QLabel" name="lbllocalport" >
<property name="geometry" >
<rect>
- <x>11</x>
- <y>91</y>
- <width>237</width>
- <height>20</height>
+ <x>260</x>
+ <y>70</y>
+ <width>111</width>
+ <height>17</height>
</rect>
</property>
+ <property name="text" >
+ <string>Local Port:</string>
+ </property>
</widget>
- <widget class="QLabel" name="lblserviceadress" >
+ <widget class="QLabel" name="lblservicename" >
<property name="geometry" >
<rect>
<x>11</x>
- <y>71</y>
+ <y>25</y>
<width>237</width>
<height>16</height>
</rect>
</property>
<property name="text" >
- <string>Service adress:</string>
+ <string>Service name:</string>
</property>
</widget>
- <widget class="QLabel" name="lbllisteningport" >
+ <widget class="QLineEdit" name="serviceNameLine" >
<property name="geometry" >
<rect>
- <x>254</x>
- <y>71</y>
- <width>71</width>
- <height>17</height>
+ <x>11</x>
+ <y>45</y>
+ <width>237</width>
+ <height>20</height>
</rect>
</property>
- <property name="text" >
- <string>Listn. Port:</string>
- </property>
</widget>
</widget>
</widget>
@@ -353,19 +377,6 @@
<attribute name="title" >
<string>Advanced Settings</string>
</attribute>
- <widget class="QPushButton" name="createGroupButton" >
- <property name="geometry" >
- <rect>
- <x>11</x>
- <y>241</y>
- <width>91</width>
- <height>24</height>
- </rect>
- </property>
- <property name="text" >
- <string>Create Group</string>
- </property>
- </widget>
<widget class="QLabel" name="label_2" >
<property name="geometry" >
<rect>
@@ -379,24 +390,24 @@
<string>Groups:</string>
</property>
</widget>
- <widget class="QLabel" name="label_4" >
+ <widget class="QPushButton" name="createGroupButton" >
<property name="geometry" >
<rect>
- <x>321</x>
- <y>11</y>
- <width>256</width>
- <height>17</height>
+ <x>11</x>
+ <y>241</y>
+ <width>91</width>
+ <height>24</height>
</rect>
</property>
<property name="text" >
- <string>Users:</string>
+ <string>Create Group</string>
</property>
</widget>
<widget class="QPushButton" name="deleteGroupButton" >
<property name="geometry" >
<rect>
- <x>106</x>
- <y>241</y>
+ <x>110</x>
+ <y>240</y>
<width>91</width>
<height>24</height>
</rect>
@@ -408,8 +419,8 @@
<widget class="QPushButton" name="modifyGroupButton" >
<property name="geometry" >
<rect>
- <x>201</x>
- <y>241</y>
+ <x>210</x>
+ <y>240</y>
<width>91</width>
<height>24</height>
</rect>
@@ -418,32 +429,25 @@
<string>Modify Group</string>
</property>
</widget>
- <widget class="QListWidget" name="groupManagementView" >
+ <widget class="QLabel" name="label_4" >
<property name="geometry" >
<rect>
- <x>11</x>
- <y>34</y>
- <width>281</width>
- <height>189</height>
+ <x>340</x>
+ <y>10</y>
+ <width>256</width>
+ <height>17</height>
</rect>
</property>
- </widget>
- <widget class="QListWidget" name="userManagementView" >
- <property name="geometry" >
- <rect>
- <x>321</x>
- <y>34</y>
- <width>271</width>
- <height>189</height>
- </rect>
+ <property name="text" >
+ <string>Users:</string>
</property>
</widget>
<widget class="QPushButton" name="createUserButton" >
<property name="geometry" >
<rect>
- <x>320</x>
- <y>241</y>
- <width>91</width>
+ <x>330</x>
+ <y>240</y>
+ <width>81</width>
<height>24</height>
</rect>
</property>
@@ -451,38 +455,38 @@
<string>Create User</string>
</property>
</widget>
- <widget class="QPushButton" name="modifyUserButton" >
+ <widget class="QPushButton" name="deleteUserButton" >
<property name="geometry" >
<rect>
- <x>511</x>
- <y>241</y>
+ <x>420</x>
+ <y>240</y>
<width>81</width>
<height>24</height>
</rect>
</property>
<property name="text" >
- <string>Modify User</string>
+ <string>Delete User</string>
</property>
</widget>
- <widget class="QPushButton" name="deleteUserButton" >
+ <widget class="QPushButton" name="modifyUserButton" >
<property name="geometry" >
<rect>
- <x>415</x>
- <y>241</y>
- <width>91</width>
+ <x>510</x>
+ <y>240</y>
+ <width>81</width>
<height>24</height>
</rect>
</property>
<property name="text" >
- <string>Delete User</string>
+ <string>Modify User</string>
</property>
</widget>
<widget class="QPushButton" name="addUserButton" >
<property name="geometry" >
<rect>
- <x>320</x>
+ <x>330</x>
<y>270</y>
- <width>271</width>
+ <width>261</width>
<height>24</height>
</rect>
</property>
@@ -490,38 +494,184 @@
<string>Add User</string>
</property>
</widget>
+ <widget class="QListWidget" name="userManagementView" >
+ <property name="geometry" >
+ <rect>
+ <x>330</x>
+ <y>30</y>
+ <width>261</width>
+ <height>189</height>
+ </rect>
+ </property>
+ <property name="alternatingRowColors" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QTableWidget" name="groupListView" >
+ <property name="enabled" >
+ <bool>true</bool>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>311</width>
+ <height>191</height>
+ </rect>
+ </property>
+ <property name="minimumSize" >
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="layoutDirection" >
+ <enum>Qt::RightToLeft</enum>
+ </property>
+ <property name="autoFillBackground" >
+ <bool>true</bool>
+ </property>
+ <property name="autoScroll" >
+ <bool>false</bool>
+ </property>
+ <property name="editTriggers" >
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragEnabled" >
+ <bool>false</bool>
+ </property>
+ <property name="dragDropOverwriteMode" >
+ <bool>true</bool>
+ </property>
+ <property name="alternatingRowColors" >
+ <bool>true</bool>
+ </property>
+ <property name="selectionMode" >
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior" >
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <property name="verticalScrollMode" >
+ <enum>QAbstractItemView::ScrollPerItem</enum>
+ </property>
+ <property name="gridStyle" >
+ <enum>Qt::SolidLine</enum>
+ </property>
+ <column>
+ <property name="text" >
+ <string>Active</string>
+ </property>
+ </column>
+ <column>
+ <property name="text" >
+ <string>Group Name</string>
+ </property>
+ </column>
+ </widget>
</widget>
</widget>
- <widget class="QPushButton" name="publishServiceButton" >
+ <widget class="QTableWidget" name="serviceListView" >
+ <property name="enabled" >
+ <bool>true</bool>
+ </property>
<property name="geometry" >
<rect>
- <x>391</x>
- <y>69</y>
- <width>171</width>
- <height>27</height>
+ <x>10</x>
+ <y>30</y>
+ <width>321</width>
+ <height>151</height>
</rect>
</property>
- <property name="text" >
- <string>Publish/Unpublish Service</string>
+ <property name="minimumSize" >
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
</property>
- </widget>
- <widget class="QPushButton" name="deleteServiceButton" >
- <property name="geometry" >
- <rect>
- <x>391</x>
- <y>105</y>
- <width>171</width>
- <height>27</height>
- </rect>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>16777215</height>
+ </size>
</property>
- <property name="text" >
- <string>Delete Service</string>
+ <property name="layoutDirection" >
+ <enum>Qt::RightToLeft</enum>
</property>
+ <property name="autoFillBackground" >
+ <bool>true</bool>
+ </property>
+ <property name="autoScroll" >
+ <bool>false</bool>
+ </property>
+ <property name="editTriggers" >
+ <set>QAbstractItemView::NoEditTriggers</set>
+ </property>
+ <property name="dragEnabled" >
+ <bool>false</bool>
+ </property>
+ <property name="dragDropOverwriteMode" >
+ <bool>true</bool>
+ </property>
+ <property name="alternatingRowColors" >
+ <bool>true</bool>
+ </property>
+ <property name="selectionMode" >
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="selectionBehavior" >
+ <enum>QAbstractItemView::SelectRows</enum>
+ </property>
+ <property name="verticalScrollMode" >
+ <enum>QAbstractItemView::ScrollPerItem</enum>
+ </property>
+ <property name="gridStyle" >
+ <enum>Qt::SolidLine</enum>
+ </property>
+ <column>
+ <property name="text" >
+ <string>Active</string>
+ </property>
+ </column>
+ <column>
+ <property name="text" >
+ <string>Service Name</string>
+ </property>
+ </column>
</widget>
</widget>
</item>
</layout>
</widget>
+ <tabstops>
+ <tabstop>serviceNameLine</tabstop>
+ <tabstop>listeningPortLine</tabstop>
+ <tabstop>rbV0</tabstop>
+ <tabstop>rbV2</tabstop>
+ <tabstop>rbV0V2</tabstop>
+ <tabstop>serviceAdressLine</tabstop>
+ <tabstop>localPortLine</tabstop>
+ <tabstop>addServiceButton</tabstop>
+ <tabstop>settingsWidget</tabstop>
+ <tabstop>groupListView</tabstop>
+ <tabstop>createGroupButton</tabstop>
+ <tabstop>deleteGroupButton</tabstop>
+ <tabstop>modifyGroupButton</tabstop>
+ <tabstop>userManagementView</tabstop>
+ <tabstop>createUserButton</tabstop>
+ <tabstop>deleteUserButton</tabstop>
+ <tabstop>modifyUserButton</tabstop>
+ <tabstop>addUserButton</tabstop>
+ <tabstop>publishServiceButton</tabstop>
+ <tabstop>deleteServiceButton</tabstop>
+ <tabstop>serviceListView</tabstop>
+ </tabstops>
<resources/>
<connections/>
</ui>
Added: branches/hidden-services/src/gui/config/userdialog.cpp
===================================================================
--- branches/hidden-services/src/gui/config/userdialog.cpp (rev 0)
+++ branches/hidden-services/src/gui/config/userdialog.cpp 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,81 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+/**
+ * \file groupdialog.cpp
+ * \version $Id: aboutdialog.cpp 1563 2006-12-26 06:06:04Z klimabork $
+ * \brief Displays information about Vidalia, Tor, and Qt
+ */
+
+#include "userdialog.h"
+
+/** Default Constructor **/
+Userdialog::Userdialog(QWidget *parent) :
+ QDialog(parent)
+
+{
+ setupUi(this);
+ userline->setText("");
+ userline->setFocus();
+}
+
+void
+Userdialog::showWindow()
+{
+}
+
+void
+Userdialog::setUserName(QString userName)
+{
+ userline->setText(userName);
+}
+
+void
+Userdialog::setIntroductionPassword(QString password)
+{
+ introductionpwline->setText(password);
+}
+
+void
+Userdialog::setAuthenticationPassword(QString password)
+{
+ authenticationpwline->setText(password);
+}
+
+void
+Userdialog::setPublicKey(QString publicKey)
+{
+ publickeytextedit->setText(publicKey);
+}
+void
+Userdialog::setAuthenticationConfirmation(QString authconfirm)
+{
+ authenticationconfirmationline->setText(authconfirm);
+}
+
+void
+Userdialog::setIntroductionConfirmation(QString introconfirm)
+{
+ introductionconfirmationline->setText(introconfirm);
+}
+
+
Property changes on: branches/hidden-services/src/gui/config/userdialog.cpp
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/hidden-services/src/gui/config/userdialog.h
===================================================================
--- branches/hidden-services/src/gui/config/userdialog.h (rev 0)
+++ branches/hidden-services/src/gui/config/userdialog.h 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,73 @@
+/****************************************************************
+ * Vidalia is distributed under the following license:
+ *
+ * Copyright (C) 2006, Matt Edman, Justin Hipple
+ * Copyright (C) 2007, Domenik Bork, Christian Klima
+ *
+ * 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 Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ ****************************************************************/
+
+/**
+ * \file aboutdialog.h
+ * \version $Id: aboutdialog.h 1563 2006-12-26 06:06:04Z edmanm $
+ * \brief Displays information about Vidalia, Tor, and Qt
+ */
+#ifndef USERDIALOG_H_
+#define USERDIALOG_H_
+
+
+#include "ui_userdialog.h"
+#include "hiddenservicepage.h"
+
+
+class Userdialog : public QDialog, Ui_Userdialog
+{
+
+
+public:
+ /** Default constructor **/
+ Userdialog(QWidget *parent = 0);
+
+public slots:
+ /** Overriden VidaliaWindow::showWindow() */
+ void showWindow();
+
+ QString userName() { return userline->text(); }
+ QString introductionPassword() { return introductionpwline->text(); }
+ void setUserName(QString userName);
+ void setIntroductionPassword(QString password);
+ QString authenticationPassword() { return authenticationpwline->text(); }
+ void setAuthenticationPassword(QString password);
+ QString publicKey() { return publickeytextedit->toPlainText(); }
+ void setPublicKey(QString publicKey);
+ QString introductionConfirmation() { return introductionconfirmationline->text(); }
+ void setIntroductionConfirmation(QString introconfirm);
+ QString authenticationConfirmation() { return authenticationconfirmationline->text(); }
+ void setAuthenticationConfirmation(QString authconfirm);
+
+
+
+private:
+
+ /** Qt Designer generated QObject **/
+ Ui::Userdialog ui;
+};
+
+#endif
+
+
+
+
Property changes on: branches/hidden-services/src/gui/config/userdialog.h
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/hidden-services/src/gui/config/userdialog.ui
===================================================================
--- branches/hidden-services/src/gui/config/userdialog.ui (rev 0)
+++ branches/hidden-services/src/gui/config/userdialog.ui 2007-10-05 15:35:21 UTC (rev 1969)
@@ -0,0 +1,597 @@
+<ui version="4.0" >
+ <class>Userdialog</class>
+ <widget class="QDialog" name="Userdialog" >
+ <property name="windowModality" >
+ <enum>Qt::WindowModal</enum>
+ </property>
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>374</width>
+ <height>377</height>
+ </rect>
+ </property>
+ <property name="palette" >
+ <palette>
+ <active>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Button" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Light" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Midlight" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>247</red>
+ <green>245</green>
+ <blue>243</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Dark" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Mid" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>159</red>
+ <green>157</green>
+ <blue>154</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Text" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="BrightText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>255</red>
+ <green>255</green>
+ <blue>255</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="ButtonText" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>119</red>
+ <green>117</green>
+ <blue>115</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Base" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Window" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="Shadow" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>0</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ <colorrole role="AlternateBase" >
+ <brush brushstyle="SolidPattern" >
+ <color alpha="255" >
+ <red>239</red>
+ <green>235</green>
+ <blue>231</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="windowTitle" >
+ <string>User Data</string>
+ </property>
+ <property name="sizeGripEnabled" >
+ <bool>true</bool>
+ </property>
+ <property name="modal" >
+ <bool>true</bool>
+ </property>
+ <widget class="QPushButton" name="createButton" >
+ <property name="geometry" >
+ <rect>
+ <x>110</x>
+ <y>330</y>
+ <width>77</width>
+ <height>26</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="cancelButton" >
+ <property name="geometry" >
+ <rect>
+ <x>210</x>
+ <y>330</y>
+ <width>77</width>
+ <height>26</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Cancel</string>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="userline" >
+ <property name="geometry" >
+ <rect>
+ <x>181</x>
+ <y>33</y>
+ <width>179</width>
+ <height>29</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="introductionpwline" >
+ <property name="geometry" >
+ <rect>
+ <x>181</x>
+ <y>70</y>
+ <width>179</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="introductionconfirmationline" >
+ <property name="geometry" >
+ <rect>
+ <x>181</x>
+ <y>107</y>
+ <width>179</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="authenticationpwline" >
+ <property name="geometry" >
+ <rect>
+ <x>181</x>
+ <y>144</y>
+ <width>179</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ <widget class="QLineEdit" name="authenticationconfirmationline" >
+ <property name="geometry" >
+ <rect>
+ <x>181</x>
+ <y>181</y>
+ <width>179</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblUserName" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>31</y>
+ <width>166</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Username:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblIntroductionPassword" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>69</y>
+ <width>166</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Introduction Password:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblIntroductionConfirmation" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>106</y>
+ <width>166</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Confirmation:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblAuthenticationPassword" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>144</y>
+ <width>166</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Authentication Password:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblAuthenticationConfirmation" >
+ <property name="geometry" >
+ <rect>
+ <x>11</x>
+ <y>181</y>
+ <width>166</width>
+ <height>32</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Confirmation:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="lblPublicKey" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>250</y>
+ <width>166</width>
+ <height>31</height>
+ </rect>
+ </property>
+ <property name="text" >
+ <string>Public Key:</string>
+ </property>
+ </widget>
+ <widget class="QTextEdit" name="publickeytextedit" >
+ <property name="geometry" >
+ <rect>
+ <x>180</x>
+ <y>220</y>
+ <width>181</width>
+ <height>101</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>cancelButton</sender>
+ <signal>clicked()</signal>
+ <receiver>Userdialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>268</x>
+ <y>82</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>164</x>
+ <y>52</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>createButton</sender>
+ <signal>clicked()</signal>
+ <receiver>Userdialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>168</x>
+ <y>82</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>164</x>
+ <y>52</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Property changes on: branches/hidden-services/src/gui/config/userdialog.ui
___________________________________________________________________
Name: svn:executable
+ *
Modified: branches/hidden-services/src/gui/help/content/de/config.html
===================================================================
--- branches/hidden-services/src/gui/help/content/de/config.html 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/help/content/de/config.html 2007-10-05 15:35:21 UTC (rev 1969)
@@ -26,13 +26,12 @@
<h1>Konfiguration von Vidalia und Tor</h1>
<hr />
-<p>
Vidalia ermöglicht es Ihnen die am gebrächlisten Einstellungen
von Vidalia und Tor vorzunehmen. Außerdem können Sie mit Vidalia
einen <a href="server.html">Tor-Server</a> einrichten und betreiben und dadurch
dem Tor-Netzwerk zu weiterem Wachtums verhelfen.
-</p>
+
<a name="general"/>
<h3>Allgemeine Einstellungen</h3>
<p>
@@ -87,6 +86,54 @@
</li>
</ul>
+<a name="hiddenService"/>
+<h3>Hidden Service Einstellungen</h3>
+<p>
+Die Einstellungen auf der Seite <i>Hidden Service</i> sollten genutzt werden, wenn
+sie einen Hidden Service veröffentlichen wollen.
+</p>
+<ul>
+ <li><b>Services</b>:
+ Hier werden alle Services aufgeführt die Vidalia bekannt sind. Die linke Spalte zeigt
+ den Namen des Services, die rechte Spalte gibt an ob der Service bereits veröffentlicht
+ ist oder nicht (angekreuzte Checkbox steht für einen bereits veröffentlichten Service).</li>
+ <li><b>Service Konfiguration: </b></li>
+ <ul>
+ <li><b><u>Grundeinstellungen:</u></b></li>
+ Hierbei handelt es sich um Einstellungen, die grundsätzlich für jeden Service gesetzt werden müssen.
+ </ul>
+ <ul>
+ <li><b>Service Name</b>:
+ Der Name des Services. Dieser gilt nur innerhalb von Vidalia zur
+ </li>
+ </ul>
+ <ul>
+ <li><b>Lokaler Port</b>:
+ Hier muss der Port eingestellt werden, auf dem auch der HiddenService läuft.</li>
+ <li><b>Service Adresse: </b>IP Adresse unter der der Service erreichbar ist (z.B. IP Adresse ihres File Servers)</li>
+ <li><b>Listening Port</b>:
+ Port auf dem HiddenService Anfragen eingehen.</li>
+ </ul>
+ <p>
+ <ul>
+ <li><b><u>Fortgeschrittene Einstellungen:</u></b></li>
+ Diese Einstellungen werden nur aktiv, wenn es sich um einen v2 Service handelt.
+ </ul>
+ <ul>
+ <li><b>Gruppen:</b>
+ Hier können Sie Vidalia veranlassen, für einen Service Gruppen anzulegen.
+ Jede Gruppe steht dabei für einen Secret Cookie. Die Bedienelemente für das Gruppenmanagement
+ befinden sich direkt unter dem Groups Fenster.
+ </li>
+ </ul>
+ <ul>
+ <li>
+ <b>Benutzer:</b> Hier können Sie Vidalia veranlassen, zu einer Gruppe Benutzer anzulegen.
+ Jeder Benutzer wird mit steht dabei für einen Secret Cookie. Die Bedienelemente für das Gruppenmanagement
+ befinden sich direkt unter dem BenutzerFenster.
+ </li>
+ </ul>
+</ul>
</body>
</html>
Modified: branches/hidden-services/src/gui/help/content/de/contents.xml
===================================================================
--- branches/hidden-services/src/gui/help/content/de/contents.xml 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/help/content/de/contents.xml 2007-10-05 15:35:21 UTC (rev 1969)
@@ -41,6 +41,7 @@
<Topic id="general" name="Allgemeine Einstellungen" html="config.html" section="general"/>
<Topic id="server" name="Server Einstellungen" html="config.html" section="server"/>
<Topic id="advanced" name="Fortgeschrittene Einstellungen" html="config.html" section="advanced"/>
+ <Topic id="hiddenService" name="Hidden Service" html="config.html" section="hiddenService"/>
</Topic>
<Topic id="server" name="Einen Tor Server betreiben" html="server.html">
<Topic id="basic" name="Basis Einstellungen" html="server.html" section="basic"/>
Modified: branches/hidden-services/src/gui/help/content/en/config.html
===================================================================
--- branches/hidden-services/src/gui/help/content/en/config.html 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/help/content/en/config.html 2007-10-05 15:35:21 UTC (rev 1969)
@@ -69,50 +69,16 @@
modified by more experienced users.
</p>
<ul>
- <li><b>Control Address & Port</b>:
+ <li><b>Control Port</b>:
The <i>Control Port</i> is the port which Vidalia uses to talk to Tor.
This doesn't need to be changed unless you have a conflict with another
- service on your machine, or if you are using Vidalia to control and
- monitor a Tor process running on another machine.
+ service on your machine.
</li>
- <li><b>Control Port Authentication</b>:
- Control port authentication is used to limit the applications on your
- machine that can connect to and reconfigure your Tor installation. The
- available authentication methods are:
- <ul>
- <li>
- <b>None</b> -- No authentication is required. Use of this option is
- <b>strongly</b> discouraged. Any application or user on your computer
- can reconfigure your Tor installation.
- </li>
- <li>
- <b>Password</b> <i>(Default)</i> -- If this method is selected, you
- can specify a password that Tor will require each time a user or
- application connects to Tor's control port. If Vidalia starts Tor for
- you, you can have Vidalia randomly generate a new password each time
- it starts Tor by checking the <i>Randomly Generate</i> checkbox.
- </li>
- <li>
- <b>Cookie</b> -- If cookie authentication is selected, Tor will
- write a file (or, <i>cookie</i>) containing random bytes to its data
- directory when it starts. Any user or application that tries to
- connect to Tor's control port must be able to provide the contents of
- this cookie.
- </li>
- </ul>
- </li>
- <li><b>Tor Configuration File</b> <i>(optional)</i>:
+ <li><b>Tor Configuration File</b>:
You can use this option to have Vidalia start Tor using a
- specific <i>torrc</i>, Tor's configuration file. If you leave this field
- blank, Tor will uses its own default torrc location.
+ specific <i>torrc</i>, Tor's configuration file.
</li>
- <li><b>Tor Data Directory</b> <i>(optional)</i>:
- You can specify the directory in which Tor will store its saved data,
- such as cached Tor server information, Tor server keys, and configuration
- files. If you leave this field blank, Tor will use its own default data
- directory location.
- </li>
- <li><b>Permissions</b> <i>(optional, not available on Windows)</i>:
+ <li><b>Permissions</b>:
If you enter a value for <b>Run as User</b>, Tor will <i>setuid</i> to this user
when it starts.
If you enter a value for <b>Run as Group</b>, Tor will <i>setgid</i> to this
@@ -120,6 +86,56 @@
</li>
</ul>
+<a name="hiddenService"/>
+<h3>Hidden Service Settings</h3>
+<p>
+The configurations made on <i>Hidden Service</i> can be used to configure a new hidden service.
+</p>
+<ul>
+ <li><b>Services</b>:
+ Here are all hidden services listed which are known to Vidalia. The left column shows the name of the
+ server, the right one shows, if the service is already published or not (a checked box means that the service
+ is already published.)
+ </li>
+ <li><b>Service Configuration </b></li>
+ <ul>
+ <li><b><u>General Settings:</u></b></li>
+ These are settings which have to be configured for every service.
+ </ul>
+ <ul>
+ <li><b>Service Name</b>:
+ The name of the service. This name is used only within vidalia to represent a service by a given name.
+ </li>
+ </ul>
+
+ <ul>
+ <li><b>Local Port</b>:
+ The Port of the services which will be published</li>
+ <li><b>Service Adress: </b>The IP Adress of the service (e.g the file server you want to publish)</li>
+ <li><b>Listening Port</b>:
+ The Port which is requested by users of the hidden service.</li>
+ </ul>
+ <p>
+ <ul>
+ <li><b><u>Advanced Settings:</u></b></li>
+ These settings will only be active, if the service is published as a v2 service.
+ </ul>
+ <ul>
+ <li><b>Groups:</b>
+ Here you can publish groups with vidalia.
+ Every groups represents a secret cookie. The control elements for the groupmanagement are
+ located below the groupmanagement window.
+ </li>
+ </ul>
+
+ <ul>
+ <li>
+ <b>User:</b> Here you can publish users with vidalia which belong to groups.
+ Every user represents an introduction point authentifcation. The control elements for the usermanagement are
+ located below the usermanagement window.
+
+ </li>
+
</body>
</html>
Modified: branches/hidden-services/src/gui/help/content/en/contents.xml
===================================================================
--- branches/hidden-services/src/gui/help/content/en/contents.xml 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/gui/help/content/en/contents.xml 2007-10-05 15:35:21 UTC (rev 1969)
@@ -41,6 +41,7 @@
<Topic id="general" name="General Settings" html="config.html" section="general"/>
<Topic id="server" name="Server Settings" html="config.html" section="server"/>
<Topic id="advanced" name="Advanced Settings" html="config.html" section="advanced"/>
+ <Topic id="hiddenService" name="Hidden Service" html="config.html" section="hiddenService"/>
</Topic>
<Topic id="server" name="Running a Server" html="server.html">
<Topic id="basic" name="Basic Setup" html="server.html" section="basic"/>
Modified: branches/hidden-services/src/lang/vidalia_de.ts
===================================================================
--- branches/hidden-services/src/lang/vidalia_de.ts 2007-10-05 15:21:30 UTC (rev 1968)
+++ branches/hidden-services/src/lang/vidalia_de.ts 2007-10-05 15:35:21 UTC (rev 1969)
@@ -160,12 +160,8 @@
</message>
<message>
<location filename="../gui/config/advancedpage.cpp" line="253"/>
- <source>Vidalia was unable to remove the Tor service.
-
-You may need to remove it manually.</source>
- <translation>Vidalia konnte den Tor-Dienst nicht entfernen.
-
-Sie müssen ihn manuell entfernen.</translation>
+ <source>Vidalia was unable to remove the Tor service. You may need to remove it manually.</source>
+ <translation>Vidalia konnte den Tor-Dienst nicht entfernen. Sie müssen ihn manuell entfernen.</translation>
</message>
<message>
<location filename="../gui/config/advancedpage.ui" line="693"/>
@@ -253,7 +249,7 @@
</message>
<message>
<location filename="../gui/config/appearancepage.ui" line="354"/>
- <source>Changes to language will only take effect after restarting Vidalia!</source>
+ <source>Changes to language will only take effect after restarting Vidalia.</source>
<translation>Damit die Sprachauswahl gültig wird, muss Vidalia neu gestartet werden.</translation>
</message>
<message>
@@ -761,11 +757,456 @@
<name>HelpTextBrowser</name>
<message>
<location filename="../gui/help/browser/helptextbrowser.cpp" line="59"/>
- <source>Error opening help file: </source>
- <translation>Fehler beim Öffnen der Hilfe: </translation>
+ <source>Error opening help file:</source>
+ <translation>Fehler beim Öffnen der Hilfe:</translation>
</message>
</context>
<context>
+ <name>HiddenservicePage</name>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="89"/>
+ <source>Service Management</source>
+ <translation>Service Verwaltung</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="101"/>
+ <source>Publish/Unpublish Service</source>
+ <translation>Veröffentlichen/Deaktivieren</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="114"/>
+ <source>Delete Service</source>
+ <translation>Service löschen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="207"/>
+ <source>Create new Service</source>
+ <translation>Neuen Service anlegen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="219"/>
+ <source>Service name:</source>
+ <translation>Service Name:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="219"/>
+ <source>Add Service</source>
+ <translation>Service hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="219"/>
+ <source>Local Port:</source>
+ <translation>Lokaler Port:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="260"/>
+ <source>General Settings</source>
+ <translation>Allgemeine Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="301"/>
+ <source>Service adress:</source>
+ <translation>Service Adresse:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="301"/>
+ <source>Listn. Port:</source>
+ <translation>Listn. Port:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="336"/>
+ <source>Start as V0</source>
+ <translation>V0 Service</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="349"/>
+ <source>Start as V2</source>
+ <translation>V2 Service</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="356"/>
+ <source>Start as V0/V2</source>
+ <translation>V0/V2 Service</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="366"/>
+ <source>Advanced Settings</source>
+ <translation>Fortgeschrittene Einstellungen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="378"/>
+ <source>Create Group</source>
+ <translation>Anlegen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="378"/>
+ <source>Groups:</source>
+ <translation>Gruppen:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="404"/>
+ <source>Users:</source>
+ <translation>Benutzer:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="417"/>
+ <source>Delete Group</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="430"/>
+ <source>Modify Group</source>
+ <translation>Ändern </translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="456"/>
+ <source>Modify User</source>
+ <translation>Ändern</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="469"/>
+ <source>Delete User</source>
+ <translation>Löschen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="482"/>
+ <source>Add User</source>
+ <translation>Hinzufügen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="562"/>
+ <source>Group Name</source>
+ <translation>Gruppenname</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="569"/>
+ <source>Active</source>
+ <translation>Aktiv</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.ui" line="474"/>
+ <source>Service Name</source>
+ <translation>Service Name</translation>
+ </message>
+</context>
+<context>
+ <name>Adduserdialog</name>
+ <message>
+ <location filename="../gui/config/adduserdialog.ui" line="747"/>
+ <source>All Users</source>
+ <translation>Alle Benutzer</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/adduserdialog.ui" line="1142"/>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/adduserdialog.ui" line="1510"/>
+ <source>Cancel</source>
+ <translation>Abbrechen</translation>
+ </message>
+</context>
+<context>
+ <name>Groupdialog</name>
+ <message>
+ <location filename="../gui/config/groupdialog.ui" line="380"/>
+ <source>Group Data</source>
+ <translation>Gruppendaten</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/groupdialog.ui" line="420"/>
+ <source>Groupname:</source>
+ <translation>Gruppenname:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/groupdialog.ui" line="447"/>
+ <source>CookieKey:</source>
+ <translation>Cookie Key:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/groupdialog.ui" line="427"/>
+ <source>Confirmation:</source>
+ <translation>Bestätigung:</translation>
+ </message>
+</context>
+<context>
+ <name>Userdialog</name>
+ <message>
+ <location filename="../gui/config/userdialog.ui" line="377"/>
+ <source>User Data</source>
+ <translation>Userdaten</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userdialog.ui" line="482"/>
+ <source>Username:</source>
+ <translation>Benutzername:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userpdialog.ui" line="489"/>
+ <source>Introduction Password:</source>
+ <translation>Introduction Passwort:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userpdialog.ui" line="496"/>
+ <source>Confirmation:</source>
+ <translation>Bestätigung:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userdialog.ui" line="496"/>
+ <source>Authentication Password:</source>
+ <translation>Authentication Passwort:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userdialog.ui" line="510"/>
+ <source>Confirmation:</source>
+ <translation>Bestätigung:</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/userdialog.ui" line="517"/>
+ <source>Public Key:</source>
+ <translation>Public Key:</translation>
+ </message>
+</context>
+<context>
+ <name>HiddenservicePage</name>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="135"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="135"/>
+ <source>Please set all fields.</source>
+ <translation>Bitte alle Felder ausfüllen</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="163"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="163"/>
+ <source>Service name already in use, select a different one.</source>
+ <translation>Service name ist bereits vergeben. Bitte wählen Sie einen anderen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="243"/>
+ <source>Old Tor Version</source>
+ <translation>Alte Tor Version</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="243"/>
+ <source>Your Version of Tor does not support V2 and V0V2 support.</source>
+ <translation>Ihre Tor Version unterstützt kein V2 bzw. V0V2</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="622"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="622"/>
+ <source>Please select service and group.</source>
+ <translation>Bitte wählen sie einen Service und eine Gruppe aus</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="646"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="646"/>
+ <source>Please fill out all fields.</source>
+ <translation>Bitte füllen sie alle Felder aus.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="652"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="652"/>
+ <source>No match for passwords and confirmation fields.</source>
+ <translation>Passwort und Bestätigungsfelder stimmen nicht überein.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="688"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="689"/>
+ <source>The entered user name already exists. Please select a different one.</source>
+ <translation>Der eingegebene Benutzername existiert bereits. Bitte wähle einen anderen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="696"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="697"/>
+ <source>Please select a service and a group.</source>
+ <translation>Bitte wählen sie einen Service und eine Gruppe</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="697"/>
+ <source>Ok</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="740"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="740"/>
+ <source>Please select the user you want to delete.</source>
+ <translation>Bitte selektieren Sie den zu löschenden Benutzer.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="757"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="758"/>
+ <source>Please fill out all fields.</source>
+ <translation>Bitte füllen Sie alle Felder aus.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="764"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="764"/>
+ <source>No match for cookieKey and confirmation field.</source>
+ <translation>CookieKey und Bestätigungsfeld stimmen nicht überein.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="793"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="793"/>
+ <source>Group name already in use, please select a different one.</source>
+ <translation>Gruppenname ist bereits vergeben. Bitte wählen Sie einen anderen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="793"/>
+ <source>Group name already in use, please select a different one.</source>
+ <translation>Gruppenname ist bereits vergeben. Bitte wählen Sie einen anderen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="799"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="799"/>
+ <source>Please select a service associated with the new group.</source>
+ <translation>Bitte wähle einen Service für die neue Gruppe aus</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="724"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="724"/>
+ <source>Please select service and group.</source>
+ <translation>Bitte selektiere einen Service und eine Gruppe</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="849"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="850"/>
+ <source>No match for cookieKey and confirmation field.</source>
+ <translation>Cookie Key und Bestätigungsfeld stimmen nicht überein.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="887"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="887"/>
+ <source>Please select a different group name.</source>
+ <translation>Bitte wähle einen anderen Gruppennamen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="887"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="887"/>
+ <source>Group name has to be entered.</source>
+ <translation>Gruppenname muss eingegeben werden.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="898"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="898"/>
+ <source>Please select service and group.</source>
+ <translation>Bitte wähle einen Service und eine Gruppe aus.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="909"/>
+ <source>Modify Users Data</source>
+ <translation>Benutzerdaten modifizieren</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="931"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="932"/>
+ <source>Please fill out all fields.</source>
+ <translation>Bitte fülle alle Felder aus.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="937"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="938"/>
+ <source>No match for passwords & confirmation fields, please check.</source>
+ <translation>Keine Übereinstimmung zwischen Passwörtern und Bestätigungsfeldern.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="971"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="971"/>
+ <source>Name already in use please try another one.</source>
+ <translation>Der Name ist bereits vergeben, bitte wählen Sie einen anderen.</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="976"/>
+ <source>Error</source>
+ <translation>Fehler</translation>
+ </message>
+ <message>
+ <location filename="../gui/config/hiddenservicepage.cpp" line="976"/>
+ <source>Please select service, group and user.</source>
+ <translation>Bitte wähle einen service, eine Gruppe und einen Benutzer aus.</translation>
+ </message>
+</context>
+<context>
<name>LogEvent</name>
<message>
<location filename="../control/logevent.cpp" line="68"/>