From 300e22a5378841d65119941bfde5a0c3fe6be4dd Mon Sep 17 00:00:00 2001 From: Michael Albert Date: Thu, 14 May 2020 11:17:00 +0200 Subject: [PATCH 01/10] Show version of Synapse-Admin Change-Id: I354e3f3b3e4f45e5ca72318ce70b66bee433f3d6 --- package.json | 6 +++--- public/index.html | 9 ++++++++- src/components/LoginPage.js | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 7d754fe..002f90d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "synapse-admin", - "version": "0.1.0", + "version": "0.2.1", "description": "Admin GUI for the Matrix.org server Synapse", "author": "Awesome Technologies Innovationslabor GmbH", "license": "Apache-2.0", @@ -29,8 +29,8 @@ "react-scripts": "^3.4.1" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", + "start": "REACT_APP_VERSION=$(git describe --tags) react-scripts start", + "build": "REACT_APP_VERSION=$(git describe --tags) react-scripts build", "fix:other": "yarn prettier --write", "fix:code": "yarn test:lint --fix", "fix": "yarn fix:code && yarn fix:other", diff --git a/public/index.html b/public/index.html index 4209361..2b90907 100644 --- a/public/index.html +++ b/public/index.html @@ -38,5 +38,12 @@ To begin the development, run `npm start` or `yarn start`. To create a production bundle, use `npm run build` or `yarn build`. --> + - + \ No newline at end of file diff --git a/src/components/LoginPage.js b/src/components/LoginPage.js index 6834625..a5bcec8 100644 --- a/src/components/LoginPage.js +++ b/src/components/LoginPage.js @@ -29,7 +29,7 @@ const useStyles = makeStyles(theme => ({ main: { display: "flex", flexDirection: "column", - minHeight: "100vh", + minHeight: "calc(100vh - 1em)", alignItems: "center", justifyContent: "flex-start", background: "url(./images/floating-cogs.svg)", @@ -40,6 +40,7 @@ const useStyles = makeStyles(theme => ({ card: { minWidth: "30em", marginTop: "6em", + marginBottom: "6em", }, avatar: { margin: "1em", From 3884c500124916d24f2ebfee2c5217530fc6b335 Mon Sep 17 00:00:00 2001 From: dklimpel <5740567+dklimpel@users.noreply.github.com> Date: Sat, 23 May 2020 17:43:33 +0200 Subject: [PATCH 02/10] Extend the room list with further attributes Add further attributes: - is_encrypted - federatable - public - state_events - version - joined_local_members Also add the ability to sort. API was added by synapse v1.13.0. --- src/components/rooms.js | 22 +++++++++++++++++++--- src/i18n/de.js | 6 ++++++ src/i18n/en.js | 6 ++++++ src/synapse/dataProvider.js | 14 ++++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/components/rooms.js b/src/components/rooms.js index 8cac414..a28290f 100644 --- a/src/components/rooms.js +++ b/src/components/rooms.js @@ -1,17 +1,33 @@ import React from "react"; -import { Datagrid, List, TextField, Pagination } from "react-admin"; +import { + Datagrid, + List, + TextField, + Pagination, + BooleanField, +} from "react-admin"; const RoomPagination = props => ( ); export const RoomList = props => ( - }> + } + sort={{ field: "name", order: "ASC" }} + > - + + + + + + + ); diff --git a/src/i18n/de.js b/src/i18n/de.js index a467c1a..c7466b4 100644 --- a/src/i18n/de.js +++ b/src/i18n/de.js @@ -53,6 +53,12 @@ export default { name: "Name", canonical_alias: "Alias", joined_members: "Mitglieder", + joined_local_members: "lokale Mitglieder", + state_events: "Ereignisse", + version: "Version", + is_encrypted: "Verschlüsselt", + federatable: "Fö­de­riert", + public: "Öffentlich", }, }, connections: { diff --git a/src/i18n/en.js b/src/i18n/en.js index a7a6141..e6335e0 100644 --- a/src/i18n/en.js +++ b/src/i18n/en.js @@ -53,6 +53,12 @@ export default { name: "Name", canonical_alias: "Alias", joined_members: "Members", + joined_local_members: "local members", + state_events: "State events", + version: "Version", + is_encrypted: "Encrypted", + federatable: "Federatable", + public: "Public", }, }, connections: { diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js index 6d5486c..0729094 100644 --- a/src/synapse/dataProvider.js +++ b/src/synapse/dataProvider.js @@ -48,6 +48,9 @@ const resourceMap = { id: r.room_id, alias: r.canonical_alias, members: r.joined_members, + is_encrypted: !!r.encryption, + federatable: !!r.federatable, + public: !!r.public, }), data: "rooms", total: json => { @@ -86,11 +89,20 @@ function filterNullValues(key, value) { return value; } +function getSearchOrder(order) { + if (order === "DESC") { + return "b"; + } else { + return "f"; + } +} + const dataProvider = { getList: (resource, params) => { console.log("getList " + resource); const { user_id, guests, deactivated } = params.filter; const { page, perPage } = params.pagination; + const { field, order } = params.sort; const from = (page - 1) * perPage; const query = { from: from, @@ -98,6 +110,8 @@ const dataProvider = { user_id: user_id, guests: guests, deactivated: deactivated, + order_by: field, + dir: getSearchOrder(order), }; const homeserver = localStorage.getItem("base_url"); if (!homeserver || !(resource in resourceMap)) return Promise.reject(); From 0ada5287d7257c930e5c0f422d0ad48f2fc1aba9 Mon Sep 17 00:00:00 2001 From: Manuel Stahl Date: Tue, 5 May 2020 19:07:07 +0200 Subject: [PATCH 03/10] Show Synapse server version on login page Change-Id: Id9b0d2adf83590524069d308f4fe9e5d14147295 --- src/components/LoginPage.js | 34 +++++++++++++++++++++++++++++++++- src/i18n/de.js | 1 + 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/components/LoginPage.js b/src/components/LoginPage.js index a5bcec8..3058b45 100644 --- a/src/components/LoginPage.js +++ b/src/components/LoginPage.js @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { fetchUtils, FormDataConsumer, @@ -65,6 +65,12 @@ const useStyles = makeStyles(theme => ({ actions: { padding: "0 1em 1em 1em", }, + serverVersion: { + color: "#9e9e9e", + fontFamily: "Roboto, Helvetica, Arial, sans-serif", + marginBottom: "1em", + marginLeft: "0.5em", + }, })); const LoginPage = ({ theme }) => { @@ -138,6 +144,7 @@ const LoginPage = ({ theme }) => { const UserData = ({ formData }) => { const form = useForm(); + const [serverVersion, setServerVersion] = useState(""); const handleUsernameChange = _ => { if (formData.base_url) return; @@ -158,6 +165,30 @@ const LoginPage = ({ theme }) => { } }; + useEffect( + _ => { + if ( + !formData.base_url || + !formData.base_url.match(/^(http|https):\/\/[a-zA-Z0-9\-.]+$/) + ) + return; + const versionUrl = `${formData.base_url}/_synapse/admin/v1/server_version`; + fetchUtils + .fetchJson(versionUrl, { method: "GET" }) + .then(({ json }) => { + setServerVersion( + `${translate("synapseadmin.auth.server_version")} ${ + json["server_version"] + }` + ); + }) + .catch(_ => { + setServerVersion(""); + }); + }, + [formData.base_url] + ); + return (
@@ -190,6 +221,7 @@ const LoginPage = ({ theme }) => { fullWidth />
+
{serverVersion}
); }; diff --git a/src/i18n/de.js b/src/i18n/de.js index a467c1a..05d9a6e 100644 --- a/src/i18n/de.js +++ b/src/i18n/de.js @@ -6,6 +6,7 @@ export default { auth: { base_url: "Heimserver URL", welcome: "Willkommen bei Synapse-admin", + server_version: "Synapse Version", username_error: "Bitte vollständigen Nutzernamen angeben: '@user:domain'", protocol_error: "Die URL muss mit 'http://' oder 'https://' beginnen", url_error: "Keine gültige Matrix Server URL", From b7c3684b80dec933da31ee368d895cbe9cf9dcfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2020 14:50:58 +0200 Subject: [PATCH 04/10] Bump websocket-extensions from 0.1.3 to 0.1.4 (#49) Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. - [Release notes](https://github.com/faye/websocket-extensions-node/releases) - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) - [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index c5be95c..72f4311 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11444,9 +11444,9 @@ websocket-driver@>=0.5.1: websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" From 5bdfb80db79370662d485d2c898cc248524490f8 Mon Sep 17 00:00:00 2001 From: dklimpel <5740567+dklimpel@users.noreply.github.com> Date: Tue, 26 May 2020 17:37:43 +0200 Subject: [PATCH 05/10] Bugfix sort users by `user_id` Users are not sortable by `user_id`. Set `sortable={false}`. --- src/components/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/users.js b/src/components/users.js index 16167a0..d978c26 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -78,7 +78,7 @@ export const UserList = props => ( > - + {/* Hack since the users endpoint does not give displaynames in the list*/} Date: Tue, 16 Jun 2020 07:54:49 +0200 Subject: [PATCH 06/10] Bugfix removes the ability to click on individual connections. If you click on a connection in UserEdit, you will get an empty page. This solves the problem. --- src/components/users.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/components/users.js b/src/components/users.js index d978c26..fd334f0 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -176,7 +176,12 @@ export const UserEdit = props => ( label="resources.connections.name" icon={} > - + Date: Tue, 16 Jun 2020 09:24:49 +0200 Subject: [PATCH 07/10] Add creation timestamp and consent version to UserEdit Add information about the user to UserEdit - creation timestamp - consent version --- src/components/users.js | 13 +++++++++++++ src/i18n/de.js | 2 ++ src/i18n/en.js | 2 ++ src/synapse/dataProvider.js | 2 ++ 4 files changed, 19 insertions(+) diff --git a/src/components/users.js b/src/components/users.js index fd334f0..9f57e85 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -159,6 +159,19 @@ export const UserEdit = props => ( source="deactivated" helperText="resources.users.helper.deactivate" /> + + { From aaf1ebb9093b1aa041f9b7745a85012c45303545 Mon Sep 17 00:00:00 2001 From: dklimpel <5740567+dklimpel@users.noreply.github.com> Date: Tue, 16 Jun 2020 10:05:38 +0200 Subject: [PATCH 08/10] Change field `creation_ts * 1000` to `creation_ts_ms` --- src/components/users.js | 2 +- src/i18n/de.js | 4 ++-- src/i18n/en.js | 2 +- src/synapse/dataProvider.js | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/users.js b/src/components/users.js index 9f57e85..e83b70e 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -160,7 +160,7 @@ export const UserEdit = props => ( helperText="resources.users.helper.deactivate" /> { From 3fd615943cc441ee154d4fc278b036b16fdd1986 Mon Sep 17 00:00:00 2001 From: Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> Date: Wed, 1 Jul 2020 22:36:15 +0200 Subject: [PATCH 09/10] Shows encrypted status with icons --- src/components/rooms.js | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/components/rooms.js b/src/components/rooms.js index a28290f..4c598b9 100644 --- a/src/components/rooms.js +++ b/src/components/rooms.js @@ -5,12 +5,43 @@ import { TextField, Pagination, BooleanField, + useTranslate, } from "react-admin"; +import get from "lodash/get"; +import { Tooltip, Typography } from "@material-ui/core"; +import HttpsIcon from "@material-ui/icons/Https"; +import NoEncryptionIcon from "@material-ui/icons/NoEncryption"; const RoomPagination = props => ( ); +const EncryptionField = ({ source, record = {}, emptyText }) => { + const translate = useTranslate(); + const value = get(record, source); + let ariaLabel = value === false ? "ra.boolean.false" : "ra.boolean.true"; + + if (value === false || value === true) { + return ( + + + {value === true ? ( + + ) : ( + + )} + + + ); + } + + return ( + + {emptyText} + + ); +}; + export const RoomList = props => ( ( sort={{ field: "name", order: "ASC" }} > + } + /> @@ -25,7 +61,6 @@ export const RoomList = props => ( - From 8282a3caf886aade41986ea18a0a1b93c2c06cfd Mon Sep 17 00:00:00 2001 From: Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> Date: Mon, 6 Jul 2020 12:35:26 +0200 Subject: [PATCH 10/10] Move threepids in UserEdit to a separate tab (#51) Separates information into individual tabs for a better overview. --- src/components/users.js | 8 ++++++++ src/i18n/de.js | 1 + src/i18n/en.js | 1 + 3 files changed, 10 insertions(+) diff --git a/src/components/users.js b/src/components/users.js index e83b70e..ff21436 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -1,5 +1,6 @@ import React, { Fragment } from "react"; import PersonPinIcon from "@material-ui/icons/PersonPin"; +import ContactMailIcon from "@material-ui/icons/ContactMail"; import SettingsInputComponentIcon from "@material-ui/icons/SettingsInputComponent"; import { ArrayInput, @@ -172,6 +173,12 @@ export const UserEdit = props => ( }} /> + + } + path="threepid" + > ( } + path="connections" >