mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-09-13 22:32:26 +03:00
fix crash on membership change with invalid data (#2182)
* fix membership change with invalid data crash * add more checks around membership change * fix displayname condition
This commit is contained in:
parent
d5766b58fe
commit
8e4475bb56
1 changed files with 46 additions and 37 deletions
|
@ -18,6 +18,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
const prevContent = mEvent.getPrevContent() as IMemberContent;
|
const prevContent = mEvent.getPrevContent() as IMemberContent;
|
||||||
const senderId = mEvent.getSender();
|
const senderId = mEvent.getSender();
|
||||||
const userId = mEvent.getStateKey();
|
const userId = mEvent.getStateKey();
|
||||||
|
const reason = typeof content.reason === 'string' ? content.reason : undefined;
|
||||||
|
|
||||||
if (!senderId || !userId)
|
if (!senderId || !userId)
|
||||||
return {
|
return {
|
||||||
|
@ -26,7 +27,10 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const senderName = getMxIdLocalPart(senderId);
|
const senderName = getMxIdLocalPart(senderId);
|
||||||
const userName = content.displayname || getMxIdLocalPart(userId);
|
const userName =
|
||||||
|
typeof content.displayname === 'string'
|
||||||
|
? content.displayname || getMxIdLocalPart(userId)
|
||||||
|
: getMxIdLocalPart(userId);
|
||||||
|
|
||||||
if (isMembershipChanged(mEvent)) {
|
if (isMembershipChanged(mEvent)) {
|
||||||
if (content.membership === Membership.Invite) {
|
if (content.membership === Membership.Invite) {
|
||||||
|
@ -39,7 +43,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
{' accepted '}
|
{' accepted '}
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{`'s join request `}
|
{`'s join request `}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -51,7 +55,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{senderName}</b>
|
<b>{senderName}</b>
|
||||||
{' invited '}
|
{' invited '}
|
||||||
<b>{userName}</b> {content.reason}
|
<b>{userName}</b> {reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -64,7 +68,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{' request to join room '}
|
{' request to join room '}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -91,7 +95,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{' rejected the invitation '}
|
{' rejected the invitation '}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
|
@ -99,7 +103,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
{' rejected '}
|
{' rejected '}
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{`'s join request `}
|
{`'s join request `}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -113,7 +117,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{' revoked joined request '}
|
{' revoked joined request '}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
|
@ -121,7 +125,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
{' revoked '}
|
{' revoked '}
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{`'s invite `}
|
{`'s invite `}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -134,7 +138,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{senderName}</b>
|
<b>{senderName}</b>
|
||||||
{' unbanned '}
|
{' unbanned '}
|
||||||
<b>{userName}</b> {content.reason}
|
<b>{userName}</b> {reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -147,13 +151,13 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{userName}</b>
|
<b>{userName}</b>
|
||||||
{' left the room '}
|
{' left the room '}
|
||||||
{content.reason}
|
{reason}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<b>{senderName}</b>
|
<b>{senderName}</b>
|
||||||
{' kicked '}
|
{' kicked '}
|
||||||
<b>{userName}</b> {content.reason}
|
<b>{userName}</b> {reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -166,7 +170,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
<>
|
<>
|
||||||
<b>{senderName}</b>
|
<b>{senderName}</b>
|
||||||
{' banned '}
|
{' banned '}
|
||||||
<b>{userName}</b> {content.reason}
|
<b>{userName}</b> {reason}
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
@ -174,44 +178,49 @@ export const useMemberEventParser = (): MemberEventParser => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (content.displayname !== prevContent.displayname) {
|
if (content.displayname !== prevContent.displayname) {
|
||||||
const prevUserName = prevContent.displayname || userId;
|
const prevUserName =
|
||||||
|
typeof prevContent.displayname === 'string'
|
||||||
|
? prevContent.displayname || getMxIdLocalPart(userId)
|
||||||
|
: getMxIdLocalPart(userId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
icon: Icons.Mention,
|
icon: Icons.Mention,
|
||||||
body: content.displayname ? (
|
body:
|
||||||
<>
|
typeof content.displayname === 'string' ? (
|
||||||
<b>{prevUserName}</b>
|
<>
|
||||||
{' changed display name to '}
|
<b>{prevUserName}</b>
|
||||||
<b>{userName}</b>
|
{' changed display name to '}
|
||||||
</>
|
<b>{userName}</b>
|
||||||
) : (
|
</>
|
||||||
<>
|
) : (
|
||||||
<b>{prevUserName}</b>
|
<>
|
||||||
{' removed their display name '}
|
<b>{prevUserName}</b>
|
||||||
</>
|
{' removed their display name '}
|
||||||
),
|
</>
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (content.avatar_url !== prevContent.avatar_url) {
|
if (content.avatar_url !== prevContent.avatar_url) {
|
||||||
return {
|
return {
|
||||||
icon: Icons.User,
|
icon: Icons.User,
|
||||||
body: content.displayname ? (
|
body:
|
||||||
<>
|
content.avatar_url && typeof content.avatar_url === 'string' ? (
|
||||||
<b>{userName}</b>
|
<>
|
||||||
{' changed their avatar'}
|
<b>{userName}</b>
|
||||||
</>
|
{' changed their avatar'}
|
||||||
) : (
|
</>
|
||||||
<>
|
) : (
|
||||||
<b>{userName}</b>
|
<>
|
||||||
{' removed their avatar '}
|
<b>{userName}</b>
|
||||||
</>
|
{' removed their avatar '}
|
||||||
),
|
</>
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
icon: Icons.User,
|
icon: Icons.User,
|
||||||
body: 'Broken membership event',
|
body: 'Membership event with no changes',
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue