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.
This commit is contained in:
Goffi 2023-03-23 15:38:07 +01:00
commit cb2144bdf4
3 changed files with 13 additions and 4 deletions

View file

@ -1067,6 +1067,7 @@ class SatXMPPComponent(SatXMPPEntity, component.Component):
)
)
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

View file

@ -355,7 +355,7 @@ class FileSharing:
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 @@ class FileSharing:
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 @@ class FileSharing:
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

View file

@ -433,14 +433,19 @@ class XEP_0363_handler(xmlstream.XMPPHandler):
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 []