From 4153f60258ef9d941e21eede2973ec69f3fd17be Mon Sep 17 00:00:00 2001 From: caryoscelus Date: Fri, 18 Aug 2023 16:12:31 +0000 Subject: [PATCH 1/3] Don't accept file update if it's from muted user refs https://github.com/HelloZeroNet/ZeroNet/issues/1855 --- plugins/ContentFilter/ContentFilterPlugin.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/ContentFilter/ContentFilterPlugin.py b/plugins/ContentFilter/ContentFilterPlugin.py index 6cec1bc3..8a9db880 100644 --- a/plugins/ContentFilter/ContentFilterPlugin.py +++ b/plugins/ContentFilter/ContentFilterPlugin.py @@ -216,6 +216,18 @@ class SiteStoragePlugin(object): filter_storage.includeUpdateAll() return super(SiteStoragePlugin, self).onUpdated(inner_path, file=file) +@PluginManager.registerTo("FileRequest") +class FileRequestPlugin: + def actionUpdate(self, params): + inner_path = params.get('inner_path', '') + self.log.info(f'FileRequest.actionUpdate {inner_path}') + matches = re.findall('/(1[A-Za-z0-9]{26,35})/', inner_path) + for auth_address in matches: + if filter_storage.isMuted(auth_address): + self.log.info(f'Mute match in FileRequest.actionUpdate: {auth_address}, ignoring {inner_path}') + self.response({'ok': f'Thanks, file {inner_path} updated!'}) + return False + return super(FileRequestPlugin, self).actionUpdate(params) @PluginManager.registerTo("UiRequest") class UiRequestPlugin(object): From 4d4880a5c8d94d85900898f9742f32d2e4e70812 Mon Sep 17 00:00:00 2001 From: caryoscelus Date: Fri, 18 Aug 2023 16:51:16 +0000 Subject: [PATCH 2/3] Ignore muted files in Site.needFile --- plugins/ContentFilter/ContentFilterPlugin.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/ContentFilter/ContentFilterPlugin.py b/plugins/ContentFilter/ContentFilterPlugin.py index 8a9db880..ec88b3b3 100644 --- a/plugins/ContentFilter/ContentFilterPlugin.py +++ b/plugins/ContentFilter/ContentFilterPlugin.py @@ -216,11 +216,21 @@ class SiteStoragePlugin(object): filter_storage.includeUpdateAll() return super(SiteStoragePlugin, self).onUpdated(inner_path, file=file) +@PluginManager.registerTo("Site") +class SitePlugin(object): + def needFile(self, inner_path, update=False, blocking=True, peer=None, priority=0): + self.log.debug(f'needFile {inner_path}') + matches = re.findall('/(1[A-Za-z0-9]{26,35})/', inner_path) + for auth_address in matches: + if filter_storage.isMuted(auth_address): + self.log.info(f'Mute match in Site.needFile: {auth_address}, ignoring {inner_path}') + return False + return super(SitePlugin, self).needFile(inner_path, update, blocking, peer, priority) + @PluginManager.registerTo("FileRequest") class FileRequestPlugin: def actionUpdate(self, params): inner_path = params.get('inner_path', '') - self.log.info(f'FileRequest.actionUpdate {inner_path}') matches = re.findall('/(1[A-Za-z0-9]{26,35})/', inner_path) for auth_address in matches: if filter_storage.isMuted(auth_address): From c9dbc49375e6c17579251982fc6421db3a120d23 Mon Sep 17 00:00:00 2001 From: caryoscelus Date: Sat, 16 Sep 2023 12:27:00 +0000 Subject: [PATCH 3/3] Delete muted content --- plugins/ContentFilter/ContentFilterPlugin.py | 2 +- plugins/ContentFilter/ContentFilterStorage.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/ContentFilter/ContentFilterPlugin.py b/plugins/ContentFilter/ContentFilterPlugin.py index ec88b3b3..c4d8bf3d 100644 --- a/plugins/ContentFilter/ContentFilterPlugin.py +++ b/plugins/ContentFilter/ContentFilterPlugin.py @@ -58,7 +58,7 @@ class UiWebsocketPlugin(object): def actionMuteAdd(self, to, auth_address, cert_user_id, reason): self.cmd( "prompt", - [_["Hide all content from %s?"] % html.escape(cert_user_id), reason, _["Mute"]], + [_["Remove all content from %s?"] % html.escape(cert_user_id), reason, _["Mute"]], lambda res: self.cbMuteAdd(to, auth_address, cert_user_id, res if res else reason) ) diff --git a/plugins/ContentFilter/ContentFilterStorage.py b/plugins/ContentFilter/ContentFilterStorage.py index 289ec2a9..2ad378d6 100644 --- a/plugins/ContentFilter/ContentFilterStorage.py +++ b/plugins/ContentFilter/ContentFilterStorage.py @@ -158,7 +158,7 @@ class ContentFilterStorage(object): dir_inner_path = helper.getDirname(row["inner_path"]) for file_name in site.storage.walk(dir_inner_path): if action == "remove": - site.storage.onUpdated(dir_inner_path + file_name, False) + site.storage.delete(dir_inner_path + file_name) else: site.storage.onUpdated(dir_inner_path + file_name) site.onFileDone(dir_inner_path + file_name)