From a647c91f4fc3de58e18698980265ceb9afe762d0 Mon Sep 17 00:00:00 2001 From: Charlie Calendre <57274151+c-cal@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:18:09 +0100 Subject: [PATCH 1/3] fix: prevent requests from failing (#272) Encode userid to handle the case of a localpart with a slash --- src/synapse/dataProvider.js | 49 +++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js index 3165f01..27ffc94 100644 --- a/src/synapse/dataProvider.js +++ b/src/synapse/dataProvider.js @@ -41,14 +41,16 @@ const resourceMap = { data: "users", total: json => json.total, create: data => ({ - endpoint: `/_synapse/admin/v2/users/@${data.id}:${localStorage.getItem( - "home_server" - )}`, + endpoint: `/_synapse/admin/v2/users/@${encodeURIComponent( + data.id + )}:${localStorage.getItem("home_server")}`, body: data, method: "PUT", }), delete: params => ({ - endpoint: `/_synapse/admin/v1/deactivate/${params.id}`, + endpoint: `/_synapse/admin/v1/deactivate/${encodeURIComponent( + params.id + )}`, body: { erase: true }, method: "POST", }), @@ -92,10 +94,12 @@ const resourceMap = { return json.total; }, reference: id => ({ - endpoint: `/_synapse/admin/v2/users/${id}/devices`, + endpoint: `/_synapse/admin/v2/users/${encodeURIComponent(id)}/devices`, }), delete: params => ({ - endpoint: `/_synapse/admin/v2/users/${params.user_id}/devices/${params.id}`, + endpoint: `/_synapse/admin/v2/users/${encodeURIComponent( + params.user_id + )}/devices/${params.id}`, }), }, connections: { @@ -137,7 +141,7 @@ const resourceMap = { id: p.pushkey, }), reference: id => ({ - endpoint: `/_synapse/admin/v1/users/${id}/pushers`, + endpoint: `/_synapse/admin/v1/users/${encodeURIComponent(id)}/pushers`, }), data: "pushers", total: json => { @@ -149,7 +153,9 @@ const resourceMap = { id: jr, }), reference: id => ({ - endpoint: `/_synapse/admin/v1/users/${id}/joined_rooms`, + endpoint: `/_synapse/admin/v1/users/${encodeURIComponent( + id + )}/joined_rooms`, }), data: "joined_rooms", total: json => { @@ -162,7 +168,7 @@ const resourceMap = { id: um.media_id, }), reference: id => ({ - endpoint: `/_synapse/admin/v1/users/${id}/media`, + endpoint: `/_synapse/admin/v1/users/${encodeURIComponent(id)}/media`, }), data: "media", total: json => { @@ -355,9 +361,11 @@ const dataProvider = { const res = resourceMap[resource]; const endpoint_url = homeserver + res.path; - return jsonClient(`${endpoint_url}/${params.id}`).then(({ json }) => ({ - data: res.map(json), - })); + return jsonClient(`${endpoint_url}/${encodeURIComponent(params.id)}`).then( + ({ json }) => ({ + data: res.map(json), + }) + ); }, getMany: (resource, params) => { @@ -369,7 +377,9 @@ const dataProvider = { const endpoint_url = homeserver + res.path; return Promise.all( - params.ids.map(id => jsonClient(`${endpoint_url}/${id}`)) + params.ids.map(id => + jsonClient(`${endpoint_url}/${encodeURIComponent(id)}`) + ) ).then(responses => ({ data: responses.map(({ json }) => res.map(json)), total: responses.length, @@ -410,7 +420,7 @@ const dataProvider = { const res = resourceMap[resource]; const endpoint_url = homeserver + res.path; - return jsonClient(`${endpoint_url}/${params.data.id}`, { + return jsonClient(`${endpoint_url}/${encodeURIComponent(params.data.id)}`, { method: "PUT", body: JSON.stringify(params.data, filterNullValues), }).then(({ json }) => ({ @@ -427,10 +437,13 @@ const dataProvider = { const endpoint_url = homeserver + res.path; return Promise.all( - params.ids.map(id => jsonClient(`${endpoint_url}/${id}`), { - method: "PUT", - body: JSON.stringify(params.data, filterNullValues), - }) + params.ids.map( + id => jsonClient(`${endpoint_url}/${encodeURIComponent(id)}`), + { + method: "PUT", + body: JSON.stringify(params.data, filterNullValues), + } + ) ).then(responses => ({ data: responses.map(({ json }) => json), })); From 2e59190bd0ff760d1c0bb992ae23488926797ead Mon Sep 17 00:00:00 2001 From: Dirk Klimpel <5740567+dklimpel@users.noreply.github.com> Date: Tue, 24 Jan 2023 15:24:14 +0100 Subject: [PATCH 2/3] Migrate `useMutation` to `useDelete` in `devices.js` (#225) * Migrate `useMutation` to `useDelete` in `devices.js` * Update deprecated `notify` call --- src/components/devices.js | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/components/devices.js b/src/components/devices.js index 5003987..b4cb701 100644 --- a/src/components/devices.js +++ b/src/components/devices.js @@ -1,11 +1,5 @@ import React, { Fragment, useState } from "react"; -import { - Button, - useMutation, - useNotify, - Confirm, - useRefresh, -} from "react-admin"; +import { Button, useDelete, useNotify, Confirm, useRefresh } from "react-admin"; import ActionDelete from "@material-ui/icons/Delete"; import { makeStyles } from "@material-ui/core/styles"; import { alpha } from "@material-ui/core/styles/colorManipulator"; @@ -34,7 +28,7 @@ export const DeviceRemoveButton = props => { const refresh = useRefresh(); const notify = useNotify(); - const [removeDevice, { loading }] = useMutation(); + const [removeDevice, { isLoading }] = useDelete("devices"); if (!record) return null; @@ -43,21 +37,15 @@ export const DeviceRemoveButton = props => { const handleConfirm = () => { removeDevice( - { - type: "delete", - resource: "devices", - payload: { - id: record.id, - user_id: record.user_id, - }, - }, + { payload: { id: record.id, user_id: record.user_id } }, { onSuccess: () => { notify("resources.devices.action.erase.success"); refresh(); }, - onFailure: () => - notify("resources.devices.action.erase.failure", "error"), + onFailure: () => { + notify("resources.devices.action.erase.failure", { type: "error" }); + }, } ); setOpen(false); @@ -74,7 +62,7 @@ export const DeviceRemoveButton = props => { Date: Tue, 24 Jan 2023 15:28:01 +0100 Subject: [PATCH 3/3] Update usage of `useNotify` hook (#234) Co-authored-by: Michael Albert <37796947+awesome-michael@users.noreply.github.com> --- src/components/LoginPage.js | 2 +- src/components/RoomDirectory.js | 8 ++++++-- src/components/ServerNotices.js | 8 ++++++-- src/components/media.js | 20 +++++++++++++++----- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/components/LoginPage.js b/src/components/LoginPage.js index 1a78944..b31cae3 100644 --- a/src/components/LoginPage.js +++ b/src/components/LoginPage.js @@ -169,7 +169,7 @@ const LoginPage = ({ theme }) => { : typeof error === "undefined" || !error.message ? "ra.auth.sign_in_error" : error.message, - "warning" + { type: "warning" } ); }); }; diff --git a/src/components/RoomDirectory.js b/src/components/RoomDirectory.js index 0284e14..5a9487f 100644 --- a/src/components/RoomDirectory.js +++ b/src/components/RoomDirectory.js @@ -87,7 +87,9 @@ export const RoomDirectoryBulkSaveButton = ({ selectedIds }) => { refresh(); }, onFailure: error => - notify("resources.room_directory.action.send_failure", "error"), + notify("resources.room_directory.action.send_failure", { + type: "error", + }), } ); }; @@ -119,7 +121,9 @@ export const RoomDirectorySaveButton = ({ record }) => { refresh(); }, onFailure: error => - notify("resources.room_directory.action.send_failure", "error"), + notify("resources.room_directory.action.send_failure", { + type: "error", + }), } ); }; diff --git a/src/components/ServerNotices.js b/src/components/ServerNotices.js index 6b9b95c..a8e186e 100644 --- a/src/components/ServerNotices.js +++ b/src/components/ServerNotices.js @@ -81,7 +81,9 @@ export const ServerNoticeButton = ({ record }) => { handleDialogClose(); }, onFailure: () => - notify("resources.servernotices.action.send_failure", "error"), + notify("resources.servernotices.action.send_failure", { + type: "error", + }), } ); }; @@ -127,7 +129,9 @@ export const ServerNoticeBulkButton = ({ selectedIds }) => { handleDialogClose(); }, onFailure: error => - notify("resources.servernotices.action.send_failure", "error"), + notify("resources.servernotices.action.send_failure", { + type: "error", + }), } ); }; diff --git a/src/components/media.js b/src/components/media.js index a628b79..aed1ee8 100644 --- a/src/components/media.js +++ b/src/components/media.js @@ -127,7 +127,9 @@ export const DeleteMediaButton = props => { handleDialogClose(); }, onFailure: () => - notify("resources.delete_media.action.send_failure", "error"), + notify("resources.delete_media.action.send_failure", { + type: "error", + }), } ); }; @@ -170,7 +172,9 @@ export const ProtectMediaButton = props => { refresh(); }, onFailure: () => - notify("resources.protect_media.action.send_failure", "error"), + notify("resources.protect_media.action.send_failure", { + type: "error", + }), } ); }; @@ -184,7 +188,9 @@ export const ProtectMediaButton = props => { refresh(); }, onFailure: () => - notify("resources.protect_media.action.send_failure", "error"), + notify("resources.protect_media.action.send_failure", { + type: "error", + }), } ); }; @@ -262,7 +268,9 @@ export const QuarantineMediaButton = props => { refresh(); }, onFailure: () => - notify("resources.quarantine_media.action.send_failure", "error"), + notify("resources.quarantine_media.action.send_failure", { + type: "error", + }), } ); }; @@ -276,7 +284,9 @@ export const QuarantineMediaButton = props => { refresh(); }, onFailure: () => - notify("resources.quarantine_media.action.send_failure", "error"), + notify("resources.quarantine_media.action.send_failure", { + type: "error", + }), } ); };