jumpserver/apps/assets/models/platform.py

71 lines
2.6 KiB
Python
Raw Normal View History

2022-04-02 10:35:46 +00:00
from django.db import models
from django.utils.translation import gettext_lazy as _
2022-04-07 10:51:35 +00:00
from assets.const import Category, AllTypes
2022-07-17 06:28:55 +00:00
from common.db.fields import JsonDictTextField
2022-04-02 10:35:46 +00:00
2022-04-20 02:15:20 +00:00
2022-04-02 10:35:46 +00:00
__all__ = ['Platform']
class Platform(models.Model):
CHARSET_CHOICES = (
('utf8', 'UTF-8'),
('gbk', 'GBK'),
)
name = models.SlugField(verbose_name=_("Name"), unique=True, allow_unicode=True)
category = models.CharField(max_length=16, choices=Category.choices, default=Category.HOST, verbose_name=_("Category"))
2022-04-12 09:53:56 +00:00
type = models.CharField(choices=AllTypes.choices, max_length=32, default='Linux', verbose_name=_("Type"))
2022-04-02 10:35:46 +00:00
charset = models.CharField(default='utf8', choices=CHARSET_CHOICES, max_length=8, verbose_name=_("Charset"))
meta = JsonDictTextField(blank=True, null=True, verbose_name=_("Meta"))
internal = models.BooleanField(default=False, verbose_name=_("Internal"))
comment = models.TextField(blank=True, null=True, verbose_name=_("Comment"))
2022-04-30 15:19:43 +00:00
domain_enabled = models.BooleanField(default=True, verbose_name=_("Domain enabled"))
domain_default = models.ForeignKey(
'assets.Domain', null=True, on_delete=models.SET_NULL,
verbose_name=_("Domain default")
)
protocols_enabled = models.BooleanField(default=True, verbose_name=_("Protocols enabled"))
protocols_default = models.CharField(
max_length=128, default='', blank=True, verbose_name=_("Protocols default")
)
admin_user_enabled = models.BooleanField(default=True, verbose_name=_("Admin user enabled"))
admin_user_default = models.ForeignKey(
'assets.SystemUser', null=True, on_delete=models.SET_NULL,
verbose_name=_("Admin user default")
)
2022-05-02 13:37:42 +00:00
@classmethod
def get_type_meta(cls, category, tp):
meta = Category.platform_meta().get(category, {})
types = dict(AllTypes.category_types()).get(category)
types_meta = types.platform_meta() or {}
type_meta = types_meta.get(tp, {})
2022-04-30 15:19:43 +00:00
meta.update(type_meta)
return meta
2022-04-02 10:35:46 +00:00
2022-05-05 08:18:05 +00:00
@property
def type_limits(self):
return AllTypes.get_type_limits(self.category, self.type)
2022-05-02 13:37:42 +00:00
2022-04-02 10:35:46 +00:00
@classmethod
def default(cls):
linux, created = cls.objects.get_or_create(
defaults={'name': 'Linux'}, name='Linux'
)
return linux.id
def is_windows(self):
2022-04-12 09:53:56 +00:00
return self.type.lower() in ('windows',)
2022-04-02 10:35:46 +00:00
def is_unixlike(self):
2022-04-12 09:53:56 +00:00
return self.type.lower() in ("linux", "unix", "macos", "bsd")
2022-04-02 10:35:46 +00:00
def __str__(self):
return self.name
class Meta:
verbose_name = _("Platform")
# ordering = ('name',)