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] 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), }));