hide checkmMark on showing group members

pull/1592/head
Audric Ackermann 5 years ago
parent c5a4cf674d
commit 2c40d1e623
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -151,32 +151,39 @@ export class UpdateGroupMembersDialog extends React.Component<Props, State> {
private renderMemberList() { private renderMemberList() {
const members = this.state.contactList; const members = this.state.contactList;
return members.map((member: ContactType, index: number) => ( return members.map((member: ContactType, index: number) => {
<SessionMemberListItem const isSelected = this.props.isAdmin && !member.checkmarked;
member={member}
index={index} return (
isSelected={!member.checkmarked} <SessionMemberListItem
onSelect={this.onMemberClicked} member={member}
onUnselect={this.onMemberClicked} index={index}
key={member.id} isSelected={isSelected}
theme={this.props.theme} onSelect={this.onMemberClicked}
/> onUnselect={this.onMemberClicked}
)); key={member.id}
theme={this.props.theme}
/>
);
});
} }
private renderZombiesList() { private renderZombiesList() {
return this.state.zombies.map((member: ContactType, index: number) => ( return this.state.zombies.map((member: ContactType, index: number) => {
<SessionMemberListItem const isSelected = this.props.isAdmin && !member.checkmarked;
member={member} return (
index={index} <SessionMemberListItem
isSelected={!member.checkmarked} member={member}
onSelect={this.onZombieClicked} index={index}
onUnselect={this.onZombieClicked} isSelected={isSelected}
isZombie={true} onSelect={this.onZombieClicked}
key={member.id} onUnselect={this.onZombieClicked}
theme={this.props.theme} isZombie={true}
/> key={member.id}
)); theme={this.props.theme}
/>
);
});
} }
private onKeyUp(event: any) { private onKeyUp(event: any) {

@ -327,10 +327,8 @@ async function handleClosedGroupEncryptionKeyPair(
await removeFromCache(envelope); await removeFromCache(envelope);
return; return;
} }
if (!groupConvo.get('members')?.includes(sender)) { if (!groupConvo.get('groupAdmins')?.includes(sender)) {
window.log.warn( window.log.warn(`Ignoring closed group encryption key pair from non-admin. ${groupPublicKey}`);
`Ignoring closed group encryption key pair from non-member. ${groupPublicKey}: ${envelope.senderIdentity}`
);
await removeFromCache(envelope); await removeFromCache(envelope);
return; return;
} }
@ -512,11 +510,18 @@ async function handleClosedGroupMembersAdded(
const membersNotAlreadyPresent = addedMembers.filter(m => !oldMembers.includes(m)); const membersNotAlreadyPresent = addedMembers.filter(m => !oldMembers.includes(m));
window.log.info(`Got a group update for group ${envelope.source}, type: MEMBERS_ADDED`); window.log.info(`Got a group update for group ${envelope.source}, type: MEMBERS_ADDED`);
// make sure those members are not on our zombie list
addedMembers.forEach(added => removeMemberFromZombies(envelope, PubKey.cast(added), convo));
if (membersNotAlreadyPresent.length === 0) { if (membersNotAlreadyPresent.length === 0) {
window.log.info( window.log.info(
'no new members in this group update compared to what we have already. Skipping update' 'no new members in this group update compared to what we have already. Skipping update'
); );
// this is just to make sure that the zombie list got written to the db.
// if a member adds a member we have as a zombie, we consider that this member is not a zombie anymore
await convo.commit();
await removeFromCache(envelope); await removeFromCache(envelope);
return; return;
} }
@ -533,8 +538,6 @@ async function handleClosedGroupMembersAdded(
await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp));
convo.set({ members }); convo.set({ members });
// make sure those members are not on our zombie list
addedMembers.forEach(added => removeMemberFromZombies(envelope, PubKey.cast(added), convo));
convo.updateLastMessage(); convo.updateLastMessage();
await convo.commit(); await convo.commit();
@ -576,7 +579,14 @@ async function handleClosedGroupMembersRemoved(
if (removedMembers.includes(firstAdmin)) { if (removedMembers.includes(firstAdmin)) {
window.log.warn('Ignoring invalid closed group update: trying to remove the admin.'); window.log.warn('Ignoring invalid closed group update: trying to remove the admin.');
await removeFromCache(envelope); await removeFromCache(envelope);
return; throw new Error('Admins cannot be removed. They can only leave');
}
// The MEMBERS_REMOVED message type can only come from an admin.
if (!groupAdmins.includes(envelope.senderIdentity)) {
window.log.warn('Ignoring invalid closed group update. Only admins can remove members.');
await removeFromCache(envelope);
throw new Error('Only admins can remove members.');
} }
// If the current user was removed: // If the current user was removed:
@ -588,6 +598,7 @@ async function handleClosedGroupMembersRemoved(
await markGroupAsLeftOrKicked(groupPubKey, convo, true); await markGroupAsLeftOrKicked(groupPubKey, convo, true);
} }
// Note: we don't want to send a new encryption keypair when we get a member removed. // Note: we don't want to send a new encryption keypair when we get a member removed.
// this is only happening when the admin gets a MEMBER_LEFT message
// Only add update message if we have something to show // Only add update message if we have something to show
if (membersAfterUpdate.length !== currentMembers.length) { if (membersAfterUpdate.length !== currentMembers.length) {
@ -604,8 +615,9 @@ async function handleClosedGroupMembersRemoved(
} }
// Update the group // Update the group
convo.set({ members: membersAfterUpdate });
const zombies = convo.get('zombies').filter(z => membersAfterUpdate.includes(z)); const zombies = convo.get('zombies').filter(z => membersAfterUpdate.includes(z));
convo.set({ members: membersAfterUpdate });
convo.set({ zombies }); convo.set({ zombies });
await convo.commit(); await convo.commit();
@ -739,7 +751,7 @@ async function handleClosedGroupMemberLeft(envelope: EnvelopePlus, convo: Conver
}; };
await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp));
convo.updateLastMessage(); convo.updateLastMessage();
// if a user just left and we are the admin, we remove him right away for everyone by sending a members removed // if a user just left and we are the admin, we remove him right away for everyone by sending a MEMBERS_REMOVED message so no need to add him as a zombie
if (!isCurrentUserAdmin && oldMembers.includes(sender)) { if (!isCurrentUserAdmin && oldMembers.includes(sender)) {
addMemberToZombies(envelope, PubKey.cast(sender), convo); addMemberToZombies(envelope, PubKey.cast(sender), convo);
} }

@ -475,7 +475,7 @@ export async function sendRemovedMembers(
}); });
} }
export async function generateAndSendNewEncryptionKeyPair( async function generateAndSendNewEncryptionKeyPair(
groupPublicKey: string, groupPublicKey: string,
targetMembers: Array<string> targetMembers: Array<string>
) { ) {

Loading…
Cancel
Save