提交 e7f38ec8 编写于 作者: baltery's avatar baltery

[Change] 全部使用uuid作为主键

上级 d80cbe27
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -7,6 +9,7 @@ from users.models import User ...@@ -7,6 +9,7 @@ from users.models import User
class Terminal(models.Model): class Terminal(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=32, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=32, unique=True, verbose_name=_('Name'))
remote_addr = models.CharField(max_length=128, verbose_name=_('Remote Address')) remote_addr = models.CharField(max_length=128, verbose_name=_('Remote Address'))
ssh_port = models.IntegerField(verbose_name=_('SSH Port'), default=2222) ssh_port = models.IntegerField(verbose_name=_('SSH Port'), default=2222)
...@@ -57,6 +60,7 @@ class Terminal(models.Model): ...@@ -57,6 +60,7 @@ class Terminal(models.Model):
class TerminalStatus(models.Model): class TerminalStatus(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
session_online = models.IntegerField(verbose_name=_("Session Online"), default=0) session_online = models.IntegerField(verbose_name=_("Session Online"), default=0)
cpu_used = models.FloatField(verbose_name=_("CPU Usage")) cpu_used = models.FloatField(verbose_name=_("CPU Usage"))
memory_used = models.FloatField(verbose_name=_("Memory Used")) memory_used = models.FloatField(verbose_name=_("Memory Used"))
...@@ -76,7 +80,7 @@ class TerminalSession(models.Model): ...@@ -76,7 +80,7 @@ class TerminalSession(models.Model):
('WT', 'Web Terminal'), ('WT', 'Web Terminal'),
) )
id = models.UUIDField(primary_key=True) id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=128, verbose_name=_("User")) user = models.CharField(max_length=128, verbose_name=_("User"))
asset = models.CharField(max_length=1024, verbose_name=_("Asset")) asset = models.CharField(max_length=1024, verbose_name=_("Asset"))
system_user = models.CharField(max_length=128, verbose_name=_("System User")) system_user = models.CharField(max_length=128, verbose_name=_("System User"))
...@@ -96,6 +100,7 @@ class TerminalSession(models.Model): ...@@ -96,6 +100,7 @@ class TerminalSession(models.Model):
class TerminalTask(models.Model): class TerminalTask(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, verbose_name=_("Name")) name = models.CharField(max_length=128, verbose_name=_("Name"))
args = models.CharField(max_length=1024, verbose_name=_("Task Args")) args = models.CharField(max_length=1024, verbose_name=_("Task Args"))
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE) terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE)
......
...@@ -10,12 +10,12 @@ app_name = 'applications' ...@@ -10,12 +10,12 @@ app_name = 'applications'
urlpatterns = [ urlpatterns = [
url(r'^terminal/$', views.TerminalListView.as_view(), name='terminal-list'), url(r'^terminal/$', views.TerminalListView.as_view(), name='terminal-list'),
url(r'^terminal/(?P<pk>\d+)/$', views.TerminalDetailView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/$', views.TerminalDetailView.as_view(),
name='terminal-detail'), name='terminal-detail'),
url(r'^terminal/(?P<pk>\d+)/connect/$', views.TerminalConnectView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/connect/$', views.TerminalConnectView.as_view(),
name='terminal-connect'), name='terminal-connect'),
url(r'^terminal/(?P<pk>\d+)/update$', views.TerminalUpdateView.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.TerminalUpdateView.as_view(),
name='terminal-update'), name='terminal-update'),
url(r'^terminal/(?P<pk>\d+)/modal/accept$', views.TerminalModelAccept.as_view(), url(r'^terminal/(?P<pk>[0-9a-zA-Z\-]+)/modal/accept$', views.TerminalModelAccept.as_view(),
name='terminal-modal-accept'), name='terminal-modal-accept'),
] ]
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -38,6 +40,7 @@ class Asset(models.Model): ...@@ -38,6 +40,7 @@ class Asset(models.Model):
) )
# Important # Important
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
ip = models.GenericIPAddressField(max_length=32, verbose_name=_('IP'), db_index=True) ip = models.GenericIPAddressField(max_length=32, verbose_name=_('IP'), db_index=True)
hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname')) hostname = models.CharField(max_length=128, unique=True, verbose_name=_('Hostname'))
port = models.IntegerField(default=22, verbose_name=_('Port')) port = models.IntegerField(default=22, verbose_name=_('Port'))
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -15,6 +17,7 @@ logger = logging.getLogger(__name__) ...@@ -15,6 +17,7 @@ logger = logging.getLogger(__name__)
class AssetGroup(models.Model): class AssetGroup(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=64, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=64, unique=True, verbose_name=_('Name'))
system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True) system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True)
created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by'))
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import logging import logging
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -15,6 +16,7 @@ logger = logging.getLogger(__name__) ...@@ -15,6 +16,7 @@ logger = logging.getLogger(__name__)
class IDC(models.Model): class IDC(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=32, verbose_name=_('Name')) name = models.CharField(max_length=32, verbose_name=_('Name'))
bandwidth = models.CharField( bandwidth = models.CharField(
max_length=32, blank=True, verbose_name=_('Bandwidth')) max_length=32, blank=True, verbose_name=_('Bandwidth'))
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import os import os
import logging import logging
import uuid
from hashlib import md5 from hashlib import md5
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
...@@ -31,6 +32,7 @@ class AdminUser(models.Model): ...@@ -31,6 +32,7 @@ class AdminUser(models.Model):
('sudo', 'sudo'), ('sudo', 'sudo'),
('su', 'su'), ('su', 'su'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=128, unique=True, verbose_name=_('Name'))
username = models.CharField(max_length=16, verbose_name=_('Username')) username = models.CharField(max_length=16, verbose_name=_('Username'))
_password = models.CharField( _password = models.CharField(
...@@ -131,6 +133,7 @@ class SystemUser(models.Model): ...@@ -131,6 +133,7 @@ class SystemUser(models.Model):
('P', 'Password'), ('P', 'Password'),
('K', 'Public key'), ('K', 'Public key'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, unique=True, name = models.CharField(max_length=128, unique=True,
verbose_name=_('Name')) verbose_name=_('Name'))
username = models.CharField(max_length=16, verbose_name=_('Username')) username = models.CharField(max_length=16, verbose_name=_('Username'))
......
...@@ -18,37 +18,37 @@ urlpatterns = [ ...@@ -18,37 +18,37 @@ urlpatterns = [
url(r'^v1/assets-bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'), url(r'^v1/assets-bulk/$', api.AssetListUpdateApi.as_view(), name='asset-bulk-update'),
url(r'^v1/system-user/(?P<pk>[0-9]+)/auth-info/', api.SystemUserAuthInfoApi.as_view(), url(r'^v1/system-user/(?P<pk>[0-9]+)/auth-info/', api.SystemUserAuthInfoApi.as_view(),
name='system-user-auth-info'), name='system-user-auth-info'),
url(r'^v1/assets/(?P<pk>\d+)/groups/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.AssetUpdateGroupApi.as_view(), name='asset-update-group'), api.AssetUpdateGroupApi.as_view(), name='asset-update-group'),
url(r'^v1/assets/(?P<pk>\d+)/refresh/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/refresh/$',
api.AssetRefreshHardwareView.as_view(), name='asset-refresh'), api.AssetRefreshHardwareView.as_view(), name='asset-refresh'),
url(r'^v1/assets/(?P<pk>\d+)/admin-user-test/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/admin-user-test/$',
api.AssetAdminUserTestView.as_view(), name='asset-admin-user-test'), api.AssetAdminUserTestView.as_view(), name='asset-admin-user-test'),
url(r'^v1/assets/(?P<pk>\d+)/system-users/$', url(r'^v1/assets/(?P<pk>[0-9a-zA-Z\-]+)/system-users/$',
api.SystemUserUpdateApi.as_view(), name='asset-update-system-users'), api.SystemUserUpdateApi.as_view(), name='asset-update-system-users'),
url(r'^v1/groups/(?P<pk>\d+)/push-system-user/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/push-system-user/$',
api.AssetGroupPushSystemUserView.as_view(), name='asset-group-push-system-user'), api.AssetGroupPushSystemUserView.as_view(), name='asset-group-push-system-user'),
# update the system users, which add and delete the asset to the system user # update the system users, which add and delete the asset to the system user
url(r'^v1/system-user/(?P<pk>\d+)/assets/$', url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.SystemUserUpdateAssetsApi.as_view(), name='systemuser-update-assets'), api.SystemUserUpdateAssetsApi.as_view(), name='systemuser-update-assets'),
url(r'^v1/system-user/(?P<pk>\d+)/groups/$', url(r'^v1/system-user/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.SystemUserUpdateAssetGroupApi.as_view(), name='systemuser-update-assetgroups'), api.SystemUserUpdateAssetGroupApi.as_view(), name='systemuser-update-assetgroups'),
# update the asset group, which add or delete the asset to the group # update the asset group, which add or delete the asset to the group
url(r'^v1/groups/(?P<pk>\d+)/assets/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.AssetGroupUpdateApi.as_view(), name='asset-groups-update'), api.AssetGroupUpdateApi.as_view(), name='asset-groups-update'),
# update the asset group, and add or delete the system_user to the group # update the asset group, and add or delete the system_user to the group
url(r'^v1/groups/(?P<pk>\d+)/system-users/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/system-users/$',
api.AssetGroupUpdateSystemUserApi.as_view(), name='asset-groups-update-systemusers'), api.AssetGroupUpdateSystemUserApi.as_view(), name='asset-groups-update-systemusers'),
# update the IDC, and add or delete the assets to the IDC # update the IDC, and add or delete the assets to the IDC
url(r'^v1/idc/(?P<pk>\d+)/assets/$', url(r'^v1/idc/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.IDCUpdateAssetsApi.as_view(), name='idc-update-assets'), api.IDCUpdateAssetsApi.as_view(), name='idc-update-assets'),
] ]
......
...@@ -11,9 +11,9 @@ urlpatterns = [ ...@@ -11,9 +11,9 @@ urlpatterns = [
url(r'^asset/create/$', views.AssetCreateView.as_view(), name='asset-create'), url(r'^asset/create/$', views.AssetCreateView.as_view(), name='asset-create'),
url(r'^asset/export/$', views.AssetExportView.as_view(), name='asset-export'), url(r'^asset/export/$', views.AssetExportView.as_view(), name='asset-export'),
url(r'^asset/import/$', views.BulkImportAssetView.as_view(), name='asset-import'), url(r'^asset/import/$', views.BulkImportAssetView.as_view(), name='asset-import'),
url(r'^asset/(?P<pk>[0-9]+)/$', views.AssetDetailView.as_view(), name='asset-detail'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AssetDetailView.as_view(), name='asset-detail'),
url(r'^asset/(?P<pk>[0-9]+)/update/$', views.AssetUpdateView.as_view(), name='asset-update'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AssetUpdateView.as_view(), name='asset-update'),
url(r'^asset/(?P<pk>[0-9]+)/delete/$', views.AssetDeleteView.as_view(), name='asset-delete'), url(r'^asset/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AssetDeleteView.as_view(), name='asset-delete'),
url(r'^asset-modal$', views.AssetModalListView.as_view(), name='asset-modal-list'), url(r'^asset-modal$', views.AssetModalListView.as_view(), name='asset-modal-list'),
url(r'^asset/update/$', views.AssetBulkUpdateView.as_view(), name='asset-bulk-update'), url(r'^asset/update/$', views.AssetBulkUpdateView.as_view(), name='asset-bulk-update'),
...@@ -23,33 +23,33 @@ urlpatterns = [ ...@@ -23,33 +23,33 @@ urlpatterns = [
# Resource asset group url # Resource asset group url
url(r'^asset-group/$', views.AssetGroupListView.as_view(), name='asset-group-list'), url(r'^asset-group/$', views.AssetGroupListView.as_view(), name='asset-group-list'),
url(r'^asset-group/create/$', views.AssetGroupCreateView.as_view(), name='asset-group-create'), url(r'^asset-group/create/$', views.AssetGroupCreateView.as_view(), name='asset-group-create'),
url(r'^asset-group/(?P<pk>[0-9]+)/$', views.AssetGroupDetailView.as_view(), name='asset-group-detail'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AssetGroupDetailView.as_view(), name='asset-group-detail'),
url(r'^asset-group/(?P<pk>[0-9]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'),
url(r'^asset-group/(?P<pk>[0-9]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'), url(r'^asset-group/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'),
# Resource idc url # Resource idc url
url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'), url(r'^idc/$', views.IDCListView.as_view(), name='idc-list'),
url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'), url(r'^idc/create/$', views.IDCCreateView.as_view(), name='idc-create'),
url(r'^idc/(?P<pk>[0-9]+)/$', views.IDCDetailView.as_view(), name='idc-detail'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/$', views.IDCDetailView.as_view(), name='idc-detail'),
url(r'^idc/(?P<pk>[0-9]+)/update/', views.IDCUpdateView.as_view(), name='idc-update'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/update/', views.IDCUpdateView.as_view(), name='idc-update'),
url(r'^idc/(?P<pk>[0-9]+)/delete/$', views.IDCDeleteView.as_view(), name='idc-delete'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.IDCDeleteView.as_view(), name='idc-delete'),
url(r'^idc/(?P<pk>[0-9]+)/assets/$', views.IDCAssetsView.as_view(), name='idc-assets'), url(r'^idc/(?P<pk>[0-9a-zA-Z\-]+)/assets/$', views.IDCAssetsView.as_view(), name='idc-assets'),
# Resource admin user url # Resource admin user url
url(r'^admin-user/$', views.AdminUserListView.as_view(), name='admin-user-list'), url(r'^admin-user/$', views.AdminUserListView.as_view(), name='admin-user-list'),
url(r'^admin-user/create/$', views.AdminUserCreateView.as_view(), name='admin-user-create'), url(r'^admin-user/create/$', views.AdminUserCreateView.as_view(), name='admin-user-create'),
url(r'^admin-user/(?P<pk>[0-9]+)/$', views.AdminUserDetailView.as_view(), name='admin-user-detail'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/$', views.AdminUserDetailView.as_view(), name='admin-user-detail'),
url(r'^admin-user/(?P<pk>[0-9]+)/update/$', views.AdminUserUpdateView.as_view(), name='admin-user-update'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.AdminUserUpdateView.as_view(), name='admin-user-update'),
url(r'^admin-user/(?P<pk>[0-9]+)/delete/$', views.AdminUserDeleteView.as_view(), name='admin-user-delete'), url(r'^admin-user/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.AdminUserDeleteView.as_view(), name='admin-user-delete'),
# Resource system user url # Resource system user url
url(r'^system-user/$', views.SystemUserListView.as_view(), name='system-user-list'), url(r'^system-user/$', views.SystemUserListView.as_view(), name='system-user-list'),
url(r'^system-user/create/$', views.SystemUserCreateView.as_view(), name='system-user-create'), url(r'^system-user/create/$', views.SystemUserCreateView.as_view(), name='system-user-create'),
url(r'^system-user/(?P<pk>[0-9]+)/$', views.SystemUserDetailView.as_view(), name='system-user-detail'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/$', views.SystemUserDetailView.as_view(), name='system-user-detail'),
url(r'^system-user/(?P<pk>[0-9]+)/update/$', views.SystemUserUpdateView.as_view(), name='system-user-update'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/update/$', views.SystemUserUpdateView.as_view(), name='system-user-update'),
url(r'^system-user/(?P<pk>[0-9]+)/delete/$', views.SystemUserDeleteView.as_view(), name='system-user-delete'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/delete/$', views.SystemUserDeleteView.as_view(), name='system-user-delete'),
url(r'^system-user/(?P<pk>[0-9]+)/asset/$', views.SystemUserAssetView.as_view(), name='system-user-asset'), url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/asset/$', views.SystemUserAssetView.as_view(), name='system-user-asset'),
# url(r'^system-user/(?P<pk>[0-9]+)/asset-group$', views.SystemUserAssetGroupView.as_view(), # url(r'^system-user/(?P<pk>[0-9a-zA-Z\-]+)/asset-group$', views.SystemUserAssetGroupView.as_view(),
# name='system-user-asset-group'), # name='system-user-asset-group'),
] ]
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -13,7 +15,7 @@ class LoginLog(models.Model): ...@@ -13,7 +15,7 @@ class LoginLog(models.Model):
('ST', 'SSH Terminal'), ('ST', 'SSH Terminal'),
('WT', 'Web Terminal') ('WT', 'Web Terminal')
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
username = models.CharField(max_length=20, verbose_name=_('Username')) username = models.CharField(max_length=20, verbose_name=_('Username'))
name = models.CharField(max_length=20, blank=True, verbose_name=_('Name')) name = models.CharField(max_length=20, blank=True, verbose_name=_('Name'))
login_type = models.CharField(choices=LOGIN_TYPE_CHOICE, max_length=2, login_type = models.CharField(choices=LOGIN_TYPE_CHOICE, max_length=2,
...@@ -37,6 +39,7 @@ class ProxyLog(models.Model): ...@@ -37,6 +39,7 @@ class ProxyLog(models.Model):
('WT', 'Web Terminal'), ('WT', 'Web Terminal'),
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
user = models.CharField(max_length=32, verbose_name=_('User')) user = models.CharField(max_length=32, verbose_name=_('User'))
asset = models.CharField(max_length=32, verbose_name=_('Asset')) asset = models.CharField(max_length=32, verbose_name=_('Asset'))
system_user = models.CharField(max_length=32, verbose_name=_('System user')) system_user = models.CharField(max_length=32, verbose_name=_('System user'))
...@@ -66,6 +69,7 @@ class ProxyLog(models.Model): ...@@ -66,6 +69,7 @@ class ProxyLog(models.Model):
class CommandLog(models.Model): class CommandLog(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
proxy_log_id = models.IntegerField(db_index=True) proxy_log_id = models.IntegerField(db_index=True)
user = models.CharField(max_length=48, db_index=True) user = models.CharField(max_length=48, db_index=True)
asset = models.CharField(max_length=128, db_index=True) asset = models.CharField(max_length=128, db_index=True)
...@@ -83,6 +87,7 @@ class CommandLog(models.Model): ...@@ -83,6 +87,7 @@ class CommandLog(models.Model):
class RecordLog(models.Model): class RecordLog(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
proxy_log_id = models.IntegerField(db_index=True) proxy_log_id = models.IntegerField(db_index=True)
output = models.TextField(verbose_name=_('Output')) output = models.TextField(verbose_name=_('Output'))
timestamp = models.FloatField(db_index=True) timestamp = models.FloatField(db_index=True)
......
...@@ -8,7 +8,7 @@ urlpatterns = [ ...@@ -8,7 +8,7 @@ urlpatterns = [
name='proxy-log-offline-list'), name='proxy-log-offline-list'),
url(r'^proxy-log-online/$', views.ProxyLogOnlineListView.as_view(), url(r'^proxy-log-online/$', views.ProxyLogOnlineListView.as_view(),
name='proxy-log-online-list'), name='proxy-log-online-list'),
url(r'^proxy-log/(?P<pk>\d+)/$', views.ProxyLogDetailView.as_view(), url(r'^proxy-log/(?P<pk>[0-9a-zA-Z\-]+)/$', views.ProxyLogDetailView.as_view(),
name='proxy-log-detail'), name='proxy-log-detail'),
url(r'^command-log/$', views.CommandLogListView.as_view(), url(r'^command-log/$', views.CommandLogListView.as_view(),
name='command-log-list'), name='command-log-list'),
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
[{"model": "users.usergroup", "pk": 1, "fields": {"is_discard": false, "discard_time": null, "name": "Default", "comment": "Default user group", "date_created": "2017-04-04T01:59:21.128Z", "created_by": "System"}}, {"model": "assets.idc", "pk": 1, "fields": {"name": "Default", "bandwidth": "", "contact": "", "phone": "", "address": "", "intranet": "", "extranet": "", "date_created": "2017-04-04T01:59:21.140Z", "operator": "", "created_by": "System", "comment": "Default IDC"}}, {"model": "assets.assetgroup", "pk": 1, "fields": {"name": "Default", "created_by": "", "date_created": "2017-04-04T01:59:21.142Z", "comment": "Default asset group", "system_users": []}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$f8HLJLRwydBR$M+X1huSgQOojfaG01SGNBYPOlbYnHHw/A4/RdcSBEQQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2017-04-04T01:59:20.932Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": null, "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2087-03-18T01:59:20.932Z", "created_by": "System", "user_permissions": [], "groups": [1]}}] [{"model": "users.usergroup", "pk": "0460a32e-59c9-42cc-81a5-7e0a13fc0085", "fields": {"is_discard": false, "discard_time": null, "name": "Default", "comment": "Default user group", "date_created": "2017-11-23T03:59:09.875Z", "created_by": "System"}}, {"model": "assets.idc", "pk": "937922e3-e2b7-42aa-b460-6b276901f53a", "fields": {"name": "Default", "bandwidth": "", "contact": "", "phone": "", "address": "", "intranet": "", "extranet": "", "date_created": "2017-11-23T03:59:09.882Z", "operator": "", "created_by": "System", "comment": "Default IDC"}}, {"model": "assets.assetgroup", "pk": "f758dc94-b979-4edf-9afc-f9171f9d2d6a", "fields": {"name": "Default", "created_by": "", "date_created": "2017-11-23T03:59:09.883Z", "comment": "Default asset group", "system_users": []}}, {"model": "users.user", "pk": "bb318c48-4f50-483e-a165-89d7f18e9e95", "fields": {"password": "pbkdf2_sha256$36000$kHqN5uCVaAk9$SXWzKLwBg68/2W8NLSNJIaVBJc60F26p8RO9E3oSskI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2017-11-23T03:59:09.828Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": null, "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2087-11-06T03:59:09.829Z", "created_by": "System", "user_permissions": [], "groups": ["0460a32e-59c9-42cc-81a5-7e0a13fc0085"]}}]
\ No newline at end of file \ No newline at end of file
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
from __future__ import unicode_literals, absolute_import
import logging import logging
from collections import OrderedDict from collections import OrderedDict
import json import json
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -16,7 +16,7 @@ logger = logging.getLogger(__name__) ...@@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
class Task(models.Model): class Task(models.Model):
uuid = models.CharField(max_length=128, verbose_name=_('UUID'), primary_key=True) uuid = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, blank=True, verbose_name=_('Name')) name = models.CharField(max_length=128, blank=True, verbose_name=_('Name'))
date_start = models.DateTimeField(auto_now_add=True, verbose_name=_('Start time')) date_start = models.DateTimeField(auto_now_add=True, verbose_name=_('Start time'))
date_finished = models.DateTimeField(blank=True, null=True, verbose_name=_('End time')) date_finished = models.DateTimeField(blank=True, null=True, verbose_name=_('End time'))
......
...@@ -10,6 +10,6 @@ __all__ = ["urlpatterns"] ...@@ -10,6 +10,6 @@ __all__ = ["urlpatterns"]
urlpatterns = [ urlpatterns = [
# TResource Task url # TResource Task url
url(r'^task/$', views.TaskListView.as_view(), name='task-list'), url(r'^task/$', views.TaskListView.as_view(), name='task-list'),
url(r'^task/(?P<pk>[0-9a-zA-Z-]+)/$', views.TaskDetailView.as_view(), name='task-detail'), url(r'^task/(?P<pk>[0-9a-zA-Z\-]+)/$', views.TaskDetailView.as_view(), name='task-detail'),
url(r'^task/(?P<pk>[0-9a-zA-Z-]+)/run/$', views.TaskRunView.as_view(), name='task-run'), url(r'^task/(?P<pk>[0-9a-zA-Z\-]+)/run/$', views.TaskRunView.as_view(), name='task-run'),
] ]
\ No newline at end of file
from __future__ import unicode_literals, absolute_import from __future__ import unicode_literals, absolute_import
import functools import functools
import uuid
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -17,6 +18,7 @@ class AssetPermission(models.Model): ...@@ -17,6 +18,7 @@ class AssetPermission(models.Model):
# ('U', 'user'), # ('U', 'user'),
# ('G', 'user group'), # ('G', 'user group'),
# ) # )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField( name = models.CharField(
max_length=128, unique=True, verbose_name=_('Name')) max_length=128, unique=True, verbose_name=_('Name'))
users = models.ManyToManyField( users = models.ManyToManyField(
......
...@@ -13,35 +13,27 @@ router.register('v1/asset-permissions', ...@@ -13,35 +13,27 @@ router.register('v1/asset-permissions',
urlpatterns = [ urlpatterns = [
# 用户可以使用自己的Token或其它认证查看自己授权的资产,资产组等 # 用户可以使用自己的Token或其它认证查看自己授权的资产,资产组等
url(r'^v1/user/my/assets/$', url(r'^v1/user/my/assets/$', api.MyGrantedAssetsApi.as_view(), name='my-assets'),
api.MyGrantedAssetsApi.as_view(), url(r'^v1/user/my/asset-groups/$', api.MyGrantedAssetGroupsApi.as_view(), name='my-asset-groups'),
name='my-assets'), url(r'^v1/user/my/asset-groups-assets/$', api.MyGrantedAssetGroupsWithAssetsApi.as_view(), name='my-asset-group-assets'),
url(r'^v1/user/my/asset-groups/$', url(r'^v1/user/my/asset-group/(?P<pk>[0-9a-zA-Z\-]+)/assets/$', api.MyAssetGroupOfAssetsApi.as_view(), name='my-asset-group-of-assets'),
api.MyGrantedAssetGroupsApi.as_view(),
name='my-asset-groups'),
url(r'^v1/user/my/asset-groups-assets/$',
api.MyGrantedAssetGroupsWithAssetsApi.as_view(),
name='my-asset-group-assets'),
url(r'^v1/user/my/asset-group/(?P<pk>[0-9]+)/assets/$',
api.MyAssetGroupOfAssetsApi.as_view(),
name='my-asset-group-of-assets'),
# 查询某个用户授权的资产和资产组 # 查询某个用户授权的资产和资产组
url(r'^v1/user/(?P<pk>[0-9]+)/assets/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.UserGrantedAssetsApi.as_view(), api.UserGrantedAssetsApi.as_view(),
name='user-assets'), name='user-assets'),
url(r'^v1/user/(?P<pk>[0-9]+)/asset-groups/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups/$',
api.UserGrantedAssetGroupsApi.as_view(), api.UserGrantedAssetGroupsApi.as_view(),
name='user-asset-groups'), name='user-asset-groups'),
url(r'^v1/user/(?P<pk>[0-9]+)/asset-groups-assets/$', url(r'^v1/user/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups-assets/$',
api.UserGrantedAssetGroupsWithAssetsApi.as_view(), api.UserGrantedAssetGroupsWithAssetsApi.as_view(),
name='user-asset-groups'), name='user-asset-groups'),
# 查询某个用户组授权的资产和资产组 # 查询某个用户组授权的资产和资产组
url(r'^v1/user-group/(?P<pk>[0-9]+)/assets/$', url(r'^v1/user-group/(?P<pk>[0-9a-zA-Z\-]+)/assets/$',
api.UserGroupGrantedAssetsApi.as_view(), api.UserGroupGrantedAssetsApi.as_view(),
name='user-group-assets'), name='user-group-assets'),
url(r'^v1/user-group/(?P<pk>[0-9]+)/asset-groups/$', url(r'^v1/user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-groups/$',
api.UserGroupGrantedAssetGroupsApi.as_view(), api.UserGroupGrantedAssetGroupsApi.as_view(),
name='user-group-asset-groups'), name='user-group-asset-groups'),
...@@ -59,7 +51,7 @@ urlpatterns = [ ...@@ -59,7 +51,7 @@ urlpatterns = [
name='validate-user-asset-permission'), name='validate-user-asset-permission'),
# 删除asset permission中的某个系统用户 # 删除asset permission中的某个系统用户
url(r'^v1/asset-permissions/(?P<pk>[0-9]+)/system-user/remove/$', url(r'^v1/asset-permissions/(?P<pk>[0-9a-zA-Z\-]+)/system-user/remove/$',
api.RemoveSystemUserAssetPermission.as_view(), api.RemoveSystemUserAssetPermission.as_view(),
name='remove-system-user-asset-permission'), name='remove-system-user-asset-permission'),
] ]
......
...@@ -8,16 +8,11 @@ app_name = 'perms' ...@@ -8,16 +8,11 @@ app_name = 'perms'
urlpatterns = [ urlpatterns = [
url(r'^asset-permission$', views.AssetPermissionListView.as_view(), name='asset-permission-list'), url(r'^asset-permission$', views.AssetPermissionListView.as_view(), name='asset-permission-list'),
url(r'^asset-permission/create$', views.AssetPermissionCreateView.as_view(), name='asset-permission-create'), url(r'^asset-permission/create$', views.AssetPermissionCreateView.as_view(), name='asset-permission-create'),
url(r'^asset-permission/(?P<pk>[0-9]+)/update$', views.AssetPermissionUpdateView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.AssetPermissionUpdateView.as_view(), name='asset-permission-update'),
name='asset-permission-update'), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)$', views.AssetPermissionDetailView.as_view(),name='asset-permission-detail'),
url(r'^asset-permission/(?P<pk>[0-9]+)$', views.AssetPermissionDetailView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/delete$', views.AssetPermissionDeleteView.as_view(), name='asset-permission-delete'),
name='asset-permission-detail'), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/user$', views.AssetPermissionUserView.as_view(), name='asset-permission-user-list'),
url(r'^asset-permission/(?P<pk>[0-9]+)/delete$', views.AssetPermissionDeleteView.as_view(), url(r'^asset-permission/(?P<pk>[0-9a-zA-Z\-]+)/asset$', views.AssetPermissionAssetView.as_view(), name='asset-permission-asset-list'),
name='asset-permission-delete'),
url(r'^asset-permission/(?P<pk>[0-9]+)/user$', views.AssetPermissionUserView.as_view(),
name='asset-permission-user-list'),
url(r'^asset-permission/(?P<pk>[0-9]+)/asset$', views.AssetPermissionAssetView.as_view(),
name='asset-permission-asset-list'),
] ]
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid
from django.db import models, IntegrityError from django.db import models, IntegrityError
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
...@@ -15,6 +17,7 @@ __all__ = ['UserGroup'] ...@@ -15,6 +17,7 @@ __all__ = ['UserGroup']
class UserGroup(NoDeleteModelMixin): class UserGroup(NoDeleteModelMixin):
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
name = models.CharField(max_length=128, verbose_name=_('Name')) name = models.CharField(max_length=128, verbose_name=_('Name'))
comment = models.TextField(blank=True, verbose_name=_('Comment')) comment = models.TextField(blank=True, verbose_name=_('Comment'))
date_created = models.DateTimeField(auto_now_add=True, null=True, date_created = models.DateTimeField(auto_now_add=True, null=True,
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import os import os
import uuid
from collections import OrderedDict from collections import OrderedDict
from django.conf import settings from django.conf import settings
...@@ -27,7 +27,7 @@ class User(AbstractUser): ...@@ -27,7 +27,7 @@ class User(AbstractUser):
('User', 'User'), ('User', 'User'),
('App', 'Application') ('App', 'Application')
) )
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
username = models.CharField(max_length=20, unique=True, verbose_name=_('Username')) username = models.CharField(max_length=20, unique=True, verbose_name=_('Username'))
name = models.CharField(max_length=20, verbose_name=_('Name')) name = models.CharField(max_length=20, verbose_name=_('Name'))
email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email')) email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email'))
...@@ -234,7 +234,7 @@ class User(AbstractUser): ...@@ -234,7 +234,7 @@ class User(AbstractUser):
self.set_password(new_password) self.set_password(new_password)
self.save() self.save()
def delete(self): def delete(self, using=None, keep_parents=False):
if self.pk == 1 or self.username == 'admin': if self.pk == 1 or self.username == 'admin':
return return
return super(User, self).delete() return super(User, self).delete()
...@@ -267,7 +267,7 @@ class User(AbstractUser): ...@@ -267,7 +267,7 @@ class User(AbstractUser):
email=forgery_py.internet.email_address(), email=forgery_py.internet.email_address(),
name=forgery_py.name.full_name(), name=forgery_py.name.full_name(),
password=make_password(forgery_py.lorem_ipsum.word()), password=make_password(forgery_py.lorem_ipsum.word()),
role=choice(dict(User.ROLE_CHOICES).keys()), role=choice(list(dict(User.ROLE_CHOICES).keys())),
wechat=forgery_py.internet.user_name(True), wechat=forgery_py.internet.user_name(True),
comment=forgery_py.lorem_ipsum.sentence(), comment=forgery_py.lorem_ipsum.sentence(),
created_by=choice(cls.objects.all()).username) created_by=choice(cls.objects.all()).username)
......
...@@ -19,15 +19,15 @@ urlpatterns = [ ...@@ -19,15 +19,15 @@ urlpatterns = [
url(r'^v1/token/$', api.UserToken.as_view(), name='user-token'), url(r'^v1/token/$', api.UserToken.as_view(), name='user-token'),
url(r'^v1/profile/$', api.UserProfile.as_view(), name='user-profile'), url(r'^v1/profile/$', api.UserProfile.as_view(), name='user-profile'),
url(r'^v1/auth/$', api.UserAuthApi.as_view(), name='user-auth'), url(r'^v1/auth/$', api.UserAuthApi.as_view(), name='user-auth'),
url(r'^v1/users/(?P<pk>\d+)/password/reset/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/password/reset/$',
api.UserResetPasswordApi.as_view(), name='user-reset-password'), api.UserResetPasswordApi.as_view(), name='user-reset-password'),
url(r'^v1/users/(?P<pk>\d+)/pubkey/reset/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/pubkey/reset/$',
api.UserResetPKApi.as_view(), name='user-public-key-reset'), api.UserResetPKApi.as_view(), name='user-public-key-reset'),
url(r'^v1/users/(?P<pk>\d+)/pubkey/update/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/pubkey/update/$',
api.UserUpdatePKApi.as_view(), name='user-public-key-update'), api.UserUpdatePKApi.as_view(), name='user-public-key-update'),
url(r'^v1/users/(?P<pk>\d+)/groups/$', url(r'^v1/users/(?P<pk>[0-9a-zA-Z\-]+)/groups/$',
api.UserUpdateGroupApi.as_view(), name='user-update-group'), api.UserUpdateGroupApi.as_view(), name='user-update-group'),
url(r'^v1/groups/(?P<pk>\d+)/users/$', url(r'^v1/groups/(?P<pk>[0-9a-zA-Z\-]+)/users/$',
api.UserGroupUpdateUserApi.as_view(), name='user-group-update-user'), api.UserGroupUpdateUserApi.as_view(), name='user-group-update-user'),
] ]
......
...@@ -34,18 +34,18 @@ urlpatterns = [ ...@@ -34,18 +34,18 @@ urlpatterns = [
# User view # User view
url(r'^user$', views.UserListView.as_view(), name='user-list'), url(r'^user$', views.UserListView.as_view(), name='user-list'),
url(r'^user/(?P<pk>[0-9]+)$', views.UserDetailView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)$', views.UserDetailView.as_view(),
name='user-detail'), name='user-detail'),
url(r'^user/(?P<pk>[0-9]+)/asset-permission$', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission$',
views.UserAssetPermissionView.as_view(), views.UserAssetPermissionView.as_view(),
name='user-asset-permission'), name='user-asset-permission'),
url(r'^user/(?P<pk>[0-9]+)/asset-permission/create$', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission/create$',
views.UserAssetPermissionCreateView.as_view(), views.UserAssetPermissionCreateView.as_view(),
name='user-asset-permission-create'), name='user-asset-permission-create'),
url(r'^user/(?P<pk>[0-9]+)/assets', url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/assets',
views.UserGrantedAssetView.as_view(), views.UserGrantedAssetView.as_view(),
name='user-granted-asset'), name='user-granted-asset'),
url(r'^user/(?P<pk>[0-9]+)/login-history', views.UserDetailView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/login-history', views.UserDetailView.as_view(),
name='user-login-history'), name='user-login-history'),
url(r'^user/export/', views.UserExportView.as_view(), url(r'^user/export/', views.UserExportView.as_view(),
name='user-export'), name='user-export'),
...@@ -55,7 +55,7 @@ urlpatterns = [ ...@@ -55,7 +55,7 @@ urlpatterns = [
name='user-import'), name='user-import'),
url(r'^user/create$', views.UserCreateView.as_view(), url(r'^user/create$', views.UserCreateView.as_view(),
name='user-create'), name='user-create'),
url(r'^user/(?P<pk>[0-9]+)/update$', views.UserUpdateView.as_view(), url(r'^user/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.UserUpdateView.as_view(),
name='user-update'), name='user-update'),
url(r'^user/update$', views.UserBulkUpdateView.as_view(), url(r'^user/update$', views.UserBulkUpdateView.as_view(),
name='user-bulk-update'), name='user-bulk-update'),
...@@ -63,19 +63,19 @@ urlpatterns = [ ...@@ -63,19 +63,19 @@ urlpatterns = [
# User group view # User group view
url(r'^user-group$', views.UserGroupListView.as_view(), url(r'^user-group$', views.UserGroupListView.as_view(),
name='user-group-list'), name='user-group-list'),
url(r'^user-group/(?P<pk>[0-9]+)$', views.UserGroupDetailView.as_view(), url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)$', views.UserGroupDetailView.as_view(),
name='user-group-detail'), name='user-group-detail'),
url(r'^user-group/create$', views.UserGroupCreateView.as_view(), url(r'^user-group/create$', views.UserGroupCreateView.as_view(),
name='user-group-create'), name='user-group-create'),
url(r'^user-group/(?P<pk>[0-9]+)/update$', views.UserGroupUpdateView.as_view(), url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/update$', views.UserGroupUpdateView.as_view(),
name='user-group-update'), name='user-group-update'),
url(r'^user-group/(?P<pk>[0-9]+)/asset-permission$', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission$',
views.UserGroupAssetPermissionView.as_view(), views.UserGroupAssetPermissionView.as_view(),
name='user-group-asset-permission'), name='user-group-asset-permission'),
url(r'^user-group/(?P<pk>[0-9]+)/asset-permission/create$', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/asset-permission/create$',
views.UserGroupAssetPermissionCreateView.as_view(), views.UserGroupAssetPermissionCreateView.as_view(),
name='user-group-asset-permission-create'), name='user-group-asset-permission-create'),
url(r'^user-group/(?P<pk>[0-9]+)/assets', url(r'^user-group/(?P<pk>[0-9a-zA-Z\-]+)/assets',
views.UserGroupGrantedAssetView.as_view(), views.UserGroupGrantedAssetView.as_view(),
name='user-group-granted-asset'), name='user-group-granted-asset'),
] ]
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册