From 68ca57ce75958269efda1e89fe9e18c3fb0177df Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 10 Oct 2015 18:27:15 -0400 Subject: [PATCH] added removal of messages frm banned users --- libretroshare/src/gxs/rsgxsnetservice.cc | 5 +- libretroshare/src/services/p3gxsreputation.cc | 6 +++ retroshare-gui/src/gui/gxs/GxsIdDetails.h | 9 ++-- .../gui/gxsforums/GxsForumThreadWidget.cpp | 53 ++++++++++++++----- .../src/gui/gxsforums/GxsForumThreadWidget.h | 2 +- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/libretroshare/src/gxs/rsgxsnetservice.cc b/libretroshare/src/gxs/rsgxsnetservice.cc index 8806b4e1c..c6503d3d4 100644 --- a/libretroshare/src/gxs/rsgxsnetservice.cc +++ b/libretroshare/src/gxs/rsgxsnetservice.cc @@ -30,6 +30,7 @@ #include "rsgxsnetservice.h" #include "retroshare/rsconfig.h" +#include "retroshare/rsreputations.h" #include "retroshare/rsgxsflags.h" #include "retroshare/rsgxscircles.h" #include "pgp/pgpauxutils.h" @@ -2009,7 +2010,7 @@ void RsGxsNetService::locked_genReqMsgTransaction(NxsTransaction* tr) // if author is required for this message, it will simply get dropped // at genexchange side of things - if(rep.score > (int)grpMeta->mReputationCutOff || noAuthor) + if(rsReputations->isIdentityOk(syncItem->authorId) && rep.score > (int)grpMeta->mReputationCutOff || noAuthor) { #ifdef NXS_NET_DEBUG std::cerr << ", passed! Adding message to req list." << std::endl; @@ -2225,7 +2226,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr) GixsReputation rep; mReputations->getReputation(grpSyncItem->authorId, rep); - if(rep.score >= GIXS_CUT_OFF) + if(rep.score >= GIXS_CUT_OFF && rsReputations->isIdentityOk(grpSyncItem->authorId)) { addGroupItemToList(tr, grpId, transN, reqList); std::cerr << " reputation cut off: limit=" << GIXS_CUT_OFF << " value=" << rep.score << ": allowed." << std::endl; diff --git a/libretroshare/src/services/p3gxsreputation.cc b/libretroshare/src/services/p3gxsreputation.cc index 2056e03f9..fa53c5a8a 100644 --- a/libretroshare/src/services/p3gxsreputation.cc +++ b/libretroshare/src/services/p3gxsreputation.cc @@ -567,6 +567,12 @@ bool p3GxsReputation::setOwnOpinion(const RsGxsId& gxsid, const RsReputations::O #ifdef DEBUG_REPUTATION std::cerr << "setOwnOpinion(): for GXS id " << gxsid << " to " << opinion << std::endl; #endif + if(gxsid.isNull()) + { + std::cerr << " ID " << gxsid << " is rejected. Look for a bug in calling method." << std::endl; + return false ; + } + RsStackMutex stack(mReputationMtx); /****** LOCKED MUTEX *******/ std::map::iterator rit; diff --git a/retroshare-gui/src/gui/gxs/GxsIdDetails.h b/retroshare-gui/src/gui/gxs/GxsIdDetails.h index 06747e71e..53ce44729 100644 --- a/retroshare-gui/src/gui/gxs/GxsIdDetails.h +++ b/retroshare-gui/src/gui/gxs/GxsIdDetails.h @@ -49,10 +49,11 @@ class GxsIdDetails : public QObject Q_OBJECT public: - static const int ICON_TYPE_AVATAR = 0x0001 ; - static const int ICON_TYPE_PGP = 0x0002 ; - static const int ICON_TYPE_RECOGN = 0x0004 ; - static const int ICON_TYPE_ALL = 0x0007 ; + static const int ICON_TYPE_AVATAR = 0x0001 ; + static const int ICON_TYPE_PGP = 0x0002 ; + static const int ICON_TYPE_RECOGN = 0x0004 ; + static const int ICON_TYPE_ALL = 0x0007 ; + static const int ICON_TYPE_REDACTED= 0x0008 ; GxsIdDetails(); virtual ~GxsIdDetails(); diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp index 0f2f656d3..8a3c1befe 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumThreadWidget.cpp @@ -83,6 +83,7 @@ #define ROLE_THREAD_READCHILDREN Qt::UserRole + 4 #define ROLE_THREAD_UNREADCHILDREN Qt::UserRole + 5 #define ROLE_THREAD_SORT Qt::UserRole + 6 +#define ROLE_THREAD_REDACTED Qt::UserRole + 7 #define ROLE_THREAD_COUNT 4 @@ -408,7 +409,8 @@ void GxsForumThreadWidget::threadListCustomPopupMenu(QPoint /*point*/) QAction *replyauthorAct = new QAction(QIcon(IMAGE_MESSAGEREPLY), tr("Reply with private message"), &contextMnu); connect(replyauthorAct, SIGNAL(triggered()), this, SLOT(replytomessage())); - QAction *flagasbadAct = new QAction(QIcon(IMAGE_BIOHAZARD), tr("Flag this person as bad"), &contextMnu); + QAction *flagasbadAct = new QAction(QIcon(IMAGE_BIOHAZARD), tr("Flag the author as bad"), &contextMnu); + flagasbadAct->setToolTip(tr("This will block/hide messages from this person, and notify neighbor nodes.")) ; connect(flagasbadAct, SIGNAL(triggered()), this, SLOT(flagpersonasbad())); QAction *newthreadAct = new QAction(QIcon(IMAGE_MESSAGE), tr("Start New Thread"), &contextMnu); @@ -893,12 +895,21 @@ void GxsForumThreadWidget::fillThreadStatus(QString text) QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForumMsg &msg, bool useChildTS, uint32_t filterColumn) { - GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(mThreadCompareRole,GxsIdDetails::ICON_TYPE_ALL); + // Early check for a message that should be hidden because its author + // is flagged with a bad reputation + + + bool redacted = !rsReputations->isIdentityOk(msg.mMeta.mAuthorId) ; + + GxsIdRSTreeWidgetItem *item = new GxsIdRSTreeWidgetItem(mThreadCompareRole,GxsIdDetails::ICON_TYPE_ALL || (redacted?(GxsIdDetails::ICON_TYPE_REDACTED):0)); item->moveToThread(ui->threadTreeWidget->thread()); QString text; - item->setText(COLUMN_THREAD_TITLE, QString::fromUtf8(msg.mMeta.mMsgName.c_str())); + if(redacted) + item->setText(COLUMN_THREAD_TITLE, tr("[ ... Redacted message ... ]")); + else + item->setText(COLUMN_THREAD_TITLE, QString::fromUtf8(msg.mMeta.mMsgName.c_str())); QDateTime qtime; QString sort; @@ -968,9 +979,9 @@ QTreeWidgetItem *GxsForumThreadWidget::convertMsgToThreadWidget(const RsGxsForum } #endif item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_STATUS, msg.mMeta.mMsgStatus); - item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_MISSING, false); - + item->setData(COLUMN_THREAD_DATA, ROLE_THREAD_REDACTED, redacted); + return item; } @@ -1308,6 +1319,8 @@ void GxsForumThreadWidget::insertMessageData(const RsGxsForumMsg &msg) return; } + bool redacted = !rsReputations->isIdentityOk(msg.mMeta.mAuthorId) ; + mStateHelper->setActive(mTokenTypeMessageData, true); QTreeWidgetItem *item = ui->threadTreeWidget->currentItem(); @@ -1341,9 +1354,18 @@ void GxsForumThreadWidget::insertMessageData(const RsGxsForumMsg &msg) ui->by_text_label->show() ; ui->by_label->show() ; - QString extraTxt = RsHtml().formatText(ui->postText->document(), QString::fromUtf8(msg.mMsg.c_str()), RSHTML_FORMATTEXT_EMBED_SMILEYS | RSHTML_FORMATTEXT_EMBED_LINKS); - + if(redacted) + { + QString extraTxt = tr("

The author of this message (with ID %1) is banned.").arg(QString::fromStdString(msg.mMeta.mAuthorId.toStdString())) ; + extraTxt += "