mirror of https://github.com/jumpserver/jumpserver
				
				
				
			feat: 三方认证绑定发通知
							parent
							
								
									dde7559f47
								
							
						
					
					
						commit
						1e3a15a3d0
					
				|  | @ -1,9 +1,9 @@ | ||||||
| from django.utils import timezone |  | ||||||
| from django.utils.translation import ugettext as _ | from django.utils.translation import ugettext as _ | ||||||
| from django.template.loader import render_to_string | from django.template.loader import render_to_string | ||||||
| 
 | 
 | ||||||
| from notifications.notifications import UserMessage | from notifications.notifications import UserMessage | ||||||
| from common.utils import get_logger | from common.utils import get_logger | ||||||
|  | from common.utils.timezone import local_now_display | ||||||
| 
 | 
 | ||||||
| logger = get_logger(__file__) | logger = get_logger(__file__) | ||||||
| 
 | 
 | ||||||
|  | @ -15,8 +15,7 @@ class DifferentCityLoginMessage(UserMessage): | ||||||
|         super().__init__(user) |         super().__init__(user) | ||||||
| 
 | 
 | ||||||
|     def get_html_msg(self) -> dict: |     def get_html_msg(self) -> dict: | ||||||
|         now_local = timezone.localtime(timezone.now()) |         now = local_now_display() | ||||||
|         now = now_local.strftime("%Y-%m-%d %H:%M:%S") |  | ||||||
|         subject = _('Different city login reminder') |         subject = _('Different city login reminder') | ||||||
|         context = dict( |         context = dict( | ||||||
|             subject=subject, |             subject=subject, | ||||||
|  | @ -39,3 +38,36 @@ class DifferentCityLoginMessage(UserMessage): | ||||||
|         ip = '8.8.8.8' |         ip = '8.8.8.8' | ||||||
|         city = '洛杉矶' |         city = '洛杉矶' | ||||||
|         return cls(user, ip, city) |         return cls(user, ip, city) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class OAuthBindMessage(UserMessage): | ||||||
|  |     def __init__(self, user, ip, oauth_name, oauth_id): | ||||||
|  |         super().__init__(user) | ||||||
|  |         self.ip = ip | ||||||
|  |         self.oauth_name = oauth_name | ||||||
|  |         self.oauth_id = oauth_id | ||||||
|  | 
 | ||||||
|  |     def get_html_msg(self) -> dict: | ||||||
|  |         now = local_now_display() | ||||||
|  |         subject = self.oauth_name + _('binding reminder') | ||||||
|  |         context = dict( | ||||||
|  |             subject=subject, | ||||||
|  |             name=self.user.name, | ||||||
|  |             username=self.user.username, | ||||||
|  |             ip=self.ip, | ||||||
|  |             time=now, | ||||||
|  |             oauth_name=self.oauth_name, | ||||||
|  |             oauth_id=self.oauth_id | ||||||
|  |         ) | ||||||
|  |         message = render_to_string('authentication/_msg_oauth_bind.html', context) | ||||||
|  |         return { | ||||||
|  |             'subject': subject, | ||||||
|  |             'message': message | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def gen_test_msg(cls): | ||||||
|  |         from users.models import User | ||||||
|  |         user = User.objects.first() | ||||||
|  |         ip = '8.8.8.8' | ||||||
|  |         return cls(user, ip, _('WeCom'), '000000') | ||||||
|  |  | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | {% load i18n %} | ||||||
|  | <p> | ||||||
|  |     {% trans 'Hello' %} {{ name }}, | ||||||
|  | </p> | ||||||
|  | <p> | ||||||
|  |     {% trans 'Your account has just been bound to' %} {{ oauth_name }} | ||||||
|  | </p> | ||||||
|  | <p> | ||||||
|  |     <b>{% trans 'Username' %}:</b> {{ username }}<br> | ||||||
|  |     <b>{{ oauth_name }}:</b> {{ oauth_id }}<br> | ||||||
|  |     <b>{% trans 'Time' %}:</b> {{ time }}<br> | ||||||
|  |     <b>{% trans 'IP' %}:</b> {{ ip }} | ||||||
|  | </p> | ||||||
|  | 
 | ||||||
|  | - | ||||||
|  | <p> | ||||||
|  |     {% trans 'If the operation is not your own, unbind and change the password.' %} | ||||||
|  | </p> | ||||||
|  | @ -19,6 +19,8 @@ from common.mixins.views import PermissionsMixin | ||||||
| from authentication import errors | from authentication import errors | ||||||
| from authentication.mixins import AuthMixin | from authentication.mixins import AuthMixin | ||||||
| from common.sdk.im.dingtalk import DingTalk | from common.sdk.im.dingtalk import DingTalk | ||||||
|  | from common.utils.common import get_request_ip | ||||||
|  | from authentication.notifications import OAuthBindMessage | ||||||
| 
 | 
 | ||||||
| logger = get_logger(__file__) | logger = get_logger(__file__) | ||||||
| 
 | 
 | ||||||
|  | @ -154,6 +156,8 @@ class DingTalkQRBindCallbackView(DingTalkQRMixin, View): | ||||||
|                 return response |                 return response | ||||||
|             raise e |             raise e | ||||||
| 
 | 
 | ||||||
|  |         ip = get_request_ip(request) | ||||||
|  |         OAuthBindMessage(user, ip, _('WeCom'), user_id).publish_async() | ||||||
|         msg = _('Binding DingTalk successfully') |         msg = _('Binding DingTalk successfully') | ||||||
|         response = self.get_success_response(redirect_url, msg, msg) |         response = self.get_success_response(redirect_url, msg, msg) | ||||||
|         return response |         return response | ||||||
|  |  | ||||||
|  | @ -16,8 +16,10 @@ from common.utils.random import random_string | ||||||
| from common.utils.django import reverse, get_object_or_none | from common.utils.django import reverse, get_object_or_none | ||||||
| from common.mixins.views import PermissionsMixin | from common.mixins.views import PermissionsMixin | ||||||
| from common.sdk.im.feishu import FeiShu, URL | from common.sdk.im.feishu import FeiShu, URL | ||||||
|  | from common.utils.common import get_request_ip | ||||||
| from authentication import errors | from authentication import errors | ||||||
| from authentication.mixins import AuthMixin | from authentication.mixins import AuthMixin | ||||||
|  | from authentication.notifications import OAuthBindMessage | ||||||
| 
 | 
 | ||||||
| logger = get_logger(__file__) | logger = get_logger(__file__) | ||||||
| 
 | 
 | ||||||
|  | @ -142,6 +144,8 @@ class FeiShuQRBindCallbackView(FeiShuQRMixin, View): | ||||||
|                 return response |                 return response | ||||||
|             raise e |             raise e | ||||||
| 
 | 
 | ||||||
|  |         ip = get_request_ip(request) | ||||||
|  |         OAuthBindMessage(user, ip, _('WeCom'), user_id).publish_async() | ||||||
|         msg = _('Binding FeiShu successfully') |         msg = _('Binding FeiShu successfully') | ||||||
|         response = self.get_success_response(redirect_url, msg, msg) |         response = self.get_success_response(redirect_url, msg, msg) | ||||||
|         return response |         return response | ||||||
|  |  | ||||||
|  | @ -17,8 +17,10 @@ from common.utils.django import reverse, get_object_or_none | ||||||
| from common.sdk.im.wecom import URL | from common.sdk.im.wecom import URL | ||||||
| from common.sdk.im.wecom import WeCom | from common.sdk.im.wecom import WeCom | ||||||
| from common.mixins.views import PermissionsMixin | from common.mixins.views import PermissionsMixin | ||||||
|  | from common.utils.common import get_request_ip | ||||||
| from authentication import errors | from authentication import errors | ||||||
| from authentication.mixins import AuthMixin | from authentication.mixins import AuthMixin | ||||||
|  | from authentication.notifications import OAuthBindMessage | ||||||
| 
 | 
 | ||||||
| logger = get_logger(__file__) | logger = get_logger(__file__) | ||||||
| 
 | 
 | ||||||
|  | @ -152,6 +154,8 @@ class WeComQRBindCallbackView(WeComQRMixin, View): | ||||||
|                 return response |                 return response | ||||||
|             raise e |             raise e | ||||||
| 
 | 
 | ||||||
|  |         ip = get_request_ip(request) | ||||||
|  |         OAuthBindMessage(user, ip, _('WeCom'), wecom_userid).publish_async() | ||||||
|         msg = _('Binding WeCom successfully') |         msg = _('Binding WeCom successfully') | ||||||
|         response = self.get_success_response(redirect_url, msg, msg) |         response = self.get_success_response(redirect_url, msg, msg) | ||||||
|         return response |         return response | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 xinwen
						xinwen