mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-02-13 17:10:06 +00: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
|
@ -18,6 +18,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
const prevContent = mEvent.getPrevContent() as IMemberContent;
|
||||
const senderId = mEvent.getSender();
|
||||
const userId = mEvent.getStateKey();
|
||||
const reason = typeof content.reason === 'string' ? content.reason : undefined;
|
||||
|
||||
if (!senderId || !userId)
|
||||
return {
|
||||
|
@ -26,7 +27,10 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
};
|
||||
|
||||
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 (content.membership === Membership.Invite) {
|
||||
|
@ -39,7 +43,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
{' accepted '}
|
||||
<b>{userName}</b>
|
||||
{`'s join request `}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -51,7 +55,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{senderName}</b>
|
||||
{' invited '}
|
||||
<b>{userName}</b> {content.reason}
|
||||
<b>{userName}</b> {reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -64,7 +68,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{userName}</b>
|
||||
{' request to join room '}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -91,7 +95,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{userName}</b>
|
||||
{' rejected the invitation '}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
|
@ -99,7 +103,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
{' rejected '}
|
||||
<b>{userName}</b>
|
||||
{`'s join request `}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -113,7 +117,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{userName}</b>
|
||||
{' revoked joined request '}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
|
@ -121,7 +125,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
{' revoked '}
|
||||
<b>{userName}</b>
|
||||
{`'s invite `}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -134,7 +138,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{senderName}</b>
|
||||
{' unbanned '}
|
||||
<b>{userName}</b> {content.reason}
|
||||
<b>{userName}</b> {reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -147,13 +151,13 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{userName}</b>
|
||||
{' left the room '}
|
||||
{content.reason}
|
||||
{reason}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<b>{senderName}</b>
|
||||
{' kicked '}
|
||||
<b>{userName}</b> {content.reason}
|
||||
<b>{userName}</b> {reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -166,7 +170,7 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
<>
|
||||
<b>{senderName}</b>
|
||||
{' banned '}
|
||||
<b>{userName}</b> {content.reason}
|
||||
<b>{userName}</b> {reason}
|
||||
</>
|
||||
),
|
||||
};
|
||||
|
@ -174,44 +178,49 @@ export const useMemberEventParser = (): MemberEventParser => {
|
|||
}
|
||||
|
||||
if (content.displayname !== prevContent.displayname) {
|
||||
const prevUserName = prevContent.displayname || userId;
|
||||
const prevUserName =
|
||||
typeof prevContent.displayname === 'string'
|
||||
? prevContent.displayname || getMxIdLocalPart(userId)
|
||||
: getMxIdLocalPart(userId);
|
||||
|
||||
return {
|
||||
icon: Icons.Mention,
|
||||
body: content.displayname ? (
|
||||
<>
|
||||
<b>{prevUserName}</b>
|
||||
{' changed display name to '}
|
||||
<b>{userName}</b>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<b>{prevUserName}</b>
|
||||
{' removed their display name '}
|
||||
</>
|
||||
),
|
||||
body:
|
||||
typeof content.displayname === 'string' ? (
|
||||
<>
|
||||
<b>{prevUserName}</b>
|
||||
{' changed display name to '}
|
||||
<b>{userName}</b>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<b>{prevUserName}</b>
|
||||
{' removed their display name '}
|
||||
</>
|
||||
),
|
||||
};
|
||||
}
|
||||
if (content.avatar_url !== prevContent.avatar_url) {
|
||||
return {
|
||||
icon: Icons.User,
|
||||
body: content.displayname ? (
|
||||
<>
|
||||
<b>{userName}</b>
|
||||
{' changed their avatar'}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<b>{userName}</b>
|
||||
{' removed their avatar '}
|
||||
</>
|
||||
),
|
||||
body:
|
||||
content.avatar_url && typeof content.avatar_url === 'string' ? (
|
||||
<>
|
||||
<b>{userName}</b>
|
||||
{' changed their avatar'}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<b>{userName}</b>
|
||||
{' removed their avatar '}
|
||||
</>
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
icon: Icons.User,
|
||||
body: 'Broken membership event',
|
||||
body: 'Membership event with no changes',
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue