# HG changeset patch # User Goffi # Date 1577735045 -3600 # Node ID f0f48b4deb3591861bc1d8c461528e0a8d998113 # Parent 7574f795bd1efb597b6bf55d3bdc1c75fd731512 plugin XEP-0359: handle origin-id diff -r 7574f795bd1e -r f0f48b4deb35 sat/plugins/plugin_xep_0359.py --- a/sat/plugins/plugin_xep_0359.py Mon Dec 30 20:44:04 2019 +0100 +++ b/sat/plugins/plugin_xep_0359.py Mon Dec 30 20:44:05 2019 +0100 @@ -18,13 +18,14 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import uuid +from zope.interface import implementer +from twisted.words.protocols.jabber import xmlstream +from wokkel import disco from sat.core.constants import Const as C from sat.core import exceptions from sat.core.i18n import _ from sat.core.log import getLogger -from twisted.words.protocols.jabber import xmlstream -from zope.interface import implementer -from wokkel import disco log = getLogger(__name__) @@ -88,6 +89,32 @@ sid_elt["by"] = client.jid.userhost() if by is None else by.userhost() sid_elt["id"] = stanza_id + def getOriginId(self, element): + """Return origin-id if found in element + + @param element(domish.Element): element to parse + @return (unicode, None): origin-id if found + """ + try: + origin_elt = next(element.elements(NS_SID, "origin-id")) + except StopIteration: + return None + else: + return origin_elt.getAttribute("id") + + def addOriginId(self, element, origin_id=None): + """Add a to a stanza + + @param element(domish.Element): stanza where the must be added + @param origin_id(str): id to use, None to automatically generate + @return (str): origin_id + """ + if origin_id is None: + origin_id = str(uuid.uuid4()) + sid_elt = element.addElement((NS_SID, "origin-id")) + sid_elt["id"] = origin_id + return origin_id + def getHandler(self, client): return XEP_0359_handler()