Browse Source

Merge pull request #391 from erqan/groups

enables readding a group key by `rescandirectmsgs` and `creategroup`
miguelfreitas
miguelfreitas 8 years ago committed by GitHub
parent
commit
30a5ebafa6
  1. 2
      src/clientversion.h
  2. 72
      src/twister.cpp

2
src/clientversion.h

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
// These need to be macros, as version.cpp's and bitcoin-qt.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 0
#define CLIENT_VERSION_MINOR 9
#define CLIENT_VERSION_REVISION 37
#define CLIENT_VERSION_REVISION 38
#define CLIENT_VERSION_BUILD 0
// Set to true for release, false for prerelease or test build

72
src/twister.cpp

@ -1206,34 +1206,33 @@ string getGroupAliasByKey(const string &privKey) @@ -1206,34 +1206,33 @@ string getGroupAliasByKey(const string &privKey)
void registerNewGroup(const string &privKey, const string &desc, const string &member, const string &invitedBy, int64_t utcTime, int k)
{
string groupAlias = getGroupAliasByKey(privKey);
if( !groupAlias.length() ) {
CBitcoinSecret vchSecret;
bool fGood = vchSecret.SetString(privKey);
if (!fGood) {
printf("registerGroupMember: Invalid private key\n");
return;
}
CKey key = vchSecret.GetKey();
CPubKey pubkey = key.GetPubKey();
CKeyID vchAddress = pubkey.GetID();
{
LOCK(pwalletMain->cs_wallet);
if (pwalletMain->HaveKey(vchAddress)) {
// already exists? reuse same alias (trying to fix inconsistency wallet x groups)
groupAlias = pwalletMain->mapKeyMetadata[vchAddress].username;
if( !groupAlias.length() || groupAlias.at(0) != '*' ) {
printf("registerGroupMember: Invalid group alias '%s' from wallet\n", groupAlias.c_str());
return;
}
} else {
groupAlias = getRandomGroupAlias();
}
pwalletMain->mapKeyMetadata[vchAddress] = CKeyMetadata(GetTime(), groupAlias);
if (!pwalletMain->AddKeyPubKey(key, pubkey)) {
printf("registerGroupMember: Error adding key to wallet\n");
CBitcoinSecret vchSecret;
bool fGood = vchSecret.SetString(privKey);
if (!fGood) {
printf("registerGroupMember: Invalid private key\n");
return;
}
CKey key = vchSecret.GetKey();
CPubKey pubkey = key.GetPubKey();
CKeyID vchAddress = pubkey.GetID();
{
LOCK(pwalletMain->cs_wallet);
if (pwalletMain->HaveKey(vchAddress)) {
// already exists? reuse same alias (trying to fix inconsistency wallet x groups)
groupAlias = pwalletMain->mapKeyMetadata[vchAddress].username;
if( !groupAlias.length() || groupAlias.at(0) != '*' ) {
printf("registerGroupMember: Invalid group alias '%s' from wallet\n", groupAlias.c_str());
return;
}
} else if (!groupAlias.length()) {
groupAlias = getRandomGroupAlias();
}
pwalletMain->mapKeyMetadata[vchAddress] = CKeyMetadata(GetTime(), groupAlias);
if (!pwalletMain->AddKeyPubKey(key, pubkey)) {
printf("registerGroupMember: Error adding key to wallet\n");
return;
}
}
@ -3866,19 +3865,26 @@ Object getLibtorrentSessionStatus() @@ -3866,19 +3865,26 @@ Object getLibtorrentSessionStatus()
Value creategroup(const Array& params, bool fHelp)
{
if (fHelp || params.size() != 1)
if (fHelp || params.size() < 1 || params.size() > 2)
throw runtime_error(
"creategroup <description>\n"
"Create a new key pair for group chat and add it to wallet\n"
"Hint: use groupcreate to invite yourself\n"
"creategroup <description> [<groupprivkey>]\n"
"Create (if <groupprivkey> is omited) a new key pair for group chat and add it to wallet\n"
"Or import the given <groupprivkey> into wallet\n"
"Hint: use newgroupinvite to invite yourself\n"
"Returns the group alias");
string strDescription = params[0].get_str();
string privKey;
RandAddSeedPerfmon();
CKey secret;
secret.MakeNewKey(true);
string privKey = CBitcoinSecret(secret).ToString();
if (params.size() == 2)
privKey = params[1].get_str();
else
{
RandAddSeedPerfmon();
CKey secret;
secret.MakeNewKey(true);
privKey = CBitcoinSecret(secret).ToString();
}
string noMember;
registerNewGroup(privKey, strDescription, noMember, noMember, GetTime(), -1);

Loading…
Cancel
Save