From 72789897a0780f3ca2f2bdc7be7b2f3760325456 Mon Sep 17 00:00:00 2001 From: Zoe Date: Fri, 21 Feb 2020 17:15:53 +0000 Subject: [PATCH] Quick n dirty verificatio request viewer in devtools --- res/css/views/dialogs/_DevtoolsDialog.scss | 34 ++++++++ .../views/dialogs/DevtoolsDialog.js | 82 ++++++++++++++++++- src/i18n/strings/en_EN.json | 1 + 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/res/css/views/dialogs/_DevtoolsDialog.scss b/res/css/views/dialogs/_DevtoolsDialog.scss index 9d58c999c3..22975f0c52 100644 --- a/res/css/views/dialogs/_DevtoolsDialog.scss +++ b/res/css/views/dialogs/_DevtoolsDialog.scss @@ -189,3 +189,37 @@ limitations under the License. } } } + +.mx_DevTools_VerificationRequest { + border: 1px solid #cccccc; + border-radius: 3px; + padding: 1px 5px; + margin-bottom: 6px; + font-family: "Inconsolata", courier; + + dl { + display: grid; + grid-template-columns: max-content auto; + margin: 0; + } + + dd { + grid-column-start: 2; + } + + dd:empty { + color: #666666; + &::after { + content: "(empty)"; + } + } + + dt { + font-weight: bold; + grid-column-start: 1; + } + + dt::after { + content: ":"; + } +} \ No newline at end of file diff --git a/src/components/views/dialogs/DevtoolsDialog.js b/src/components/views/dialogs/DevtoolsDialog.js index 34b2f5a52b..ade23c90f1 100644 --- a/src/components/views/dialogs/DevtoolsDialog.js +++ b/src/components/views/dialogs/DevtoolsDialog.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import React, {useState, useEffect} from 'react'; import PropTypes from 'prop-types'; import * as sdk from '../../../index'; import SyntaxHighlight from '../elements/SyntaxHighlight'; @@ -23,6 +23,15 @@ import { Room } from "matrix-js-sdk"; import Field from "../elements/Field"; import MatrixClientContext from "../../../contexts/MatrixClientContext"; +import { + PHASE_UNSENT, + PHASE_REQUESTED, + PHASE_READY, + PHASE_DONE, + PHASE_STARTED, + PHASE_CANCELLED, +} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest" + class GenericEditor extends React.PureComponent { // static propTypes = {onBack: PropTypes.func.isRequired}; @@ -605,12 +614,83 @@ class ServersInRoomList extends React.PureComponent { } } +const PHASE_MAP = { + [PHASE_UNSENT]: "unsent", + [PHASE_REQUESTED]: "requested", + [PHASE_READY]: "ready", + [PHASE_DONE]: "done", + [PHASE_STARTED]: "started", + [PHASE_CANCELLED]: "cancelled", +} + +function VerificationRequest({txnId, request}) { + const [, updateState] = useState(); + const [timeout, setTimeout] = useState(request.timeout); + + /* Re-render if something changes state */ + useEffect(() => { + request.on("change", updateState); + return () => request.off("change", updateState); + }, []); + + /* Keep re-rendering if there's a timeout */ + useEffect(() => { + if (timeout == 0) return; + + const id = setInterval(() => { + setTimeout(request.timeout); + }, 500); + + return () => { clearInterval(id); } + }, []); + + return (
+
+
Transaction
+
{txnId}
+
Phase
+
{PHASE_MAP[request.phase] || request.phase}
+
Timeout
+
{Math.floor(timeout / 1000)}
+
Methods
+
{request.methods && request.methods.join(", ")}
+
requestingUserId
+
{request.requestingUserId}
+
+
); +} + +class VerificationExplorer extends React.PureComponent { + static getLabel() { + return _t("Verification Requests"); + } + + /* Ensure this.context is the cli */ + static contextType = MatrixClientContext; + + render() { + const cli = this.context; + const room = this.props.room; + const inRoomChannel = cli._crypto._inRoomVerificationRequests; + const inRoomRequests = (inRoomChannel._requestsByRoomId || new Map()).get(room.roomId) || new Map(); + + return (
+
+ {Array.from(inRoomRequests.entries()).reverse().map(([txnId, request]) => + + )} +
+
); + } +} + const Entries = [ SendCustomEvent, RoomStateExplorer, SendAccountData, AccountDataExplorer, ServersInRoomList, + VerificationExplorer, ]; export default class DevtoolsDialog extends React.PureComponent { diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index b55b28ce97..82eb660d9d 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -1524,6 +1524,7 @@ "Explore Room State": "Explore Room State", "Explore Account Data": "Explore Account Data", "View Servers in Room": "View Servers in Room", + "Verification Requests": "Verification Requests", "Toolbox": "Toolbox", "Developer Tools": "Developer Tools", "An error has occurred.": "An error has occurred.",