Added Admin privileges for groups
added addGroupAdmins and rmGroupAdmins Fixed delete Group feature Improved Signing for Group features
This commit is contained in:
parent
e2c38c0bea
commit
c4422be7fe
91
app/app.js
91
app/app.js
@ -881,28 +881,44 @@ function processIncomingData(data) {
|
|||||||
if (data.from != groups[data.deleteGroup.group].creator)
|
if (data.from != groups[data.deleteGroup.group].creator)
|
||||||
return
|
return
|
||||||
if (floOpt.verifyData('deleteGroup:' + data.deleteGroup.group, data.deleteGroup.sign, contacts[data.from].pubKey)) {
|
if (floOpt.verifyData('deleteGroup:' + data.deleteGroup.group, data.deleteGroup.sign, contacts[data.from].pubKey)) {
|
||||||
//remove group
|
delete groups[data.deleteGroup.group];
|
||||||
|
deleteGroupFromIDB(data.deleteGroup.group);
|
||||||
}
|
}
|
||||||
} else if (data.addGroupMembers !== undefined && data.addGroupMembers.group in groups) {
|
} else if (data.addGroupMembers !== undefined && data.addGroupMembers.group in groups) {
|
||||||
if (data.from != groups[data.addGroupMembers.group].creator)
|
if (data.from != groups[data.addGroupMembers.group].creator && !groups[data.addGroupMembers.group].admins.includes(data.from))
|
||||||
return
|
return
|
||||||
if (floOpt.verifyData(data.addGroupMembers.members.join('|'), data.addGroupMembers.sign, contacts[data.from].pubKey)) {
|
if (floOpt.verifyData('addGroupMembers:' + data.addGroupMembers.group + data.addGroupMembers.members.join('|'), data.addGroupMembers.sign, contacts[data.from].pubKey)) {
|
||||||
group[data.addGroupMembers.group].members = group[data.addGroupMembers.group].members.concat(data.addGroupMembers.members);
|
group[data.addGroupMembers.group].members = group[data.addGroupMembers.group].members.concat(data.addGroupMembers.members);
|
||||||
var groupInfoStr = JSON.stringify(group[data.addGroupMembers.group]);
|
var groupInfoStr = JSON.stringify(group[data.addGroupMembers.group]);
|
||||||
storeGroup(groupInfoStr, data.addGroupMembers.group);
|
storeGroup(groupInfoStr, data.addGroupMembers.group);
|
||||||
}
|
}
|
||||||
} else if (data.rmGroupMembers !== undefined && data.rmGroupMembers.group in groups) {
|
} else if (data.rmGroupMembers !== undefined && data.rmGroupMembers.group in groups) {
|
||||||
if (data.from != groups[data.rmGroupMembers.group].creator)
|
if (data.from != groups[data.rmGroupMembers.group].creator && !groups[data.rmGroupMembers.group].admins.includes(data.from))
|
||||||
return
|
return
|
||||||
if (floOpt.verifyData(data.rmGroupMembers.members.join('|'), data.rmGroupMembers.sign, contacts[data.from].pubKey)) {
|
if (floOpt.verifyData('rmGroupMembers:' + data.rmGroupMembers.group + data.rmGroupMembers.members.join('|'), data.rmGroupMembers.sign, contacts[data.from].pubKey)) {
|
||||||
groups[data.rmGroupMembers.group].members = groups[data.rmGroupMembers.group].members.filter(x => !data.rmGroupMembers.members.includes(x)); //remove member from group
|
groups[data.rmGroupMembers.group].members = groups[data.rmGroupMembers.group].members.filter(x => !data.rmGroupMembers.members.includes(x)); //remove member from group
|
||||||
var groupInfoStr = JSON.stringify(group[data.rmGroupMembers.group]);
|
var groupInfoStr = JSON.stringify(group[data.rmGroupMembers.group]);
|
||||||
storeGroup(groupInfoStr, data.rmGroupMembers.group);
|
storeGroup(groupInfoStr, data.rmGroupMembers.group);
|
||||||
}
|
}
|
||||||
|
} else if (data.addGroupAdmins !== undefined && data.addGroupAdmins.group in groups) {
|
||||||
|
if (data.from != groups[data.addGroupAdmins.group].creator)
|
||||||
|
return
|
||||||
|
if (floOpt.verifyData('addGroupAdmins:' + data.addGroupAdmins.group + data.addGroupAdmins.admins.join('|'), data.addGroupAdmins.sign, contacts[data.from].pubKey)) {
|
||||||
|
group[data.addGroupAdmins.group].admins = group[data.addGroupAdmins.group].admins.concat(data.addGroupAdmins.admins);
|
||||||
|
var groupInfoStr = JSON.stringify(group[data.addGroupAdmins.group]);
|
||||||
|
storeGroup(groupInfoStr, data.addGroupAdmins.group);
|
||||||
|
}
|
||||||
|
} else if (data.rmGroupAdmins !== undefined && data.rmGroupAdmins.group in groups) {
|
||||||
|
if (data.from != groups[data.rmGroupAdmins.group].creator)
|
||||||
|
return
|
||||||
|
if (floOpt.verifyData('rmGroupAdmins:' + data.rmGroupAdmins.group + data.rmGroupAdmins.admins.join('|'), data.rmGroupAdmins.sign, contacts[data.from].pubKey)) {
|
||||||
|
groups[data.rmGroupAdmins.group].admins = groups[data.rmGroupAdmins.group].admins.filter(x => !data.rmGroupAdmins.admins.includes(x)); //remove member from group
|
||||||
|
var groupInfoStr = JSON.stringify(group[data.rmGroupAdmins.group]);
|
||||||
|
storeGroup(groupInfoStr, data.rmGroupAdmins.group);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function createMsgElement(msgInfo) {
|
function createMsgElement(msgInfo) {
|
||||||
const type = {
|
const type = {
|
||||||
S: 'sender',
|
S: 'sender',
|
||||||
@ -1254,6 +1270,20 @@ function storeGroup(groupInfoStr, groupID) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function deleteGroupFromIDB(groupID) {
|
||||||
|
var idb = indexedDB.open("FLO_Chat");
|
||||||
|
idb.onerror = (event) => {
|
||||||
|
console.log("Error in opening IndexedDB!");
|
||||||
|
};
|
||||||
|
idb.onsuccess = (event) => {
|
||||||
|
var db = event.target.result;
|
||||||
|
console.log('Delete Group:', groupID);
|
||||||
|
var obs = db.transaction('groups', "readwrite").objectStore('groups');
|
||||||
|
obs.delete(groupID);
|
||||||
|
db.close();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function createGroup() {
|
function createGroup() {
|
||||||
var members = prompt("Enter Members FLO_ID : ");
|
var members = prompt("Enter Members FLO_ID : ");
|
||||||
var grpName = prompt("Enter Group Name : ");
|
var grpName = prompt("Enter Group Name : ");
|
||||||
@ -1262,6 +1292,7 @@ function createGroup() {
|
|||||||
grpInfo.name = grpName;
|
grpInfo.name = grpName;
|
||||||
grpInfo.members = members.split(',');
|
grpInfo.members = members.split(',');
|
||||||
grpInfo.creator = selfID;
|
grpInfo.creator = selfID;
|
||||||
|
grpInfo.admins = [];
|
||||||
var grpInfoStr = JSON.stringify(grpInfo);
|
var grpInfoStr = JSON.stringify(grpInfo);
|
||||||
console.log(grpInfoStr);
|
console.log(grpInfoStr);
|
||||||
var data = {
|
var data = {
|
||||||
@ -1302,7 +1333,7 @@ function addGroupMembers() {
|
|||||||
addGroupMembers: {
|
addGroupMembers: {
|
||||||
group: receiverID,
|
group: receiverID,
|
||||||
members: newMembers,
|
members: newMembers,
|
||||||
sign: floOpt.signData(newMembers.join('|'), privKey)
|
sign: floOpt.signData('addGroupMembers:' + receiverID + newMembers.join('|'), privKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
groups[receiverID].members.forEach(floID => {
|
groups[receiverID].members.forEach(floID => {
|
||||||
@ -1336,7 +1367,7 @@ function rmGroupMembers() {
|
|||||||
rmGroupMembers: {
|
rmGroupMembers: {
|
||||||
group: receiverID,
|
group: receiverID,
|
||||||
members: rmMembers,
|
members: rmMembers,
|
||||||
sign: floOpt.signData(rmMembers.join('|'), privKey)
|
sign: floOpt.signData('rmGroupMembers:' + receiverID + rmMembers.join('|'), privKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
groups[receiverID].members = groups[receiverID].members.filter(x => !rmMembers.includes(x)); //remove member from group
|
groups[receiverID].members = groups[receiverID].members.filter(x => !rmMembers.includes(x)); //remove member from group
|
||||||
@ -1359,3 +1390,47 @@ function rmGroupMembers() {
|
|||||||
sendData(floID, JSON.stringify(data2));
|
sendData(floID, JSON.stringify(data2));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addGroupAdmins() {
|
||||||
|
var newAdmins = prompt("Enter new Admins : ");
|
||||||
|
newAdmins = newAdmins.split(',');
|
||||||
|
var data = {
|
||||||
|
from: selfID,
|
||||||
|
addGroupAdmins: {
|
||||||
|
group: receiverID,
|
||||||
|
admins: newAdmins,
|
||||||
|
sign: floOpt.signData('addGroupAdmins:' + receiverID + newAdmins.join('|'), privKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
groups[receiverID].members.forEach(floID => {
|
||||||
|
if (floID == selfID) //dont send to self
|
||||||
|
return;
|
||||||
|
data.to = floID;
|
||||||
|
sendData(floID, JSON.stringify(data));
|
||||||
|
});
|
||||||
|
groups[receiverID].admins = groups[receiverID].admins.concat(newAdmins);
|
||||||
|
var grpInfoStr = JSON.stringify(groups[receiverID]);
|
||||||
|
storeGroup(grpInfoStr, receiverID);
|
||||||
|
}
|
||||||
|
|
||||||
|
function rmGroupAdmins() {
|
||||||
|
var rmAdmins = prompt("Enter rmAdmins: ");
|
||||||
|
rmAdmins = rmAdmins.split(',');
|
||||||
|
var data = {
|
||||||
|
from: selfID,
|
||||||
|
rmGroupAdmins: {
|
||||||
|
group: receiverID,
|
||||||
|
admins: rmAdmins,
|
||||||
|
sign: floOpt.signData('rmGroupAdmins:' + receiverID + rmAdmins.join('|'), privKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
groups[receiverID].members.forEach(floID => {
|
||||||
|
if (floID == selfID) //dont send to self
|
||||||
|
return;
|
||||||
|
data.to = floID;
|
||||||
|
sendData(floID, JSON.stringify(data));
|
||||||
|
});
|
||||||
|
groups[receiverID].admins = groups[receiverID].admins.filter(x => !rmAdmins.includes(x)); //remove admins
|
||||||
|
var grpInfoStr = JSON.stringify(groups[receiverID]);
|
||||||
|
storeGroup(grpInfoStr, receiverID);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user