67 lines
2.1 KiB
Python
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")
|