From ea5e0a46f52502f1682e89955288e4a848d7f0af Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 1 Aug 2020 16:07:39 +0200 Subject: [PATCH] core (memory): `setFileAccessModel` implementation: this method let change read permission using access model similar to what is used with Pubsub. --- sat/memory/memory.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/sat/memory/memory.py b/sat/memory/memory.py index 349d15ed..726cffae 100644 --- a/sat/memory/memory.py +++ b/sat/memory/memory.py @@ -1409,6 +1409,47 @@ class Memory(object): ), ) + def _setFileAccessModelUpdate( + self, + access: dict, + file_data: dict, + access_model: str + ) -> None: + read_data = access.setdefault(C.ACCESS_PERM_READ, {}) + if access_model == "open": + requested_type = C.ACCESS_TYPE_PUBLIC + elif access_model == "whitelist": + requested_type = C.ACCESS_TYPE_WHITELIST + else: + raise ValueError(f"unknown access model: {access_model}") + + read_data['type'] = requested_type + if requested_type == C.ACCESS_TYPE_WHITELIST and 'jids' not in read_data: + read_data['jids'] = [] + + async def setFileAccessModel( + self, + client, + file_data: dict, + access_model: str, + ) -> None: + """Apply pubsub like access_model to file_data + + Only 2 access models are supported so far: + - "open": set public access to file/dir + - "whitelist": set whitelist to file/dir + """ + file_id = file_data['id'] + await self.fileUpdate( + file_id, + 'access', + update_cb=partial( + self._setFileAccessModelUpdate, + file_data=file_data, + access_model=access_model + ), + ) + @defer.inlineCallbacks def getFiles( self, client, peer_jid, file_id=None, version=None, parent=None, path=None,