mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-26 07:22:27 +00:00
Bugfix (#2350)
* [Update] 权限页面增加过滤规则 * [Update] 修改terminal注册,更新以后使用api完成 * [Update] 修改terminal注册,更新以后使用api完成 * [Update] 修改更新注册逻辑
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from rest_framework import viewsets
|
||||
from rest_framework import viewsets, generics
|
||||
from rest_framework import status
|
||||
from rest_framework.response import Response
|
||||
|
||||
from common.permissions import IsSuperUser, WithBootstrapToken
|
||||
|
||||
|
||||
from ...models import Terminal
|
||||
from ...serializers import v2 as serializers
|
||||
|
||||
__all__ = ['TerminalViewSet', 'TerminalRegistrationViewSet']
|
||||
__all__ = ['TerminalViewSet', 'TerminalRegistrationApi']
|
||||
|
||||
|
||||
class TerminalViewSet(viewsets.ModelViewSet):
|
||||
@@ -15,8 +19,19 @@ class TerminalViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = [IsSuperUser]
|
||||
|
||||
|
||||
class TerminalRegistrationViewSet(viewsets.ModelViewSet):
|
||||
queryset = Terminal.objects.filter(is_deleted=False)
|
||||
class TerminalRegistrationApi(generics.CreateAPIView):
|
||||
serializer_class = serializers.TerminalRegistrationSerializer
|
||||
permission_classes = [WithBootstrapToken]
|
||||
http_method_names = ['post']
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
data = request.data
|
||||
serializer = serializers.TerminalSerializer(
|
||||
data=data, context={'request': request}
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
terminal = serializer.save()
|
||||
sa_serializer = serializer.sa_serializer_class(instance=terminal.user)
|
||||
data['service_account'] = sa_serializer.data
|
||||
return Response(data, status=status.HTTP_201_CREATED)
|
||||
|
||||
|
@@ -39,5 +39,3 @@ class TerminalForm(forms.ModelForm):
|
||||
'name', 'remote_addr', 'comment',
|
||||
'command_storage', 'replay_storage',
|
||||
]
|
||||
help_texts = {
|
||||
}
|
||||
|
@@ -31,8 +31,6 @@ class TerminalSerializer(serializers.ModelSerializer):
|
||||
return cache.get(key)
|
||||
|
||||
|
||||
|
||||
|
||||
class SessionSerializer(BulkSerializerMixin, serializers.ModelSerializer):
|
||||
command_amount = serializers.SerializerMethodField()
|
||||
command_store = get_multi_command_storage()
|
||||
|
@@ -3,7 +3,7 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from common.utils import get_request_ip
|
||||
from users.serializers.v2 import ServiceAccountRegistrationSerializer
|
||||
from users.serializers.v2 import ServiceAccountSerializer
|
||||
from ..models import Terminal
|
||||
|
||||
|
||||
@@ -11,36 +11,48 @@ __all__ = ['TerminalSerializer', 'TerminalRegistrationSerializer']
|
||||
|
||||
|
||||
class TerminalSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Terminal
|
||||
fields = [
|
||||
'id', 'name', 'remote_addr', 'comment',
|
||||
]
|
||||
read_only_fields = ['id', 'remote_addr']
|
||||
|
||||
|
||||
class TerminalRegistrationSerializer(serializers.ModelSerializer):
|
||||
service_account = ServiceAccountRegistrationSerializer(read_only=True)
|
||||
service_account_serializer = None
|
||||
sa_serializer_class = ServiceAccountSerializer
|
||||
sa_serializer = None
|
||||
|
||||
class Meta:
|
||||
model = Terminal
|
||||
fields = [
|
||||
'id', 'name', 'remote_addr', 'comment', 'service_account'
|
||||
'id', 'name', 'remote_addr', 'command_storage',
|
||||
'replay_storage', 'user', 'is_accepted', 'is_deleted',
|
||||
'date_created', 'comment'
|
||||
]
|
||||
read_only_fields = ['id', 'remote_addr', 'service_account']
|
||||
read_only_fields = ['id', 'remote_addr', 'user', 'date_created']
|
||||
|
||||
def validate(self, attrs):
|
||||
self.service_account_serializer = ServiceAccountRegistrationSerializer(data=attrs)
|
||||
self.service_account_serializer.is_valid(raise_exception=True)
|
||||
return attrs
|
||||
def is_valid(self, raise_exception=False):
|
||||
valid = super().is_valid(raise_exception=raise_exception)
|
||||
if not valid:
|
||||
return valid
|
||||
data = {'name': self.validated_data.get('name')}
|
||||
kwargs = {'data': data}
|
||||
if self.instance and self.instance.user:
|
||||
kwargs['instance'] = self.instance.user
|
||||
self.sa_serializer = ServiceAccountSerializer(**kwargs)
|
||||
valid = self.sa_serializer.is_valid(raise_exception=True)
|
||||
return valid
|
||||
|
||||
def save(self, **kwargs):
|
||||
instance = super().save(**kwargs)
|
||||
sa = self.sa_serializer.save()
|
||||
instance.user = sa
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
def create(self, validated_data):
|
||||
request = self.context.get('request')
|
||||
sa = self.service_account_serializer.save()
|
||||
instance = super().create(validated_data)
|
||||
instance.is_accepted = True
|
||||
instance.user = sa
|
||||
instance.remote_addr = get_request_ip(request)
|
||||
if request:
|
||||
instance.remote_addr = get_request_ip(request)
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
|
||||
class TerminalRegistrationSerializer(serializers.Serializer):
|
||||
name = serializers.CharField(max_length=128)
|
||||
comment = serializers.CharField(max_length=128)
|
||||
service_account = ServiceAccountSerializer(read_only=True)
|
||||
|
@@ -33,8 +33,6 @@
|
||||
<h3>{% trans 'Info' %}</h3>
|
||||
{% bootstrap_field form.name layout="horizontal" %}
|
||||
{% bootstrap_field form.remote_addr layout="horizontal" %}
|
||||
{# {% bootstrap_field form.ssh_port layout="horizontal" %}#}
|
||||
{# {% bootstrap_field form.http_port layout="horizontal" %}#}
|
||||
{% bootstrap_field form.command_storage layout="horizontal" %}
|
||||
{% bootstrap_field form.replay_storage layout="horizontal" %}
|
||||
|
||||
@@ -60,14 +58,14 @@
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('.select2').select2();
|
||||
|
||||
$('.input-group.date').datepicker({
|
||||
format: "yyyy-mm-dd",
|
||||
todayBtn: "linked",
|
||||
keyboardNavigation: false,
|
||||
forceParse: false,
|
||||
calendarWeeks: true,
|
||||
autoclose: true
|
||||
}).on('submit', 'form', function (e) {
|
||||
e.preventDefault();
|
||||
var form = $('form');
|
||||
formSubmit({
|
||||
'url': '{% url 'api-terminal-v2:terminal-detail' pk=DEFAULT_PK %}'.replace('{{ DEFAULT_PK }}', '{{ object.id }}'),
|
||||
'form': form,
|
||||
'method': 'PUT',
|
||||
'redirect_to': '{% url "terminal:terminal-list" %}'
|
||||
});
|
||||
})
|
||||
</script>
|
||||
|
@@ -11,10 +11,11 @@ app_name = 'terminal'
|
||||
|
||||
router = BulkRouter()
|
||||
router.register(r'terminal', api.TerminalViewSet, 'terminal')
|
||||
router.register(r'terminal-registrations', api.TerminalRegistrationViewSet, 'terminal-registration')
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('terminal-registrations/', api.TerminalRegistrationApi.as_view(),
|
||||
name='terminal-registration')
|
||||
]
|
||||
|
||||
urlpatterns += router.urls
|
||||
|
Reference in New Issue
Block a user