mirror of https://github.com/jumpserver/jumpserver
perf: 修改 asset 结构
parent
cf5c50b343
commit
1b0195cb82
|
@ -18,8 +18,8 @@ __all__ = ['AccountViewSet', 'AccountSecretsViewSet', 'AccountTaskCreateAPI']
|
|||
|
||||
class AccountViewSet(OrgBulkModelViewSet):
|
||||
model = Account
|
||||
filterset_fields = ("username", "asset", 'ip', 'name')
|
||||
search_fields = ('username', 'ip', 'name')
|
||||
filterset_fields = ("username", "asset", 'address', 'name')
|
||||
search_fields = ('username', 'address', 'name')
|
||||
filterset_class = AccountFilterSet
|
||||
serializer_classes = {
|
||||
'default': serializers.AccountSerializer,
|
||||
|
|
|
@ -30,7 +30,7 @@ class AssetFilterSet(BaseFilterSet):
|
|||
|
||||
class Meta:
|
||||
model = Asset
|
||||
fields = ['name', 'ip', 'is_active', 'type', 'category', 'hostname']
|
||||
fields = ['name', 'address', 'is_active', 'type', 'category', 'hostname']
|
||||
|
||||
|
||||
class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet):
|
||||
|
@ -39,8 +39,8 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet):
|
|||
"""
|
||||
model = Asset
|
||||
filterset_class = AssetFilterSet
|
||||
search_fields = ("name", "ip")
|
||||
ordering_fields = ("name", "ip")
|
||||
search_fields = ("name", "address")
|
||||
ordering_fields = ("name", "address")
|
||||
ordering = ('name',)
|
||||
serializer_classes = (
|
||||
('default', serializers.AssetSerializer),
|
||||
|
|
|
@ -31,8 +31,8 @@ class DomainViewSet(OrgBulkModelViewSet):
|
|||
|
||||
class GatewayViewSet(OrgBulkModelViewSet):
|
||||
model = Gateway
|
||||
filterset_fields = ("domain__name", "name", "username", "ip", "domain")
|
||||
search_fields = ("domain__name", "name", "username", "ip")
|
||||
filterset_fields = ("domain__name", "name", "username", "address", "domain")
|
||||
search_fields = ("domain__name", "name", "username", "address")
|
||||
serializer_class = serializers.GatewaySerializer
|
||||
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ class SerializeToTreeNodeMixin:
|
|||
{
|
||||
'id': str(asset.id),
|
||||
'name': asset.name,
|
||||
'title': asset.ip,
|
||||
'title': asset.address,
|
||||
'pId': get_pid(asset),
|
||||
'isParent': False,
|
||||
'open': False,
|
||||
|
@ -68,7 +68,7 @@ class SerializeToTreeNodeMixin:
|
|||
'data': {
|
||||
'id': asset.id,
|
||||
'name': asset.name,
|
||||
'ip': asset.ip,
|
||||
'address': asset.address,
|
||||
'protocols': asset.protocols_as_list,
|
||||
'platform': asset.platform.id,
|
||||
'org_name': asset.org_name
|
||||
|
|
|
@ -201,7 +201,7 @@ class NodeChildrenAsTreeApi(SerializeToTreeNodeMixin, NodeChildrenApi):
|
|||
if not self.instance or not include_assets:
|
||||
return []
|
||||
assets = self.instance.get_assets().only(
|
||||
"id", "name", "ip", "platform_id",
|
||||
"id", "name", "address", "platform_id",
|
||||
"org_id", "is_active",
|
||||
).prefetch_related('platform')
|
||||
return self.serialize_assets(assets, self.instance.key)
|
||||
|
|
|
@ -20,14 +20,13 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
|||
|
||||
k8s = 'k8s', 'K8S'
|
||||
http = 'http', 'HTTP'
|
||||
https = 'https', 'HTTPS'
|
||||
|
||||
@classmethod
|
||||
def device_settings(cls):
|
||||
def device_protocols(cls):
|
||||
return {
|
||||
cls.ssh: {
|
||||
'port': 22,
|
||||
'secret_type': ['password', 'ssh_key'],
|
||||
'secret_types': ['password', 'ssh_key'],
|
||||
'setting': {
|
||||
'sftp_enabled': True,
|
||||
'sftp_home': '/tmp',
|
||||
|
@ -35,7 +34,7 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
|||
},
|
||||
cls.rdp: {
|
||||
'port': 3389,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
'setting': {
|
||||
'console': True,
|
||||
'security': 'any',
|
||||
|
@ -43,64 +42,63 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
|||
},
|
||||
cls.vnc: {
|
||||
'port': 5900,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.telnet: {
|
||||
'port': 23,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def db_settings(cls):
|
||||
def database_protocols(cls):
|
||||
return {
|
||||
cls.mysql: {
|
||||
'port': 3306,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
'setting': {
|
||||
}
|
||||
},
|
||||
cls.mariadb: {
|
||||
'port': 3306,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.postgresql: {
|
||||
'port': 5432,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.oracle: {
|
||||
'port': 1521,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.sqlserver: {
|
||||
'port': 1433,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.mongodb: {
|
||||
'port': 27017,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
cls.redis: {
|
||||
'port': 6379,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
},
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def cloud_settings(cls):
|
||||
def cloud_protocols(cls):
|
||||
return {
|
||||
cls.k8s: {
|
||||
'port': 443,
|
||||
'secret_type': ['token'],
|
||||
'setting': {
|
||||
'via_http': True
|
||||
}
|
||||
'secret_types': ['token'],
|
||||
},
|
||||
cls.http: {
|
||||
'port': 80,
|
||||
'secret_type': ['password'],
|
||||
'secret_types': ['password'],
|
||||
'setting': {
|
||||
'ssl': True
|
||||
'username_selector': '',
|
||||
'password_selector': '',
|
||||
'submit_selector': '',
|
||||
}
|
||||
},
|
||||
}
|
||||
|
@ -108,30 +106,7 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
|||
@classmethod
|
||||
def settings(cls):
|
||||
return {
|
||||
**cls.device_settings(),
|
||||
**cls.db_settings(),
|
||||
**cls.cloud_settings()
|
||||
**cls.device_protocols(),
|
||||
**cls.database_protocols(),
|
||||
**cls.cloud_protocols()
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def default_ports(cls):
|
||||
return {
|
||||
cls.ssh: 22,
|
||||
cls.sftp: 22,
|
||||
cls.rdp: 3389,
|
||||
cls.vnc: 5900,
|
||||
cls.telnet: 21,
|
||||
|
||||
cls.mysql: 3306,
|
||||
cls.mariadb: 3306,
|
||||
cls.postgresql: 5432,
|
||||
cls.oracle: 1521,
|
||||
cls.sqlserver: 1433,
|
||||
cls.mongodb: 27017,
|
||||
cls.redis: 6379,
|
||||
|
||||
cls.k8s: 0,
|
||||
|
||||
cls.http: 80,
|
||||
}
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ class IpInFilterBackend(filters.BaseFilterBackend):
|
|||
name='ips', location='query', required=False, type='string',
|
||||
schema=coreschema.String(
|
||||
title='ips',
|
||||
description='ip in filter'
|
||||
description='address in filter'
|
||||
)
|
||||
)
|
||||
]
|
||||
|
@ -158,7 +158,7 @@ class IpInFilterBackend(filters.BaseFilterBackend):
|
|||
|
||||
class AccountFilterSet(BaseFilterSet):
|
||||
from django_filters import rest_framework as filters
|
||||
ip = filters.CharFilter(field_name='ip', lookup_expr='exact')
|
||||
ip = filters.CharFilter(field_name='address', lookup_expr='exact')
|
||||
hostname = filters.CharFilter(field_name='name', lookup_expr='exact')
|
||||
username = filters.CharFilter(field_name="username", lookup_expr='exact')
|
||||
assets = UUIDInFilter(field_name='asset_id', lookup_expr='in')
|
||||
|
|
|
@ -17,6 +17,11 @@ class Migration(migrations.Migration):
|
|||
name='info',
|
||||
field=models.JSONField(blank=True, default=dict, verbose_name='Info'),
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='asset',
|
||||
old_name='ip',
|
||||
new_name='address',
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Host',
|
||||
fields=[
|
||||
|
|
|
@ -36,7 +36,6 @@ class Migration(migrations.Migration):
|
|||
name='Cloud',
|
||||
fields=[
|
||||
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')),
|
||||
('url', models.CharField(max_length=4096, verbose_name='Cluster')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
|
@ -47,7 +46,6 @@ class Migration(migrations.Migration):
|
|||
name='Web',
|
||||
fields=[
|
||||
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')),
|
||||
('url', models.CharField(max_length=1024, verbose_name='url')),
|
||||
('autofill', models.CharField(default='basic', max_length=16)),
|
||||
('password_selector', models.CharField(blank=True, default='', max_length=128)),
|
||||
('submit_selector', models.CharField(blank=True, default='', max_length=128)),
|
||||
|
|
|
@ -35,7 +35,7 @@ class Account(BaseAccount):
|
|||
|
||||
@lazyproperty
|
||||
def ip(self):
|
||||
return self.asset.ip
|
||||
return self.asset.address
|
||||
|
||||
@lazyproperty
|
||||
def asset_name(self):
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from .common import Asset
|
||||
|
||||
|
||||
class Cloud(Asset):
|
||||
url = models.CharField(max_length=4096, verbose_name=_("Url"))
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
|
@ -84,7 +84,7 @@ class Protocol(models.Model):
|
|||
class Asset(AbsConnectivity, NodesRelationMixin, JMSOrgBaseModel):
|
||||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||
name = models.CharField(max_length=128, verbose_name=_('Name'))
|
||||
ip = models.CharField(max_length=128, verbose_name=_('IP'), db_index=True)
|
||||
address = models.CharField(max_length=128, verbose_name=_('IP'), db_index=True)
|
||||
platform = models.ForeignKey(Platform, default=Platform.default, on_delete=models.PROTECT,
|
||||
verbose_name=_("Platform"), related_name='assets')
|
||||
domain = models.ForeignKey("assets.Domain", null=True, blank=True, related_name='assets',
|
||||
|
@ -101,7 +101,7 @@ class Asset(AbsConnectivity, NodesRelationMixin, JMSOrgBaseModel):
|
|||
return '{0.name}({0.ip})'.format(self)
|
||||
|
||||
def get_target_ip(self):
|
||||
return self.ip
|
||||
return self.address
|
||||
|
||||
def get_target_ssh_port(self):
|
||||
protocol = self.protocols.all().filter(name='ssh').first()
|
||||
|
@ -161,7 +161,7 @@ class Asset(AbsConnectivity, NodesRelationMixin, JMSOrgBaseModel):
|
|||
data = {
|
||||
'id': str(self.id),
|
||||
'name': self.name,
|
||||
'title': self.ip,
|
||||
'title': self.address,
|
||||
'pId': parent_node.key,
|
||||
'isParent': False,
|
||||
'open': False,
|
||||
|
@ -171,7 +171,7 @@ class Asset(AbsConnectivity, NodesRelationMixin, JMSOrgBaseModel):
|
|||
'data': {
|
||||
'id': self.id,
|
||||
'name': self.name,
|
||||
'ip': self.ip,
|
||||
'address': self.address,
|
||||
'protocols': self.protocols,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,11 @@ class Database(Asset):
|
|||
db_name = models.CharField(max_length=1024, verbose_name=_("Database"), blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return '{}({}://{}/{})'.format(self.name, self.type, self.ip, self.db_name)
|
||||
return '{}({}://{}/{})'.format(self.name, self.type, self.address, self.db_name)
|
||||
|
||||
@property
|
||||
def ip(self):
|
||||
return self.address
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("Database")
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
from .common import Asset
|
||||
|
||||
|
||||
|
|
|
@ -3,6 +3,4 @@ from .common import Asset
|
|||
|
||||
|
||||
class Host(Asset):
|
||||
def save(self, *args, **kwargs):
|
||||
self.category = Category.HOST
|
||||
return super().save(*args, **kwargs)
|
||||
pass
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
from django.utils.translation import gettext_lazy as _
|
||||
from django.db import models
|
||||
|
||||
from .common import Asset
|
||||
|
||||
|
||||
class Web(Asset):
|
||||
url = models.CharField(max_length=1024, verbose_name=_("url"))
|
||||
autofill = models.CharField(max_length=16, default='basic')
|
||||
username_selector = models.CharField(max_length=128, blank=True, default='')
|
||||
password_selector = models.CharField(max_length=128, blank=True, default='')
|
||||
|
|
|
@ -136,7 +136,7 @@ class Gateway(BaseAccount):
|
|||
socket.gaierror) as e:
|
||||
err = str(e)
|
||||
if err.startswith('[Errno None] Unable to connect to port'):
|
||||
err = _('Unable to connect to port {port} on {ip}')
|
||||
err = _('Unable to connect to port {port} on {address}')
|
||||
err = err.format(port=self.port, ip=self.ip)
|
||||
elif err == 'Authentication failed.':
|
||||
err = _('Authentication failed')
|
||||
|
|
|
@ -25,7 +25,7 @@ class GatheredUser(OrgModelMixin):
|
|||
|
||||
@property
|
||||
def ip(self):
|
||||
return self.asset.ip
|
||||
return self.asset.address
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('GatherUser')
|
||||
|
|
|
@ -58,7 +58,7 @@ class AccountSerializer(
|
|||
):
|
||||
asset = ObjectRelatedField(
|
||||
required=False, queryset=Asset.objects,
|
||||
label=_('Asset'), attrs=('id', 'name', 'ip')
|
||||
label=_('Asset'), attrs=('id', 'name', 'address')
|
||||
)
|
||||
platform = serializers.ReadOnlyField(label=_("Platform"))
|
||||
|
||||
|
@ -77,7 +77,7 @@ class AccountSerializer(
|
|||
class AccountSecretSerializer(SecretReadableMixin, AccountSerializer):
|
||||
class Meta(AccountSerializer.Meta):
|
||||
fields_backup = [
|
||||
'name', 'ip', 'platform', 'protocols', 'username', 'password',
|
||||
'name', 'address', 'platform', 'protocols', 'username', 'password',
|
||||
'private_key', 'public_key', 'date_created', 'date_updated', 'version'
|
||||
]
|
||||
extra_kwargs = {
|
||||
|
|
|
@ -7,5 +7,10 @@ __all__ = ['CloudSerializer']
|
|||
class CloudSerializer(AssetSerializer):
|
||||
class Meta(AssetSerializer.Meta):
|
||||
model = Cloud
|
||||
fields = AssetSerializer.Meta.fields + ['cluster']
|
||||
|
||||
fields = AssetSerializer.Meta.fields
|
||||
extra_kwargs = {
|
||||
**AssetSerializer.Meta.extra_kwargs,
|
||||
'address': {
|
||||
'label': 'URL'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ class AssetSerializer(JMSWritableNestedModelSerializer):
|
|||
|
||||
class Meta:
|
||||
model = Asset
|
||||
fields_mini = ['id', 'name', 'ip']
|
||||
fields_mini = ['id', 'name', 'address']
|
||||
fields_small = fields_mini + ['is_active', 'comment']
|
||||
fields_fk = ['domain', 'platform', 'platform']
|
||||
fields_m2m = [
|
||||
|
@ -81,7 +81,7 @@ class AssetSerializer(JMSWritableNestedModelSerializer):
|
|||
fields = fields_small + fields_fk + fields_m2m + read_only_fields
|
||||
extra_kwargs = {
|
||||
'name': {'label': _("Name")},
|
||||
'ip': {'label': _('IP/Host')},
|
||||
'address': {'label': _('Address')},
|
||||
}
|
||||
|
||||
@classmethod
|
||||
|
@ -142,7 +142,7 @@ class AssetSimpleSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = Asset
|
||||
fields = [
|
||||
'id', 'name', 'ip', 'port',
|
||||
'id', 'name', 'address', 'port',
|
||||
'connectivity', 'date_verified'
|
||||
]
|
||||
|
||||
|
|
|
@ -9,6 +9,12 @@ class WebSerializer(AssetSerializer):
|
|||
class Meta(AssetSerializer.Meta):
|
||||
model = Web
|
||||
fields = AssetSerializer.Meta.fields + [
|
||||
'url', 'autofill', 'username_selector',
|
||||
'autofill', 'username_selector',
|
||||
'password_selector', 'submit_selector'
|
||||
]
|
||||
extra_kwargs = {
|
||||
**AssetSerializer.Meta.extra_kwargs,
|
||||
'address': {
|
||||
'label': 'URL'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@ class ProtocolSettingSerializer(serializers.Serializer):
|
|||
sftp_enabled = serializers.BooleanField(default=True, label=_("SFTP enabled"))
|
||||
sftp_home = serializers.CharField(default='/tmp', label=_("SFTP home"))
|
||||
|
||||
via_http = serializers.BooleanField(default=False, label=_("Via HTTP"))
|
||||
|
||||
|
||||
class PlatformAutomationSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
|
|
@ -95,7 +95,7 @@ def add_asset_users(assets, results):
|
|||
for username, data in users.items():
|
||||
defaults = {'asset': asset, 'username': username, 'present': True}
|
||||
if data.get("ip"):
|
||||
defaults["ip_last_login"] = data["ip"][:32]
|
||||
defaults["ip_last_login"] = data["address"][:32]
|
||||
if data.get("date"):
|
||||
defaults["date_last_login"] = data["date"]
|
||||
GatheredUser.objects.update_or_create(
|
||||
|
|
|
@ -36,13 +36,13 @@ def write_content_to_excel(response, header=None, login_logs=None, fields=None):
|
|||
def write_login_log(*args, **kwargs):
|
||||
from audits.models import UserLoginLog
|
||||
|
||||
ip = kwargs.get('ip') or ''
|
||||
ip = kwargs.get('address') or ''
|
||||
if not (ip and validate_ip(ip)):
|
||||
ip = ip[:15]
|
||||
city = DEFAULT_CITY
|
||||
else:
|
||||
city = get_ip_city(ip) or DEFAULT_CITY
|
||||
kwargs.update({'ip': ip, 'city': city})
|
||||
kwargs.update({'address': ip, 'city': city})
|
||||
UserLoginLog.objects.create(**kwargs)
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ block_user_login_msg = _(
|
|||
"(please contact admin to unlock it or try again after {} minutes)"
|
||||
)
|
||||
block_ip_login_msg = _(
|
||||
"The ip has been locked "
|
||||
"The address has been locked "
|
||||
"(please contact admin to unlock it or try again after {} minutes)"
|
||||
)
|
||||
block_mfa_msg = _(
|
||||
|
|
|
@ -75,7 +75,7 @@ def contains_ip(ip, ip_group):
|
|||
|
||||
def get_ip_city(ip):
|
||||
if not ip or not isinstance(ip, str):
|
||||
return _("Invalid ip")
|
||||
return _("Invalid address")
|
||||
if ':' in ip:
|
||||
return 'IPv6'
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class BaseHost(Host):
|
|||
|
||||
def __set_required_variables(self):
|
||||
host_data = self.host_data
|
||||
self.set_variable('ansible_host', host_data['ip'])
|
||||
self.set_variable('ansible_host', host_data['address'])
|
||||
self.set_variable('ansible_port', host_data['port'])
|
||||
|
||||
if host_data.get('username'):
|
||||
|
|
|
@ -19,7 +19,7 @@ class JMSBaseInventory(BaseInventory):
|
|||
info = {
|
||||
'id': asset.id,
|
||||
'name': asset.name,
|
||||
'ip': asset.ip,
|
||||
'ip': asset.address,
|
||||
'port': asset.ssh_port,
|
||||
'vars': dict(),
|
||||
'groups': [],
|
||||
|
@ -49,7 +49,7 @@ class JMSBaseInventory(BaseInventory):
|
|||
proxy_command_list = [
|
||||
"ssh", "-o", "Port={}".format(gateway.port),
|
||||
"-o", "StrictHostKeyChecking=no",
|
||||
"{}@{}".format(gateway.username, gateway.ip),
|
||||
"{}@{}".format(gateway.username, gateway.address),
|
||||
"-W", "%h:%p", "-q",
|
||||
]
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ class AssetPermissionAssetRelationViewSet(RelationMixin):
|
|||
|
||||
class AssetPermissionAllAssetListApi(generics.ListAPIView):
|
||||
serializer_class = serializers.AssetPermissionAllAssetSerializer
|
||||
filterset_fields = ("name", "ip")
|
||||
filterset_fields = ("name", "address")
|
||||
search_fields = filterset_fields
|
||||
|
||||
def get_queryset(self):
|
||||
|
|
|
@ -33,8 +33,8 @@ class UserGroupMixin:
|
|||
class UserGroupGrantedAssetsApi(ListAPIView):
|
||||
serializer_class = serializers.AssetGrantedSerializer
|
||||
only_fields = serializers.AssetGrantedSerializer.Meta.only_fields
|
||||
filterset_fields = ['name', 'ip', 'id', 'comment']
|
||||
search_fields = ['name', 'ip', 'comment']
|
||||
filterset_fields = ['name', 'address', 'id', 'comment']
|
||||
search_fields = ['name', 'address', 'comment']
|
||||
rbac_perms = {
|
||||
'list': 'perms.view_usergroupassets',
|
||||
}
|
||||
|
@ -70,8 +70,8 @@ class UserGroupGrantedAssetsApi(ListAPIView):
|
|||
class UserGroupGrantedNodeAssetsApi(ListAPIView):
|
||||
serializer_class = serializers.AssetGrantedSerializer
|
||||
only_fields = serializers.AssetGrantedSerializer.Meta.only_fields
|
||||
filterset_fields = ['name', 'ip', 'id', 'comment']
|
||||
search_fields = ['name', 'ip', 'comment']
|
||||
filterset_fields = ['name', 'address', 'id', 'comment']
|
||||
search_fields = ['name', 'address', 'comment']
|
||||
rbac_perms = {
|
||||
'list': 'perms.view_usergroupassets',
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ class UserDirectGrantedAssetsQuerysetMixin:
|
|||
class UserAllGrantedAssetsQuerysetMixin:
|
||||
only_fields = serializers.AssetGrantedSerializer.Meta.only_fields
|
||||
pagination_class = AllGrantedAssetPagination
|
||||
ordering_fields = ("hostname", "ip", "port", "cpu_cores")
|
||||
ordering_fields = ("hostname", "address", "port", "cpu_cores")
|
||||
ordering = ('hostname', )
|
||||
|
||||
user: User
|
||||
|
@ -84,8 +84,8 @@ class UserGrantedNodeAssetsMixin:
|
|||
|
||||
class AssetsSerializerFormatMixin:
|
||||
serializer_class = serializers.AssetGrantedSerializer
|
||||
filterset_fields = ['name', 'ip', 'id', 'comment']
|
||||
search_fields = ['name', 'ip', 'comment']
|
||||
filterset_fields = ['name', 'address', 'id', 'comment']
|
||||
search_fields = ['name', 'address', 'comment']
|
||||
|
||||
|
||||
class AssetsTreeFormatMixin(SerializeToTreeNodeMixin):
|
||||
|
@ -95,8 +95,8 @@ class AssetsTreeFormatMixin(SerializeToTreeNodeMixin):
|
|||
filter_queryset: callable
|
||||
get_queryset: callable
|
||||
|
||||
filterset_fields = ['name', 'ip', 'id', 'comment']
|
||||
search_fields = ['name', 'ip', 'comment']
|
||||
filterset_fields = ['name', 'address', 'id', 'comment']
|
||||
search_fields = ['name', 'address', 'comment']
|
||||
|
||||
def list(self, request: Request, *args, **kwargs):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
|
|
@ -142,7 +142,7 @@ class AssetPermissionFilter(PermissionBaseFilter):
|
|||
is_query_all = self.get_query_param('all', True)
|
||||
asset_id = self.get_query_param('asset_id')
|
||||
asset_name = self.get_query_param('asset_name')
|
||||
ip = self.get_query_param('ip')
|
||||
ip = self.get_query_param('address')
|
||||
|
||||
if asset_id:
|
||||
assets = Asset.objects.filter(pk=asset_id)
|
||||
|
|
|
@ -83,7 +83,7 @@ class AssetPermissionAllAssetSerializer(serializers.Serializer):
|
|||
asset_display = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
only_fields = ['id', 'name', 'ip']
|
||||
only_fields = ['id', 'name', 'address']
|
||||
|
||||
@staticmethod
|
||||
def get_asset_display(obj):
|
||||
|
|
|
@ -24,7 +24,7 @@ class AssetGrantedSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = Asset
|
||||
only_fields = [
|
||||
"id", "name", "ip", "protocols", 'domain',
|
||||
"id", "name", "address", "protocols", 'domain',
|
||||
"platform", "comment", "org_id", "is_active"
|
||||
]
|
||||
fields = only_fields + ['org_name']
|
||||
|
|
Loading…
Reference in New Issue