fixed problem in ID creation code.

This commit is contained in:
csoler 2017-02-07 20:15:55 +01:00
parent 9226ccc5ca
commit 37f3e1a62a
11 changed files with 48 additions and 31 deletions

View file

@ -109,7 +109,7 @@ void ForumHandler::handleWildcard(Request &req, Response &resp)
//KeyValueReference<RsPgpId> pgp_id("pgp_id",grp.mPgpId ); //KeyValueReference<RsPgpId> pgp_id("pgp_id",grp.mPgpId );
// not very happy about this, i think the flags should stay hidden in rsidentities // not very happy about this, i think the flags should stay hidden in rsidentities
bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN); bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID); bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility);
bool subscribed = IS_GROUP_SUBSCRIBED(grp.mMeta.mSubscribeFlags); bool subscribed = IS_GROUP_SUBSCRIBED(grp.mMeta.mSubscribeFlags);
resp.mDataStream.getStreamToMember() resp.mDataStream.getStreamToMember()
<< id << id

View file

@ -156,8 +156,7 @@ void IdentityHandler::handleWildcard(Request & /*req*/, Response &resp)
RsGxsIdGroup& grp = *vit; RsGxsIdGroup& grp = *vit;
//electron: not very happy about this, i think the flags should stay hidden in rsidentities //electron: not very happy about this, i think the flags should stay hidden in rsidentities
bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN); bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID); bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecateRSGXSID_GROUPFLAG_REALID_kept_for_compatibilityMember()
resp.mDataStream.getStreamToMember()
<< makeKeyValueReference("id", grp.mMeta.mGroupId) /// @deprecated using "id" as key can cause problems in some JS based languages like Qml @see gxs_id instead << makeKeyValueReference("id", grp.mMeta.mGroupId) /// @deprecated using "id" as key can cause problems in some JS based languages like Qml @see gxs_id instead
<< makeKeyValueReference("gxs_id", grp.mMeta.mGroupId) << makeKeyValueReference("gxs_id", grp.mMeta.mGroupId)
<< makeKeyValueReference("pgp_id",grp.mPgpId ) << makeKeyValueReference("pgp_id",grp.mPgpId )

View file

@ -1569,7 +1569,9 @@ bool RsGenExchange::checkGroupMetaConsistency(const RsGroupMetaData& meta)
return false; return false;
} }
if(meta.mGroupFlags != GXS_SERV::FLAG_PRIVACY_PUBLIC && meta.mGroupFlags != GXS_SERV::FLAG_PRIVACY_RESTRICTED && meta.mGroupFlags != GXS_SERV::FLAG_PRIVACY_PRIVATE) uint32_t gf = meta.mGroupFlags & GXS_SERV::FLAG_PRIVACY_MASK ;
if(gf != GXS_SERV::FLAG_PRIVACY_PUBLIC && gf != GXS_SERV::FLAG_PRIVACY_RESTRICTED && gf != GXS_SERV::FLAG_PRIVACY_PRIVATE)
{ {
std::cerr << "(EE) mGroupFlags has incorrect value " << std::hex << meta.mGroupFlags << std::dec << ". A value among GXS_SERV::FLAG_PRIVACY_{PUBLIC,RESTRICTED,PRIVATE} is expected." << std::endl; std::cerr << "(EE) mGroupFlags has incorrect value " << std::hex << meta.mGroupFlags << std::dec << ". A value among GXS_SERV::FLAG_PRIVACY_{PUBLIC,RESTRICTED,PRIVATE} is expected." << std::endl;
return false ; return false ;

View file

@ -43,8 +43,12 @@ extern RsIdentity *rsIdentity;
// GroupFlags: Only one so far: // GroupFlags: Only one so far:
#warning THIS FLAG OVERLAPS THE FLAGS FOR mGroupFlags. This is an error that should be fixed.
#define RSGXSID_GROUPFLAG_REALID 0x0001 // The deprecated flag overlaps the privacy flags for mGroupFlags. This is an error that should be fixed. For the sake of keeping some
// backward compatibility, we need to make the change step by step.
#define RSGXSID_GROUPFLAG_REALID_deprecated 0x0001
#define RSGXSID_GROUPFLAG_REALID 0x0100
// THESE ARE FLAGS FOR INTERFACE. // THESE ARE FLAGS FOR INTERFACE.
#define RSID_TYPE_MASK 0xff00 #define RSID_TYPE_MASK 0xff00

View file

@ -1602,7 +1602,7 @@ void p3GxsCircles::checkDummyIdData()
std::vector<RsGxsIdGroup>::iterator it; std::vector<RsGxsIdGroup>::iterator it;
for(it = ids.begin(); it != ids.end(); ++it) for(it = ids.begin(); it != ids.end(); ++it)
{ {
if (it->mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (it->mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
{ {
#ifdef DEBUG_CIRCLES #ifdef DEBUG_CIRCLES
std::cerr << "p3GxsCircles::checkDummyIdData() PgpLinkedId: " << it->mMeta.mGroupId; std::cerr << "p3GxsCircles::checkDummyIdData() PgpLinkedId: " << it->mMeta.mGroupId;

View file

@ -695,12 +695,26 @@ bool p3IdService::createIdentity(uint32_t& token, RsIdentityParameters &params)
if (params.isPgpLinked) if (params.isPgpLinked)
{ {
id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID; #warning Backward compatibility issue to fix here in v0.7.0
// This is a hack, because a bad decision led to having RSGXSID_GROUPFLAG_REALID be equal to GXS_SERV::FLAG_PRIVACY_PRIVATE.
// In order to keep backward compatibility, we'll also add the new value
// When the ID is not PGP linked, the group flag cannot be let empty, so we use PUBLIC.
//
// The correct combination of flags should be:
// PGP-linked: GXS_SERV::FLAGS_PRIVACY_PUBLIC | RSGXSID_GROUPFLAG_REALID
// Anonymous : GXS_SERV::FLAGS_PRIVACY_PUBLIC
id.mMeta.mGroupFlags |= GXS_SERV::FLAG_PRIVACY_PRIVATE; // this is also equal to RSGXSID_GROUPFLAG_REALID_deprecated
id.mMeta.mGroupFlags |= RSGXSID_GROUPFLAG_REALID;
// The current version should be able to produce new identities that old peers will accept as well.
// In the future, we need to:
// - set the current group flags here (see above)
// - replace all occurences of RSGXSID_GROUPFLAG_REALID_deprecated by RSGXSID_GROUPFLAG_REALID in the code.
} }
else else
{ id.mMeta.mGroupFlags |= GXS_SERV::FLAG_PRIVACY_PUBLIC;
id.mMeta.mGroupFlags = 0;
}
createGroup(token, id); createGroup(token, id);
@ -1260,7 +1274,7 @@ bool p3IdService::opinion_handlerequest(uint32_t token)
} }
// update IdScore too. // update IdScore too.
bool pgpId = (meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID); bool pgpId = (meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecated);
ssdata.score.rep.updateIdScore(pgpId, ssdata.pgp.validatedSignature); ssdata.score.rep.updateIdScore(pgpId, ssdata.pgp.validatedSignature);
ssdata.score.rep.update(); ssdata.score.rep.update();
@ -1876,7 +1890,7 @@ void RsGxsIdCache::init(const RsGxsIdGroupItem *item, const RsTlvPublicRSAKey& i
details.mFlags = 0 ; details.mFlags = 0 ;
if(item->meta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN) details.mFlags |= RS_IDENTITY_FLAGS_IS_OWN_ID; if(item->meta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN) details.mFlags |= RS_IDENTITY_FLAGS_IS_OWN_ID;
if(item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) details.mFlags |= RS_IDENTITY_FLAGS_PGP_LINKED; if(item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecated) details.mFlags |= RS_IDENTITY_FLAGS_PGP_LINKED;
// do some tests // do some tests
if(details.mFlags & RS_IDENTITY_FLAGS_IS_OWN_ID) if(details.mFlags & RS_IDENTITY_FLAGS_IS_OWN_ID)
@ -2830,7 +2844,7 @@ RsGenExchange::ServiceCreate_Return p3IdService::service_CreateGroup(RsGxsGrpIte
ServiceCreate_Return createStatus; ServiceCreate_Return createStatus;
if (item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecated)
{ {
/* create the hash */ /* create the hash */
Sha1CheckSum hash; Sha1CheckSum hash;
@ -3033,7 +3047,7 @@ bool p3IdService::pgphash_handlerequest(uint32_t token)
#endif // DEBUG_IDS #endif // DEBUG_IDS
/* Filter based on IdType */ /* Filter based on IdType */
if (!(vit->mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)) if (!(vit->mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecated))
{ {
#ifdef DEBUG_IDS #ifdef DEBUG_IDS
std::cerr << "p3IdService::pgphash_request() discarding AnonID"; std::cerr << "p3IdService::pgphash_request() discarding AnonID";
@ -3609,7 +3623,7 @@ bool p3IdService::recogn_process()
ssdata.recogntags.publishTs = item->meta.mPublishTs; ssdata.recogntags.publishTs = item->meta.mPublishTs;
// update IdScore too. // update IdScore too.
bool pgpId = (item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID); bool pgpId = (item->meta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_deprecated);
ssdata.score.rep.updateIdScore(pgpId, ssdata.pgp.validatedSignature); ssdata.score.rep.updateIdScore(pgpId, ssdata.pgp.validatedSignature);
ssdata.score.rep.update(); ssdata.score.rep.update();
@ -3830,7 +3844,7 @@ void p3IdService::generateDummy_FriendPGP()
RsGxsIdGroup id; RsGxsIdGroup id;
id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID; id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID_deprecated;
int idx = RSRandom::random_f32() * (gpgids.size() - 1); int idx = RSRandom::random_f32() * (gpgids.size() - 1);
it = gpgids.begin(); it = gpgids.begin();
@ -3867,7 +3881,7 @@ void p3IdService::generateDummy_UnknownPGP()
RsGxsIdGroup id; RsGxsIdGroup id;
// FAKE DATA. // FAKE DATA.
id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID; id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID_deprecated;
id.mPgpIdHash = Sha1CheckSum::random() ; id.mPgpIdHash = Sha1CheckSum::random() ;
id.mPgpIdSign = RSRandom::random_alphaNumericString(20) ; id.mPgpIdSign = RSRandom::random_alphaNumericString(20) ;
id.mMeta.mGroupName = RSRandom::random_alphaNumericString(10) ; id.mMeta.mGroupName = RSRandom::random_alphaNumericString(10) ;

View file

@ -795,9 +795,9 @@ void CreateCircleDialog::loadIdentities(uint32_t token)
if (acceptAnonymous) if (acceptAnonymous)
ok = true; ok = true;
else if (acceptAllPGP) else if (acceptAllPGP)
ok = idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID ; ok = idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility ;
else if (idGroup.mPgpKnown) else if (idGroup.mPgpKnown)
ok = idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID ; ok = idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility ;
if (!ok) { if (!ok) {
#ifdef DEBUG_CREATE_CIRCLE_DIALOG #ifdef DEBUG_CREATE_CIRCLE_DIALOG
@ -816,7 +816,7 @@ void CreateCircleDialog::loadIdentities(uint32_t token)
if(idGroup.mImage.mSize == 0 || !pixmap.loadFromData(idGroup.mImage.mData, idGroup.mImage.mSize, "PNG")) if(idGroup.mImage.mSize == 0 || !pixmap.loadFromData(idGroup.mImage.mData, idGroup.mImage.mSize, "PNG"))
pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(idGroup.mMeta.mGroupId))) ; pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(idGroup.mMeta.mGroupId))) ;
if (idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (idGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
{ {
if (idGroup.mPgpKnown) { if (idGroup.mPgpKnown) {
RsPeerDetails details; RsPeerDetails details;

View file

@ -204,7 +204,7 @@ void IdDetailsDialog::insertIdDetails(uint32_t token)
} }
else else
{ {
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) RSGXSID_GROUPFLAG_REALID_kept_for_compatibilitySID_GROUPFLAG_REALID_deprecated)
{ {
ui->lineEdit_GpgName->setText(tr("Unknown real name")); ui->lineEdit_GpgName->setText(tr("Unknown real name"));
} }
@ -236,9 +236,7 @@ void IdDetailsDialog::insertIdDetails(uint32_t token)
ui->lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ; ui->lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ;
else else
ui->lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ; ui->lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ;
else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLRSGXSID_GROUPFLAG_REALID_kept_for_compatibility.mPgpKnown)
{
if (data.mPgpKnown)
if (rsPeers->isGPGAccepted(data.mPgpId)) if (rsPeers->isGPGAccepted(data.mPgpId))
ui->lineEdit_Type->setText(tr("Owned by a friend Retroshare node")) ; ui->lineEdit_Type->setText(tr("Owned by a friend Retroshare node")) ;
else else

View file

@ -1416,7 +1416,7 @@ bool IdDialog::fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item,
/* do filtering */ /* do filtering */
bool ok = false; bool ok = false;
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
{ {
if (isLinkedToOwnNode && (accept & RSID_FILTER_YOURSELF)) if (isLinkedToOwnNode && (accept & RSID_FILTER_YOURSELF))
{ {
@ -1518,7 +1518,7 @@ bool IdDialog::fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item,
QString tooltip; QString tooltip;
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
{ {
if (data.mPgpKnown) if (data.mPgpKnown)
{ {
@ -1760,7 +1760,7 @@ void IdDialog::insertIdDetails(uint32_t token)
} }
else else
{ {
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
ui->lineEdit_GpgName->setText(tr("[Unknown node]")); ui->lineEdit_GpgName->setText(tr("[Unknown node]"));
else else
ui->lineEdit_GpgName->setText(tr("Anonymous Id")); ui->lineEdit_GpgName->setText(tr("Anonymous Id"));
@ -1796,7 +1796,7 @@ void IdDialog::insertIdDetails(uint32_t token)
ui->lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ; ui->lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ;
else else
ui->lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ; ui->lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ;
else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility)
{ {
if (data.mPgpKnown) if (data.mPgpKnown)
if (rsPeers->isGPGAccepted(data.mPgpId)) if (rsPeers->isGPGAccepted(data.mPgpId))

View file

@ -262,7 +262,7 @@ void IdEditDialog::loadExistingId(uint32_t token)
setAvatar(avatar); setAvatar(avatar);
bool realid = (mEditGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID); bool realid = (mEditGroup.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID_kept_for_compatibility);
if (realid) if (realid)
{ {

View file

@ -204,7 +204,7 @@ bool GxsPeerNode::createIdentity(const std::string &name,
id.mMeta.mGroupName = name; id.mMeta.mGroupName = name;
if (pgpLinked) if (pgpLinked)
{ {
id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID; id.mMeta.mGroupFlags = RSGXSID_GROUPFLAG_REALID_kept_for_compatibility;
} }
else else
{ {