mirror of https://github.com/jumpserver/jumpserver
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
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
|
|
|
|
|
|
class IntegrationApplication(JMSOrgBaseModel):
|
|
is_anonymous = False
|
|
|
|
name = models.CharField(max_length=128, unique=False, verbose_name=_('Name'))
|
|
logo = PrivateImageField(
|
|
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')]
|
|
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):
|
|
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()
|