[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&ouml;glicht es Ihnen die am gebr&auml;chlisten Einstellungen
 von Vidalia und Tor vorzunehmen. Au&szlig;erdem k&ouml;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&ouml;ffentlichen wollen.
+</p>
+<ul>
+    <li><b>Services</b>:
+    Hier werden alle Services aufgef&uuml;hrt die Vidalia bekannt sind. Die linke Spalte zeigt
+    den Namen des Services, die rechte Spalte gibt an ob der Service bereits ver&ouml;ffentlicht
+    ist oder nicht (angekreuzte Checkbox steht f&uuml;r einen bereits ver&ouml;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&auml;tzlich f&uuml;r jeden Service gesetzt werden m&uuml;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&auml;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>
+    &nbsp;Diese Einstellungen werden nur aktiv, wenn es sich um einen v2 Service handelt.   
+    </ul>
+    <ul>
+    <li><b>Gruppen:</b>
+    Hier k&ouml;nnen Sie Vidalia veranlassen, f&uuml;r einen Service Gruppen anzulegen.
+    Jede Gruppe steht dabei f&uuml;r einen Secret Cookie. Die Bedienelemente f&uuml;r das Gruppenmanagement
+    befinden sich direkt unter dem Groups Fenster.
+    </li>
+    </ul>  
+    <ul>
+    <li>
+    <b>Benutzer:</b> &nbsp;Hier k&ouml;nnen Sie Vidalia veranlassen, zu einer Gruppe Benutzer&nbsp;anzulegen.
+    Jeder Benutzer&nbsp;wird mit steht dabei f&uuml;r einen Secret Cookie. Die Bedienelemente f&uuml;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 &amp; 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>
+        &nbsp;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"/>