# HG changeset patch # User Goffi # Date 1679582287 -3600 # Node ID 412b99c29d83c2d29a61ed4978a5eb10118d52f5 # Parent d8a1219e913f83e6ed9e2985b0d1012eba78c13e core (xmpp), component file sharing, plugin XEP-0363: `enabled_features` + HTTP Upload: add a mechanism to explicitely enable some features in components, and use it to enable HTTP Upload only if it's explicitely enabled. diff -r d8a1219e913f -r 412b99c29d83 sat/core/xmpp.py --- a/sat/core/xmpp.py Thu Mar 23 15:32:10 2023 +0100 +++ b/sat/core/xmpp.py Thu Mar 23 15:38:07 2023 +0100 @@ -1067,6 +1067,7 @@ ) ) + self.enabled_features = set() self.identities = [disco.DiscoIdentity("component", "generic", C.APP_NAME)] # jid is set automatically on bind by Twisted for Client, but not for Component self.jid = component_jid diff -r d8a1219e913f -r 412b99c29d83 sat/plugins/plugin_comp_file_sharing.py --- a/sat/plugins/plugin_comp_file_sharing.py Thu Mar 23 15:32:10 2023 +0100 +++ b/sat/plugins/plugin_comp_file_sharing.py Thu Mar 23 15:38:07 2023 +0100 @@ -355,7 +355,7 @@ self._h = self.host.plugins["XEP-0300"] self._t = self.host.plugins["XEP-0264"] self._hu = self.host.plugins["XEP-0363"] - self._hu.registerHandler(self._onHTTPUpload) + self._hu.registerHandler(self._on_http_upload) self.host.trigger.add("FILE_getDestDir", self._getDestDirTrigger) self.host.trigger.add( "XEP-0234_fileSendingRequest", self._fileSendingRequestTrigger, priority=1000 @@ -393,6 +393,9 @@ return Comments_handler(self) def profileConnecting(self, client): + # we activate HTTP upload + client.enabled_features.add("XEP-0363") + self.init() public_base_url = self.host.memory.getConfig( 'component file-sharing', 'http_upload_public_facing_url') @@ -632,7 +635,7 @@ except KeyError: log.error(f"trying to purge an inexisting upload slot ({upload_id})") - async def _onHTTPUpload(self, client, request): + async def _on_http_upload(self, client, request): # filename should be already cleaned, but it's better to double check assert '/' not in request.filename # client._file_sharing_allowed_hosts is set in plugin XEP-0329 diff -r d8a1219e913f -r 412b99c29d83 sat/plugins/plugin_xep_0363.py --- a/sat/plugins/plugin_xep_0363.py Thu Mar 23 15:32:10 2023 +0100 +++ b/sat/plugins/plugin_xep_0363.py Thu Mar 23 15:38:07 2023 +0100 @@ -433,14 +433,19 @@ self.plugin_parent = plugin_parent def connectionInitialized(self): - if self.parent.is_component: + if ((self.parent.is_component + and PLUGIN_INFO[C.PI_IMPORT_NAME] in self.parent.enabled_features)): self.xmlstream.addObserver( IQ_HTTP_UPLOAD_REQUEST, self.plugin_parent.onComponentRequest, client=self.parent ) def getDiscoInfo(self, requestor, target, nodeIdentifier=""): - return [disco.DiscoFeature(NS_HTTP_UPLOAD)] + if ((self.parent.is_component + and not PLUGIN_INFO[C.PI_IMPORT_NAME] in self.parent.enabled_features)): + return [] + else: + return [disco.DiscoFeature(NS_HTTP_UPLOAD)] def getDiscoItems(self, requestor, target, nodeIdentifier=""): return []