sms
This commit is contained in:
1 parent
250cdbab7f
commit
5c6069c3ef
87 files changed
+29209
-3697
No files matched your search
@@ -0,0 +1,43 @@
|
||||
"""Provider کنسول برای تست/دیباگ؛ پیامک واقعی ارسال نمیکند."""
|
||||
import logging
|
||||
import sys
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
from .base import SMSProvider, SMSResult, webotp_message
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def console_write(text):
|
||||
"""چاپ روی کنسول بهگونهای که **هرگز** استثنا پرت نکند.
|
||||
|
||||
وظیفهٔ provider ارسال است، نه نمایش. کنسول ویندوز (cp1252) فارسی را کدگذاری
|
||||
نمیکند و ``print`` مستقیم باعث ``UnicodeEncodeError`` میشد؛ چون فراخوانیکننده
|
||||
(worker) هر استثنا را «ارسال ناموفق» میفهمد، یک خطای نمایشی پیامک را در صف
|
||||
``failed`` میگذاشت. پس اول تلاش میکنیم متن کامل را بنویسیم، و اگر کنسول
|
||||
توانش را نداشت نسخهٔ ASCII-شده را مینویسیم.
|
||||
"""
|
||||
for payload in (text, text.encode("ascii", "replace").decode("ascii")):
|
||||
try:
|
||||
sys.stdout.write(payload + "\n")
|
||||
sys.stdout.flush()
|
||||
return
|
||||
except (UnicodeEncodeError, ValueError, OSError):
|
||||
continue
|
||||
|
||||
|
||||
class ConsoleSMSProvider(SMSProvider):
|
||||
def __init__(self, config=None):
|
||||
self.config = config
|
||||
|
||||
def send_otp(self, mobile, code):
|
||||
if settings.DEBUG:
|
||||
console_write(f"[DEV OTP] {mobile}: {webotp_message(code)}")
|
||||
return SMSResult(True, provider_code="console")
|
||||
|
||||
def send_message(self, mobile, message):
|
||||
logger.info("[DEV SMS] destination=***%s message=%s", (mobile or "")[-4:], message)
|
||||
if settings.DEBUG:
|
||||
console_write(f"[DEV SMS] {mobile}: {message}")
|
||||
return SMSResult(True, provider_code="console")
|
||||
Reference in new issue
Block a user