|
20 | 20 |
|
21 | 21 |
|
22 | 22 | class PhoneVerificationService(object):
|
23 |
| - try: |
24 |
| - phone_settings = settings.PHONE_VERIFICATION |
25 |
| - except AttributeError as e: |
26 |
| - raise ImproperlyConfigured("Please define PHONE_VERIFICATION in settings") from e |
27 |
| - |
28 |
| - verification_message = phone_settings.get("MESSAGE", DEFAULT_MESSAGE) |
29 | 23 |
|
30 | 24 | def __init__(self, phone_number, backend=None):
|
| 25 | + try: |
| 26 | + self.phone_settings = settings.PHONE_VERIFICATION |
| 27 | + except AttributeError as e: |
| 28 | + raise ImproperlyConfigured("Please define PHONE_VERIFICATION in settings") from e |
31 | 29 | self._check_required_settings()
|
32 | 30 | if backend is None:
|
33 | 31 | self.backend = get_sms_backend(phone_number=phone_number)
|
| 32 | + else: |
| 33 | + self.backend = backend |
34 | 34 |
|
35 |
| - def send_verification(self, number, security_code): |
| 35 | + self.verification_message = self.phone_settings.get("MESSAGE", DEFAULT_MESSAGE) |
| 36 | + |
| 37 | + def send_verification(self, number, security_code, context=None): |
36 | 38 | """
|
37 | 39 | Send a verification text to the given number to verify.
|
38 | 40 |
|
39 | 41 | :param number: the phone number of recipient.
|
| 42 | + :param security_code: generated code to verify |
| 43 | + :param context: optional dictionary for custom message formatting |
40 | 44 | """
|
41 |
| - message = self._generate_message(security_code) |
42 |
| - |
| 45 | + message = self._generate_message(security_code, context) |
43 | 46 | self.backend.send_sms(number, message)
|
44 | 47 |
|
45 |
| - def _generate_message(self, security_code): |
46 |
| - return self.verification_message.format( |
47 |
| - app=settings.PHONE_VERIFICATION.get("APP_NAME", DEFAULT_APP_NAME), |
48 |
| - security_code=security_code, |
49 |
| - ) |
| 48 | + def _generate_message(self, security_code, context=None): |
| 49 | + # If the backend has its own message generator, prefer it |
| 50 | + if hasattr(self.backend, "generate_message") and callable(self.backend.generate_message): |
| 51 | + message = self.backend.generate_message(security_code, context=context) |
| 52 | + if message: |
| 53 | + return message |
| 54 | + |
| 55 | + # Default fallback |
| 56 | + format_context = { |
| 57 | + "app": settings.PHONE_VERIFICATION.get("APP_NAME", DEFAULT_APP_NAME), |
| 58 | + "security_code": security_code, |
| 59 | + } |
| 60 | + if context: |
| 61 | + format_context.update(context) |
| 62 | + |
| 63 | + return self.verification_message.format(**format_context) |
50 | 64 |
|
51 | 65 | def _check_required_settings(self):
|
52 | 66 | required_settings = {
|
|
0 commit comments