Files
slidgevoipms/gateway.py
2024-04-10 18:41:03 -07:00

67 lines
2.1 KiB
Python

"""
The gateway
"""
import aiohttp
from typing import Optional
from slixmpp import JID
from slidge import BaseGateway, FormField, GatewayUser
from slidge.command.register import RegistrationType
from slixmpp.exceptions import XMPPError
from .session import API_URL
from .session import ASSETS_DIR
class Gateway(BaseGateway):
"""
This is instantiated once by the slidge entrypoint.
By customizing the class attributes, we customize the registration process,
and display name of the component.
"""
COMPONENT_NAME = "voip.ms sms gateway"
COMPONENT_AVATAR = ASSETS_DIR / "slidge-color.png"
COMPONENT_TYPE = "aim"
REGISTRATION_INSTRUCTIONS = (
"Register with your voip.ms username and API password"
"Then you will need to enter the DID you wish to use."
)
REGISTRATION_TYPE = RegistrationType.SINGLE_STEP_FORM
REGISTRATION_FIELDS = [
FormField(var="username", label="User name", required=True),
FormField(var="password", label="Voip MS API password", required=True, private=True),
FormField(var="did", label="Did (phone number)", required=True),
]
GROUPS = False
MARK_ALL_MESSAGES = False
async def validate(
self, user_jid: JID, registration_form: dict[str, Optional[str]]
):
"""
This function receives the values of the form defined in
:attr:`REGISTRATION_FIELDS`. Here, since we set
:attr:`REGISTRATION_TYPE` to "SINGLE_STEP_FORM", if login fails
the user will see an exception
:param user_jid:
:param registration_form:
:return:
"""
async with aiohttp.ClientSession() as session:
async with session.get(API_URL, params={
'api_username': registration_form.get('username'),
'api_password': registration_form.get('password'),
'method': 'getDIDsInfo',
'content_type': 'json',
}) as response:
json = await response.json()
if json['status'] == 'success':
return
else:
raise XMPPError("Received error from voipms")