from abc import ABC, abstractmethod import requests from django.conf import settings class SmsProviderABC(ABC): @abstractmethod def send_sms(self, mobile: str, message: str) -> bool: pass class DefaultSmsProvider(SmsProviderABC): def send_sms(self, mobile: str, message: str) -> bool: default_provider = DosefrNavadHashtSMS() return default_provider.send_sms(mobile, message) class DosefrNavadHashtSMS(SmsProviderABC): def send_sms(self, mobile: str, message: str) -> bool: payload = { 'USERNAME': 'vsms7937', 'PASSWORD': '335577775533', 'FROM': '30005367', 'TO': int(mobile), 'TEXT': f'{message}' } try: r = requests.get('http://www.0098sms.com/sendsmslink.aspx', params=payload, timeout=10) r.raise_for_status() except requests.RequestException: return False # An HTTP 200 alone does not mean the SMS provider accepted the message. success_codes = getattr(settings, 'SMS_SUCCESS_CODES', ('0',)) return r.text.strip() in success_codes