changeset 3103:f0f48b4deb35

plugin XEP-0359: handle origin-id
author Goffi <goffi@goffi.org>
date Mon, 30 Dec 2019 20:44:05 +0100
parents 7574f795bd1e
children 118d91c932a7
files sat/plugins/plugin_xep_0359.py
diffstat 1 files changed, 30 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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 <http://www.gnu.org/licenses/>.
 
+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 <origin-id/> to a stanza
+
+        @param element(domish.Element): stanza where the <origin-id/> 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()