mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-24 22:12:00 +00:00
perf: account secret 加密 (#9570)
Co-authored-by: feng <1304903146@qq.com>
This commit is contained in:
parent
cf2089d826
commit
e66168dfa4
@ -3,11 +3,11 @@ from rest_framework.decorators import action
|
|||||||
from rest_framework.generics import CreateAPIView, ListAPIView
|
from rest_framework.generics import CreateAPIView, ListAPIView
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from assets.models import Asset
|
|
||||||
from accounts import serializers
|
from accounts import serializers
|
||||||
from accounts.models import Account
|
|
||||||
from accounts.filters import AccountFilterSet
|
from accounts.filters import AccountFilterSet
|
||||||
|
from accounts.models import Account
|
||||||
from accounts.tasks import verify_accounts_connectivity
|
from accounts.tasks import verify_accounts_connectivity
|
||||||
|
from assets.models import Asset
|
||||||
from authentication.const import ConfirmType
|
from authentication.const import ConfirmType
|
||||||
from common.permissions import UserConfirmation
|
from common.permissions import UserConfirmation
|
||||||
from common.views.mixins import RecordViewLogMixin
|
from common.views.mixins import RecordViewLogMixin
|
||||||
|
@ -24,27 +24,25 @@ class AuthValidateMixin(serializers.Serializer):
|
|||||||
write_only=True, label=_('Key password')
|
write_only=True, label=_('Key password')
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@staticmethod
|
||||||
def initial_secret_type(self):
|
def handle_secret(secret, secret_type, passphrase=None):
|
||||||
secret_type = self.initial_data.get('secret_type')
|
|
||||||
return secret_type
|
|
||||||
|
|
||||||
def validate_secret(self, secret):
|
|
||||||
if not secret:
|
if not secret:
|
||||||
return ''
|
return ''
|
||||||
secret_type = self.initial_secret_type
|
|
||||||
if secret_type == SecretType.PASSWORD:
|
if secret_type == SecretType.PASSWORD:
|
||||||
validate_password_for_ansible(secret)
|
validate_password_for_ansible(secret)
|
||||||
return secret
|
return secret
|
||||||
elif secret_type == SecretType.SSH_KEY:
|
elif secret_type == SecretType.SSH_KEY:
|
||||||
passphrase = self.initial_data.get('passphrase')
|
|
||||||
passphrase = passphrase if passphrase else None
|
passphrase = passphrase if passphrase else None
|
||||||
return validate_ssh_key(secret, passphrase)
|
return validate_ssh_key(secret, passphrase)
|
||||||
else:
|
else:
|
||||||
return secret
|
return secret
|
||||||
|
|
||||||
@staticmethod
|
def clean_auth_fields(self, validated_data):
|
||||||
def clean_auth_fields(validated_data):
|
secret_type = validated_data['secret_type']
|
||||||
|
passphrase = validated_data.get('passphrase')
|
||||||
|
secret = validated_data.pop('secret', None)
|
||||||
|
self.handle_secret(secret, secret_type, passphrase)
|
||||||
|
validated_data['secret'] = secret
|
||||||
for field in ('secret',):
|
for field in ('secret',):
|
||||||
value = validated_data.get(field)
|
value = validated_data.get(field)
|
||||||
if value is None:
|
if value is None:
|
||||||
|
@ -8,9 +8,10 @@ from rest_framework import serializers
|
|||||||
|
|
||||||
from accounts.models import Account
|
from accounts.models import Account
|
||||||
from accounts.serializers import AccountSerializerCreateValidateMixin
|
from accounts.serializers import AccountSerializerCreateValidateMixin
|
||||||
|
from accounts.serializers import AuthValidateMixin
|
||||||
from common.serializers import WritableNestedModelSerializer, SecretReadableMixin, CommonModelSerializer
|
from common.serializers import WritableNestedModelSerializer, SecretReadableMixin, CommonModelSerializer
|
||||||
from common.serializers.fields import LabeledChoiceField
|
from common.serializers.fields import LabeledChoiceField
|
||||||
from common.utils import lazyproperty
|
from common.utils import lazyproperty, decrypt_password
|
||||||
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
|
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
|
||||||
from ...const import Category, AllTypes
|
from ...const import Category, AllTypes
|
||||||
from ...models import Asset, Node, Platform, Label, Protocol
|
from ...models import Asset, Node, Platform, Label, Protocol
|
||||||
@ -51,7 +52,9 @@ class AssetPlatformSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class AssetAccountSerializer(
|
class AssetAccountSerializer(
|
||||||
AccountSerializerCreateValidateMixin, CommonModelSerializer
|
AuthValidateMixin,
|
||||||
|
AccountSerializerCreateValidateMixin,
|
||||||
|
CommonModelSerializer
|
||||||
):
|
):
|
||||||
add_org_fields = False
|
add_org_fields = False
|
||||||
push_now = serializers.BooleanField(
|
push_now = serializers.BooleanField(
|
||||||
@ -256,6 +259,8 @@ class AssetSerializer(BulkOrgResourceModelSerializer, WritableNestedModelSeriali
|
|||||||
def accounts_create(accounts_data, asset):
|
def accounts_create(accounts_data, asset):
|
||||||
for data in accounts_data:
|
for data in accounts_data:
|
||||||
data['asset'] = asset
|
data['asset'] = asset
|
||||||
|
secret = data.get('secret')
|
||||||
|
data['secret'] = decrypt_password(secret) if secret else secret
|
||||||
AssetAccountSerializer().create(data)
|
AssetAccountSerializer().create(data)
|
||||||
|
|
||||||
@atomic
|
@atomic
|
||||||
@ -269,6 +274,8 @@ class AssetSerializer(BulkOrgResourceModelSerializer, WritableNestedModelSeriali
|
|||||||
|
|
||||||
@atomic
|
@atomic
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
|
if not validated_data.get('accounts'):
|
||||||
|
validated_data.pop('accounts', None)
|
||||||
nodes_display = validated_data.pop('nodes_display', '')
|
nodes_display = validated_data.pop('nodes_display', '')
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
self.perform_nodes_display_create(instance, nodes_display)
|
self.perform_nodes_display_create(instance, nodes_display)
|
||||||
|
Loading…
Reference in New Issue
Block a user