perf: 账号模版 生成随机密码密钥及账号批量更新500

This commit is contained in:
feng 2023-09-26 12:06:54 +08:00 committed by Bryan
parent cbe3d66b39
commit 56a26481a4
2 changed files with 15 additions and 2 deletions

View File

@ -37,8 +37,8 @@ class VaultManagerMixin(models.Manager):
post_save.send(obj.__class__, instance=obj, created=True) post_save.send(obj.__class__, instance=obj, created=True)
return objs return objs
def bulk_update(self, objs, batch_size=None, ignore_conflicts=False): def bulk_update(self, objs, fields, batch_size=None):
objs = super().bulk_update(objs, batch_size=batch_size, ignore_conflicts=ignore_conflicts) objs = super().bulk_update(objs, fields, batch_size=batch_size)
for obj in objs: for obj in objs:
post_save.send(obj.__class__, instance=obj, created=False) post_save.send(obj.__class__, instance=obj, created=False)
return objs return objs

View File

@ -1,7 +1,9 @@
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from accounts.const import SecretStrategy, SecretType
from accounts.models import AccountTemplate, Account from accounts.models import AccountTemplate, Account
from accounts.utils import SecretGenerator
from common.serializers import SecretReadableMixin from common.serializers import SecretReadableMixin
from common.serializers.fields import ObjectRelatedField from common.serializers.fields import ObjectRelatedField
from .base import BaseAccountSerializer from .base import BaseAccountSerializer
@ -55,9 +57,20 @@ class AccountTemplateSerializer(BaseAccountSerializer):
accounts = Account.objects.filter(**query_data) accounts = Account.objects.filter(**query_data)
instance.bulk_sync_account_secret(accounts, self.context['request'].user.id) 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): def validate(self, attrs):
self._is_sync_account = attrs.pop('is_sync_account', None) self._is_sync_account = attrs.pop('is_sync_account', None)
attrs = super().validate(attrs) attrs = super().validate(attrs)
self.generate_secret(attrs)
return attrs return attrs
def update(self, instance, validated_data): def update(self, instance, validated_data):