jumpserver/apps/accounts/models/application.py

66 lines
2.3 KiB
Python
Raw Normal View History

from django.db import models
from django.utils.translation import gettext_lazy as _
from private_storage.fields import PrivateImageField
from accounts.models import Account
from common.db import fields
from common.db.fields import JSONManyToManyField, RelatedManager
from common.db.utils import default_ip_group
from common.utils import random_string
from orgs.mixins.models import JMSOrgBaseModel
2024-12-04 10:32:49 +00:00
class IntegrationApplication(JMSOrgBaseModel):
is_anonymous = False
name = models.CharField(max_length=128, unique=False, verbose_name=_('Name'))
2024-12-04 10:32:49 +00:00
logo = PrivateImageField(
2024-12-04 11:31:21 +00:00
upload_to='images', max_length=128, verbose_name=_('Logo')
)
secret = fields.EncryptTextField(default='', verbose_name=_('Secret'))
accounts = JSONManyToManyField('accounts.Account', default=dict, verbose_name=_('Accounts'))
ip_group = models.JSONField(default=default_ip_group, verbose_name=_('IP group'))
date_last_used = models.DateTimeField(null=True, blank=True, verbose_name=_('Date last used'))
is_active = models.BooleanField(default=True, verbose_name=_('Active'))
class Meta:
unique_together = [('name', 'org_id')]
2024-12-04 10:32:49 +00:00
verbose_name = _('Integration App')
@property
def accounts_amount(self):
qs = Account.objects.all()
query = RelatedManager.get_to_filter_qs(self.accounts.value, Account)
return qs.filter(*query).count()
@property
def is_valid(self):
return self.is_active
@property
def is_authenticated(self):
return self.is_active
@staticmethod
def has_perms(perms):
2024-12-04 10:32:49 +00:00
support_perms = ['accounts.view_integrationapplication']
return all([perm in support_perms for perm in perms])
def get_secret(self):
self.secret = random_string(36)
self.save(update_fields=['secret'])
return self.secret
def get_account(self, asset='', asset_id='', account='', account_id=''):
qs = Account.objects.all()
if account_id:
qs = qs.filter(id=account_id)
elif account:
qs = qs.filter(name=account)
if asset_id:
qs = qs.filter(asset_id=asset_id)
elif asset:
qs = qs.filter(asset__name=asset)
query = RelatedManager.get_to_filter_qs(self.accounts.value, Account)
return qs.filter(*query).distinct().first()