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):