From 3fef6e6b22306b32604f1f05663cf755e66e6794 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Tue, 10 Sep 2019 08:26:10 +0100 Subject: [PATCH 1/2] Support Synapse deactivate on MemberInfo without Room (timeline pill) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/views/rooms/MemberInfo.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index 867e50ba0d..1b4c13db2c 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -637,7 +637,10 @@ module.exports = withMatrixClient(React.createClass({ _calculateOpsPermissions: async function(member) { const defaultPerms = { - can: {}, + can: { + // Calculate permissions for Synapse before doing the PL checks + synapseDeactivate: await this.context.matrixClient.isSynapseAdministrator(), + }, muted: false, }; const room = this.props.matrixClient.getRoom(member.roomId); @@ -651,9 +654,10 @@ module.exports = withMatrixClient(React.createClass({ const them = member; return { - can: await this._calculateCanPermissions( - me, them, powerLevels.getContent(), - ), + can: { + ...defaultPerms.can, + ...await this._calculateCanPermissions(me, them, powerLevels.getContent()), + }, muted: this._isMuted(them, powerLevels.getContent()), isTargetMod: them.powerLevel > powerLevels.getContent().users_default, }; @@ -670,9 +674,6 @@ module.exports = withMatrixClient(React.createClass({ redactMessages: false, }; - // Calculate permissions for Synapse before doing the PL checks - can.synapseDeactivate = await this.context.matrixClient.isSynapseAdministrator(); - const canAffectUser = them.powerLevel < me.powerLevel || isMe; if (!canAffectUser) { //console.log("Cannot affect user: %s >= %s", them.powerLevel, me.powerLevel); From f4ebde1596199761e7468eb570f6c7f2682859ec Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Thu, 12 Sep 2019 18:30:27 -0600 Subject: [PATCH 2/2] Wrap deactivation check with sanity conditions To ensure the matrixClient is not null (the problem) and that unexpected errors don't brick the app. Fixes https://github.com/vector-im/riot-web/issues/10854 --- src/components/views/rooms/MemberInfo.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index 1b4c13db2c..914e2df3d0 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -636,10 +636,19 @@ module.exports = withMatrixClient(React.createClass({ }, _calculateOpsPermissions: async function(member) { + let canDeactivate = false; + if (this.context.matrixClient) { + try { + canDeactivate = await this.context.matrixClient.isSynapseAdministrator(); + } catch (e) { + console.error(e); + } + } + const defaultPerms = { can: { // Calculate permissions for Synapse before doing the PL checks - synapseDeactivate: await this.context.matrixClient.isSynapseAdministrator(), + synapseDeactivate: canDeactivate, }, muted: false, };