slidgnal.gateway

Attributes

Classes

Gateway

The gateway component, handling registrations and un-registrations.

Module Contents

slidgnal.gateway.REGISTRATION_INSTRUCTIONS = 'Continue and scan the resulting QR codes on your main device. More information at...[source]
slidgnal.gateway.WELCOME_MESSAGE = "Thank you for registering! Please scan the following QR code on your main device to complete...[source]
class slidgnal.gateway.Gateway[source]

Bases: slidge.BaseGateway

The gateway component, handling registrations and un-registrations.

On slidge launch, a singleton is instantiated, and it will be made available to public classes such LegacyContact or BaseSession as the .xmpp attribute.

Must be subclassed by a legacy module to set up various aspects of the XMPP component behaviour, such as its display name or welcome message, via class attributes COMPONENT_NAME WELCOME_MESSAGE.

Abstract methods related to the registration process must be overriden for a functional Legacy Module:

  • validate()

  • validate_two_factor_code()

  • get_qr_text()

  • confirm_qr()

NB: Not all of these must be overridden, it depends on the REGISTRATION_TYPE.

The other methods, such as send_text() or react() are the same as those of LegacyContact and LegacyParticipant, because the component itself is also a “messaging actor”, ie, an XMPP Entity. For these methods, you need to specify the JID of the recipient with the mto parameter.

Since it inherits from slixmpp.componentxmpp.ComponentXMPP,you also have a hand on low-level XMPP interactions via slixmpp methods, e.g.:

self.send_presence(
    pfrom="somebody@component.example.com",
    pto="someonwelse@anotherexample.com",
)

However, you should not need to do so often since the classes of the plugin API provides higher level abstractions around most commonly needed use-cases, such as sending messages, or displaying a custom status.

COMPONENT_NAME = 'Slignal'[source]

Name of the component, as seen in service discovery by XMPP clients

COMPONENT_TYPE = 'signal'[source]

Type of the gateway, should follow https://xmpp.org/registrar/disco-categories.html

COMPONENT_AVATAR = 'https://signal.org/assets/images/favicon/apple-touch-icon.png'[source]

Path, bytes or URL used by the component as an avatar.

ROSTER_GROUP = 'Signal'[source]

Name of the group assigned to a LegacyContact automagically added to the User’s roster with LegacyContact.add_to_roster().

REGISTRATION_INSTRUCTIONS = 'Continue and scan the resulting QR codes on your main device. More information at...[source]

The text presented to a user that wants to register (or modify) their legacy account configuration.

WELCOME_MESSAGE = "Thank you for registering! Please scan the following QR code on your main device to complete...[source]

A welcome message displayed to users on registration. This is useful notably for clients that don’t consider component JIDs as a valid recipient in their UI, yet still open a functional chat window on incoming messages from components.

REGISTRATION_FIELDS = [][source]

Iterable of fields presented to the gateway user when registering using XEP-0077 extended by XEP-0004.

GROUPS = False[source]
PROPER_RECEIPTS = True[source]

Set this to True if the legacy service provides a real equivalent of message delivery receipts (XEP-0184), meaning that there is an event thrown when the actual device of a contact receives a message. Make sure to call Contact.received() adequately if this is set to True.

signal[source]
async validate(user_jid, registration_form)[source]

Validate registration form. A no-op for Signal, as actual registration takes place after in-band registration commands complete; see Session.login() for more.

async unregister(session)[source]

Logout from the active Signal session. This will also force a remote log-out, and thus require pairing on next login. For simply disconnecting the active session, look at the Session.disconnect() function.

Parameters:

session (slidgnal.session.Session)