From 246927ac46f9c5c7c3ebfc5f9adb8158b08cb6ab Mon Sep 17 00:00:00 2001 From: drbob Date: Thu, 30 Jul 2009 21:48:54 +0000 Subject: [PATCH] GUI side of the v0.5.0 modifications. * Changes to startup / login function to handle multiple accounts. * Switched on OpenPGP version by default. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1452 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/RetroShare.pro | 2 +- retroshare-gui/src/gui/GenCertDialog.cpp | 21 ++- retroshare-gui/src/gui/StartDialog.cpp | 51 +++++- .../src/gui/plugins/PluginInterface.h | 3 + retroshare-gui/src/main.cpp | 44 +----- retroshare-gui/src/rsiface/rsinit.h | 146 +++++++++++------- retroshare-gui/src/rsiface/rstypes.h | 1 + 7 files changed, 158 insertions(+), 110 deletions(-) diff --git a/retroshare-gui/src/RetroShare.pro b/retroshare-gui/src/RetroShare.pro index 68779ea00..b48a1a107 100644 --- a/retroshare-gui/src/RetroShare.pro +++ b/retroshare-gui/src/RetroShare.pro @@ -97,7 +97,7 @@ LIBS += -L"../../../../lib" -lretroshare -lminiupnpc -lssl -lcrypto # ########################################### -LIBS += -lz #-lgpgme +LIBS += -lz -lgpgme LIBS += -lQtUiTools DEPENDPATH += . \ diff --git a/retroshare-gui/src/gui/GenCertDialog.cpp b/retroshare-gui/src/gui/GenCertDialog.cpp index c476e04e2..8d4cd3ec7 100644 --- a/retroshare-gui/src/gui/GenCertDialog.cpp +++ b/retroshare-gui/src/gui/GenCertDialog.cpp @@ -57,13 +57,13 @@ GenCertDialog::GenCertDialog(QWidget *parent, Qt::WFlags flags) std::list pgpIds; std::list::iterator it; - if (RsInit::GetLogins(pgpIds)) + if (RsInit::GetPGPLogins(pgpIds)) { for(it = pgpIds.begin(); it != pgpIds.end(); it++) { const QVariant & userData = QVariant(QString::fromStdString(*it)); std::string name, email; - RsInit::GetLoginDetails(*it, name, email); + RsInit::GetPGPLoginDetails(*it, name, email); std::cerr << "Adding PGPUser: " << name << " id: " << *it << std::endl; ui.genPGPuser->addItem(QString::fromStdString(name), userData); } @@ -171,15 +171,17 @@ void GenCertDialog::genPerson() #ifdef RS_USE_PGPSSL /* Initialise the PGP user first */ - RsInit::LoadGPGPassword(PGPId, PGPpasswd); + RsInit::SelectGPGAccount(PGPId); + RsInit::LoadGPGPassword(PGPpasswd); #endif - - bool okGen = RsInit::RsGenerateCertificate(genName, genOrg, genLoc, genCountry, passwd, err); + std::string sslId; + bool okGen = RsInit::GenerateSSLCertificate(genName, genOrg, genLoc, genCountry, passwd, sslId, err); if (okGen) { /* complete the process */ + RsInit::LoadPassword(sslId, passwd); loadCertificates(); } else @@ -198,7 +200,8 @@ void GenCertDialog::genPerson() void GenCertDialog::selectFriend() { - + +#if 0 /* still need to find home (first) */ QString fileName = QFileDialog::getOpenFileName(this, tr("Select Trusted Friend"), "", @@ -214,11 +217,15 @@ void GenCertDialog::selectFriend() { ui.genFriend -> setText(""); } +#endif + } void GenCertDialog::checkChanged(int i) { + +#if 0 if (i) { selectFriend(); @@ -231,6 +238,8 @@ void GenCertDialog::checkChanged(int i) RsInit::ValidateTrustedUser(fname, userName); ui.genFriend -> setText(""); } +#endif + } diff --git a/retroshare-gui/src/gui/StartDialog.cpp b/retroshare-gui/src/gui/StartDialog.cpp index be42fc9b5..4a560528f 100644 --- a/retroshare-gui/src/gui/StartDialog.cpp +++ b/retroshare-gui/src/gui/StartDialog.cpp @@ -75,18 +75,52 @@ StartDialog::StartDialog(QWidget *parent, Qt::WFlags flags) * mark last one as default. */ + std::list accountIds; + std::list::iterator it; + std::string preferedId; + RsInit::getPreferedAccountId(preferedId); + int pidx = -1; + int i; + + if (RsInit::getAccountIds(accountIds)) + { + for(it = accountIds.begin(), i = 0; it != accountIds.end(); it++, i++) + { + const QVariant & userData = QVariant(QString::fromStdString(*it)); + std::string gpgid, name, email, sslname; + RsInit::getAccountDetails(*it, gpgid, name, email, sslname); + QString accountName = QString::fromStdString(name); + accountName += "/"; + accountName += QString::fromStdString(sslname); + ui.loadName->addItem(accountName, userData); + + if (preferedId == *it) + { + pidx = i; + } + } + } + + if (pidx > 0) + { + ui.loadName->setCurrentIndex(pidx); + } + +#if 0 std::list pgpIds; std::list::iterator it; - if (RsInit::GetLogins(pgpIds)) + if (RsInit::GetPGPLogins(pgpIds)) { for(it = pgpIds.begin(); it != pgpIds.end(); it++) { const QVariant & userData = QVariant(QString::fromStdString(*it)); std::string name, email; - RsInit::GetLoginDetails(*it, name, email); + RsInit::GetPGPLoginDetails(*it, name, email); ui.loadName->addItem(QString::fromStdString(name), userData); } } +#endif + #else if (RsInit::ValidateCertificate(userName)) @@ -146,6 +180,7 @@ void StartDialog::closeinfodlg() void StartDialog::loadPerson() { + std::string accountId = ""; std::string passwd = ui.loadPasswd->text().toStdString(); #ifdef RS_USE_PGPSSL @@ -162,12 +197,18 @@ void StartDialog::loadPerson() } QVariant data = ui.loadName->itemData(pgpidx); - std::string PGPId = (data.toString()).toStdString(); + accountId = (data.toString()).toStdString(); - RsInit::LoadGPGPassword(PGPId, gpgPasswd); + std::string gpgId, gpgName, gpgEmail, sslName; + if (RsInit::getAccountDetails(accountId, + gpgId, gpgName, gpgEmail, sslName)) + { + RsInit::SelectGPGAccount(gpgId); + RsInit::LoadGPGPassword(gpgPasswd); + } #else #endif - RsInit::LoadPassword(passwd); + RsInit::LoadPassword(accountId, passwd); loadCertificates(); } diff --git a/retroshare-gui/src/gui/plugins/PluginInterface.h b/retroshare-gui/src/gui/plugins/PluginInterface.h index 33f2c15ac..5d64df426 100644 --- a/retroshare-gui/src/gui/plugins/PluginInterface.h +++ b/retroshare-gui/src/gui/plugins/PluginInterface.h @@ -3,10 +3,13 @@ #include +#include +/*** QT_BEGIN_NAMESPACE class QString; class QWidget; QT_END_NAMESPACE +***/ //! a base class for plugins diff --git a/retroshare-gui/src/main.cpp b/retroshare-gui/src/main.cpp index cd4f16464..936b75ada 100644 --- a/retroshare-gui/src/main.cpp +++ b/retroshare-gui/src/main.cpp @@ -39,9 +39,6 @@ #include "rsiface/rsiface.h" #include "rsiface/notifyqt.h" -RsIface *rsiface = NULL; -RsControl *rsicontrol = NULL; - int main(int argc, char *argv[]) { @@ -64,7 +61,7 @@ int main(int argc, char *argv[]) /* Setup The GUI Stuff */ Rshare rshare(args, argc, argv, - QString(RsInit::RsConfigDirectory())); + QString::fromStdString(RsInit::RsConfigDirectory())); /* Login Dialog */ if (!okStart) @@ -74,7 +71,8 @@ int main(int argc, char *argv[]) StartDialog *sd = NULL; bool genCert = false; - if (RsInit::ValidateCertificate(userName)) + std::list accountIds; + if (RsInit::getAccountIds(accountIds) && (accountIds.size() > 0)) { sd = new StartDialog(); sd->show(); @@ -121,37 +119,12 @@ int main(int argc, char *argv[]) } NotifyQt *notify = new NotifyQt(); - RsIface *iface = createRsIface(*notify); - RsControl *rsServer = createRsControl(*iface, *notify); + createRsIface(*notify); + createRsControl(*rsiface, *notify); - - /* save to the global variables */ - rsiface = iface; - rsicontrol = rsServer; - - rsServer->StartupRetroShare(); - RsInit::passwd="" ; - // CleanupRsConfig(config); + rsicontrol->StartupRetroShare(); MainWindow *w = new MainWindow; - //QMainWindow *skinWindow = new QMainWindow(); - - //skinWindow->resize(w->size().width()+15,w->size().width()+15); - //skinWindow->setWindowTitle(w->windowTitle()); - //skinWindow->setCentralWidget(w); - - /* Attach the Dialogs, to the Notify Class */ -// Not needed anymore since the notify class is directly connected by Qt signals/slots to the correct widgets below. -// -// notify->setRsIface(iface); -// notify->setNetworkDialog(w->networkDialog); -// notify->setPeersDialog(w->peersDialog); -// notify->setDirDialog(w->sharedfilesDialog); -// notify->setTransfersDialog(w->transfersDialog); -// notify->setChatDialog(w->chatDialog); -// notify->setMessagesDialog(w->messagesDialog); -// notify->setChannelsDialog(w->channelsDialog); -// notify->setMessengerWindow(w->messengerWindow); // I'm using a signal to transfer the hashing info to the mainwindow, because Qt schedules signals properly to // avoid clashes between infos from threads. @@ -187,13 +160,8 @@ int main(int argc, char *argv[]) { w->show(); - //skinWindow->show(); - } - /* Run Retroshare */ - //int ret = rshare.run(); - /* Startup a Timer to keep the gui's updated */ QTimer *timer = new QTimer(w); timer -> connect(timer, SIGNAL(timeout()), notify, SLOT(UpdateGUI())); diff --git a/retroshare-gui/src/rsiface/rsinit.h b/retroshare-gui/src/rsiface/rsinit.h index 8a5e5b357..729d384eb 100644 --- a/retroshare-gui/src/rsiface/rsinit.h +++ b/retroshare-gui/src/rsiface/rsinit.h @@ -1,78 +1,104 @@ +#ifndef RETROSHARE_INIT_INTERFACE_H +#define RETROSHARE_INIT_INTERFACE_H + +/* + * "$Id: rsiface.h,v 1.9 2007-04-21 19:08:51 rmf24 Exp $" + * + * RetroShare C++ Interface. + * + * Copyright 2004-2006 by Robert Fernie. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License Version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA. + * + * Please report all bugs and problems to "retroshare@lunamutt.com". + * + */ + + /* Initialisation Class (not publicly disclosed to RsIFace) */ /**** * #define RS_USE_PGPSSL 1 ***/ +#define RS_USE_PGPSSL 1 + class RsInit { public: - /* Commandline/Directory options */ + /* reorganised RsInit system */ - static const char *RsConfigDirectory() ; + /* PreLogin */ + static void InitRsConfig() ; + static int InitRetroShare(int argc, char **argv); - static bool setStartMinimised() ; - static int InitRetroShare(int argcIgnored, char **argvIgnored) ; - static int LoadCertificates(bool autoLoginNT) ; + /* Account Details (Combined GPG+SSL Setup) */ + static bool getPreferedAccountId(std::string &id); + static bool getAccountIds(std::list &ids); + static bool getAccountDetails(std::string id, + std::string &gpgId, std::string &gpgName, + std::string &gpgEmail, std::string &sslName); + static bool ValidateCertificate(std::string &userName) ; - static bool ValidateTrustedUser(std::string fname, std::string &userName) ; - static bool LoadPassword(std::string passwd) ; - static bool RsGenerateCertificate(std::string name, std::string org, std::string loc, std::string country, std::string passwd, std::string &errString); - static void load_check_basedir() ; - static int create_configinit() ; + + + /* Generating GPGme Account */ + static int GetPGPLogins(std::list &pgpIds); + static int GetPGPLoginDetails(std::string id, std::string &name, std::string &email); + static bool GeneratePGPCertificate(std::string name, std::string comment, std::string email, std::string passwd, std::string &pgpId, std::string &errString); + + /* Login PGP */ + static bool SelectGPGAccount(std::string id); + static bool LoadGPGPassword(std::string passwd); + + /* Create SSL Certificates */ + static bool GenerateSSLCertificate(std::string name, std::string org, std::string loc, std::string country, std::string passwd, std::string &sslId, std::string &errString); + + /* Login SSL */ + static bool LoadPassword(std::string id, std::string passwd) ; + + /* Final Certificate load. This can be called if: + * a) InitRetroshare() returns true -> autoLoad/password Set. + * b) SelectGPGAccount() && LoadPassword() + */ + static int LoadCertificates(bool autoLoginNT) ; + + + /* Post Login Options */ + static std::string RsConfigDirectory(); + static bool setStartMinimised() ; + + + private: + /* PreLogin */ + static std::string getHomePath() ; + static void setupBaseDir(); + + /* Account Details */ + static bool get_configinit(std::string dir, std::string &id); + static bool create_configinit(std::string dir, std::string id); + + static bool setupAccount(std::string accountdir); + + /* Auto Login */ static bool RsStoreAutoLogin() ; static bool RsTryAutoLogin() ; - static bool RsClearAutoLogin(std::string basedir) ; - static void InitRsConfig() ; + static bool RsClearAutoLogin() ; - static std::string getHomePath() ; - - /* PGPSSL init functions */ - -#ifdef RS_USE_PGPSSL - static bool LoadGPGPassword(std::string id, std::string passwd); - static int GetLogins(std::list &pgpIds); - static int GetLoginDetails(std::string id, std::string &name, std::string &email); - - static std::string gpgPasswd; -#endif - - /* Key Parameters that must be set before - * RetroShare will start up: - */ - static std::string load_cert; - static std::string load_key; - static std::string passwd; - - static bool havePasswd; /* for Commandline password */ - static bool autoLogin; /* autoLogin allowed */ - static bool startMinimised; /* Icon or Full Window */ - - /* Win/Unix Differences */ - static char dirSeperator; - - /* Directories */ - static std::string basedir; - static std::string homePath; - - /* Listening Port */ - static bool forceExtPort; - static bool forceLocalAddr; - static unsigned short port; - static char inet[256]; - - /* Logging */ - static bool haveLogFile; - static bool outStderr; - static bool haveDebugLevel; - static int debugLevel; - static char logfname[1024]; - - static bool firsttime_run; - static bool load_trustedpeer; - static std::string load_trustedpeer_file; - - static bool udpListenerOnly; }; + +#endif diff --git a/retroshare-gui/src/rsiface/rstypes.h b/retroshare-gui/src/rsiface/rstypes.h index b80757a46..cd391655a 100644 --- a/retroshare-gui/src/rsiface/rstypes.h +++ b/retroshare-gui/src/rsiface/rstypes.h @@ -128,6 +128,7 @@ class RsConfig int maxDownloadDataRate; /* kb */ int maxUploadDataRate; /* kb */ + int maxIndivDataRate; /* kb */ int promptAtBoot; /* popup the password prompt */