55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
|
from django.db.models import Model, CharField, BooleanField
|
||
|
|
||
|
from core.classes.sms import BaseSMSProvider, SMSNotSent
|
||
|
|
||
|
from urllib.parse import quote_plus
|
||
|
from urllib.request import urlopen
|
||
|
from typing import Union
|
||
|
|
||
|
|
||
|
import json
|
||
|
|
||
|
# Create your models here.
|
||
|
|
||
|
class PlaySMSServer(Model, BaseSMSProvider):
|
||
|
name = CharField(max_length=255)
|
||
|
logo = CharField(max_length=255)
|
||
|
https = BooleanField(default=True)
|
||
|
host = CharField(max_length=255)
|
||
|
username = CharField(max_length=255)
|
||
|
token = CharField(max_length=255)
|
||
|
|
||
|
@property
|
||
|
def is_active(self):
|
||
|
return True
|
||
|
|
||
|
@staticmethod
|
||
|
def getError(status):
|
||
|
if status["error_message"]:
|
||
|
return status["error_message"]
|
||
|
try:
|
||
|
if status["data"]["error"]:
|
||
|
return status["data"]["error"]
|
||
|
finally:
|
||
|
return
|
||
|
|
||
|
def sendSMS(self, recipients: Union[str, list], message: str):
|
||
|
'''Send an SMS message to one or more recipients
|
||
|
|
||
|
:param recipients: Recipient phone number as a string, or a list of multiple phone number strings
|
||
|
:param message: Message to be sent as a string
|
||
|
'''
|
||
|
|
||
|
if isinstance(recipients, list):
|
||
|
recipients = ",".join(recipients)
|
||
|
|
||
|
url = 'http%s://%s/index.php?app=ws&u="%s"&h="%s"&op=pv&to=%s&msg=%s' % ("s" if self.https else "", self.host, self.username, self.token, recipients, quote_plus(message))
|
||
|
|
||
|
response = urlopen(url)
|
||
|
|
||
|
status = json.loads(response.read().decode())
|
||
|
|
||
|
error = PlaySMSServer.getError(status)
|
||
|
|
||
|
if error:
|
||
|
raise SMSNotSent(f'An error occurred trying to send the SMS: {error}')
|