diff --git a/backend/apps/accounts/services/otp.py b/backend/apps/accounts/services/otp.py index 75fe1db..fee893f 100644 --- a/backend/apps/accounts/services/otp.py +++ b/backend/apps/accounts/services/otp.py @@ -57,57 +57,6 @@ class ConsoleOtpProvider(BaseOtpProvider): logger.info("OTP WhatsApp to %s: %s", to_number, message) -class TwilioOtpProvider(BaseOtpProvider): - """Twilio provider for SMS and WhatsApp OTP delivery. Requires TWILIO_* env vars.""" - - def __init__(self) -> None: - self.account_sid = os.getenv("TWILIO_ACCOUNT_SID") - self.auth_token = os.getenv("TWILIO_AUTH_TOKEN") - self.from_number = os.getenv("TWILIO_FROM_NUMBER") - self.whatsapp_from = os.getenv("TWILIO_WHATSAPP_FROM") - - def _assert_config(self) -> None: - if not self.account_sid or not self.auth_token or not self.from_number: - raise ValueError(_("Twilio credentials are not configured")) - - def _get_client(self): - from twilio.rest import Client - self._assert_config() - return Client(self.account_sid, self.auth_token) - - def send_sms(self, to_number: str, message: str) -> None: - client = self._get_client() - client.messages.create(body=message, from_=self.from_number, to=to_number) - - def send_whatsapp(self, to_number: str, message: str) -> None: - self._assert_config() - if not self.whatsapp_from: - raise ValueError(_("Twilio WhatsApp sender is not configured")) - client = self._get_client() - from_ = f"whatsapp:{self.whatsapp_from}" - to = f"whatsapp:{to_number}" - client.messages.create(body=message, from_=from_, to=to) - - -class UnifonicOtpProvider(BaseOtpProvider): - def __init__(self) -> None: - self.app_sid = os.getenv("UNIFONIC_APP_SID") - self.sender_id = os.getenv("UNIFONIC_SENDER_ID") - self.whatsapp_sender = os.getenv("UNIFONIC_WHATSAPP_SENDER") - - def _assert_config(self) -> None: - if not self.app_sid or not self.sender_id: - raise ValueError(_("Unifonic credentials are not configured")) - - def send_sms(self, to_number: str, message: str) -> None: - self._assert_config() - raise NotImplementedError(_("Unifonic SMS adapter not implemented yet")) - - def send_whatsapp(self, to_number: str, message: str) -> None: - self._assert_config() - if not self.whatsapp_sender: - raise ValueError(_("Unifonic WhatsApp sender is not configured")) - raise NotImplementedError(_("Unifonic WhatsApp adapter not implemented yet")) class AuthenticaOtpProvider(BaseOtpProvider): @@ -197,8 +146,6 @@ class AuthenticaOtpProvider(BaseOtpProvider): PROVIDERS = { "console": ConsoleOtpProvider, - "twilio": TwilioOtpProvider, - "unifonic": UnifonicOtpProvider, "authentica": AuthenticaOtpProvider, } diff --git a/PLANS.md b/docs/PLANS.md similarity index 100% rename from PLANS.md rename to docs/PLANS.md