jumpserver/apps/accounts/models/automations/backup_account.py

82 lines
3.2 KiB
Python
Raw Normal View History

2022-01-10 11:02:18 +00:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
from django.db import models
2023-07-24 03:52:25 +00:00
from django.utils.translation import gettext_lazy as _
2022-01-10 11:02:18 +00:00
2024-12-03 10:54:10 +00:00
from accounts.const import AccountBackupType, AutomationTypes
from common.db import fields
2024-12-03 10:54:10 +00:00
from common.utils import get_logger
from .base import AccountBaseAutomation
2022-01-10 11:02:18 +00:00
2024-12-03 10:54:10 +00:00
__all__ = ['BackupAccountAutomation']
2022-01-10 11:02:18 +00:00
logger = get_logger(__file__)
2024-12-03 10:54:10 +00:00
class BackupAccountAutomation(AccountBaseAutomation):
types = models.JSONField(default=list)
2024-12-03 10:54:10 +00:00
backup_type = models.CharField(
max_length=128, choices=AccountBackupType.choices,
default=AccountBackupType.email, verbose_name=_('Backup type')
)
2024-03-29 07:29:04 +00:00
is_password_divided_by_email = models.BooleanField(default=True, verbose_name=_('Password divided'))
is_password_divided_by_obj_storage = models.BooleanField(default=True, verbose_name=_('Password divided'))
recipients_part_one = models.ManyToManyField(
'users.User', related_name='recipient_part_one_plans', blank=True,
verbose_name=_("Recipient part one")
)
recipients_part_two = models.ManyToManyField(
'users.User', related_name='recipient_part_two_plans', blank=True,
verbose_name=_("Recipient part two")
2022-01-10 11:02:18 +00:00
)
obj_recipients_part_one = models.ManyToManyField(
'terminal.ReplayStorage', related_name='obj_recipient_part_one_plans', blank=True,
2024-03-29 07:29:04 +00:00
verbose_name=_("Object storage recipient part one")
)
obj_recipients_part_two = models.ManyToManyField(
'terminal.ReplayStorage', related_name='obj_recipient_part_two_plans', blank=True,
2024-03-29 07:29:04 +00:00
verbose_name=_("Object storage recipient part two")
)
zip_encrypt_password = fields.EncryptCharField(
max_length=4096, blank=True, null=True, verbose_name=_('Zip encrypt password')
)
2022-01-10 11:02:18 +00:00
def __str__(self):
return f'{self.name}({self.org_id})'
class Meta:
verbose_name = _('Account backup plan')
def to_attr_json(self):
2024-12-03 10:54:10 +00:00
attr_json = super().to_attr_json()
attr_json.update({
'types': self.types,
'backup_type': self.backup_type,
'is_password_divided_by_email': self.is_password_divided_by_email,
'is_password_divided_by_obj_storage': self.is_password_divided_by_obj_storage,
'zip_encrypt_password': self.zip_encrypt_password,
'recipients_part_one': {
str(user.id): (str(user), bool(user.secret_key))
for user in self.recipients_part_one.all()
},
'recipients_part_two': {
str(user.id): (str(user), bool(user.secret_key))
for user in self.recipients_part_two.all()
},
'obj_recipients_part_one': {
str(obj_storage.id): (str(obj_storage.name), str(obj_storage.type))
for obj_storage in self.obj_recipients_part_one.all()
},
'obj_recipients_part_two': {
str(obj_storage.id): (str(obj_storage.name), str(obj_storage.type))
for obj_storage in self.obj_recipients_part_two.all()
},
2024-12-03 10:54:10 +00:00
})
return attr_json
def save(self, *args, **kwargs):
self.type = AutomationTypes.backup_account
super().save(*args, **kwargs)