mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-09 03:09:34 +00:00
perf: 支持slack通知和认证 (#12193)
* perf: 支持slack通知和认证 * perf: 生成迁移文件 * perf: 优化获取access_token逻辑 --------- Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
This commit is contained in:
@@ -8,3 +8,4 @@ from .settings import *
|
||||
from .sms import *
|
||||
from .vault import *
|
||||
from .wecom import *
|
||||
from .slack import *
|
||||
|
@@ -39,6 +39,7 @@ class SettingsApi(generics.RetrieveUpdateAPIView):
|
||||
'wecom': serializers.WeComSettingSerializer,
|
||||
'dingtalk': serializers.DingTalkSettingSerializer,
|
||||
'feishu': serializers.FeiShuSettingSerializer,
|
||||
'slack': serializers.SlackSettingSerializer,
|
||||
'auth': serializers.AuthSettingSerializer,
|
||||
'oidc': serializers.OIDCSettingSerializer,
|
||||
'keycloak': serializers.KeycloakSettingSerializer,
|
||||
|
40
apps/settings/api/slack.py
Normal file
40
apps/settings/api/slack.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from rest_framework.views import Response
|
||||
from rest_framework.generics import GenericAPIView
|
||||
from rest_framework.exceptions import APIException
|
||||
from rest_framework import status
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from settings.models import Setting
|
||||
from common.sdk.im.slack import Slack
|
||||
|
||||
from .. import serializers
|
||||
|
||||
|
||||
class SlackTestingAPI(GenericAPIView):
|
||||
serializer_class = serializers.SlackSettingSerializer
|
||||
rbac_perms = {
|
||||
'POST': 'settings.change_auth'
|
||||
}
|
||||
|
||||
def post(self, request):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
||||
bot_token = serializer.validated_data.get('SLACK_BOT_TOKEN')
|
||||
if not bot_token:
|
||||
secret = Setting.objects.filter(name='SLACK_BOT_TOKEN').first()
|
||||
if secret:
|
||||
bot_token = secret.cleaned_value
|
||||
|
||||
bot_token = bot_token or ''
|
||||
|
||||
try:
|
||||
slack = Slack(bot_token=bot_token)
|
||||
slack.is_valid()
|
||||
return Response(status=status.HTTP_200_OK, data={'msg': _('Test success')})
|
||||
except APIException as e:
|
||||
try:
|
||||
error = e.detail['errmsg']
|
||||
except:
|
||||
error = e.detail
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'error': error})
|
Reference in New Issue
Block a user