You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/authentication/api/common.py

52 lines
1.9 KiB

from django.utils.translation import gettext_lazy as _
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView
from authentication import errors
from authentication.const import ConfirmType
from authentication.permissions import UserConfirmation
from common.api import RoleUserMixin, RoleAdminMixin
from common.exceptions import JMSException
from common.permissions import IsValidUser, OnlySuperUser
from common.utils import get_logger
from users.models import User
logger = get_logger(__file__)
class QRUnBindBase(APIView):
user: User
def post(self, request: Request, backend: str, **kwargs):
backend_map = {
'wecom': {'user_field': 'wecom_id', 'not_bind_err': errors.WeComNotBound},
'dingtalk': {'user_field': 'dingtalk_id', 'not_bind_err': errors.DingTalkNotBound},
'feishu': {'user_field': 'feishu_id', 'not_bind_err': errors.FeiShuNotBound},
'lark': {'user_field': 'lark_id', 'not_bind_err': errors.LarkNotBound},
'slack': {'user_field': 'slack_id', 'not_bind_err': errors.SlackNotBound},
}
user = self.user
backend_info = backend_map.get(backend)
if not backend_info:
raise JMSException(
_('The value in the parameter must contain %s') % ', '.join(backend_map.keys())
)
if not getattr(user, backend_info['user_field'], None):
raise backend_info['not_bind_err']
setattr(user, backend_info['user_field'], None)
user.save()
return Response()
class QRUnBindForUserApi(RoleUserMixin, QRUnBindBase):
permission_classes = (IsValidUser, UserConfirmation.require(ConfirmType.RELOGIN),)
class QRUnBindForAdminApi(RoleAdminMixin, QRUnBindBase):
permission_classes = (OnlySuperUser,)
user_id_url_kwarg = 'user_id'