From 77cb7314bc6ab3cd132a8de594944565717c0777 Mon Sep 17 00:00:00 2001 From: drbob Date: Sat, 29 Nov 2008 20:17:58 +0000 Subject: [PATCH] Tweaked tabs and order. Added NewsFeed. Added Template functions for ssl+xpgp code. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@853 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/pqi/gpgauthmgr.cc | 88 +++++++++++++++++++++++++++ libretroshare/src/pqi/gpgauthmgr.h | 27 ++++++++ retroshare-gui/src/gui/MainWindow.cpp | 61 ++++++++++++++----- 3 files changed, 160 insertions(+), 16 deletions(-) diff --git a/libretroshare/src/pqi/gpgauthmgr.cc b/libretroshare/src/pqi/gpgauthmgr.cc index 428d3879e..7722b1953 100644 --- a/libretroshare/src/pqi/gpgauthmgr.cc +++ b/libretroshare/src/pqi/gpgauthmgr.cc @@ -310,3 +310,91 @@ bool GPGAuthMgr::SignData(const void *data, const uint32_t len, std::string &sig } + + + + + + + + +#if 0 + +bool setupSSL(SSL_CTX *ctx) +{ + /* signer is done by pgp, so we have to manually authenticate the certificate. + */ + + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_pgp_callback); + SSL_CTX_set_verify_depth(1); + + /* generate a certificate */ + +} + + +static int verify_pgp_callback(int preverify_ok, X509_STORE_CTX *ctx) +{ + char buf[256]; + X509 *err_cert; + int err, depth; + SSL *ssl; + mydata_t *mydata; + + err_cert = X509_STORE_CTX_get_current_cert(ctx); + err = X509_STORE_CTX_get_error(ctx); + depth = X509_STORE_CTX_get_error_depth(ctx); + + /* + * Retrieve the pointer to the SSL of the connection currently treated + * and the application specific data stored into the SSL object. + */ + ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); + mydata = SSL_get_ex_data(ssl, mydata_index); + + X509_NAME_oneline(X509_get_subject_name(err_cert), buf, 256); + + /* + * Catch a too long certificate chain. The depth limit set using + * SSL_CTX_set_verify_depth() is by purpose set to "limit+1" so + * that whenever the "depth>verify_depth" condition is met, we + * have violated the limit and want to log this error condition. + * We must do it here, because the CHAIN_TOO_LONG error would not + * be found explicitly; only errors introduced by cutting off the + * additional certificates would be logged. + */ + + + if (depth > mydata->verify_depth) { + preverify_ok = 0; + err = X509_V_ERR_CERT_CHAIN_TOO_LONG; + X509_STORE_CTX_set_error(ctx, err); + } + if (!preverify_ok) { + printf("verify error:num=%d:%s:depth=%d:%s\n", err, + X509_verify_cert_error_string(err), depth, buf); + } + else if (mydata->verbose_mode) + { + printf("depth=%d:%s\n", depth, buf); + } + + /* + * At this point, err contains the last verification error. We can use + * it for something special + */ + + if (!preverify_ok && (err == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT)) + { + X509_NAME_oneline(X509_get_issuer_name(ctx->current_cert), buf, 256); + printf("issuer= %s\n", buf); + } + + if (mydata->always_continue) + return 1; + else + return preverify_ok; +} + +#endif + diff --git a/libretroshare/src/pqi/gpgauthmgr.h b/libretroshare/src/pqi/gpgauthmgr.h index 48f328613..3b15fbcb9 100644 --- a/libretroshare/src/pqi/gpgauthmgr.h +++ b/libretroshare/src/pqi/gpgauthmgr.h @@ -157,6 +157,24 @@ class GPGAuthMgr: public p3AuthMgr bool SignData(std::string input, std::string &sign); bool SignData(const void *data, const uint32_t len, std::string &sign); +/*********************************************************************************/ +/************************* PGP Specific functions ********************************/ +/*********************************************************************************/ + +/* + * These support the authentication process. + * + */ + +/* + * + */ + +bool checkSignature(std::string id, std::string hash, std::string signature); + + + + /*********************************************************************************/ /************************* OTHER FUNCTIONS ***************************************/ /*********************************************************************************/ @@ -182,6 +200,15 @@ class GPGAuthMgr: public p3AuthMgr gpgme_ctx_t CTX; }; +/***** + * + * Support Functions for OpenSSL verification. + * + */ + +int verify_pgp_callback(int preverify_ok, X509_STORE_CTX *ctx); + + #endif diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index f54775ac2..5741a4360 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -27,12 +27,17 @@ #include #include -#include "ChannelFeed.h" -#include "ForumsDialog.h" + +#include "NetworkView.h" #include "LinksDialog.h" -#include "GamesDialog.h" #include "PhotoDialog.h" -#include "channels/channelsDialog.h" +#include "ForumsDialog.h" +#include "NewsFeed.h" +#include "PeersFeed.h" +#include "TransferFeed.h" +#include "MsgFeed.h" +#include "ChannelFeed.h" + #include #include "MainWindow.h" @@ -93,6 +98,7 @@ #define IMAGE_MINIMIZE ":/images/window_nofullscreen.png" #define IMAGE_MAXIMIZE ":/images/window_fullscreen.png" #define IMG_HELP ":/images/help.png" +#define IMAGE_NEWSFEED ":/images/konqsidebar_news24.png" /* Keys for UI Preferences */ #define UI_PREF_PROMPT_ON_QUIT "UIOptions/ConfirmOnQuit" @@ -160,26 +166,40 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags) QActionGroup *grp = new QActionGroup(this); - ui.stackPages->add(networkDialog = new NetworkDialog(ui.stackPages), - createPageAction(QIcon(IMAGE_NETWORK), tr("Network"), grp)); + NewsFeed *newsFeed = NULL; + ui.stackPages->add(newsFeed = new NewsFeed(ui.stackPages), + createPageAction(QIcon(IMAGE_NEWSFEED), tr("News Feed"), grp)); + ui.stackPages->add(peersDialog = new PeersDialog(ui.stackPages), createPageAction(QIcon(IMAGE_PEERS), tr("Friends"), grp)); - + + //PeersFeed *peersFeed = NULL; + //ui.stackPages->add(peersFeed = new PeersFeed(ui.stackPages), + // createPageAction(QIcon(IMAGE_PEERS), tr("Peers"), grp)); + ui.stackPages->add(searchDialog = new SearchDialog(ui.stackPages), createPageAction(QIcon(IMAGE_SEARCH), tr("Search"), grp)); ui.stackPages->add(transfersDialog = new TransfersDialog(ui.stackPages), - createPageAction(QIcon(IMAGE_TRANSFERS), tr("Transfers"), grp)); + createPageAction(QIcon(IMAGE_TRANSFERS), tr("Transfers"), grp)); + //TransferFeed *transferFeed = NULL; + //ui.stackPages->add(transferFeed = new TransferFeed(ui.stackPages), + // createPageAction(QIcon(IMAGE_LINKS), tr("Transfers"), grp)); + ui.stackPages->add(sharedfilesDialog = new SharedFilesDialog(ui.stackPages), createPageAction(QIcon(IMAGE_FILES), tr("Files"), grp)); //ui.stackPages->add(chatDialog = new ChatDialog(ui.stackPages), // createPageAction(QIcon(IMAGE_CHAT), tr("Chat"), grp)); + //MsgFeed *msgFeed = NULL; + //ui.stackPages->add(msgFeed = new MsgFeed(ui.stackPages), + // createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp)); + ui.stackPages->add(messagesDialog = new MessagesDialog(ui.stackPages), - createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp)); + createPageAction(QIcon(IMAGE_MESSAGES), tr("Messages"), grp)); LinksDialog *linksDialog = NULL; @@ -197,6 +217,7 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags) ui.stackPages->add(forumsDialog = new ForumsDialog(ui.stackPages), createPageAction(QIcon(IMAGE_FORUMS), tr("Forums"), grp)); + #else channelsDialog = NULL; ui.stackPages->add(linksDialog = new LinksDialog(ui.stackPages), @@ -211,6 +232,10 @@ MainWindow::MainWindow(QWidget* parent, Qt::WFlags flags) #endif + ui.stackPages->add(networkDialog = new NetworkDialog(ui.stackPages), + createPageAction(QIcon(IMAGE_NETWORK), tr("Network"), grp)); + + //ui.stackPages->add(new HelpDialog(ui.stackPages), // createPageAction(QIcon(IMAGE_ABOUT), tr("About/Help"), grp)); @@ -540,8 +565,8 @@ void MainWindow::createActions() _appAct = new QAction(QIcon(IMAGE_UNFINISHED), tr("Applications"), this); connect(_appAct, SIGNAL(triggered()),this, SLOT(showApplWindow())); - _smplayerAct = new QAction(QIcon(IMAGE_SMPLAYER), tr("SMPlayer"), this); - connect(_smplayerAct, SIGNAL(triggered()),this, SLOT(showsmplayer())); + //_smplayerAct = new QAction(QIcon(IMAGE_SMPLAYER), tr("SMPlayer"), this); + //connect(_smplayerAct, SIGNAL(triggered()),this, SLOT(showsmplayer())); _helpAct = new QAction(QIcon(IMG_HELP), tr("Help"), this); connect(_helpAct, SIGNAL(triggered()), this, SLOT(showHelpDialog())); @@ -668,14 +693,17 @@ void MainWindow::startqcheckers() /** Shows smplayer */ void MainWindow::showsmplayer() { - static SMPlayer * smplayer = 0; - + return; + if (mSMPlayer == 0) { mSMPlayer = new SMPlayer(QString::null, this); + mSMPlayer->gui()->hide(); + } + else + { + mSMPlayer->gui()->show(); } - mSMPlayer->gui()->show(); - } void MainWindow::playFiles(QStringList files) @@ -686,7 +714,8 @@ void MainWindow::playFiles(QStringList files) std::cerr << "MainWindow::playFiles() showsmplayer() done" << std::endl; - mSMPlayer->gui()->openFiles(files); + if (mSMPlayer) + mSMPlayer->gui()->openFiles(files); std::cerr << "MainWindow::playFiles() done" << std::endl; }