mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
| from django.conf import settings
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| 
 | |
| from common.utils.verify_code import SendAndVerifyCodeUtil
 | |
| from users.serializers import SmsUserSerializer
 | |
| from .base import BaseMFA
 | |
| 
 | |
| sms_failed_msg = _("SMS verify code invalid")
 | |
| 
 | |
| 
 | |
| class MFASms(BaseMFA):
 | |
|     name = 'sms'
 | |
|     display_name = _("SMS")
 | |
|     placeholder = _("SMS verification code")
 | |
| 
 | |
|     def __init__(self, user):
 | |
|         super().__init__(user)
 | |
|         phone, user_info = '', None
 | |
|         if self.is_authenticated():
 | |
|             phone = user.phone
 | |
|             user_info = SmsUserSerializer(user).data
 | |
|         self.sms = SendAndVerifyCodeUtil(
 | |
|             phone, backend=self.name, user_info=user_info
 | |
|         )
 | |
| 
 | |
|     def check_code(self, code):
 | |
|         assert self.is_authenticated()
 | |
|         ok = False
 | |
|         msg = ''
 | |
|         try:
 | |
|             ok = self.sms.verify(code)
 | |
|         except Exception as e:
 | |
|             msg = str(e)
 | |
|         return ok, msg
 | |
| 
 | |
|     def is_active(self):
 | |
|         if not self.is_authenticated():
 | |
|             return True
 | |
|         return self.user.phone
 | |
| 
 | |
|     @staticmethod
 | |
|     def challenge_required():
 | |
|         return True
 | |
| 
 | |
|     def send_challenge(self):
 | |
|         self.sms.gen_and_send_async()
 | |
| 
 | |
|     @staticmethod
 | |
|     def global_enabled():
 | |
|         return settings.SMS_ENABLED
 | |
| 
 | |
|     def get_enable_url(self) -> str:
 | |
|         return '/ui/#/profile/index'
 | |
| 
 | |
|     def can_disable(self) -> bool:
 | |
|         return True
 | |
| 
 | |
|     def disable(self):
 | |
|         return '/ui/#/profile/index'
 | |
| 
 | |
|     @staticmethod
 | |
|     def help_text_of_enable():
 | |
|         return _("Set phone number to enable")
 | |
| 
 | |
|     @staticmethod
 | |
|     def help_text_of_disable():
 | |
|         return _("Clear phone number to disable")
 | |
| 
 | |
|     def get_disable_url(self) -> str:
 | |
|         return '/ui/#/profile/index'
 |