From 8536f552d4dce1e277c83c92b86c8d9fedbcbaad Mon Sep 17 00:00:00 2001 From: dklimpel <5740567+dklimpel@users.noreply.github.com> Date: Thu, 19 Aug 2021 13:51:53 +0200 Subject: [PATCH] Add button to quarantine media (#180) Change-Id: I6496826fdf75ab8b7b3ed5a9056abf86a50caea3 --- src/components/media.js | 84 +++++++++++++++++++++++++++++++++++++ src/components/users.js | 3 +- src/i18n/de.js | 12 +++++- src/i18n/en.js | 10 +++++ src/synapse/dataProvider.js | 15 +++++++ 5 files changed, 122 insertions(+), 2 deletions(-) diff --git a/src/components/media.js b/src/components/media.js index 095f1ad..a523fa2 100644 --- a/src/components/media.js +++ b/src/components/media.js @@ -17,6 +17,7 @@ import { useRefresh, useTranslate, } from "react-admin"; +import BlockIcon from "@material-ui/icons/Block"; import ClearIcon from "@material-ui/icons/Clear"; import DeleteSweepIcon from "@material-ui/icons/DeleteSweep"; import Dialog from "@material-ui/core/Dialog"; @@ -241,3 +242,86 @@ export const ProtectMediaButton = props => { ); }; + +export const QuarantineMediaButton = props => { + const { record } = props; + const translate = useTranslate(); + const refresh = useRefresh(); + const notify = useNotify(); + const [create, { loading }] = useCreate("quarantine_media"); + const [deleteOne] = useDelete("quarantine_media"); + + if (!record) return null; + + const handleQuarantaine = () => { + create( + { payload: { data: record } }, + { + onSuccess: () => { + notify("resources.quarantine_media.action.send_success"); + refresh(); + }, + onFailure: () => + notify("resources.quarantine_media.action.send_failure", "error"), + } + ); + }; + + const handleRemoveQuarantaine = () => { + deleteOne( + { payload: { ...record } }, + { + onSuccess: () => { + notify("resources.quarantine_media.action.send_success"); + refresh(); + }, + onFailure: () => + notify("resources.quarantine_media.action.send_failure", "error"), + } + ); + }; + + return ( + + {record.safe_from_quarantine && ( + +
+ +
+
+ )} + {record.quarantined_by && ( + +
+ +
+
+ )} + {!record.safe_from_quarantine && !record.quarantined_by && ( + +
+ +
+
+ )} +
+ ); +}; diff --git a/src/components/users.js b/src/components/users.js index 32cbdd6..c954416 100644 --- a/src/components/users.js +++ b/src/components/users.js @@ -48,7 +48,7 @@ import { import { Link } from "react-router-dom"; import { ServerNoticeButton, ServerNoticeBulkButton } from "./ServerNotices"; import { DeviceRemoveButton } from "./devices"; -import { ProtectMediaButton } from "./media"; +import { ProtectMediaButton, QuarantineMediaButton } from "./media"; import { makeStyles } from "@material-ui/core/styles"; const redirect = () => { @@ -466,6 +466,7 @@ export const UserEdit = props => { + diff --git a/src/i18n/de.js b/src/i18n/de.js index 7a9139f..f7b0bb1 100644 --- a/src/i18n/de.js +++ b/src/i18n/de.js @@ -242,7 +242,7 @@ const de = { media_type: "Typ", upload_name: "Dateiname", quarantined_by: "Zur Quarantäne hinzugefügt", - safe_from_quarantine: "Geschützt vor Quarantäne", + safe_from_quarantine: "Schutz vor Quarantäne", created_ts: "Erstellt", last_access_ts: "Letzter Zugriff", }, @@ -272,6 +272,16 @@ const de = { send_failure: "Beim Versenden ist ein Fehler aufgetreten.", }, }, + quarantine_media: { + action: { + name: "Quarantäne", + create: "Zur Quarantäne hinzufügen", + delete: "In Quarantäne, Quarantäne aufheben", + none: "Geschützt vor Quarantäne", + send_success: "Erfolgreich den Quarantäne-Status geändert.", + send_failure: "Beim Versenden ist ein Fehler aufgetreten.", + }, + }, pushers: { name: "Pusher |||| Pushers", fields: { diff --git a/src/i18n/en.js b/src/i18n/en.js index 680fcc5..e669a1a 100644 --- a/src/i18n/en.js +++ b/src/i18n/en.js @@ -268,6 +268,16 @@ const en = { send_failure: "An error has occurred.", }, }, + quarantine_media: { + action: { + name: "Quarantine", + create: "Add to quarantine", + delete: "In quarantine, unquarantine", + none: "Protected from quarantine", + send_success: "Successfully changed the quarantine status.", + send_failure: "An error has occurred.", + }, + }, pushers: { name: "Pusher |||| Pushers", fields: { diff --git a/src/synapse/dataProvider.js b/src/synapse/dataProvider.js index d40640a..b37af45 100644 --- a/src/synapse/dataProvider.js +++ b/src/synapse/dataProvider.js @@ -193,6 +193,21 @@ const resourceMap = { method: "POST", }), }, + quarantine_media: { + map: qm => ({ id: qm.media_id }), + create: params => ({ + endpoint: `/_synapse/admin/v1/media/quarantine/${localStorage.getItem( + "home_server" + )}/${params.media_id}`, + method: "POST", + }), + delete: params => ({ + endpoint: `/_synapse/admin/v1/media/unquarantine/${localStorage.getItem( + "home_server" + )}/${params.media_id}`, + method: "POST", + }), + }, servernotices: { map: n => ({ id: n.event_id }), create: data => ({