From 8f440c1ad5a77c4b953d502bee0d1226979c50ef Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 10 Jul 2023 13:18:52 +0100 Subject: [PATCH 1/2] Try to find out the Matrix homeserver version and include in rageshakes --- src/rageshake/submit-rageshake.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts index afc02037ad3..7f60dbb0c0a 100644 --- a/src/rageshake/submit-rageshake.ts +++ b/src/rageshake/submit-rageshake.ts @@ -17,6 +17,7 @@ limitations under the License. */ import { logger } from "matrix-js-sdk/src/logger"; +import { Method } from "matrix-js-sdk/src/http-api"; import type * as Pako from "pako"; import { MatrixClientPeg } from "../MatrixClientPeg"; @@ -122,6 +123,35 @@ async function collectBugReport(opts: IOpts = {}, gzipLogs = true): Promise
>( + Method.Get, + "/server_version", + undefined, + undefined, + { + prefix: "/_synapse/admin/v1", + }, + ); + Object.keys(data).forEach((key) => { + body.append(`matrix_hs_${key}`, data[key]); + }); + } catch { + try { + // If that fails we'll hit any endpoint and look at the server response header + const res = await window.fetch(client.http.getUrl("/login"), { + method: "GET", + mode: "cors", + }); + if (res.headers.has("server")) { + body.append("matrix_hs_server", res.headers.get("server")!); + } + } catch { + // Could not determine server version + } + } } if (opts.labels) { From d57e03794638e58830850b9c6ca0c9c23f1ba91c Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Mon, 10 Jul 2023 13:47:08 +0100 Subject: [PATCH 2/2] Add a third way --- .../views/dialogs/devtools/ServerInfo.tsx | 37 +++++++++++-------- src/rageshake/submit-rageshake.ts | 27 +++++++++----- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/components/views/dialogs/devtools/ServerInfo.tsx b/src/components/views/dialogs/devtools/ServerInfo.tsx index 32f6a072e2e..3f48aadb5b9 100644 --- a/src/components/views/dialogs/devtools/ServerInfo.tsx +++ b/src/components/views/dialogs/devtools/ServerInfo.tsx @@ -15,6 +15,7 @@ limitations under the License. */ import React, { useContext } from "react"; +import { MatrixClient } from "matrix-js-sdk/src/matrix"; import BaseTool, { IDevtoolsProps } from "./BaseTool"; import { _t } from "../../../../languageHandler"; @@ -33,28 +34,32 @@ interface IServerWellKnown { }; } +export async function getServerVersionFromFederationApi(client: MatrixClient): Promise { + let baseUrl = client.getHomeserverUrl(); + + try { + const hsName = MatrixClientPeg.getHomeserverName(); + // We don't use the js-sdk Autodiscovery module here as it only support client well-known, not server ones. + const response = await fetch(`https://${hsName}/.well-known/matrix/server`); + const json = await response.json(); + if (json["m.server"]) { + baseUrl = `https://${json["m.server"]}`; + } + } catch (e) { + console.warn(e); + } + + const response = await fetch(`${baseUrl}/_matrix/federation/v1/version`); + return response.json(); +} + const ServerInfo: React.FC = ({ onBack }) => { const cli = useContext(MatrixClientContext); const capabilities = useAsyncMemo(() => cli.getCapabilities(true).catch(() => FAILED_TO_LOAD), [cli]); const clientVersions = useAsyncMemo(() => cli.getVersions().catch(() => FAILED_TO_LOAD), [cli]); const serverVersions = useAsyncMemo(async (): Promise => { - let baseUrl = cli.getHomeserverUrl(); - - try { - const hsName = MatrixClientPeg.getHomeserverName(); - // We don't use the js-sdk Autodiscovery module here as it only support client well-known, not server ones. - const response = await fetch(`https://${hsName}/.well-known/matrix/server`); - const json = await response.json(); - if (json["m.server"]) { - baseUrl = `https://${json["m.server"]}`; - } - } catch (e) { - console.warn(e); - } - try { - const response = await fetch(`${baseUrl}/_matrix/federation/v1/version`); - return response.json(); + return await getServerVersionFromFederationApi(cli); } catch (e) { console.warn(e); } diff --git a/src/rageshake/submit-rageshake.ts b/src/rageshake/submit-rageshake.ts index 7f60dbb0c0a..4abaafdc64d 100644 --- a/src/rageshake/submit-rageshake.ts +++ b/src/rageshake/submit-rageshake.ts @@ -26,6 +26,7 @@ import { _t } from "../languageHandler"; import * as rageshake from "./rageshake"; import SettingsStore from "../settings/SettingsStore"; import SdkConfig from "../SdkConfig"; +import { getServerVersionFromFederationApi } from "../components/views/dialogs/devtools/ServerInfo"; interface IOpts { labels?: string[]; @@ -140,16 +141,24 @@ async function collectBugReport(opts: IOpts = {}, gzipLogs = true): Promise