plugin XEP-0363: allow async callbacks in handlers + method to generate file-too-large element
This commit is contained in:
parent
6e6bc64eab
commit
3024ae2be0
1 changed files with 15 additions and 7 deletions
|
|
@ -24,6 +24,7 @@ from urllib import parse
|
|||
from wokkel import disco, iwokkel
|
||||
from zope.interface import implementer
|
||||
from twisted.words.protocols.jabber import jid, xmlstream, error
|
||||
from twisted.words.xish import domish
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet import defer
|
||||
from twisted.web import client as http_client
|
||||
|
|
@ -33,7 +34,7 @@ from sat.core.xmpp import SatXMPPComponent
|
|||
from sat.core.constants import Const as C
|
||||
from sat.core.log import getLogger
|
||||
from sat.core import exceptions
|
||||
from sat.tools import web as sat_web
|
||||
from sat.tools import web as sat_web, utils
|
||||
|
||||
|
||||
log = getLogger(__name__)
|
||||
|
|
@ -122,6 +123,12 @@ class XEP_0363:
|
|||
self.handlers.append(req_handler)
|
||||
self.handlers.sort(key=lambda handler: handler.priority, reverse=True)
|
||||
|
||||
def getFileTooLargeElt(self, max_size: int) -> domish.Element:
|
||||
"""Generate <file-too-large> app condition for errors"""
|
||||
file_too_large_elt = domish.Element((NS_HTTP_UPLOAD, "file-too-large"))
|
||||
file_too_large_elt.addElement("max-file-size", str(max_size))
|
||||
return file_too_large_elt
|
||||
|
||||
async def getHTTPUploadEntity(self, client, upload_jid=None):
|
||||
"""Get HTTP upload capable entity
|
||||
|
||||
|
|
@ -356,6 +363,9 @@ class XEP_0363:
|
|||
|
||||
def onComponentRequest(self, iq_elt, client):
|
||||
iq_elt.handled=True
|
||||
defer.ensureDeferred(self.handleComponentRequest(client, iq_elt))
|
||||
|
||||
async def handleComponentRequest(self, client, iq_elt):
|
||||
try:
|
||||
request_elt = next(iq_elt.elements(NS_HTTP_UPLOAD, "request"))
|
||||
request = UploadRequest(
|
||||
|
|
@ -372,7 +382,7 @@ class XEP_0363:
|
|||
|
||||
for handler in self.handlers:
|
||||
try:
|
||||
slot = handler.callback(client, request)
|
||||
slot = await utils.asDeferred(handler.callback, client, request)
|
||||
except error.StanzaError as e:
|
||||
log.warning(
|
||||
"a stanza error has been raised while processing HTTP Upload of "
|
||||
|
|
@ -389,11 +399,9 @@ class XEP_0363:
|
|||
log.warning(
|
||||
_("no service can handle HTTP Upload request: {elt}")
|
||||
.format(elt=iq_elt.toXml()))
|
||||
if err is not None:
|
||||
condition = err.condition
|
||||
else:
|
||||
condition = "feature-not-implemented"
|
||||
client.sendError(iq_elt, condition)
|
||||
if err is None:
|
||||
err = error.StanzaError("feature-not-implemented")
|
||||
client.send(err.toResponse(iq_elt))
|
||||
return
|
||||
|
||||
iq_result_elt = xmlstream.toResponse(iq_elt, "result")
|
||||
|
|
|
|||
Loading…
Reference in a new issue