diff --git a/sat/core/xmpp.py b/sat/core/xmpp.py index 8b8e8a70..d78974db 100644 --- a/sat/core/xmpp.py +++ b/sat/core/xmpp.py @@ -16,39 +16,42 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import calendar +import copy +from functools import partial +import mimetypes +from pathlib import Path import sys import time -import calendar -import uuid -import mimetypes from typing import Tuple -from urllib.parse import urlparse, unquote -from functools import partial -from pathlib import Path +from urllib.parse import unquote, urlparse +import uuid + 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 @@ class SatXMPPComponent(SatXMPPEntity, component.Component): 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):