diff sat/core/xmpp.py @ 3736:e52de21873d3

core (xmpp): new `getVirtualClient` for components: this method is used to make a client with a given JID instead of component's JID. This is needed when a JID managed by the component (e.g. associated to a legacy service account) must be used. rel 364
author Goffi <goffi@goffi.org>
date Tue, 22 Mar 2022 17:00:42 +0100
parents b9718216a1c0
children 9581098b64f0
line wrap: on
line diff
--- a/sat/core/xmpp.py	Mon Mar 21 16:37:19 2022 +0100
+++ b/sat/core/xmpp.py	Tue Mar 22 17:00:42 2022 +0100
@@ -16,39 +16,42 @@
 # 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 calendar
+import copy
+from functools import partial
+import mimetypes
+from pathlib import Path
 import sys
 import time
-import calendar
+from typing import Tuple
+from urllib.parse import unquote, urlparse
 import uuid
-import mimetypes
-from typing import Tuple
-from urllib.parse import urlparse, unquote
-from functools import partial
-from pathlib import Path
+
 import shortuuid
-from sat.core.i18n import _
-from sat.core.constants import Const as C
-from sat.memory import cache
 from twisted.internet import defer, error as internet_error
 from twisted.internet import ssl
-from twisted.words.protocols.jabber.xmlstream import XMPPHandler
+from twisted.python import failure
 from twisted.words.protocols.jabber import xmlstream
 from twisted.words.protocols.jabber import error
 from twisted.words.protocols.jabber import jid
+from twisted.words.protocols.jabber.xmlstream import XMPPHandler
 from twisted.words.xish import domish
-from twisted.python import failure
-from wokkel import client as wokkel_client, disco, xmppim, generic, iwokkel
+from wokkel import client as wokkel_client, disco, generic, iwokkel, xmppim
 from wokkel import component
 from wokkel import delay
-from sat.core.log import getLogger
+from zope.interface import implementer
+
 from sat.core import exceptions
 from sat.core import core_types
+from sat.core.constants import Const as C
+from sat.core.i18n import _
+from sat.core.log import getLogger
+from sat.memory import cache
 from sat.memory import encryption
 from sat.memory import persistent
 from sat.tools import xml_tools
 from sat.tools import utils
 from sat.tools.common import data_format
-from zope.interface import implementer
 
 log = getLogger(__name__)
 
@@ -1109,6 +1112,18 @@
         peer_jid = jid.JID(iq_elt["from"])
         return peer_jid, owner
 
+    def getVirtualClient(self, jid_: jid.JID) -> SatXMPPEntity:
+        """Get client for this component with a specified jid
+
+        This is needed to perform operations with a virtual JID corresponding to a virtual
+        entity (e.g. identified of a legacy network account) instead of the JID of the
+        gateway itself.
+        @param jid_: virtual JID to use
+        @return: virtual client
+        """
+        client = copy.copy(self)
+        client.jid = jid_
+        return client
 
 
 class SatMessageProtocol(xmppim.MessageProtocol):