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
This commit is contained in:
Goffi 2022-03-22 17:00:42 +01:00
commit b5ea5bfdc8

View file

@ -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
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):