From 56a26481a4ca086fe8be58d6de06dabbfbb011aa Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Tue, 26 Sep 2023 12:06:54 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B4=A6=E5=8F=B7=E6=A8=A1=E7=89=88=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=9A=8F=E6=9C=BA=E5=AF=86=E7=A0=81=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E5=8F=8A=E8=B4=A6=E5=8F=B7=E6=89=B9=E9=87=8F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/accounts/models/mixins/vault.py | 4 ++-- apps/accounts/serializers/account/template.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/apps/accounts/models/mixins/vault.py b/apps/accounts/models/mixins/vault.py index b16927b62..b8865ab7d 100644 --- a/apps/accounts/models/mixins/vault.py +++ b/apps/accounts/models/mixins/vault.py @@ -37,8 +37,8 @@ class VaultManagerMixin(models.Manager): post_save.send(obj.__class__, instance=obj, created=True) return objs - def bulk_update(self, objs, batch_size=None, ignore_conflicts=False): - objs = super().bulk_update(objs, batch_size=batch_size, ignore_conflicts=ignore_conflicts) + def bulk_update(self, objs, fields, batch_size=None): + objs = super().bulk_update(objs, fields, batch_size=batch_size) for obj in objs: post_save.send(obj.__class__, instance=obj, created=False) return objs diff --git a/apps/accounts/serializers/account/template.py b/apps/accounts/serializers/account/template.py index 149760908..89045627c 100644 --- a/apps/accounts/serializers/account/template.py +++ b/apps/accounts/serializers/account/template.py @@ -1,7 +1,9 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers +from accounts.const import SecretStrategy, SecretType from accounts.models import AccountTemplate, Account +from accounts.utils import SecretGenerator from common.serializers import SecretReadableMixin from common.serializers.fields import ObjectRelatedField from .base import BaseAccountSerializer @@ -55,9 +57,20 @@ class AccountTemplateSerializer(BaseAccountSerializer): accounts = Account.objects.filter(**query_data) instance.bulk_sync_account_secret(accounts, self.context['request'].user.id) + @staticmethod + def generate_secret(attrs): + secret_type = attrs.get('secret_type', SecretType.PASSWORD) + secret_strategy = attrs.get('secret_strategy', SecretStrategy.custom) + password_rules = attrs.get('password_rules') + if secret_strategy != SecretStrategy.random: + return + generator = SecretGenerator(secret_strategy, secret_type, password_rules) + attrs['secret'] = generator.get_secret() + def validate(self, attrs): self._is_sync_account = attrs.pop('is_sync_account', None) attrs = super().validate(attrs) + self.generate_secret(attrs) return attrs def update(self, instance, validated_data):