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
This commit is contained in:
drbob 2009-07-30 21:48:54 +00:00
parent a023a0bfcd
commit 246927ac46
7 changed files with 158 additions and 110 deletions

View File

@ -97,7 +97,7 @@ LIBS += -L"../../../../lib" -lretroshare -lminiupnpc -lssl -lcrypto
# ########################################### # ###########################################
LIBS += -lz #-lgpgme LIBS += -lz -lgpgme
LIBS += -lQtUiTools LIBS += -lQtUiTools
DEPENDPATH += . \ DEPENDPATH += . \

View File

@ -57,13 +57,13 @@ GenCertDialog::GenCertDialog(QWidget *parent, Qt::WFlags flags)
std::list<std::string> pgpIds; std::list<std::string> pgpIds;
std::list<std::string>::iterator it; std::list<std::string>::iterator it;
if (RsInit::GetLogins(pgpIds)) if (RsInit::GetPGPLogins(pgpIds))
{ {
for(it = pgpIds.begin(); it != pgpIds.end(); it++) for(it = pgpIds.begin(); it != pgpIds.end(); it++)
{ {
const QVariant & userData = QVariant(QString::fromStdString(*it)); const QVariant & userData = QVariant(QString::fromStdString(*it));
std::string name, email; std::string name, email;
RsInit::GetLoginDetails(*it, name, email); RsInit::GetPGPLoginDetails(*it, name, email);
std::cerr << "Adding PGPUser: " << name << " id: " << *it << std::endl; std::cerr << "Adding PGPUser: " << name << " id: " << *it << std::endl;
ui.genPGPuser->addItem(QString::fromStdString(name), userData); ui.genPGPuser->addItem(QString::fromStdString(name), userData);
} }
@ -171,15 +171,17 @@ void GenCertDialog::genPerson()
#ifdef RS_USE_PGPSSL #ifdef RS_USE_PGPSSL
/* Initialise the PGP user first */ /* Initialise the PGP user first */
RsInit::LoadGPGPassword(PGPId, PGPpasswd); RsInit::SelectGPGAccount(PGPId);
RsInit::LoadGPGPassword(PGPpasswd);
#endif #endif
std::string sslId;
bool okGen = RsInit::RsGenerateCertificate(genName, genOrg, genLoc, genCountry, passwd, err); bool okGen = RsInit::GenerateSSLCertificate(genName, genOrg, genLoc, genCountry, passwd, sslId, err);
if (okGen) if (okGen)
{ {
/* complete the process */ /* complete the process */
RsInit::LoadPassword(sslId, passwd);
loadCertificates(); loadCertificates();
} }
else else
@ -198,7 +200,8 @@ void GenCertDialog::genPerson()
void GenCertDialog::selectFriend() void GenCertDialog::selectFriend()
{ {
#if 0
/* still need to find home (first) */ /* still need to find home (first) */
QString fileName = QFileDialog::getOpenFileName(this, tr("Select Trusted Friend"), "", QString fileName = QFileDialog::getOpenFileName(this, tr("Select Trusted Friend"), "",
@ -214,11 +217,15 @@ void GenCertDialog::selectFriend()
{ {
ui.genFriend -> setText("<Invalid Selected>"); ui.genFriend -> setText("<Invalid Selected>");
} }
#endif
} }
void GenCertDialog::checkChanged(int i) void GenCertDialog::checkChanged(int i)
{ {
#if 0
if (i) if (i)
{ {
selectFriend(); selectFriend();
@ -231,6 +238,8 @@ void GenCertDialog::checkChanged(int i)
RsInit::ValidateTrustedUser(fname, userName); RsInit::ValidateTrustedUser(fname, userName);
ui.genFriend -> setText("<None Selected>"); ui.genFriend -> setText("<None Selected>");
} }
#endif
} }

View File

@ -75,18 +75,52 @@ StartDialog::StartDialog(QWidget *parent, Qt::WFlags flags)
* mark last one as default. * mark last one as default.
*/ */
std::list<std::string> accountIds;
std::list<std::string>::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<std::string> pgpIds; std::list<std::string> pgpIds;
std::list<std::string>::iterator it; std::list<std::string>::iterator it;
if (RsInit::GetLogins(pgpIds)) if (RsInit::GetPGPLogins(pgpIds))
{ {
for(it = pgpIds.begin(); it != pgpIds.end(); it++) for(it = pgpIds.begin(); it != pgpIds.end(); it++)
{ {
const QVariant & userData = QVariant(QString::fromStdString(*it)); const QVariant & userData = QVariant(QString::fromStdString(*it));
std::string name, email; std::string name, email;
RsInit::GetLoginDetails(*it, name, email); RsInit::GetPGPLoginDetails(*it, name, email);
ui.loadName->addItem(QString::fromStdString(name), userData); ui.loadName->addItem(QString::fromStdString(name), userData);
} }
} }
#endif
#else #else
if (RsInit::ValidateCertificate(userName)) if (RsInit::ValidateCertificate(userName))
@ -146,6 +180,7 @@ void StartDialog::closeinfodlg()
void StartDialog::loadPerson() void StartDialog::loadPerson()
{ {
std::string accountId = "";
std::string passwd = ui.loadPasswd->text().toStdString(); std::string passwd = ui.loadPasswd->text().toStdString();
#ifdef RS_USE_PGPSSL #ifdef RS_USE_PGPSSL
@ -162,12 +197,18 @@ void StartDialog::loadPerson()
} }
QVariant data = ui.loadName->itemData(pgpidx); 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 #else
#endif #endif
RsInit::LoadPassword(passwd); RsInit::LoadPassword(accountId, passwd);
loadCertificates(); loadCertificates();
} }

View File

@ -3,10 +3,13 @@
#include <QtPlugin> #include <QtPlugin>
#include <QString>
/***
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QString; class QString;
class QWidget; class QWidget;
QT_END_NAMESPACE QT_END_NAMESPACE
***/
//! a base class for plugins //! a base class for plugins

View File

@ -39,9 +39,6 @@
#include "rsiface/rsiface.h" #include "rsiface/rsiface.h"
#include "rsiface/notifyqt.h" #include "rsiface/notifyqt.h"
RsIface *rsiface = NULL;
RsControl *rsicontrol = NULL;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
@ -64,7 +61,7 @@ int main(int argc, char *argv[])
/* Setup The GUI Stuff */ /* Setup The GUI Stuff */
Rshare rshare(args, argc, argv, Rshare rshare(args, argc, argv,
QString(RsInit::RsConfigDirectory())); QString::fromStdString(RsInit::RsConfigDirectory()));
/* Login Dialog */ /* Login Dialog */
if (!okStart) if (!okStart)
@ -74,7 +71,8 @@ int main(int argc, char *argv[])
StartDialog *sd = NULL; StartDialog *sd = NULL;
bool genCert = false; bool genCert = false;
if (RsInit::ValidateCertificate(userName)) std::list<std::string> accountIds;
if (RsInit::getAccountIds(accountIds) && (accountIds.size() > 0))
{ {
sd = new StartDialog(); sd = new StartDialog();
sd->show(); sd->show();
@ -121,37 +119,12 @@ int main(int argc, char *argv[])
} }
NotifyQt *notify = new NotifyQt(); NotifyQt *notify = new NotifyQt();
RsIface *iface = createRsIface(*notify); createRsIface(*notify);
RsControl *rsServer = createRsControl(*iface, *notify); createRsControl(*rsiface, *notify);
rsicontrol->StartupRetroShare();
/* save to the global variables */
rsiface = iface;
rsicontrol = rsServer;
rsServer->StartupRetroShare();
RsInit::passwd="" ;
// CleanupRsConfig(config);
MainWindow *w = new MainWindow; 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 // 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. // avoid clashes between infos from threads.
@ -187,13 +160,8 @@ int main(int argc, char *argv[])
{ {
w->show(); w->show();
//skinWindow->show();
} }
/* Run Retroshare */
//int ret = rshare.run();
/* Startup a Timer to keep the gui's updated */ /* Startup a Timer to keep the gui's updated */
QTimer *timer = new QTimer(w); QTimer *timer = new QTimer(w);
timer -> connect(timer, SIGNAL(timeout()), notify, SLOT(UpdateGUI())); timer -> connect(timer, SIGNAL(timeout()), notify, SLOT(UpdateGUI()));

View File

@ -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) */ /* Initialisation Class (not publicly disclosed to RsIFace) */
/**** /****
* #define RS_USE_PGPSSL 1 * #define RS_USE_PGPSSL 1
***/ ***/
#define RS_USE_PGPSSL 1
class RsInit class RsInit
{ {
public: 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() ; /* Account Details (Combined GPG+SSL Setup) */
static int InitRetroShare(int argcIgnored, char **argvIgnored) ; static bool getPreferedAccountId(std::string &id);
static int LoadCertificates(bool autoLoginNT) ; static bool getAccountIds(std::list<std::string> &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 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); /* Generating GPGme Account */
static void load_check_basedir() ; static int GetPGPLogins(std::list<std::string> &pgpIds);
static int create_configinit() ; 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 RsStoreAutoLogin() ;
static bool RsTryAutoLogin() ; static bool RsTryAutoLogin() ;
static bool RsClearAutoLogin(std::string basedir) ; static bool RsClearAutoLogin() ;
static void InitRsConfig() ;
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<std::string> &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

View File

@ -128,6 +128,7 @@ class RsConfig
int maxDownloadDataRate; /* kb */ int maxDownloadDataRate; /* kb */
int maxUploadDataRate; /* kb */ int maxUploadDataRate; /* kb */
int maxIndivDataRate; /* kb */
int promptAtBoot; /* popup the password prompt */ int promptAtBoot; /* popup the password prompt */