diff --git a/.gitignore b/.gitignore index 658ea27ac..959682445 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store *.pyc *.pyo +*.swp env env* dist diff --git a/apps/assets/api.py b/apps/assets/api.py index 27539eb09..bfd4d7200 100644 --- a/apps/assets/api.py +++ b/apps/assets/api.py @@ -1,32 +1,37 @@ # ~*~ coding: utf-8 ~*~ + from rest_framework import serializers -from .models import ( - AssetGroup,Asset,IDC,AssetExtend -) -from rest_framework import viewsets,serializers +from rest_framework import viewsets, serializers + +from .models import AssetGroup, Asset, IDC, AssetExtend + class AssetGroupSerializer(serializers.ModelSerializer): class Meta: model = AssetGroup - #exclude = [ - #'password', 'first_name', 'last_name', 'secret_key_otp', - #'private_key', 'public_key', 'avatar', - #] + # exclude = [ + # 'password', 'first_name', 'last_name', 'secret_key_otp', + # 'private_key', 'public_key', 'avatar', + # ] + class AssetSerializer(serializers.ModelSerializer): class Meta: model = Asset - #fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + # fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + class IDCSerializer(serializers.ModelSerializer): class Meta: model = IDC - #fields = ('id', 'title', 'code', 'linenos', 'language', 'style') + # fields = ('id', 'title', 'code', 'linenos', 'language', 'style') class AssetGroupViewSet(viewsets.ModelViewSet): - """ - API endpoint that allows AssetGroup to be viewed or edited. + """ API endpoint that allows AssetGroup to be viewed or edited. + + some other comment + """ queryset = AssetGroup.objects.all() serializer_class = AssetGroupSerializer diff --git a/apps/assets/forms.py b/apps/assets/forms.py index 1338a7449..101ad854b 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -1,7 +1,7 @@ # coding:utf-8 from django import forms -from .models import IDC, Asset, AssetGroup +from .models import IDC, Asset, AssetGroup, AdminUser, SystemUser from django.utils.translation import gettext_lazy as _ @@ -11,16 +11,17 @@ class AssetForm(forms.ModelForm): fields = [ "ip", "other_ip", "remote_card_ip", "hostname", "port", "groups", "username", "password", - "idc", "mac_addr", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos", + "idc", "mac_address", "brand", "cpu", "memory", "disk", "os", "cabinet_no", "cabinet_pos", "number", "status", "type", "env", "sn", "is_active", "comment" ] widgets = { - 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join assetgroups')}), + 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}), } class AssetGroupForm(forms.ModelForm): + # See AdminUserForm comment same it assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(), label=_('Asset'), required=False, @@ -45,14 +46,169 @@ class AssetGroupForm(forms.ModelForm): fields = [ "name", "comment" ] + help_texts = { + 'name': '* required', + } -class IdcForm(forms.ModelForm): +class IDCForm(forms.ModelForm): + # See AdminUserForm comment same it + assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(), + label=_('Asset'), + required=False, + widget=forms.SelectMultiple( + attrs={'class': 'select2', 'data-placeholder': _('Select assets')}) + ) + + def __init__(self, *args, **kwargs): + if kwargs.get('instance'): + initial = kwargs.get('initial', {}) + initial['assets'] = kwargs['instance'].assets.all() + super(IDCForm, self).__init__(*args, **kwargs) + + def _save_m2m(self): + super(IDCForm, self)._save_m2m() + assets = self.cleaned_data['assets'] + self.instance.assets.clear() + self.instance.assets.add(*tuple(assets)) + class Meta: model = IDC fields = ['name', "bandwidth", "operator", 'contact', 'phone', 'address', 'network', 'comment'] widgets = { - 'name': forms.TextInput(attrs={'placeholder': 'Name'}), + 'name': forms.TextInput(attrs={'placeholder': _('Name')}), 'network': forms.Textarea( attrs={'placeholder': '192.168.1.0/24\n192.168.2.0/24'}) } + + +class AdminUserForm(forms.ModelForm): + # Admin user assets define, let user select, save it in form not in view + assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(), + label=_('Asset'), + required=False, + widget=forms.SelectMultiple( + attrs={'class': 'select2', 'data-placeholder': _('Select assets')}) + ) + auto_generate_key = forms.BooleanField(required=True, initial=True) + # Form field name can not start with `_`, so redefine it, + password = forms.CharField(widget=forms.PasswordInput, max_length=100, min_length=8, strip=True, + help_text=_('If also set private key, use that first'), required=False) + # Need use upload private key file except paste private key content + private_key_file = forms.FileField(required=False) + + def __init__(self, *args, **kwargs): + # When update a admin user instance, initial it + if kwargs.get('instance'): + initial = kwargs.get('initial', {}) + initial['assets'] = kwargs['instance'].assets.all() + super(AdminUserForm, self).__init__(*args, **kwargs) + + def _save_m2m(self): + # Save assets relation with admin user + super(AdminUserForm, self)._save_m2m() + assets = self.cleaned_data['assets'] + self.instance.assets.clear() + self.instance.assets.add(*tuple(assets)) + + def save(self, commit=True): + # Because we define custom field, so we need rewrite :method: `save` + admin_user = super(AdminUserForm, self).save(commit=commit) + password = self.cleaned_data['password'] + private_key_file = self.cleaned_data['private_key_file'] + + if password: + admin_user.password = password + print(password) + # Todo: Validate private key file, and generate public key + # Todo: Auto generate private key and public key + if private_key_file: + admin_user.private_key = private_key_file.read() + admin_user.save() + return self.instance + + class Meta: + model = AdminUser + fields = ['name', 'username', 'auto_generate_key', 'password', 'private_key_file', 'as_default', 'comment'] + widgets = { + 'name': forms.TextInput(attrs={'placeholder': _('Name')}), + 'username': forms.TextInput(attrs={'placeholder': _('Username')}), + } + help_texts = { + 'name': '* required', + 'username': '* required', + } + + +class SystemUserForm(forms.ModelForm): + # Admin user assets define, let user select, save it in form not in view + assets = forms.ModelMultipleChoiceField(queryset=Asset.objects.all(), + label=_('Asset'), + required=False, + widget=forms.SelectMultiple( + attrs={'class': 'select2', 'data-placeholder': _('Select assets')}) + ) + asset_groups = forms.ModelMultipleChoiceField(queryset=AssetGroup.objects.all(), + label=_('Asset group'), + required=False, + widget=forms.SelectMultiple( + attrs={'class': 'select2', + 'data-placeholder': _('Select asset groups')}) + ) + auto_generate_key = forms.BooleanField(initial=True) + # Form field name can not start with `_`, so redefine it, + password = forms.CharField(widget=forms.PasswordInput, max_length=100, min_length=8, strip=True, + help_text=_('If also set private key, use that first'), required=False) + # Need use upload private key file except paste private key content + private_key_file = forms.FileField(required=False) + + def __init__(self, *args, **kwargs): + # When update a admin user instance, initial it + if kwargs.get('instance'): + initial = kwargs.get('initial', {}) + initial['assets'] = kwargs['instance'].assets.all() + initial['asset_groups'] = kwargs['instance'].asset_groups.all() + super(SystemUserForm, self).__init__(*args, **kwargs) + + def _save_m2m(self): + # Save assets relation with admin user + super(SystemUserForm, self)._save_m2m() + assets = self.cleaned_data['assets'] + asset_groups = self.cleaned_data['asset_groups'] + self.instance.assets.clear() + self.instance.assets.add(*tuple(assets)) + self.instance.asset_groups.clear() + self.instance.asset_groups.add(*tuple(asset_groups)) + + def save(self, commit=True): + # Because we define custom field, so we need rewrite :method: `save` + system_user = super(SystemUserForm, self).save(commit=commit) + password = self.cleaned_data['password'] + private_key_file = self.cleaned_data['private_key_file'] + + if password: + system_user.password = password + print(password) + # Todo: Validate private key file, and generate public key + # Todo: Auto generate private key and public key + if private_key_file: + system_user.private_key = private_key_file.read() + system_user.save() + return self.instance + + class Meta: + model = SystemUser + fields = [ + 'name', 'username', 'protocol', 'auto_generate_key', 'password', 'private_key_file', 'as_default', + 'auto_push', 'auto_update', 'sudo', 'comment', 'shell', 'home', 'uid', + ] + widgets = { + 'name': forms.TextInput(attrs={'placeholder': _('Name')}), + 'username': forms.TextInput(attrs={'placeholder': _('Username')}), + } + help_texts = { + 'name': '* required', + 'username': '* required', + 'auth_push': 'Auto push system user to asset', + 'auth_update': 'Auto update system user ssh key', + } \ No newline at end of file diff --git a/apps/assets/hands.py b/apps/assets/hands.py new file mode 100644 index 000000000..70dedfeb4 --- /dev/null +++ b/apps/assets/hands.py @@ -0,0 +1,15 @@ +""" + jumpserver.__app__.hands.py + ~~~~~~~~~~~~~~~~~ + + This app depends other apps api, function .. should be import or write mack here. + + Other module of this app shouldn't connect with other app. + + :copyright: (c) 2014-2016 by Jumpserver Team. + :license: GPL v2, see LICENSE for more details. +""" + + +from users.utils import AdminUserRequiredMixin +from users.models import User, UserGroup diff --git a/apps/assets/migrations/0001_initial.py b/apps/assets/migrations/0001_initial.py deleted file mode 100644 index 37308e5b0..000000000 --- a/apps/assets/migrations/0001_initial.py +++ /dev/null @@ -1,181 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-09-04 11:52 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='AdminUser', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), - ('username', models.CharField(max_length=16, verbose_name='Username')), - ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')), - ('private_key', models.CharField(blank=True, max_length=4096, null=True, verbose_name='SSH private key')), - ('is_default', models.BooleanField(default=False, verbose_name='As default')), - ('auto_update', models.BooleanField(default=True, verbose_name='Auto update pass/key')), - ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), - ('create_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), - ('comment', models.TextField(blank=True, verbose_name='Comment')), - ], - options={ - 'db_table': 'adminuser', - }, - ), - migrations.CreateModel( - name='Asset', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('ip', models.CharField(max_length=32, verbose_name='IP')), - ('other_ip', models.CharField(blank=True, max_length=255, verbose_name='Other IP')), - ('remote_card_ip', models.CharField(blank=True, max_length=16, verbose_name='Remote card IP')), - ('hostname', models.CharField(blank=True, max_length=128, unique=True, verbose_name='Hostname')), - ('port', models.IntegerField(default=22, verbose_name='Port')), - ('username', models.CharField(blank=True, max_length=16, verbose_name='Admin user')), - ('password', models.CharField(blank=True, max_length=256, verbose_name='Admin password')), - ('mac_addr', models.CharField(blank=True, max_length=20, verbose_name='Mac address')), - ('brand', models.CharField(blank=True, max_length=64, verbose_name='Brand')), - ('cpu', models.CharField(blank=True, max_length=64, verbose_name='CPU')), - ('memory', models.CharField(blank=True, max_length=128, verbose_name='Memory')), - ('disk', models.CharField(blank=True, max_length=1024, verbose_name='Disk')), - ('os', models.CharField(blank=True, max_length=128, verbose_name='OS')), - ('cabinet_no', models.CharField(blank=True, max_length=32, verbose_name='Cabinet number')), - ('cabinet_pos', models.IntegerField(blank=True, verbose_name='Cabinet position')), - ('number', models.CharField(blank=True, max_length=32, unique=True, verbose_name='Asset number')), - ('sn', models.CharField(blank=True, max_length=128, unique=True, verbose_name='Serial number')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('is_active', models.BooleanField(default=True, verbose_name='Is active')), - ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), - ('admin_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.AdminUser', verbose_name='Admin User')), - ], - options={ - 'db_table': 'asset', - }, - ), - migrations.CreateModel( - name='AssetExtend', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(max_length=64, verbose_name='KEY')), - ('value', models.CharField(max_length=64, verbose_name='VALUE')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), - ('comment', models.TextField(blank=True, verbose_name='Comment')), - ], - options={ - 'db_table': 'assetextend', - }, - ), - migrations.CreateModel( - name='AssetGroup', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), - ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), - ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), - ], - options={ - 'db_table': 'assetgroup', - }, - ), - migrations.CreateModel( - name='IDC', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=32, verbose_name='Name')), - ('bandwidth', models.CharField(blank=True, max_length=32, verbose_name='Bandwidth')), - ('contact', models.CharField(blank=True, max_length=16, verbose_name='Contact')), - ('phone', models.CharField(blank=True, max_length=32, verbose_name='Phone')), - ('address', models.CharField(blank=True, max_length=128, verbose_name='Address')), - ('network', models.TextField(blank=True, verbose_name='Network')), - ('date_added', models.DateField(auto_now=True, null=True, verbose_name='Date added')), - ('operator', models.CharField(blank=True, max_length=32, verbose_name='Operator')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('comment', models.TextField(blank=True, verbose_name='Comment')), - ], - options={ - 'db_table': 'idc', - }, - ), - migrations.CreateModel( - name='Label', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('key', models.CharField(max_length=64, verbose_name='KEY')), - ('value', models.CharField(max_length=64, verbose_name='VALUE')), - ('created_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), - ('asset', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.Asset', verbose_name='Asset')), - ], - options={ - 'db_table': 'label', - }, - ), - migrations.CreateModel( - name='SysUser', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=128, verbose_name='Name')), - ('username', models.CharField(max_length=16, verbose_name='Username')), - ('password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')), - ('protocol', models.CharField(default='ssh', max_length=16, verbose_name='Protocol')), - ('private_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH private key')), - ('public_key', models.CharField(blank=True, max_length=4096, verbose_name='SSH public key')), - ('is_default', models.BooleanField(default=False, verbose_name='As default')), - ('auto_push', models.BooleanField(default=True, verbose_name='Auto push')), - ('auto_update', models.BooleanField(default=True, verbose_name='Auto update pass/key')), - ('sudo', models.TextField(blank=True, max_length=4096, verbose_name='Sudo')), - ('shell', models.CharField(blank=True, max_length=64, verbose_name='Shell')), - ('home', models.CharField(blank=True, max_length=64, verbose_name='Home')), - ('uid', models.IntegerField(blank=True, verbose_name='Uid')), - ('date_added', models.DateTimeField(auto_now=True, null=True, verbose_name='Date added')), - ('create_by', models.CharField(blank=True, max_length=32, verbose_name='Created by')), - ('comment', models.CharField(blank=True, max_length=128, verbose_name='Comment')), - ], - options={ - 'db_table': 'sysuser', - }, - ), - migrations.AddField( - model_name='asset', - name='env', - field=models.ManyToManyField(related_name='asset_env_extend', to='assets.AssetExtend', verbose_name='Asset environment'), - ), - migrations.AddField( - model_name='asset', - name='groups', - field=models.ManyToManyField(to='assets.AssetGroup', verbose_name='Asset groups'), - ), - migrations.AddField( - model_name='asset', - name='idc', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='assets.IDC', verbose_name='IDC'), - ), - migrations.AddField( - model_name='asset', - name='status', - field=models.ManyToManyField(related_name='asset_status_extend', to='assets.AssetExtend', verbose_name='Asset status'), - ), - migrations.AddField( - model_name='asset', - name='sys_user', - field=models.ManyToManyField(to='assets.SysUser', verbose_name='Sys User'), - ), - migrations.AddField( - model_name='asset', - name='type', - field=models.ManyToManyField(related_name='asset_type_extend', to='assets.AssetExtend', verbose_name='Asset type'), - ), - ] diff --git a/apps/assets/models.py b/apps/assets/models.py index 8ff80d824..010b8b20e 100644 --- a/apps/assets/models.py +++ b/apps/assets/models.py @@ -2,8 +2,11 @@ from __future__ import unicode_literals, absolute_import from django.db import models +import logging from django.utils.translation import ugettext_lazy as _ +from common.utils import encrypt, decrypt + class AssetGroup(models.Model): name = models.CharField(max_length=64, unique=True, verbose_name=_('Name')) @@ -16,6 +19,8 @@ class AssetGroup(models.Model): class Meta: db_table = 'asset_group' +logger = logging.getLogger(__name__) + class IDC(models.Model): name = models.CharField(max_length=32, verbose_name=_('Name')) @@ -24,7 +29,7 @@ class IDC(models.Model): phone = models.CharField(max_length=32, blank=True, verbose_name=_('Phone')) address = models.CharField(max_length=128, blank=True, verbose_name=_("Address")) network = models.TextField(blank=True, verbose_name=_('Network')) - date_added = models.DateField(auto_now=True, null=True, verbose_name=_('Date added')) + date_created = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) operator = models.CharField(max_length=32, blank=True, verbose_name=_('Operator')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) comment = models.TextField(blank=True, verbose_name=_('Comment')) @@ -35,87 +40,253 @@ class IDC(models.Model): class Meta: db_table = 'idc' + @classmethod + def generate_fake(cls, count=100): + from random import seed, choice + import forgery_py + from django.db import IntegrityError + + seed() + for i in range(count): + idc = cls(name=forgery_py.name.full_name(), + bandwidth='200M', + contact=forgery_py.name.full_name(), + phone=forgery_py.address.phone(), + address=forgery_py.address.city() + forgery_py.address.street_address(), + network="192.168.1.10/24\n192.168.1.20", + operator=choice(['北京联通', '北京电信', 'BGP全网通']), + comment=forgery_py.lorem_ipsum.sentence(), + created_by='Fake') + try: + idc.save() + logger.debug('Generate fake asset group: %s' % idc.name) + except IntegrityError: + print('Error continue') + continue + class AssetExtend(models.Model): key = models.CharField(max_length=64, verbose_name=_('KEY')) value = models.CharField(max_length=64, verbose_name=_('VALUE')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by")) - date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) + date_created = models.DateTimeField(auto_now=True, null=True, blank=True) comment = models.TextField(blank=True, verbose_name=_('Comment')) def __unicode__(self): - return self.name + return '%(key)s: %(value)s' % {'key': self.key, 'value': self.value} + + @classmethod + def initial(cls): + for k, v in ( + (_('status'), _('In use')), + (_('status'), _('Out of use')), + (_('type'), _('Server')), + (_('type'), _('VM')), + (_('type'), _('Switch')), + (_('type'), _('Router')), + (_('type'), _('Firewall')), + (_('type'), _('Storage')), + (_('env'), _('Production')), + (_('env'), _('Development')), + (_('env'), _('Testing')), + ): + cls.objects.create(key=k, value=v, created_by='System') class Meta: - db_table = 'assetextend' + db_table = 'asset_extend' class AdminUser(models.Model): name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) username = models.CharField(max_length=16, verbose_name=_('Username')) - password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_('Password')) - private_key = models.CharField(max_length=4096, null=True, blank=True, verbose_name=_('SSH private key')) - is_default = models.BooleanField(default=False, verbose_name=_('As default')) + _password = models.CharField(max_length=256, blank=True, verbose_name=_('Password')) + _private_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH private key')) + _public_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH public key')) + as_default = models.BooleanField(default=False, verbose_name=_('As default')) + comment = models.TextField(blank=True, verbose_name=_('Comment')) + date_created = models.DateTimeField(auto_now=True, null=True) + created_by = models.CharField(max_length=32, null=True, verbose_name=_('Created by')) + + def __unicode__(self): + return self.name + + @property + def password(self): + return decrypt(self._password) + + @password.setter + def password(self, password_raw): + self._password = encrypt(password_raw) + + @property + def private_key(self): + return decrypt(self._private_key) + + @private_key.setter + def private_key(self, private_key_raw): + self._private_key = encrypt(private_key_raw) + + @property + def public_key(self): + return decrypt(self._public_key) + + @public_key.setter + def public_key(self, public_key_raw): + self._public_key = encrypt(public_key_raw) + + class Meta: + db_table = 'admin_user' + + @classmethod + def generate_fake(cls, count=100): + from random import seed + import forgery_py + from django.db import IntegrityError + + seed() + for i in range(count): + obj = cls(name=forgery_py.name.full_name(), + username=forgery_py.internet.user_name(), + password=forgery_py.lorem_ipsum.word(), + comment=forgery_py.lorem_ipsum.sentence(), + created_by='Fake') + try: + obj.save() + logger.debug('Generate fake asset group: %s' % obj.name) + except IntegrityError: + print('Error continue') + continue + + +class SystemUser(models.Model): + PROTOCOL_CHOICES = ( + ('ssh', 'ssh'), + ) + name = models.CharField(max_length=128, unique=True, verbose_name=_('Name')) + username = models.CharField(max_length=16, verbose_name=_('Username')) + _password = models.CharField(max_length=256, blank=True, verbose_name=_('Password')) + protocol = models.CharField(max_length=16, choices=PROTOCOL_CHOICES, default='ssh', verbose_name=_('Protocol')) + _private_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH private key')) + _public_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH public key')) + as_default = models.BooleanField(default=False, verbose_name=_('As default')) + auto_push = models.BooleanField(default=True, verbose_name=_('Auto push')) auto_update = models.BooleanField(default=True, verbose_name=_('Auto update pass/key')) - date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) - create_by = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Created by')) + sudo = models.TextField(max_length=4096, default='/user/bin/whoami', verbose_name=_('Sudo')) + shell = models.CharField(max_length=64, default='/bin/bash', verbose_name=_('Shell')) + home = models.CharField(max_length=64, blank=True, verbose_name=_('Home')) + uid = models.IntegerField(null=True, blank=True, verbose_name=_('Uid')) + date_created = models.DateTimeField(auto_now=True) + created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) + comment = models.TextField(max_length=128, blank=True, verbose_name=_('Comment')) + + def __unicode__(self): + return self.name + + @property + def password(self): + return decrypt(self._password) + + @password.setter + def password(self, password_raw): + self._password = encrypt(password_raw) + + @property + def private_key(self): + return decrypt(self._private_key) + + @private_key.setter + def private_key(self, private_key_raw): + self._private_key = encrypt(private_key_raw) + + @property + def public_key(self): + return decrypt(self._public_key) + + @public_key.setter + def public_key(self, public_key_raw): + self._public_key = encrypt(public_key_raw) + + class Meta: + db_table = 'system_user' + + @classmethod + def generate_fake(cls, count=100): + from random import seed + import forgery_py + from django.db import IntegrityError + + seed() + for i in range(count): + obj = cls(name=forgery_py.name.full_name(), + username=forgery_py.internet.user_name(), + password=forgery_py.lorem_ipsum.word(), + comment=forgery_py.lorem_ipsum.sentence(), + created_by='Fake') + try: + obj.save() + logger.debug('Generate fake asset group: %s' % obj.name) + except IntegrityError: + print('Error continue') + continue + + +class AssetGroup(models.Model): + name = models.CharField(max_length=64, unique=True, verbose_name=_('Name')) + system_users = models.ManyToManyField(SystemUser, related_name='asset_groups', blank=True) + created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) + date_created = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) comment = models.TextField(blank=True, verbose_name=_('Comment')) def __unicode__(self): return self.name class Meta: - db_table = 'adminuser' + db_table = 'asset_group' + @classmethod + def initial(cls): + asset_group = cls(name=_('Default'), commont=_('Default asset group')) + asset_group.save() -class SysUser(models.Model): - PROTOCOL_CHOICES = ( - ('ssh', 'ssh'), - ('telnet', 'telnet'), - ) - name = models.CharField(max_length=128, verbose_name=_('Name')) - username = models.CharField(max_length=16, verbose_name=_('Username')) - password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_('Password')) - protocol = models.CharField(max_length=16, default='ssh', verbose_name=_('Protocol')) - private_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH private key')) - public_key = models.CharField(max_length=4096, blank=True, verbose_name=_('SSH public key')) - is_default = models.BooleanField(default=False, verbose_name=_('As default')) - auto_push = models.BooleanField(default=True, verbose_name=_('Auto push')) - auto_update = models.BooleanField(default=True, verbose_name=_('Auto update pass/key')) - sudo = models.TextField(max_length=4096, blank=True, verbose_name=_('Sudo')) - shell = models.CharField(max_length=64, blank=True, verbose_name=_('Shell')) - home = models.CharField(max_length=64, blank=True, verbose_name=_('Home')) - uid = models.IntegerField(blank=True, verbose_name=_('Uid')) - date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) - create_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) - comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) + @classmethod + def generate_fake(cls, count=100): + from random import seed + import forgery_py + from django.db import IntegrityError - def __unicode__(self): - return self.name - - class Meta: - db_table = 'sysuser' + seed() + for i in range(count): + group = cls(name=forgery_py.name.full_name(), + comment=forgery_py.lorem_ipsum.sentence(), + created_by='Fake') + try: + group.save() + logger.debug('Generate fake asset group: %s' % group.name) + except IntegrityError: + print('Error continue') + continue class Asset(models.Model): - ip = models.CharField(max_length=32, verbose_name=_('IP')) - other_ip = models.CharField(max_length=255, blank=True, verbose_name=_('Other IP')) - remote_card_ip = models.CharField(max_length=16, blank=True, verbose_name=_('Remote card IP')) - hostname = models.CharField(max_length=128, unique=True, blank=True, verbose_name=_('Hostname')) - port = models.IntegerField(default=22, verbose_name=_('Port')) - groups = models.ManyToManyField(AssetGroup, blank=True, verbose_name=_('Asset groups')) - username = models.CharField(max_length=16, blank=True, verbose_name=_('Admin user')) - password = models.CharField(max_length=256, blank=True, verbose_name=_("Admin password")) - admin_user = models.ForeignKey(AdminUser, null=True, on_delete=models.SET_NULL, verbose_name=_("Admin User")) - sys_user = models.ManyToManyField(SysUser, verbose_name=_("Sys User")) - idc = models.ForeignKey(IDC, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('IDC')) - mac_addr = models.CharField(max_length=20, blank=True, verbose_name=_("Mac address")) - brand = models.CharField(max_length=64, blank=True, verbose_name=_('Brand')) - cpu = models.CharField(max_length=64, blank=True, verbose_name=_('CPU')) - memory = models.CharField(max_length=128, blank=True, verbose_name=_('Memory')) - disk = models.CharField(max_length=1024, blank=True, verbose_name=_('Disk')) - os = models.CharField(max_length=128, blank=True, verbose_name=_('OS')) - cabinet_no = models.CharField(max_length=32, blank=True, verbose_name=_('Cabinet number')) + ip = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('IP')) + other_ip = models.CharField(max_length=255, null=True, blank=True, verbose_name=_('Other IP')) + remote_card_ip = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Remote card IP')) + hostname = models.CharField(max_length=128, unique=True, null=True, blank=True, verbose_name=_('Hostname')) + port = models.IntegerField(null=True, blank=True, verbose_name=_('Port')) + groups = models.ManyToManyField(AssetGroup, related_name='assets', verbose_name=_('Asset groups')) + username = models.CharField(max_length=16, null=True, blank=True, verbose_name=_('Admin user')) + password = models.CharField(max_length=256, null=True, blank=True, verbose_name=_("Admin password")) + admin_user = models.ForeignKey(AdminUser, null=True, related_name='assets', + on_delete=models.SET_NULL, verbose_name=_("Admin user")) + system_user = models.ManyToManyField(SystemUser, blank=True, related_name='assets', verbose_name=_("System User")) + idc = models.ForeignKey(IDC, null=True, related_name='assets', on_delete=models.SET_NULL, verbose_name=_('IDC')) + mac_address = models.CharField(max_length=20, null=True, blank=True, verbose_name=_("Mac address")) + brand = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('Brand')) + cpu = models.CharField(max_length=64, null=True, blank=True, verbose_name=_('CPU')) + memory = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Memory')) + disk = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('Disk')) + os = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('OS')) + cabinet_no = models.CharField(max_length=32, null=True, blank=True, verbose_name=_('Cabinet number')) cabinet_pos = models.IntegerField(null=True, blank=True, verbose_name=_('Cabinet position')) number = models.CharField(max_length=32, blank=True, verbose_name=_('Asset number')) status = models.ForeignKey(AssetExtend, null=True, blank=True, @@ -127,11 +298,11 @@ class Asset(models.Model): sn = models.CharField(max_length=128, blank=True, verbose_name=_('Serial number')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_('Created by')) is_active = models.BooleanField(default=True, verbose_name=_('Is active')) - date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) - comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) + date_created = models.DateTimeField(auto_now=True, null=True, blank=True, verbose_name=_('Date added')) + comment = models.CharField(max_length=128, null=True, blank=True, verbose_name=_('Comment')) def __unicode__(self): - return '%(ip)s:%(port)d' % {'ip': self.ip, 'port': self.port} + return '%(ip)s:%(port)s' % {'ip': self.ip, 'port': self.port} def initial(self): pass @@ -140,13 +311,32 @@ class Asset(models.Model): db_table = 'asset' index_together = ('ip', 'port') + @classmethod + def generate_fake(cls, count=100): + from random import seed + import forgery_py + from django.db import IntegrityError + + seed() + for i in range(count): + asset = cls(ip='%s.%s.%s.%s' % tuple([forgery_py.forgery.basic.text(length=3, digits=True) + for i in range(0, 4)]), + port=22, + created_by='Fake') + try: + asset.save() + logger.debug('Generate fake asset : %s' % asset.ip) + except IntegrityError: + print('Error continue') + continue + class Label(models.Model): key = models.CharField(max_length=64, verbose_name=_('KEY')) value = models.CharField(max_length=64, verbose_name=_('VALUE')) asset = models.ForeignKey(Asset, null=True, blank=True, on_delete=models.SET_NULL, verbose_name=_('Asset')) created_by = models.CharField(max_length=32, blank=True, verbose_name=_("Created by")) - date_added = models.DateTimeField(auto_now=True, null=True, verbose_name=_('Date added')) + date_created = models.DateTimeField(auto_now=True, null=True) comment = models.CharField(max_length=128, blank=True, verbose_name=_('Comment')) def __unicode__(self): @@ -155,3 +345,7 @@ class Label(models.Model): class Meta: db_table = 'label' + +def generate_fake(): + for cls in (Asset, AssetGroup, IDC): + cls.generate_fake() diff --git a/apps/assets/static/assets/example.png b/apps/assets/static/assets/example.png deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/assets/templates/assets/admin_user_create_update.html b/apps/assets/templates/assets/admin_user_create_update.html new file mode 100644 index 000000000..7738adec0 --- /dev/null +++ b/apps/assets/templates/assets/admin_user_create_update.html @@ -0,0 +1,70 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{% trans 'Create admin user' %}
+ +
+
+
+ {% csrf_token %} + {{ form.name|bootstrap_horizontal }} + {{ form.username|bootstrap_horizontal }} +
+ +
+ {{ form.auto_generate_key}} +
+
+ {{ form.password|bootstrap_horizontal }} + {{ form.private_key_file|bootstrap_horizontal }} +
+ +
+ {{ form.as_default}} +
+
+ {{ form.assets|bootstrap_horizontal }} + {{ form.comment|bootstrap_horizontal }} + +
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/admin_user_detail.html b/apps/assets/templates/assets/admin_user_detail.html new file mode 100644 index 000000000..12a108f6c --- /dev/null +++ b/apps/assets/templates/assets/admin_user_detail.html @@ -0,0 +1,220 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {{ admin_user.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
{% trans 'Name' %}:{{ admin_user.name }}
{% trans 'Username' %}:{{ admin_user.username }}
{% trans 'Date created' %}:{{ admin_user.date_created }}
{% trans 'Created by' %}:{{ asset_group.created_by }}
{% trans 'Comment' %}:{{ admin_user.comment }}
+
+
+ +
+
+ {% trans 'Asset list of ' %} {{ admin_user.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + {% for asset in page_obj %} + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Alive' %}
{{ asset.hostname }}{{ asset.ip }}{{ asset.port }}Alive
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Quick update' %} +
+
+ + + + + + + + + + + + + + + + + +
{% trans 'Get install script' %}: + + + +
{% trans 'Retest asset connectivity' %}: + + + +
{% trans 'Reset private key' %}: + + + +
+
+
+ +
+
+ {% trans 'Replace asset admin user with this' %} +
+
+ + + + + + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+ + +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/admin_user_list.html b/apps/assets/templates/assets/admin_user_list.html new file mode 100644 index 000000000..2031dfa49 --- /dev/null +++ b/apps/assets/templates/assets/admin_user_list.html @@ -0,0 +1,41 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create admin user" %} +{% endblock %} + +{% block table_head %} + {% trans 'ID' %} + {% trans 'Name' %} + {% trans 'Username' %} + {% trans 'Asset num' %} + {% trans 'Lost connection' %} + {% trans 'Comment' %} + +{% endblock %} + +{% block table_body %} + {% for admin_user in admin_user_list %} + + {{ admin_user.id }} + + + {{ admin_user.name }} + + + {{ admin_user.username }} + {{ admin_user.assets.count }} + {{ admin_user.assets.count }} + {{ admin_user.comment|truncatewords:8 }} + + + {% trans 'Script' %} + + {% trans 'Refresh' %} + {% trans 'Update' %} + {% trans 'Delete' %} + + + {% endfor %} +{% endblock %} diff --git a/apps/assets/templates/assets/asset_detail.html b/apps/assets/templates/assets/asset_detail.html index 5d8a48db9..51be7b1db 100644 --- a/apps/assets/templates/assets/asset_detail.html +++ b/apps/assets/templates/assets/asset_detail.html @@ -151,7 +151,7 @@ 添加日期 - {{ asset.date_added|date:"Y-m-d H:i:s" }} + {{ asset.date_created|date:"Y-m-d H:i:s" }} 备注 diff --git a/apps/assets/templates/assets/asset_group_create.html b/apps/assets/templates/assets/asset_group_create.html index fe2238429..55b3d98e4 100644 --- a/apps/assets/templates/assets/asset_group_create.html +++ b/apps/assets/templates/assets/asset_group_create.html @@ -27,22 +27,10 @@
-
+ {% csrf_token %} {{ form.name|bootstrap_horizontal }} {{ form.assets|bootstrap_horizontal }} - -{#
#} -{# #} -{#
#} -{# #} -{#
#} -{#
#} - {{ form.comment|bootstrap_horizontal }}
diff --git a/apps/assets/templates/assets/asset_group_detail.html b/apps/assets/templates/assets/asset_group_detail.html new file mode 100644 index 000000000..1b266de44 --- /dev/null +++ b/apps/assets/templates/assets/asset_group_detail.html @@ -0,0 +1,223 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {{ asset_group.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + +
{% trans 'Name' %}:{{ asset_group.name }}
{% trans 'Date created' %}:{{ asset_group.date_created }}
{% trans 'Created by' %}:{{ asset_group.created_by }}
{% trans 'Comment' %}:{{ asset_group.comment }}
+
+
+ +
+
+ {% trans 'Asset list of ' %} {{ asset_group.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + {% for asset in page_obj %} + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Alive' %}
{{ asset.hostname }}{{ asset.ip }}{{ asset.port }}Alive
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Associate system user' %} +
+
+ + + + + + + + + + + + + + + {% for group in user.groups.all %} + + + + + {% endfor %} + +
{% trans 'repush system user' %}: + + + +
+ +
+ +
{{ group.name }} + +
+
+
+ +
+
+ {% trans 'Add asset to this group' %} +
+
+ + + + + + + + + + + {% for group in user.groups.all %} + + + + + {% endfor %} + +
+ +
+ +
{{ group.name }} + +
+
+
+ +
+
+
+
+
+
+
+ +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/asset_group_list.html b/apps/assets/templates/assets/asset_group_list.html index 484c131f4..c945127cd 100644 --- a/apps/assets/templates/assets/asset_group_list.html +++ b/apps/assets/templates/assets/asset_group_list.html @@ -27,10 +27,10 @@ {{ asset_group.assets.count }} - {{ asset_group.comment }} + {{ asset_group.comment|truncatewords:8 }} - {% trans 'Edit' %} - {% trans 'Delete' %} + {% trans 'Update' %} + {% trans 'Delete' %} {% endfor %} diff --git a/apps/assets/templates/assets/delete_confirm.html b/apps/assets/templates/assets/delete_confirm.html new file mode 100644 index 000000000..777d1dbf9 --- /dev/null +++ b/apps/assets/templates/assets/delete_confirm.html @@ -0,0 +1,15 @@ +{% load i18n %} + + + + + {% trans 'Confirm delete' %} + + +
+ {% csrf_token %} +

Are you sure you want to delete "{{ object.name }}"?

+ +
+ + \ No newline at end of file diff --git a/apps/assets/templates/assets/idc_create_update.html b/apps/assets/templates/assets/idc_create_update.html new file mode 100644 index 000000000..b09375bdc --- /dev/null +++ b/apps/assets/templates/assets/idc_create_update.html @@ -0,0 +1,61 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{% trans 'Create idc' %}
+ +
+
+
+ {% csrf_token %} + {{ form.name|bootstrap_horizontal }} + {{ form.assets|bootstrap_horizontal }} + {{ form.bandwidth|bootstrap_horizontal }} + {{ form.operator|bootstrap_horizontal }} + {{ form.contact|bootstrap_horizontal }} + {{ form.phone|bootstrap_horizontal }} + {{ form.address|bootstrap_horizontal }} + {{ form.network|bootstrap_horizontal }} + {{ form.comment|bootstrap_horizontal }} + +
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/idc_list.html b/apps/assets/templates/assets/idc_list.html new file mode 100644 index 000000000..3ce6f601b --- /dev/null +++ b/apps/assets/templates/assets/idc_list.html @@ -0,0 +1,70 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create IDC" %} +{% endblock %} + +{% block table_head %} + {% trans 'ID' %} + {% trans 'Name' %} + {% trans 'Asset num' %} + {% trans 'Bandwidth' %} + {% trans 'Contact' %} + {% trans 'Phone' %} + {% trans 'Address' %} + +{% endblock %} + +{% block table_body %} + {% for idc in idc_list %} + + {{ idc.id }} + {{ idc.name }} + {{ idc.assets.count }} + {{ idc.bandwidth }} + {{ idc.contact }} + {{ idc.phone }} + {{ idc.address }} + + {% trans 'Update' %} + {% trans 'Delete' %} + + + {% endfor %} +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} diff --git a/apps/assets/templates/assets/system_user_asset.html b/apps/assets/templates/assets/system_user_asset.html new file mode 100644 index 000000000..9f30c724e --- /dev/null +++ b/apps/assets/templates/assets/system_user_asset.html @@ -0,0 +1,135 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {% trans 'Asset list of ' %} {{ admin_user.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + {% for asset in page_obj %} + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Alive' %}
{{ asset.hostname }}{{ asset.ip }}{{ asset.port }}Alive
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Add asset to this system user' %} +
+
+ + + + + + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+
+ +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/system_user_asset_group.html b/apps/assets/templates/assets/system_user_asset_group.html new file mode 100644 index 000000000..52e48815c --- /dev/null +++ b/apps/assets/templates/assets/system_user_asset_group.html @@ -0,0 +1,136 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {% trans 'Asset list of ' %} {{ admin_user.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + {% for asset_group in page_obj %} + + + + + + + {% endfor %} + +
{% trans 'Name' %}{% trans 'Asset num' %}{% trans 'Unavailable num' %}{% trans 'Comment' %}
{{ asset_group.name }}{{ asset_group_group.assets.count }}{{ asset_group_group.assets.count }}{{ asset_group.comment|truncatewords:4 }}
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Add asset group to this system user' %} +
+
+ + + + + + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+ + +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/system_user_create_update.html b/apps/assets/templates/assets/system_user_create_update.html new file mode 100644 index 000000000..ea8d466d9 --- /dev/null +++ b/apps/assets/templates/assets/system_user_create_update.html @@ -0,0 +1,95 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{% trans 'Create system user' %}
+ +
+
+
+ {% csrf_token %} + {{ form.name|bootstrap_horizontal }} + {{ form.username|bootstrap_horizontal }} + {{ form.protocol|bootstrap_horizontal }} +
+ +
+ {{ form.auto_generate_key}} +
+
+ {{ form.password|bootstrap_horizontal }} + {{ form.private_key_file|bootstrap_horizontal }} +
+ +
+ {{ form.as_default}} +
+
+
+ +
+ {{ form.auto_push}} +
+
+
+ +
+ {{ form.auto_update}} +
+
+ {{ form.assets|bootstrap_horizontal }} + {{ form.asset_groups|bootstrap_horizontal }} + {{ form.sudo|bootstrap_horizontal }} + {{ form.comment|bootstrap_horizontal }} + {{ form.home|bootstrap_horizontal }} + {{ form.shell|bootstrap_horizontal }} + {{ form.uid|bootstrap_horizontal }} + +
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/system_user_detail.html b/apps/assets/templates/assets/system_user_detail.html new file mode 100644 index 000000000..7ca599d8f --- /dev/null +++ b/apps/assets/templates/assets/system_user_detail.html @@ -0,0 +1,188 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {{ system_user.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% if system_user.shell %} + + + + + {% endif %} + {% if system_user.home %} + + + + + {% endif %} + {% if system_user.uid %} + + + + + {% endif %} + + + + + + + + + + + + + +
{% trans 'Name' %}:{{ system_user.name }}
{% trans 'Username' %}:{{ system_user.username }}
{% trans 'Protocol' %}:{{ system_user.protocol }}
{% trans 'Auto push' %}:{{ system_user.protocol }}
{% trans 'Auto update' %}:{{ system_user.auto_update }}
{% trans 'As default' %}:{{ system_user.protocol }}
{% trans 'Sudo' %}:{{ system_user.sudo }}
{% trans 'Shell' %}:{{ system_user.shell }}
{% trans 'Home' %}:{{ system_user.home }}
{% trans 'Uid' %}:{{ system_user.uid }}
{% trans 'Date created' %}:{{ system_user.date_created }}
{% trans 'Created by' %}:{{ asset_group.created_by }}
{% trans 'Comment' %}:{{ system_user.comment }}
+
+
+
+ +
+
+
+ {% trans 'Quick update' %} +
+
+ + + + + + + + + + + + + + + + + +
{% trans 'Get mannual install script' %}: + + + +
{% trans 'Retest asset connectivity' %}: + + + +
{% trans 'Reset private key' %}: + + + +
+
+
+
+
+
+
+
+
+ + +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/assets/templates/assets/system_user_list.html b/apps/assets/templates/assets/system_user_list.html new file mode 100644 index 000000000..ac8672347 --- /dev/null +++ b/apps/assets/templates/assets/system_user_list.html @@ -0,0 +1,43 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create system user" %} +{% endblock %} + +{% block table_head %} + {% trans 'ID' %} + {% trans 'Name' %} + {% trans 'Username' %} + {% trans 'Asset num' %} + {% trans 'Asset group num' %} + {% trans 'Unavailable' %} + {% trans 'Comment' %} + +{% endblock %} + +{% block table_body %} + {% for system_user in system_user_list %} + + {{ system_user.id }} + + + {{ system_user.name }} + + + {{ system_user.username }} + {{ system_user.assets.count }} + {{ system_user.asset_groups.count }} + {{ system_user.assets.count }} + {{ system_user.comment|truncatewords:4 }} + + + {% trans 'Script' %} + + {% trans 'Refresh' %} + {% trans 'Update' %} + {% trans 'Delete' %} + + + {% endfor %} +{% endblock %} diff --git a/apps/assets/urls.py b/apps/assets/urls.py index 68279389a..175c01afc 100644 --- a/apps/assets/urls.py +++ b/apps/assets/urls.py @@ -12,16 +12,43 @@ import views app_name = 'assets' urlpatterns = [ + # Resource asset url url(r'^$', views.AssetListView.as_view(), name='asset-index'), url(r'^asset$', views.AssetListView.as_view(), name='asset-list'), url(r'^asset/create$', views.AssetCreateView.as_view(), name='asset-create'), url(r'^asset/(?P[0-9]+)$', views.AssetDetailView.as_view(), name='asset-detail'), - url(r'^asset/(?P[0-9]+)$/update', views.AssetUpdateView.as_view(), name='asset-update'), + url(r'^asset/(?P[0-9]+)/update', views.AssetUpdateView.as_view(), name='asset-update'), url(r'^asset/(?P[0-9]+)/delete$', views.AssetDeleteView.as_view(), name='asset-delete'), + + # Resource asset group url 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/(?P[0-9]+)$', views.AssetGroupDetailView.as_view(), name='asset-group-detail'), url(r'^asset-group/(?P[0-9]+)/update$', views.AssetGroupUpdateView.as_view(), name='asset-group-update'), url(r'^asset-group/(?P[0-9]+)/delete$', views.AssetGroupDeleteView.as_view(), name='asset-group-delete'), + + # Resource idc url + url(r'^idc$', views.IDCListView.as_view(), name='idc-list'), + url(r'^idc/create$', views.IDCCreateView.as_view(), name='idc-create'), + url(r'^idc/(?P[0-9]+)$', views.IDCDetailView.as_view(), name='idc-detail'), + url(r'^idc/(?P[0-9]+)/update', views.IDCUpdateView.as_view(), name='idc-update'), + url(r'^idc/(?P[0-9]+)/delete$', views.IDCDeleteView.as_view(), name='idc-delete'), + + # Resource admin user url + 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/(?P[0-9]+)$', views.AdminUserDetailView.as_view(), name='admin-user-detail'), + url(r'^admin-user/(?P[0-9]+)/update', views.AdminUserUpdateView.as_view(), name='admin-user-update'), + url(r'^admin-user/(?P[0-9]+)/delete$', views.AdminUserDeleteView.as_view(), name='admin-user-delete'), + + # Resource system user url + 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/(?P[0-9]+)$', views.SystemUserDetailView.as_view(), name='system-user-detail'), + url(r'^system-user/(?P[0-9]+)/update', views.SystemUserUpdateView.as_view(), name='system-user-update'), + url(r'^system-user/(?P[0-9]+)/delete$', views.SystemUserDeleteView.as_view(), name='system-user-delete'), + url(r'^system-user/(?P[0-9]+)/asset$', views.SystemUserAssetView.as_view(), name='system-user-asset'), + url(r'^system-user/(?P[0-9]+)/asset-group$', views.SystemUserAssetGroupView.as_view(), + name='system-user-asset-group'), # url(r'^api/v1.0/', include(router.urls)), ] diff --git a/apps/assets/utils.py b/apps/assets/utils.py index 2fb5bfe7f..9a42d3031 100644 --- a/apps/assets/utils.py +++ b/apps/assets/utils.py @@ -1,23 +1,4 @@ # ~*~ coding: utf-8 ~*~ # -from django.contrib.auth.mixins import UserPassesTestMixin -from django.urls import reverse_lazy - -from common.tasks import send_mail_async -from common.utils import reverse -from users.models import User - - -try: - import cStringIO as StringIO -except ImportError: - import StringIO - - -class AdminUserRequiredMixin(UserPassesTestMixin): - login_url = reverse_lazy('users:login') - - def test_func(self): - return self.request.user.is_staff diff --git a/apps/assets/views.py b/apps/assets/views.py index 23abf1867..797366408 100644 --- a/apps/assets/views.py +++ b/apps/assets/views.py @@ -2,18 +2,17 @@ from __future__ import absolute_import, unicode_literals from django.utils.translation import ugettext as _ -from django.shortcuts import get_object_or_404 -from django.views.generic import TemplateView, ListView -from django.urls import reverse_lazy -from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView +from django.conf import settings +from django.db.models import Q from django.views.generic import TemplateView, ListView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.urls import reverse_lazy -from django.views.generic.detail import DetailView +from django.contrib.messages.views import SuccessMessageMixin +from django.views.generic.detail import DetailView, SingleObjectMixin -from .models import Asset, AssetGroup, IDC, AssetExtend -from .forms import AssetForm, AssetGroupForm -from .utils import AdminUserRequiredMixin +from .models import Asset, AssetGroup, IDC, AssetExtend, AdminUser, SystemUser +from .forms import AssetForm, AssetGroupForm, IDCForm, AdminUserForm, SystemUserForm +from .hands import AdminUserRequiredMixin class AssetCreateView(CreateView): @@ -50,12 +49,14 @@ class AssetDetailView(DetailView): template_name = 'assets/asset_detail.html' -class AssetGroupCreateView(CreateView): +class AssetGroupCreateView(AdminUserRequiredMixin, CreateView): model = AssetGroup form_class = AssetGroupForm template_name = 'assets/asset_group_create.html' success_url = reverse_lazy('assets:asset-group-list') + # Todo: Asset group create template select assets so hard, need be resolve next + def get_context_data(self, **kwargs): context = { 'app': _('Assets'), @@ -70,25 +71,57 @@ class AssetGroupCreateView(CreateView): return super(AssetGroupCreateView, self).form_valid(form) -class AssetGroupListView(ListView): +class AssetGroupListView(AdminUserRequiredMixin, ListView): model = AssetGroup + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'asset_group_list' template_name = 'assets/asset_group_list.html' def get_context_data(self, **kwargs): context = { 'app': _('Assets'), - 'action': _('Asset group list') + 'action': _('Asset group list'), + 'keyword': self.request.GET.get('keyword', '') } kwargs.update(context) return super(AssetGroupListView, self).get_context_data(**kwargs) + def get_queryset(self): + self.queryset = super(AssetGroupListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.sort = sort = self.request.GET.get('sort', '-date_created') -class AssetGroupDetailView(DetailView): - pass + if keyword: + self.queryset = self.queryset.filter(Q(name__icontains=keyword) | + Q(comment__icontains=keyword)) + + if sort: + self.queryset = self.queryset.order_by(sort) + return self.queryset -class AssetGroupUpdateView(UpdateView): +class AssetGroupDetailView(SingleObjectMixin, AdminUserRequiredMixin, ListView): + template_name = 'assets/asset_group_detail.html' + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=AssetGroup.objects.all()) + return super(AssetGroupDetailView, self).get(request, *args, **kwargs) + + def get_queryset(self): + return self.object.assets.all() + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('Asset group detail'), + 'asset_group': self.object, + } + kwargs.update(context) + return super(AssetGroupDetailView, self).get_context_data(**kwargs) + + +class AssetGroupUpdateView(AdminUserRequiredMixin, UpdateView): model = AssetGroup form_class = AssetGroupForm template_name = 'assets/asset_group_create.html' @@ -104,5 +137,313 @@ class AssetGroupUpdateView(UpdateView): return super(AssetGroupUpdateView, self).get_context_data(**kwargs) -class AssetGroupDeleteView(DeleteView): +class AssetGroupDeleteView(AdminUserRequiredMixin, DeleteView): + template_name = 'assets/delete_confirm.html' + model = AssetGroup + success_url = reverse_lazy('assets:asset-group-list') + + +class IDCListView(AdminUserRequiredMixin, ListView): + model = IDC + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + context_object_name = 'idc_list' + template_name = 'assets/idc_list.html' + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('IDC list'), + 'keyword': self.request.GET.get('keyword', '') + } + kwargs.update(context) + return super(IDCListView, self).get_context_data(**kwargs) + + def get_queryset(self): + self.queryset = super(IDCListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.sort = sort = self.request.GET.get('sort', '-date_created') + + if keyword: + self.queryset = self.queryset.filter(Q(name__icontains=keyword) | + Q(comment__icontains=keyword)) + + if sort: + self.queryset = self.queryset.order_by(sort) + return self.queryset + + +class IDCCreateView(AdminUserRequiredMixin, CreateView): + model = IDC + form_class = IDCForm + template_name = 'assets/idc_create_update.html' + success_url = reverse_lazy('assets:idc-list') + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'Create IDC' + } + kwargs.update(context) + return super(IDCCreateView, self).get_context_data(**kwargs) + + +class IDCUpdateView(AdminUserRequiredMixin, UpdateView): + model = IDC + form_class = IDCForm + template_name = 'assets/idc_create_update.html' + context_object_name = 'idc' + success_url = reverse_lazy('assets:idc-list') + + def form_valid(self, form): + idc = form.save(commit=False) + idc.save() + return super(IDCUpdateView, self).form_valid(form) + + +class IDCDetailView(AdminUserRequiredMixin, DetailView): pass + + +class IDCDeleteView(AdminUserRequiredMixin, DeleteView): + model = IDC + template_name = 'assets/delete_confirm.html' + success_url = reverse_lazy('assets:idc-list') + + +class AdminUserListView(AdminUserRequiredMixin, ListView): + model = AdminUser + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + context_object_name = 'admin_user_list' + template_name = 'assets/admin_user_list.html' + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('Admin user list'), + 'keyword': self.request.GET.get('keyword', '') + } + kwargs.update(context) + return super(AdminUserListView, self).get_context_data(**kwargs) + + def get_queryset(self): + # Todo: Default order by lose asset connection num + self.queryset = super(AdminUserListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.sort = sort = self.request.GET.get('sort', '-date_created') + + if keyword: + self.queryset = self.queryset.filter(Q(name__icontains=keyword) | + Q(comment__icontains=keyword)) + + if sort: + self.queryset = self.queryset.order_by(sort) + return self.queryset + + +class AdminUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): + model = AdminUser + form_class = AdminUserForm + template_name = 'assets/admin_user_create_update.html' + success_url = reverse_lazy('assets:admin-user-list') + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'Create admin user' + } + kwargs.update(context) + return super(AdminUserCreateView, self).get_context_data(**kwargs) + + def get_success_message(self, cleaned_data): + success_message = _('Create admin user %s successfully.' % + ( + reverse_lazy('assets:admin-user-detail', kwargs={'pk': self.object.pk}), + self.object.name, + )) + return success_message + + +class AdminUserUpdateView(AdminUserRequiredMixin, UpdateView): + model = AdminUser + form_class = AdminUserForm + template_name = 'assets/admin_user_create_update.html' + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'Update admin user' + } + kwargs.update(context) + return super(AdminUserUpdateView, self).get_context_data(**kwargs) + + def get_success_url(self): + success_url = reverse_lazy('assets:admin-user-detail', pk=self.object.pk) + return success_url + + +class AdminUserDetailView(AdminUserRequiredMixin, SingleObjectMixin, ListView): + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + template_name = 'assets/admin_user_detail.html' + context_object_name = 'admin_user' + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=AdminUser.objects.all()) + return super(AdminUserDetailView, self).get(request, *args, **kwargs) + + # Todo: queryset default order by connectivity, need ops support + def get_queryset(self): + return self.object.assets.all() + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'Admin user detail' + } + kwargs.update(context) + return super(AdminUserDetailView, self).get_context_data(**kwargs) + + +class AdminUserDeleteView(AdminUserRequiredMixin, DeleteView): + model = AdminUser + template_name = 'assets/delete_confirm.html' + success_url = reverse_lazy('assets:admin-user-list') + + +class SystemUserListView(AdminUserRequiredMixin, ListView): + model = SystemUser + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + context_object_name = 'system_user_list' + template_name = 'assets/system_user_list.html' + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('System user list'), + 'keyword': self.request.GET.get('keyword', '') + } + kwargs.update(context) + return super(SystemUserListView, self).get_context_data(**kwargs) + + def get_queryset(self): + # Todo: Default order by lose asset connection num + self.queryset = super(SystemUserListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.sort = sort = self.request.GET.get('sort', '-date_created') + + if keyword: + self.queryset = self.queryset.filter(Q(name__icontains=keyword) | + Q(comment__icontains=keyword)) + + if sort: + self.queryset = self.queryset.order_by(sort) + return self.queryset + + +class SystemUserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): + model = SystemUser + form_class = SystemUserForm + template_name = 'assets/system_user_create_update.html' + success_url = reverse_lazy('assets:system-user-list') + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('Create system user'), + } + kwargs.update(context) + return super(SystemUserCreateView, self).get_context_data(**kwargs) + + def get_success_message(self, cleaned_data): + success_message = _('Create system user %s successfully.' % + ( + reverse_lazy('assets:system-user-detail', kwargs={'pk': self.object.pk}), + self.object.name, + )) + + return self.success_message + + +class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView): + model = SystemUser + form_class = SystemUserForm + template_name = 'assets/system_user_create_update.html' + success_message = _('Update system user %s successfully.') + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('Update system user') + } + kwargs.update(context) + return super(SystemUserUpdateView, self).get_context_data(**kwargs) + + def get_success_url(self): + success_url = reverse_lazy('assets:system-user-detail', pk=self.object.pk) + return success_url + + +class SystemUserDetailView(AdminUserRequiredMixin, DetailView): + template_name = 'assets/system_user_detail.html' + context_object_name = 'system_user' + model = SystemUser + + def get_context_data(self, **kwargs): + context = { + 'app': _('Assets'), + 'action': _('System user detail') + } + kwargs.update(context) + return super(SystemUserDetailView, self).get_context_data(**kwargs) + + +class SystemUserDeleteView(AdminUserRequiredMixin, DeleteView): + model = SystemUser + template_name = 'assets/delete_confirm.html' + success_url = reverse_lazy('assets:system-user-list') + + +class SystemUserAssetView(AdminUserRequiredMixin, SingleObjectMixin, ListView): + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + template_name = 'assets/system_user_asset.html' + context_object_name = 'system_user' + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=SystemUser.objects.all()) + return super(SystemUserAssetView, self).get(request, *args, **kwargs) + + # Todo: queryset default order by connectivity, need ops support + def get_queryset(self): + return self.object.assets.all() + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'System user asset', + 'assets': self.get_queryset(), + } + kwargs.update(context) + return super(SystemUserAssetView, self).get_context_data(**kwargs) + + +class SystemUserAssetGroupView(AdminUserRequiredMixin, SingleObjectMixin, ListView): + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + template_name = 'assets/system_user_asset_group.html' + context_object_name = 'system_user' + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=SystemUser.objects.all()) + return super(SystemUserAssetGroupView, self).get(request, *args, **kwargs) + + # Todo: queryset default order by connectivity, need ops support + def get_queryset(self): + return self.object.asset_groups.all() + + def get_context_data(self, **kwargs): + context = { + 'app': 'assets', + 'action': 'System user asset group', + 'asset_groups': self.get_queryset(), + } + kwargs.update(context) + return super(SystemUserAssetGroupView, self).get_context_data(**kwargs) + diff --git a/apps/common/README.md b/apps/common/README.md index 6aac06589..400f19fc8 100644 --- a/apps/common/README.md +++ b/apps/common/README.md @@ -1,3 +1,18 @@ +# Common app + +Common app provide common view, function or others. + +Common app shouldn't rely on other apps, because It may lead to cycle +import. + +If your want to implement some function or class, you should think +whether other app use or not. If yes, You should make in common. + +If the ability more relate to your app tightness, It's mean your app +provide this ability, not common, You should write it on your app utils. + + + ## Celery usage diff --git a/apps/common/utils.py b/apps/common/utils.py index 7c3df178a..d44167ce3 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -2,9 +2,15 @@ # from __future__ import unicode_literals +from six import string_types +from itertools import chain +import string +import logging from django.shortcuts import reverse as dj_reverse from django.conf import settings +from django.core import signing +from django.utils import timezone def reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None, external=False): @@ -21,3 +27,76 @@ def get_object_or_none(model, **kwargs): except model.DoesNotExist: obj = None return obj + + +def encrypt(*args, **kwargs): + return signing.dumps(*args, **kwargs) + + +def decrypt(*args, **kwargs): + return signing.loads(*args, **kwargs) + + +def date_expired_default(): + try: + years = int(settings.CONFIG.DEFAULT_EXPIRED_YEARS) + except TypeError: + years = 70 + + return timezone.now() + timezone.timedelta(days=365 * years) + + +def combine_seq(s1, s2, callback=None): + for s in (s1, s2): + if not hasattr(s, '__iter__'): + return [] + + seq = chain(s1, s2) + if callback: + seq = map(callback, seq) + return seq + + +def search_object_attr(obj, value='', attr_list=None, ignore_case=False): + """It's provide a method to search a object attribute equal some value + + If object some attribute equal :param: value, return True else return False + + class A(): + name = 'admin' + age = 7 + + :param obj: A object + :param value: A string match object attribute + :param attr_list: Only match attribute in attr_list + :param ignore_case: Ignore case + :return: Boolean + """ + if value == '': + return True + + try: + object_attr = obj.__dict__ + except AttributeError: + return False + + if attr_list is not None: + new_object_attr = {} + for attr in attr_list: + new_object_attr[attr] = object_attr.pop(attr) + object_attr = new_object_attr + + if ignore_case: + if not isinstance(value, string_types): + return False + + if value.lower() in map(string.lower, map(str, object_attr.values())): + return True + else: + if value in object_attr.values(): + return True + return False + + +def get_logger(name=None): + return logging.getLogger('jumpserver.%s' % name) diff --git a/apps/fixtures/fake.json b/apps/fixtures/fake.json index c01b15e99..0ad65be15 100644 --- a/apps/fixtures/fake.json +++ b/apps/fixtures/fake.json @@ -1 +1 @@ -[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_added": "2016-09-05T11:39:25.770Z", "created_by": "System"}}, {"model": "users.usergroup", "pk": 2, "fields": {"name": "Scott Brooks", "comment": "Suspendisse ornare consequat lectus.", "date_added": "2016-09-05T11:40:28.122Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 3, "fields": {"name": "Rebecca Jones", "comment": "In eleifend quam a odio.", "date_added": "2016-09-05T11:40:28.125Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 4, "fields": {"name": "Wayne Simpson", "comment": "Nulla nisl.", "date_added": "2016-09-05T11:40:28.129Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 5, "fields": {"name": "Scott Lee", "comment": "Mauris sit amet eros.", "date_added": "2016-09-05T11:40:28.133Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 6, "fields": {"name": "Stephen Franklin", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis faucibus accumsan odio.", "date_added": "2016-09-05T11:40:28.135Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 7, "fields": {"name": "Patricia Hamilton", "comment": "Ut at dolor quis odio consequat varius.", "date_added": "2016-09-05T11:40:28.137Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 8, "fields": {"name": "Tina Armstrong", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.", "date_added": "2016-09-05T11:40:28.139Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 9, "fields": {"name": "Sandra Walker", "comment": "Nulla ac enim.", "date_added": "2016-09-05T11:40:28.141Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 10, "fields": {"name": "Ann Washington", "comment": "Vestibulum quam sapien, varius ut, blandit non, interdum in, ante.", "date_added": "2016-09-05T11:40:28.143Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 11, "fields": {"name": "Theresa Lynch", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_added": "2016-09-05T11:40:28.146Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 12, "fields": {"name": "Larry Martinez", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "date_added": "2016-09-05T11:40:28.148Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 13, "fields": {"name": "Emily Nelson", "comment": "Praesent blandit lacinia erat.", "date_added": "2016-09-05T11:40:28.150Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 14, "fields": {"name": "Cheryl Wright", "comment": "Duis ac nibh.", "date_added": "2016-09-05T11:40:28.152Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 15, "fields": {"name": "Rachel Sims", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "date_added": "2016-09-05T11:40:28.154Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 16, "fields": {"name": "Emily Frazier", "comment": "Nullam molestie nibh in lectus.", "date_added": "2016-09-05T11:40:28.156Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 17, "fields": {"name": "Joyce Davis", "comment": "Nunc rhoncus dui vel sem.", "date_added": "2016-09-05T11:40:28.158Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 18, "fields": {"name": "Anna Rose", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.", "date_added": "2016-09-05T11:40:28.160Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 19, "fields": {"name": "Diana Ellis", "comment": "Cras in purus eu magna vulputate luctus.", "date_added": "2016-09-05T11:40:28.162Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 20, "fields": {"name": "Paula Collins", "comment": "Nulla tellus.", "date_added": "2016-09-05T11:40:28.164Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 21, "fields": {"name": "Judith Simmons", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.", "date_added": "2016-09-05T11:40:28.166Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 22, "fields": {"name": "Rebecca Patterson", "comment": "Fusce posuere felis sed lacus.", "date_added": "2016-09-05T11:40:28.168Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 23, "fields": {"name": "Kathleen Chavez", "comment": "Nunc rhoncus dui vel sem.", "date_added": "2016-09-05T11:40:28.170Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 24, "fields": {"name": "Sharon Johnston", "comment": "Suspendisse potenti.", "date_added": "2016-09-05T11:40:28.173Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 25, "fields": {"name": "Kathryn Cunningham", "comment": "Pellentesque ultrices mattis odio.", "date_added": "2016-09-05T11:40:28.175Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 26, "fields": {"name": "Julie Nguyen", "comment": "Donec ut mauris eget massa tempor convallis.", "date_added": "2016-09-05T11:40:28.177Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 27, "fields": {"name": "Nicole Lynch", "comment": "Proin interdum mauris non ligula pellentesque ultrices.", "date_added": "2016-09-05T11:40:28.179Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 28, "fields": {"name": "Diana Williamson", "comment": "Proin risus.", "date_added": "2016-09-05T11:40:28.181Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 29, "fields": {"name": "Lori Ellis", "comment": "Integer non velit.", "date_added": "2016-09-05T11:40:28.183Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 30, "fields": {"name": "Heather Ruiz", "comment": "Donec dapibus.", "date_added": "2016-09-05T11:40:28.185Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 31, "fields": {"name": "Norma Stevens", "comment": "Curabitur convallis.", "date_added": "2016-09-05T11:40:28.188Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 32, "fields": {"name": "Ann Murphy", "comment": "In eleifend quam a odio.", "date_added": "2016-09-05T11:40:28.190Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 33, "fields": {"name": "Stephanie Ellis", "comment": "Donec ut mauris eget massa tempor convallis.", "date_added": "2016-09-05T11:40:28.192Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 34, "fields": {"name": "Katherine Davis", "comment": "Nulla ac enim.", "date_added": "2016-09-05T11:40:28.194Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 35, "fields": {"name": "Judy Clark", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "date_added": "2016-09-05T11:40:28.196Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 36, "fields": {"name": "Shirley Warren", "comment": "Integer ac neque.", "date_added": "2016-09-05T11:40:28.198Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 37, "fields": {"name": "Beverly Hanson", "comment": "In est risus, auctor sed, tristique in, tempus sit amet, sem.", "date_added": "2016-09-05T11:40:28.199Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 38, "fields": {"name": "Dorothy Olson", "comment": "Nulla suscipit ligula in lacus.", "date_added": "2016-09-05T11:40:28.202Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 39, "fields": {"name": "Amanda Hudson", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.", "date_added": "2016-09-05T11:40:28.204Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 40, "fields": {"name": "Cheryl Stanley", "comment": "Curabitur gravida nisi at nibh.", "date_added": "2016-09-05T11:40:28.206Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 41, "fields": {"name": "Anne Simpson", "comment": "Sed ante.", "date_added": "2016-09-05T11:40:28.208Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 42, "fields": {"name": "Linda Fernandez", "comment": "Ut tellus.", "date_added": "2016-09-05T11:40:28.210Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 43, "fields": {"name": "Nicole Cruz", "comment": "Nulla facilisi.", "date_added": "2016-09-05T11:40:28.212Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 44, "fields": {"name": "Jane Castillo", "comment": "Nunc nisl.", "date_added": "2016-09-05T11:40:28.214Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 45, "fields": {"name": "Marilyn Thompson", "comment": "Aenean auctor gravida sem.", "date_added": "2016-09-05T11:40:28.216Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 46, "fields": {"name": "Jessica Riley", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla.", "date_added": "2016-09-05T11:40:28.218Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 47, "fields": {"name": "Maria Wood", "comment": "Donec semper sapien a libero.", "date_added": "2016-09-05T11:40:28.220Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 48, "fields": {"name": "Christine Phillips", "comment": "Ut tellus.", "date_added": "2016-09-05T11:40:28.222Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 49, "fields": {"name": "Ruby Riley", "comment": "Phasellus id sapien in sapien iaculis congue.", "date_added": "2016-09-05T11:40:28.224Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 50, "fields": {"name": "Judith Larson", "comment": "In hac habitasse platea dictumst.", "date_added": "2016-09-05T11:40:28.225Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 51, "fields": {"name": "Jessica Cook", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "date_added": "2016-09-05T11:40:28.227Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 52, "fields": {"name": "Stephanie Garrett", "comment": "Maecenas rhoncus aliquam lacus.", "date_added": "2016-09-05T11:40:28.230Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 53, "fields": {"name": "Nancy Alexander", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.", "date_added": "2016-09-05T11:40:28.232Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 54, "fields": {"name": "Gregory Wheeler", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "date_added": "2016-09-05T11:40:28.234Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 55, "fields": {"name": "Doris Boyd", "comment": "Suspendisse potenti.", "date_added": "2016-09-05T11:40:28.236Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 56, "fields": {"name": "Pamela Day", "comment": "In hac habitasse platea dictumst.", "date_added": "2016-09-05T11:40:28.238Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 57, "fields": {"name": "Nancy Price", "comment": "In blandit ultrices enim.", "date_added": "2016-09-05T11:40:28.240Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 58, "fields": {"name": "Rose Brooks", "comment": "Vivamus vel nulla eget eros elementum pellentesque.", "date_added": "2016-09-05T11:40:28.242Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 59, "fields": {"name": "Lori Palmer", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem.", "date_added": "2016-09-05T11:40:28.244Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 60, "fields": {"name": "Carol Myers", "comment": "Etiam vel augue.", "date_added": "2016-09-05T11:40:28.246Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 61, "fields": {"name": "Nancy Morrison", "comment": "Ut tellus.", "date_added": "2016-09-05T11:40:28.248Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 62, "fields": {"name": "Kelly Edwards", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros.", "date_added": "2016-09-05T11:40:28.251Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 63, "fields": {"name": "Nicole Montgomery", "comment": "Duis ac nibh.", "date_added": "2016-09-05T11:40:28.253Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 64, "fields": {"name": "Cynthia Stephens", "comment": "In quis justo.", "date_added": "2016-09-05T11:40:28.255Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 65, "fields": {"name": "Nicole Willis", "comment": "Etiam vel augue.", "date_added": "2016-09-05T11:40:28.257Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 66, "fields": {"name": "Sharon Mills", "comment": "Proin risus.", "date_added": "2016-09-05T11:40:28.259Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 67, "fields": {"name": "Phyllis Richards", "comment": "Nulla nisl.", "date_added": "2016-09-05T11:40:28.261Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 68, "fields": {"name": "Gloria Welch", "comment": "Etiam pretium iaculis justo.", "date_added": "2016-09-05T11:40:28.263Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 69, "fields": {"name": "Paula Taylor", "comment": "Cras pellentesque volutpat dui.", "date_added": "2016-09-05T11:40:28.265Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 70, "fields": {"name": "Rebecca Flores", "comment": "In blandit ultrices enim.", "date_added": "2016-09-05T11:40:28.267Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 71, "fields": {"name": "Joan Black", "comment": "In sagittis dui vel nisl.", "date_added": "2016-09-05T11:40:28.270Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 72, "fields": {"name": "Denise Watson", "comment": "In hac habitasse platea dictumst.", "date_added": "2016-09-05T11:40:28.272Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 73, "fields": {"name": "Judith Brooks", "comment": "Nam dui.", "date_added": "2016-09-05T11:40:28.274Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 74, "fields": {"name": "Nicole Miller", "comment": "Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.", "date_added": "2016-09-05T11:40:28.276Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 75, "fields": {"name": "Jessica Graham", "comment": "Nulla tempus.", "date_added": "2016-09-05T11:40:28.278Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 76, "fields": {"name": "Carol Edwards", "comment": "Nam tristique tortor eu pede.", "date_added": "2016-09-05T11:40:28.281Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 77, "fields": {"name": "Diane Jordan", "comment": "Nulla justo.", "date_added": "2016-09-05T11:40:28.283Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 78, "fields": {"name": "Kathleen Medina", "comment": "Pellentesque viverra pede ac diam.", "date_added": "2016-09-05T11:40:28.285Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 79, "fields": {"name": "Angela Thomas", "comment": "Integer ac leo.", "date_added": "2016-09-05T11:40:28.287Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 80, "fields": {"name": "Christina Knight", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla.", "date_added": "2016-09-05T11:40:28.290Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 81, "fields": {"name": "Heather Medina", "comment": "Integer ac leo.", "date_added": "2016-09-05T11:40:28.292Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 82, "fields": {"name": "Heather Campbell", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "date_added": "2016-09-05T11:40:28.294Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 83, "fields": {"name": "Linda Elliott", "comment": "Cras non velit nec nisi vulputate nonummy.", "date_added": "2016-09-05T11:40:28.297Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 84, "fields": {"name": "Sara Morgan", "comment": "Duis aliquam convallis nunc.", "date_added": "2016-09-05T11:40:28.299Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 85, "fields": {"name": "Laura Hudson", "comment": "Curabitur convallis.", "date_added": "2016-09-05T11:40:28.301Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 86, "fields": {"name": "Gloria Riley", "comment": "Vestibulum sed magna at nunc commodo placerat.", "date_added": "2016-09-05T11:40:28.304Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 87, "fields": {"name": "Mary Duncan", "comment": "Maecenas ut massa quis augue luctus tincidunt.", "date_added": "2016-09-05T11:40:28.306Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 88, "fields": {"name": "Doris Kelley", "comment": "Suspendisse ornare consequat lectus.", "date_added": "2016-09-05T11:40:28.308Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 89, "fields": {"name": "Dorothy Black", "comment": "Donec ut dolor.", "date_added": "2016-09-05T11:40:28.311Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 90, "fields": {"name": "Cynthia Elliott", "comment": "Donec ut dolor.", "date_added": "2016-09-05T11:40:28.313Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 91, "fields": {"name": "Anne Willis", "comment": "Mauris lacinia sapien quis libero.", "date_added": "2016-09-05T11:40:28.315Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 92, "fields": {"name": "Kimberly Lane", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", "date_added": "2016-09-05T11:40:28.318Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 93, "fields": {"name": "Doris Burns", "comment": "Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.", "date_added": "2016-09-05T11:40:28.320Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 94, "fields": {"name": "Janice White", "comment": "In hac habitasse platea dictumst.", "date_added": "2016-09-05T11:40:28.323Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 95, "fields": {"name": "Irene Mills", "comment": "Aenean auctor gravida sem.", "date_added": "2016-09-05T11:40:28.325Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 96, "fields": {"name": "Jesse Carter", "comment": "Aenean fermentum.", "date_added": "2016-09-05T11:40:28.328Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 97, "fields": {"name": "Karen Watson", "comment": "Suspendisse potenti.", "date_added": "2016-09-05T11:40:28.330Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 98, "fields": {"name": "Dorothy Wilson", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam.", "date_added": "2016-09-05T11:40:28.332Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 99, "fields": {"name": "Richard Andrews", "comment": "In quis justo.", "date_added": "2016-09-05T11:40:28.334Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 100, "fields": {"name": "Catherine Bowman", "comment": "Nulla tellus.", "date_added": "2016-09-05T11:40:28.336Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 101, "fields": {"name": "Tammy Washington", "comment": "Donec dapibus.", "date_added": "2016-09-05T11:40:28.338Z", "created_by": "admin"}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$5ReHkQOQA2Hk$DIW0b5U/uK+U0xqjA3QpYvBcODNhm2MPCm7YWbQys3I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:39:25.771Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2086-08-19T11:39:25.771Z", "created_by": "System", "user_permissions": [], "groups": [1]}}, {"model": "users.user", "pk": 2, "fields": {"password": "pbkdf2_sha256$30000$NwQ0QSmpoKgk$pnQcfgWSmAOKs9g+xeS+d5Pt2CK8NykUxhQc+507Few=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:28.488Z", "username": "debra78", "name": "Amanda Kim", "email": "pamela@lajo.name", "role": "User", "avatar": "", "wechat": "kelly64", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Donec ut dolor.", "is_first_login": false, "date_expired": "2086-08-19T11:40:28.488Z", "created_by": "admin", "user_permissions": [], "groups": [1]}}, {"model": "users.user", "pk": 3, "fields": {"password": "pbkdf2_sha256$30000$NpN3clf5YczT$sT3OTGL1x3sh+Vz5cYTV+nhOQI7A2WhEzf6whqVR2fg=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:28.659Z", "username": "marie78", "name": "Doris Clark", "email": "lillian@blogxs.mil", "role": "User", "avatar": "", "wechat": "phyllis91", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Fusce consequat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:28.659Z", "created_by": "admin", "user_permissions": [], "groups": [1, 64]}}, {"model": "users.user", "pk": 4, "fields": {"password": "pbkdf2_sha256$30000$Hnpln9zJFQuL$xkDIqpl+LNAtze2OPSfm4tMHivnChcK9BSQmTULr17U=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:28.820Z", "username": "joan82", "name": "Emily Dixon", "email": "rose@skimia.mil", "role": "Admin", "avatar": "", "wechat": "cynthia84", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:28.821Z", "created_by": "admin", "user_permissions": [], "groups": [1, 12]}}, {"model": "users.user", "pk": 5, "fields": {"password": "pbkdf2_sha256$30000$oAkPuzyhsQjH$IEBHKtJuSZVpWnC0n0vMd6NOv6GBlHwdiXkzoS4AcKA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:28.992Z", "username": "helen93", "name": "Phyllis Wells", "email": "susan@yakitri.info", "role": "User", "avatar": "", "wechat": "jessica85", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "is_first_login": false, "date_expired": "2086-08-19T11:40:28.992Z", "created_by": "admin", "user_permissions": [], "groups": [1, 49]}}, {"model": "users.user", "pk": 6, "fields": {"password": "pbkdf2_sha256$30000$LL5tIUJYalEm$+O1Xne9HwJRMawHoI+1hN08wCi7IVyWlfiptJPSZ868=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.153Z", "username": "jessica67", "name": "Jessica Gonzalez", "email": "anne@browsetype.mil", "role": "User", "avatar": "", "wechat": "dorothy70", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Duis bibendum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.153Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 37]}}, {"model": "users.user", "pk": 7, "fields": {"password": "pbkdf2_sha256$30000$kbxycqmL62b6$LrFh/b7tHXu/UYv9SIAyZodSajagoSvQHJmbNa4iZPY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.320Z", "username": "amanda83", "name": "Cynthia Simpson", "email": "barbara@photobug.com", "role": "User", "avatar": "", "wechat": "gloria85", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer ac neque.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.320Z", "created_by": "jessica67", "user_permissions": [], "groups": [1, 55]}}, {"model": "users.user", "pk": 8, "fields": {"password": "pbkdf2_sha256$30000$lvVKIRcbiVH5$Z/tS8vMWxyoTPR3fiDSsADYx30MrDmZsJXCtLM+Uk8c=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.486Z", "username": "gloria89", "name": "Lisa Stone", "email": "jennifer@trilia.info", "role": "Admin", "avatar": "", "wechat": "ruby66", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Duis mattis egestas metus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.486Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 8]}}, {"model": "users.user", "pk": 9, "fields": {"password": "pbkdf2_sha256$30000$lobNy7Fdr3S4$HZXc3BUntiiSExn3zeof+GhdBU/ufOm/pJUriD8hHpg=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.658Z", "username": "virginia82", "name": "Jacqueline Lawrence", "email": "frances@roombo.gov", "role": "User", "avatar": "", "wechat": "irene77", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.658Z", "created_by": "admin", "user_permissions": [], "groups": [1, 38]}}, {"model": "users.user", "pk": 10, "fields": {"password": "pbkdf2_sha256$30000$LfEpQOng9Oey$xId/M7mkTyrKy1sU2cCIYDt8vDvO8OKMS4Kvt11GCrw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.822Z", "username": "shirley92", "name": "Rose Bradley", "email": "jane@eayo.org", "role": "User", "avatar": "", "wechat": "alice77", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vivamus vestibulum sagittis sapien.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.822Z", "created_by": "admin", "user_permissions": [], "groups": [1, 78]}}, {"model": "users.user", "pk": 11, "fields": {"password": "pbkdf2_sha256$30000$9ClFk3rzOAe2$eoiEZ0feR1lmDTrPi9cT0GCoO56E4A6CYlWTbAzY5W0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:29.990Z", "username": "donna77", "name": "Kimberly Hughes", "email": "martha@jabbersphere.info", "role": "Admin", "avatar": "", "wechat": "louise92", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nullam molestie nibh in lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:29.990Z", "created_by": "virginia82", "user_permissions": [], "groups": [1, 27]}}, {"model": "users.user", "pk": 12, "fields": {"password": "pbkdf2_sha256$30000$MAJMgjslCzUU$W8lA9y17L1v+TdjhoXzJZf57oaoknN+pCp/8hTABX3I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.159Z", "username": "bonnie87", "name": "Shirley Tucker", "email": "ashley@jabbercube.edu", "role": "User", "avatar": "", "wechat": "denise82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.159Z", "created_by": "donna77", "user_permissions": [], "groups": [1, 4]}}, {"model": "users.user", "pk": 13, "fields": {"password": "pbkdf2_sha256$30000$zCT6heqR3LaF$/SNC4wvkRotfHtnz0LtcoXF2lgScx5+7APFfnrulqeA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.327Z", "username": "mildred89", "name": "Amy Cole", "email": "cheryl@yambee.org", "role": "User", "avatar": "", "wechat": "anna67", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Praesent blandit lacinia erat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.327Z", "created_by": "shirley92", "user_permissions": [], "groups": [1, 74]}}, {"model": "users.user", "pk": 14, "fields": {"password": "pbkdf2_sha256$30000$zSK7uZolhV5W$m4FUrWJbJR/aaE4lifgyeg9Zz39t5pDzxwhjhkfpFpk=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.494Z", "username": "betty69", "name": "Norma Little", "email": "mildred@nlounge.gov", "role": "Admin", "avatar": "", "wechat": "jennifer80", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer ac neque.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.495Z", "created_by": "shirley92", "user_permissions": [], "groups": [1, 61]}}, {"model": "users.user", "pk": 15, "fields": {"password": "pbkdf2_sha256$30000$ohJp2IQmzty1$NHWh76GPmQb9l2oqpfEjlQ+RACLbOLTQi3nLeMyMw94=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.658Z", "username": "kathleen81", "name": "Jennifer Garza", "email": "donna@thoughtbeat.org", "role": "Admin", "avatar": "", "wechat": "jessica70", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Mauris ullamcorper purus sit amet nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.658Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 22]}}, {"model": "users.user", "pk": 16, "fields": {"password": "pbkdf2_sha256$30000$8GJwjpiigEqV$hv+hRQrA4MQz8XlXvKZDsO746KQbIRjoYtgUyNvxPK0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.829Z", "username": "heather83", "name": "Jacqueline Gomez", "email": "mary@dabz.org", "role": "User", "avatar": "", "wechat": "katherine81", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.829Z", "created_by": "gloria89", "user_permissions": [], "groups": [1, 101]}}, {"model": "users.user", "pk": 17, "fields": {"password": "pbkdf2_sha256$30000$h3T2BC3HVR6w$lqyZTTVkpyzeklHO0cv29ftO1egfHAREs42KmXgO29c=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:30.999Z", "username": "cheryl86", "name": "Doris Wright", "email": "kathleen@youbridge.org", "role": "Admin", "avatar": "", "wechat": "julia89", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer ac leo.", "is_first_login": false, "date_expired": "2086-08-19T11:40:30.999Z", "created_by": "mildred89", "user_permissions": [], "groups": [1, 100]}}, {"model": "users.user", "pk": 18, "fields": {"password": "pbkdf2_sha256$30000$HPctDgqFA1O5$aHIZAhfT4hqwthO6PkYC6wHr8xpCwgfbZli1i4vBGqo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:31.171Z", "username": "helen85", "name": "Nancy Franklin", "email": "elizabeth@kare.edu", "role": "User", "avatar": "", "wechat": "ruth86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Mauris ullamcorper purus sit amet nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:31.171Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 19]}}, {"model": "users.user", "pk": 19, "fields": {"password": "pbkdf2_sha256$30000$2BxbETGNZPjs$LQ4vZC//oJhw+kkQA5+QaWwQRiImMR32ZRQ/JiSmhno=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:31.342Z", "username": "evelyn66", "name": "Maria Wagner", "email": "kathy@vinte.mil", "role": "Admin", "avatar": "", "wechat": "diane67", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est.", "is_first_login": false, "date_expired": "2086-08-19T11:40:31.342Z", "created_by": "betty69", "user_permissions": [], "groups": [1, 55]}}, {"model": "users.user", "pk": 20, "fields": {"password": "pbkdf2_sha256$30000$Zhr5ztI55OmZ$c1vxvnRPonGOLEYwAkwPK10gcNDRwnJItAGfYvxo/l8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:31.514Z", "username": "sharon90", "name": "Shirley Watson", "email": "cheryl@skimia.edu", "role": "User", "avatar": "", "wechat": "robin78", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:31.514Z", "created_by": "debra78", "user_permissions": [], "groups": [1, 57]}}, {"model": "users.user", "pk": 21, "fields": {"password": "pbkdf2_sha256$30000$V8jjOOVxDN6U$nbnHTiGlw3MNK3dQZ23jpwZidyvIm9UHvJMMF5LEcBk=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:31.678Z", "username": "anne65", "name": "Linda Thompson", "email": "margaret@nlounge.net", "role": "Admin", "avatar": "", "wechat": "judith94", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Suspendisse potenti.", "is_first_login": false, "date_expired": "2086-08-19T11:40:31.678Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 31]}}, {"model": "users.user", "pk": 22, "fields": {"password": "pbkdf2_sha256$30000$ASWsoeOm8bC8$JWAry3Vf4p9eqF30hWgjJYVyj+EyftYqHgLnrFcSl3w=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:31.842Z", "username": "janice81", "name": "Tina Tucker", "email": "amy@aivee.info", "role": "User", "avatar": "", "wechat": "sara86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:31.842Z", "created_by": "donna77", "user_permissions": [], "groups": [1, 24]}}, {"model": "users.user", "pk": 23, "fields": {"password": "pbkdf2_sha256$30000$F5Igy3AG8I77$ebSGjrlcri5QHYiPSMgWjvuMqiEJZaY9nnHBQnjbioE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.013Z", "username": "shirley90", "name": "Donna Cole", "email": "norma@eire.com", "role": "Admin", "avatar": "", "wechat": "stephanie94", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi non lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.013Z", "created_by": "kathleen81", "user_permissions": [], "groups": [1, 50]}}, {"model": "users.user", "pk": 24, "fields": {"password": "pbkdf2_sha256$30000$TB2ioEQVTRYC$OLMEUgukLXGQkM+Ku0xYjDIuwBW0mSXc497FMYboHMc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.182Z", "username": "rachel86", "name": "Diana Fuller", "email": "heather@zoombox.com", "role": "User", "avatar": "", "wechat": "annie70", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Curabitur in libero ut massa volutpat convallis.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.182Z", "created_by": "cheryl86", "user_permissions": [], "groups": [1, 29]}}, {"model": "users.user", "pk": 25, "fields": {"password": "pbkdf2_sha256$30000$8zRHrl5odLjt$H1LyqlzStMtrrdsqCTsEDqyzvRfVTO+s3FCkMZQUg58=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.354Z", "username": "gloria81", "name": "Judith Burton", "email": "pamela@browsecat.info", "role": "Admin", "avatar": "", "wechat": "kathryn84", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Praesent blandit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.354Z", "created_by": "admin", "user_permissions": [], "groups": [1, 98]}}, {"model": "users.user", "pk": 26, "fields": {"password": "pbkdf2_sha256$30000$oJ8CguLyG514$857oOSy4ZP/nmoHfr0+7YAkr+4nOxpVfs+YHHXO4HGA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.516Z", "username": "sarah93", "name": "Marie Robertson", "email": "cynthia@vitz.net", "role": "User", "avatar": "", "wechat": "anna82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aenean lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.516Z", "created_by": "jessica67", "user_permissions": [], "groups": [1, 15]}}, {"model": "users.user", "pk": 27, "fields": {"password": "pbkdf2_sha256$30000$KMKhgXsrpbTb$3SOKyqnAZsHsulLAR8YxRSH4oL81HecsjHuZqBwbfkA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.684Z", "username": "gloria69", "name": "Ashley Fernandez", "email": "lois@zooxo.name", "role": "User", "avatar": "", "wechat": "nicole91", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.684Z", "created_by": "amanda83", "user_permissions": [], "groups": [1, 55]}}, {"model": "users.user", "pk": 28, "fields": {"password": "pbkdf2_sha256$30000$HqsstWAnc4Dc$DbH4P0e8TewCmj12VM2PaMlxbEO9sXdMiAU/RaNcEso=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:32.851Z", "username": "patricia86", "name": "Catherine Hanson", "email": "jean@tavu.gov", "role": "User", "avatar": "", "wechat": "tina86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Curabitur in libero ut massa volutpat convallis.", "is_first_login": false, "date_expired": "2086-08-19T11:40:32.851Z", "created_by": "sharon90", "user_permissions": [], "groups": [1, 76]}}, {"model": "users.user", "pk": 29, "fields": {"password": "pbkdf2_sha256$30000$afmfE90Qeh5l$kz0UjtWT/+8WaSFiwHUsVPMvhnxAmaZK0KvUfRGuhQY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.021Z", "username": "elizabeth88", "name": "Julia Green", "email": "norma@zooxo.name", "role": "User", "avatar": "", "wechat": "teresa72", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aenean lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.021Z", "created_by": "gloria81", "user_permissions": [], "groups": [1, 52]}}, {"model": "users.user", "pk": 30, "fields": {"password": "pbkdf2_sha256$30000$oGne3NGRmP4F$eZoziI46KHtHHhEIbHhvx4tT7OqpAhKP7EgcJZRotM0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.189Z", "username": "anna73", "name": "Sharon Arnold", "email": "kelly@jabbertype.edu", "role": "User", "avatar": "", "wechat": "linda84", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer non velit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.189Z", "created_by": "shirley92", "user_permissions": [], "groups": [1, 65]}}, {"model": "users.user", "pk": 31, "fields": {"password": "pbkdf2_sha256$30000$Beusxog5VzMe$XLk35XQG0nKVMhJAwm4xPReq8nGbLGTsTuHuoBk8/oc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.360Z", "username": "amanda72", "name": "Nicole Miller", "email": "ruby@innotype.net", "role": "Admin", "avatar": "", "wechat": "amy83", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Pellentesque ultrices mattis odio.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.360Z", "created_by": "betty69", "user_permissions": [], "groups": [1, 79]}}, {"model": "users.user", "pk": 32, "fields": {"password": "pbkdf2_sha256$30000$xX2wCo6lmAoe$xT9sv5lhNEz5QHTGXRro1rlZq3wV1SOXR8N2AVxfIK0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.525Z", "username": "karen88", "name": "Ann Perry", "email": "christine@kazu.biz", "role": "User", "avatar": "", "wechat": "kathryn93", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.525Z", "created_by": "shirley90", "user_permissions": [], "groups": [1, 45]}}, {"model": "users.user", "pk": 33, "fields": {"password": "pbkdf2_sha256$30000$G26Dluux88FA$yYZDtuT2kziHa7npBjc6wa0FaqlCq4xd/HNwf3M0IBA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.688Z", "username": "ruby85", "name": "Andrea Simmons", "email": "janice@topiclounge.gov", "role": "User", "avatar": "", "wechat": "carol63", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.688Z", "created_by": "virginia82", "user_permissions": [], "groups": [1, 8]}}, {"model": "users.user", "pk": 34, "fields": {"password": "pbkdf2_sha256$30000$YogIPElxW4BF$GMx/eCOf+Wo45K8f4zpgAdPHnK0hw4zxrhPFGjD1kgw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:33.849Z", "username": "jean78", "name": "Wanda Porter", "email": "debra@skipfire.edu", "role": "User", "avatar": "", "wechat": "nancy68", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.", "is_first_login": false, "date_expired": "2086-08-19T11:40:33.850Z", "created_by": "rachel86", "user_permissions": [], "groups": [1, 34]}}, {"model": "users.user", "pk": 35, "fields": {"password": "pbkdf2_sha256$30000$VAHkvodCT4EZ$Hc0AgQpRTZ+Fyej7aYw3XFYLBqRuYNYdZrBqbNsxBWI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.025Z", "username": "dorothy68", "name": "Sandra Burke", "email": "jacqueline@voonder.name", "role": "User", "avatar": "", "wechat": "anne75", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas tincidunt lacus at velit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.025Z", "created_by": "sharon90", "user_permissions": [], "groups": [1, 24]}}, {"model": "users.user", "pk": 36, "fields": {"password": "pbkdf2_sha256$30000$LCgO3uQ9b8jB$2gk2i4h9YSPE6Z5ncYqQjXWuqd957Oa5wyQWUySt/6Q=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.189Z", "username": "julia94", "name": "Julia Moore", "email": "kathleen@avamm.mil", "role": "User", "avatar": "", "wechat": "lois92", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.189Z", "created_by": "janice81", "user_permissions": [], "groups": [1, 23]}}, {"model": "users.user", "pk": 37, "fields": {"password": "pbkdf2_sha256$30000$d8I5jWJV3nrO$vXljikjtUP2iACdKvhv2VvdHgv1zL816CY3vzBzzf+U=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.356Z", "username": "jacqueline87", "name": "Shirley Boyd", "email": "martha@roodel.net", "role": "User", "avatar": "", "wechat": "melissa77", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nunc nisl.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.356Z", "created_by": "mildred89", "user_permissions": [], "groups": [1, 32]}}, {"model": "users.user", "pk": 38, "fields": {"password": "pbkdf2_sha256$30000$GN14FUfF7nIl$QORwOV3JB8TGpGVfjTHkWyfVO/97taHbsUUEyfkO18M=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.525Z", "username": "margaret83", "name": "Marilyn Berry", "email": "sarah@wikibox.edu", "role": "User", "avatar": "", "wechat": "marilyn89", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Ut tellus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.525Z", "created_by": "marie78", "user_permissions": [], "groups": [1, 49]}}, {"model": "users.user", "pk": 39, "fields": {"password": "pbkdf2_sha256$30000$JKLEc3Udbclx$TeQ8656qKhw97YsPDwhPmF3FusBzc42tfHxgpFumpg8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.693Z", "username": "katherine78", "name": "Patricia Andrews", "email": "lillian@snaptags.name", "role": "User", "avatar": "", "wechat": "lois82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.693Z", "created_by": "helen93", "user_permissions": [], "groups": [1, 70]}}, {"model": "users.user", "pk": 40, "fields": {"password": "pbkdf2_sha256$30000$LfSuq1HOppCM$PATgoI+3OWTtnBl4Qqfcrg2tIIJSJWwg2gDHqRReNHA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:34.868Z", "username": "sandra72", "name": "Karen Dunn", "email": "kathleen@realbridge.biz", "role": "User", "avatar": "", "wechat": "angela69", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer ac neque.", "is_first_login": false, "date_expired": "2086-08-19T11:40:34.868Z", "created_by": "evelyn66", "user_permissions": [], "groups": [1, 84]}}, {"model": "users.user", "pk": 41, "fields": {"password": "pbkdf2_sha256$30000$fyqfIT2o8oBh$oxWTIdDmGE6JeFiC3ht1Vfan/wixhkKQYpJuDWFXwpI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.038Z", "username": "janet94", "name": "Tina Jacobs", "email": "kathryn@twitterbeat.com", "role": "Admin", "avatar": "", "wechat": "sarah85", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas ut massa quis augue luctus tincidunt.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.038Z", "created_by": "bonnie87", "user_permissions": [], "groups": [1, 3]}}, {"model": "users.user", "pk": 42, "fields": {"password": "pbkdf2_sha256$30000$lnrCgcch2hIS$zspAwtJ/kFNfHy6bgIBcFmPo02W6ymbwTNySKmcieRM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.206Z", "username": "heather70", "name": "Janice Fuller", "email": "lois@centizu.name", "role": "Admin", "avatar": "", "wechat": "diana87", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer a nibh.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.206Z", "created_by": "katherine78", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 43, "fields": {"password": "pbkdf2_sha256$30000$FG75rHLpN2yC$zavIk5IetRMZpxGKdzNiSUMFH+sRTMhDC3YZZLUbfH8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.377Z", "username": "helen78", "name": "Cheryl Kennedy", "email": "jacqueline@skimia.gov", "role": "User", "avatar": "", "wechat": "bonnie70", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer non velit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.378Z", "created_by": "sarah93", "user_permissions": [], "groups": [1, 25]}}, {"model": "users.user", "pk": 44, "fields": {"password": "pbkdf2_sha256$30000$PYboz45iSFHS$szEdRkHHJnywvQxuyw+glDkVCTXb5oBb62M7pOYvr8w=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.544Z", "username": "frances66", "name": "Judith Thomas", "email": "robin@youopia.name", "role": "Admin", "avatar": "", "wechat": "virginia66", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Proin interdum mauris non ligula pellentesque ultrices.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.544Z", "created_by": "jessica67", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 45, "fields": {"password": "pbkdf2_sha256$30000$Hzb9aIsW4Z4g$aQPFxDUmDLi8/Y9DZDOo1M+9TmI+egl8YbWajDPApNo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.712Z", "username": "joan84", "name": "Emily Hayes", "email": "ashley@flipstorm.info", "role": "Admin", "avatar": "", "wechat": "cynthia82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cras non velit nec nisi vulputate nonummy.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.712Z", "created_by": "joan82", "user_permissions": [], "groups": [1, 2]}}, {"model": "users.user", "pk": 46, "fields": {"password": "pbkdf2_sha256$30000$cX83YarClOxI$mHmsPUtGvXYCXx03XRz1gGzKRGIMDCLzlmW+jvmeHyM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:35.890Z", "username": "ruby74", "name": "Gloria Ryan", "email": "wanda@zoomzone.com", "role": "User", "avatar": "", "wechat": "tammy78", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Suspendisse potenti.", "is_first_login": false, "date_expired": "2086-08-19T11:40:35.890Z", "created_by": "heather83", "user_permissions": [], "groups": [1, 89]}}, {"model": "users.user", "pk": 47, "fields": {"password": "pbkdf2_sha256$30000$QayxdbM57SkB$+O4cZ6pe3qOIOgnkmkojvz/9SNXbdQq4IN/OlWM4uqE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:36.209Z", "username": "rose65", "name": "Jennifer Hill", "email": "cynthia@meeveo.mil", "role": "User", "avatar": "", "wechat": "phyllis72", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cras in purus eu magna vulputate luctus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:36.209Z", "created_by": "kathleen81", "user_permissions": [], "groups": [1, 93]}}, {"model": "users.user", "pk": 48, "fields": {"password": "pbkdf2_sha256$30000$rOGXoybJrlRu$6/sbbzUXSC4gg3MnQBBQjmxSwns0kuFFXnjUFgECVCs=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:36.380Z", "username": "theresa66", "name": "Nicole Mcdonald", "email": "jennifer@thoughtblab.org", "role": "Admin", "avatar": "", "wechat": "beverly93", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "is_first_login": false, "date_expired": "2086-08-19T11:40:36.380Z", "created_by": "sandra72", "user_permissions": [], "groups": [1, 54]}}, {"model": "users.user", "pk": 49, "fields": {"password": "pbkdf2_sha256$30000$ryM1OtDaFRBR$yAaYMLSu5GmHtBuj2SqNxrwX6T0ZJ0f9Ioa+QKB6Xjc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:36.547Z", "username": "jane64", "name": "Sara Romero", "email": "laura@bluejam.info", "role": "User", "avatar": "", "wechat": "ashley81", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum quam sapien, varius ut, blandit non, interdum in, ante.", "is_first_login": false, "date_expired": "2086-08-19T11:40:36.547Z", "created_by": "katherine78", "user_permissions": [], "groups": [1, 95]}}, {"model": "users.user", "pk": 50, "fields": {"password": "pbkdf2_sha256$30000$qrctcs8SfAbX$MneVIdxKpm5gU0kH6Kd4AdVJW9H3Lwy57Fj9zbcDMng=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:36.715Z", "username": "joyce92", "name": "Robin Schmidt", "email": "jessica@vipe.org", "role": "Admin", "avatar": "", "wechat": "lillian69", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "is_first_login": false, "date_expired": "2086-08-19T11:40:36.715Z", "created_by": "helen78", "user_permissions": [], "groups": [1, 12]}}, {"model": "users.user", "pk": 51, "fields": {"password": "pbkdf2_sha256$30000$YBDMUxTjaJOm$eotObjSyQ8tuxwPvGzrdwe4JtewIkGP3VJjA1n12XgI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:36.885Z", "username": "jessica83", "name": "Carol Rice", "email": "judy@oyoyo.gov", "role": "Admin", "avatar": "", "wechat": "theresa87", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:36.886Z", "created_by": "sharon90", "user_permissions": [], "groups": [1, 5]}}, {"model": "users.user", "pk": 52, "fields": {"password": "pbkdf2_sha256$30000$rDduC7xoNL6D$Qw7IXRwcGHghVgs9JazbSWVv16226Ind2uI7Mc4LffU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.049Z", "username": "norma92", "name": "Margaret Shaw", "email": "marie@gevee.net", "role": "User", "avatar": "", "wechat": "jean86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cras in purus eu magna vulputate luctus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.049Z", "created_by": "gloria81", "user_permissions": [], "groups": [1, 42]}}, {"model": "users.user", "pk": 53, "fields": {"password": "pbkdf2_sha256$30000$XuD0bTQbGiGR$49MGy0aIUlq6PIn5n8MFJFzQXlt+9sAAlPFiGUcz0jo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.223Z", "username": "nancy93", "name": "Amy Parker", "email": "deborah@feedmix.gov", "role": "Admin", "avatar": "", "wechat": "barbara73", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Proin eu mi.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.223Z", "created_by": "amanda83", "user_permissions": [], "groups": [1, 23]}}, {"model": "users.user", "pk": 54, "fields": {"password": "pbkdf2_sha256$30000$GQ29YONroMEs$zidcIhcl0MVZzqMCDOuK0ZiGmT64iVxAXvdyZidkVW8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.388Z", "username": "kathryn89", "name": "Anne Hanson", "email": "janice@skajo.com", "role": "User", "avatar": "", "wechat": "irene88", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Fusce consequat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.388Z", "created_by": "jane64", "user_permissions": [], "groups": [1, 31]}}, {"model": "users.user", "pk": 55, "fields": {"password": "pbkdf2_sha256$30000$vBohn8DgNVNW$wSrYvF4TK9+1F0FpWfU/1tonWLEzFD66xkeLUzMjXW8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.555Z", "username": "christine65", "name": "Linda Grant", "email": "mildred@oyoloo.info", "role": "User", "avatar": "", "wechat": "gloria89", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.555Z", "created_by": "jean78", "user_permissions": [], "groups": [1, 31]}}, {"model": "users.user", "pk": 56, "fields": {"password": "pbkdf2_sha256$30000$ZXZzwHmuJLhu$94jqW8ge2OV8zsCO25ejDuX2ensIrAsqZ3gMspSEWZo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.724Z", "username": "christine74", "name": "Tammy Henry", "email": "susan@fatz.gov", "role": "User", "avatar": "", "wechat": "paula73", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nulla justo.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.724Z", "created_by": "helen85", "user_permissions": [], "groups": [1, 27]}}, {"model": "users.user", "pk": 57, "fields": {"password": "pbkdf2_sha256$30000$SCBEFw4IqJSw$gKwJ+Z61A8xx8FoKKlxKi3bvymJ901XX190CttuT5SQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:37.903Z", "username": "janet78", "name": "Jennifer Stone", "email": "brenda@realblab.com", "role": "Admin", "avatar": "", "wechat": "paula74", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi non quam nec dui luctus rutrum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:37.903Z", "created_by": "helen78", "user_permissions": [], "groups": [1, 57]}}, {"model": "users.user", "pk": 58, "fields": {"password": "pbkdf2_sha256$30000$brXrjdiilFJy$ZQyHHfiLmBPXAOIt7HFykZVDjK1/xy2rHSD4WzyN5lk=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.078Z", "username": "bonnie82", "name": "Tammy Barnes", "email": "judy@jazzy.edu", "role": "Admin", "avatar": "", "wechat": "norma94", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer non velit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.079Z", "created_by": "theresa66", "user_permissions": [], "groups": [1, 12]}}, {"model": "users.user", "pk": 59, "fields": {"password": "pbkdf2_sha256$30000$ytPyWlqlgSQa$MDTPej9yHVpTXnmX+i7pjQohUjrzA1CkkjHM/mszRas=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.258Z", "username": "susan70", "name": "Jane Sims", "email": "jean@kwideo.org", "role": "Admin", "avatar": "", "wechat": "jean76", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.258Z", "created_by": "shirley92", "user_permissions": [], "groups": [1, 34]}}, {"model": "users.user", "pk": 60, "fields": {"password": "pbkdf2_sha256$30000$hCwgalGFVti0$QM2cah7OjPv9LmWcTUW8n0WWXrzbtDLmqXIT8I72lBw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.445Z", "username": "diana82", "name": "Kathleen Morrison", "email": "sharon@fanoodle.info", "role": "Admin", "avatar": "", "wechat": "kimberly94", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Phasellus sit amet erat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.445Z", "created_by": "kathleen81", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 61, "fields": {"password": "pbkdf2_sha256$30000$9veo3zwoQS6Y$o9GdPOMm8vfCz2LZ2dLFZQRPL/weVQbh1DQgTkfT01E=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.616Z", "username": "pamela85", "name": "Tammy Sanders", "email": "andrea@tagtune.mil", "role": "User", "avatar": "", "wechat": "debra86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Phasellus sit amet erat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.616Z", "created_by": "kathryn89", "user_permissions": [], "groups": [1, 17]}}, {"model": "users.user", "pk": 62, "fields": {"password": "pbkdf2_sha256$30000$KZA3rl6hy6K8$c37Ypnuwfa+J83zGSqv/4VlEP1SjPUOO16dYWh5A37U=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.800Z", "username": "shirley67", "name": "Diane Hernandez", "email": "kimberly@oyoloo.net", "role": "User", "avatar": "", "wechat": "theresa91", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas pulvinar lobortis est.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.800Z", "created_by": "elizabeth88", "user_permissions": [], "groups": [1, 23]}}, {"model": "users.user", "pk": 63, "fields": {"password": "pbkdf2_sha256$30000$bly0Ec71D4G5$EsaMleYNI2rqq2SDWVqpZuuqN24YFVVg3ym12YJ8aFQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:38.972Z", "username": "evelyn87", "name": "Barbara Myers", "email": "rachel@thoughtblab.mil", "role": "Admin", "avatar": "", "wechat": "virginia82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Vestibulum sed magna at nunc commodo placerat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:38.972Z", "created_by": "admin", "user_permissions": [], "groups": [1, 3]}}, {"model": "users.user", "pk": 64, "fields": {"password": "pbkdf2_sha256$30000$DlJpDuZwAGJn$x0IdHZBBa9Sv2B/7UA/S0UR1LKC9kVEjNEDP6cldOOw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:39.145Z", "username": "lisa76", "name": "Joyce Gray", "email": "nancy@jatri.com", "role": "User", "avatar": "", "wechat": "linda76", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Suspendisse potenti.", "is_first_login": false, "date_expired": "2086-08-19T11:40:39.145Z", "created_by": "patricia86", "user_permissions": [], "groups": [1, 86]}}, {"model": "users.user", "pk": 65, "fields": {"password": "pbkdf2_sha256$30000$zTXa8Wbqkcl7$e9Sj8tRw81AIYUYTCN96g4dCrlw1ne65yAj57Lpt3fc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:39.316Z", "username": "wanda87", "name": "Angela Phillips", "email": "dorothy@vinte.name", "role": "User", "avatar": "", "wechat": "jean93", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:39.316Z", "created_by": "gloria89", "user_permissions": [], "groups": [1, 18]}}, {"model": "users.user", "pk": 66, "fields": {"password": "pbkdf2_sha256$30000$snF1u8sKBGoT$iIICTiwlK7hlou+IuphT9ozgoVdg7xvQ0BhQ5hipzAM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:39.494Z", "username": "martha80", "name": "Paula Webb", "email": "joyce@jetwire.gov", "role": "Admin", "avatar": "", "wechat": "irene88", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Donec ut mauris eget massa tempor convallis.", "is_first_login": false, "date_expired": "2086-08-19T11:40:39.494Z", "created_by": "debra78", "user_permissions": [], "groups": [1, 71]}}, {"model": "users.user", "pk": 67, "fields": {"password": "pbkdf2_sha256$30000$3f2IIMh1BHsZ$sqW6OC1P8A8ZHC3hSgZjM/1onfVyeqWZrODHgB6pjo8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:39.670Z", "username": "alice90", "name": "Joyce Cole", "email": "joyce@jetwire.name", "role": "Admin", "avatar": "", "wechat": "kathryn90", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nunc rhoncus dui vel sem.", "is_first_login": false, "date_expired": "2086-08-19T11:40:39.670Z", "created_by": "jean78", "user_permissions": [], "groups": [1, 83]}}, {"model": "users.user", "pk": 68, "fields": {"password": "pbkdf2_sha256$30000$rjdFLNWTZVDP$cbLx9NhUCDjfJ5DtXBATvRBDdwWp6AwIY0cDuoS0ack=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:39.844Z", "username": "julie89", "name": "Ashley Castillo", "email": "betty@tagchat.edu", "role": "User", "avatar": "", "wechat": "teresa82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aenean auctor gravida sem.", "is_first_login": false, "date_expired": "2086-08-19T11:40:39.844Z", "created_by": "evelyn66", "user_permissions": [], "groups": [1, 3]}}, {"model": "users.user", "pk": 69, "fields": {"password": "pbkdf2_sha256$30000$aMmTSQp5D7o8$uEO2r3tTJjjiPme0wyjPAIx9+J+D4iYXpSZiud56YZM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.019Z", "username": "sara63", "name": "Julie Robertson", "email": "jane@twinte.biz", "role": "Admin", "avatar": "", "wechat": "laura75", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Ut at dolor quis odio consequat varius.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.019Z", "created_by": "evelyn87", "user_permissions": [], "groups": [1, 28]}}, {"model": "users.user", "pk": 70, "fields": {"password": "pbkdf2_sha256$30000$tkX3zB55h35n$2GVTvEtIJEgKX2eLypbvVWG/EawxGv+pM8oGQqsTG1M=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.203Z", "username": "annie84", "name": "Melissa Hill", "email": "laura@bluezoom.biz", "role": "Admin", "avatar": "", "wechat": "stephanie81", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi non lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.203Z", "created_by": "norma92", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 71, "fields": {"password": "pbkdf2_sha256$30000$F3p7A7Z34RdN$S4zMTb8S0riGXpkTMxQNVF0t3SVT8p9q3YaGpRfvHrE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.410Z", "username": "denise66", "name": "Carol Murphy", "email": "cheryl@brainbox.net", "role": "Admin", "avatar": "", "wechat": "stephanie91", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aenean lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.410Z", "created_by": "betty69", "user_permissions": [], "groups": [1, 100]}}, {"model": "users.user", "pk": 72, "fields": {"password": "pbkdf2_sha256$30000$w8jVwPiLAO95$uMibVY3vK5+bb3kGIcaF3bzS/vLBXuYHUHisL+s7Gk8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.588Z", "username": "maria79", "name": "Lisa Lawson", "email": "nancy@edgeblab.com", "role": "User", "avatar": "", "wechat": "sara84", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.588Z", "created_by": "evelyn66", "user_permissions": [], "groups": [1, 96]}}, {"model": "users.user", "pk": 73, "fields": {"password": "pbkdf2_sha256$30000$Chfy1Xs9TYn6$D4PqnvAonoe7i2Apailkj1jNgPwJQXzu4Rdw7vojN4E=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.765Z", "username": "jacqueline66", "name": "Christine Johnston", "email": "annie@yombu.com", "role": "User", "avatar": "", "wechat": "shirley94", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque ut erat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.765Z", "created_by": "martha80", "user_permissions": [], "groups": [1, 96]}}, {"model": "users.user", "pk": 74, "fields": {"password": "pbkdf2_sha256$30000$R476WcBOQFnz$wG6PQxtKoFiCq/QvFuChZsMqmOChRyMtysWqfzobGUc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:40.946Z", "username": "diane94", "name": "Jacqueline Banks", "email": "ruth@riffwire.name", "role": "Admin", "avatar": "", "wechat": "tammy69", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "is_first_login": false, "date_expired": "2086-08-19T11:40:40.946Z", "created_by": "amanda83", "user_permissions": [], "groups": [1, 54]}}, {"model": "users.user", "pk": 75, "fields": {"password": "pbkdf2_sha256$30000$0WNEpfUcEBnr$PbdTdlDrFshCA8QQyAZIPvBVLQF457Svx2u1YAJjV3A=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.116Z", "username": "judy68", "name": "Anna Russell", "email": "sharon@bubbletube.mil", "role": "User", "avatar": "", "wechat": "dorothy80", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.116Z", "created_by": "bonnie87", "user_permissions": [], "groups": [1, 37]}}, {"model": "users.user", "pk": 76, "fields": {"password": "pbkdf2_sha256$30000$k6LVybVvEzP3$TDiWfHRnQqnDXHHHRudiQAie41KzGsBKslEnL7OyHUQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.283Z", "username": "sara85", "name": "Joan Stewart", "email": "bonnie@gabcube.mil", "role": "User", "avatar": "", "wechat": "gloria77", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.283Z", "created_by": "norma92", "user_permissions": [], "groups": [1, 71]}}, {"model": "users.user", "pk": 77, "fields": {"password": "pbkdf2_sha256$30000$nq3q8AD2Egqa$8hvaQvJNjnXAvl5v1cCWKYE6SBYQuQ4Zv0XgMgUBYjQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.462Z", "username": "louise86", "name": "Emily King", "email": "bonnie@zazio.com", "role": "Admin", "avatar": "", "wechat": "mildred72", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Duis at velit eu est congue elementum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.462Z", "created_by": "karen88", "user_permissions": [], "groups": [1, 100]}}, {"model": "users.user", "pk": 78, "fields": {"password": "pbkdf2_sha256$30000$YYLnF0D85MaT$mPp4SLNiN27DJ/MQSrJO0qQDdeBcTsFIDrRJJAd2mUY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.636Z", "username": "melissa86", "name": "Marie Cunningham", "email": "robin@fiveclub.biz", "role": "Admin", "avatar": "", "wechat": "louise65", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aliquam erat volutpat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.636Z", "created_by": "donna77", "user_permissions": [], "groups": [1, 99]}}, {"model": "users.user", "pk": 79, "fields": {"password": "pbkdf2_sha256$30000$C9ZMnLwd5jWR$B994aIg+HKsCFYgevJgMhaFb/OPFVvEC1uCkCZlU63E=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.799Z", "username": "judith78", "name": "Laura Austin", "email": "rose@shufflebeat.net", "role": "User", "avatar": "", "wechat": "paula77", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nam dui.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.800Z", "created_by": "virginia82", "user_permissions": [], "groups": [1, 51]}}, {"model": "users.user", "pk": 80, "fields": {"password": "pbkdf2_sha256$30000$3jASiMrsqPTS$qERB/ZJBFSQ3VOATZR64Wo62zCPHmQBUX6ik6k8pxEA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:41.977Z", "username": "kathryn68", "name": "Mildred Gonzalez", "email": "wanda@linkbuzz.org", "role": "User", "avatar": "", "wechat": "anna89", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "is_first_login": false, "date_expired": "2086-08-19T11:40:41.977Z", "created_by": "alice90", "user_permissions": [], "groups": [1, 36]}}, {"model": "users.user", "pk": 81, "fields": {"password": "pbkdf2_sha256$30000$uc313SO0fl0c$rxFzlZnQy5K1pexI7CnpGvvdD5Y6dk/gGCdql4OIQTg=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:42.157Z", "username": "maria70", "name": "Wanda Campbell", "email": "teresa@shuffledrive.gov", "role": "User", "avatar": "", "wechat": "lisa74", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nunc purus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:42.157Z", "created_by": "julie89", "user_permissions": [], "groups": [1, 91]}}, {"model": "users.user", "pk": 82, "fields": {"password": "pbkdf2_sha256$30000$LhslZy3f0Rp4$EYrnsUtGors84bndfamlj30+DbyKKFn3qk+3S1jch7I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:42.480Z", "username": "judy84", "name": "Tina Harper", "email": "linda@skyble.biz", "role": "Admin", "avatar": "", "wechat": "cheryl71", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": false, "date_expired": "2086-08-19T11:40:42.480Z", "created_by": "amanda72", "user_permissions": [], "groups": [1, 45]}}, {"model": "users.user", "pk": 83, "fields": {"password": "pbkdf2_sha256$30000$NCu7bqBfUSlM$CmK4q/j22I7Y2RlaL4qJC8xTWXTP87fK8p5Z8iM0vHQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:42.649Z", "username": "marie69", "name": "Alice Washington", "email": "katherine@yombu.edu", "role": "Admin", "avatar": "", "wechat": "julie82", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:42.649Z", "created_by": "louise86", "user_permissions": [], "groups": [1, 34]}}, {"model": "users.user", "pk": 84, "fields": {"password": "pbkdf2_sha256$30000$bsTlGybCG4kn$u6FggNMQcbbIMI5FMAaXek8jPBcuAhsndO2LtHvPWfY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:42.820Z", "username": "jacqueline94", "name": "Kathy Anderson", "email": "doris@podcat.mil", "role": "Admin", "avatar": "", "wechat": "janice86", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Pellentesque at nulla.", "is_first_login": false, "date_expired": "2086-08-19T11:40:42.820Z", "created_by": "mildred89", "user_permissions": [], "groups": [1, 70]}}, {"model": "users.user", "pk": 85, "fields": {"password": "pbkdf2_sha256$30000$0OBTuxURroAg$HbRxSmld8Z2KikNSyx2qDQeXD3qkHs99drogR4lMzSk=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.001Z", "username": "ruth78", "name": "Susan Andrews", "email": "tammy@bubbletube.net", "role": "User", "avatar": "", "wechat": "theresa91", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nulla justo.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.001Z", "created_by": "annie84", "user_permissions": [], "groups": [1, 75]}}, {"model": "users.user", "pk": 86, "fields": {"password": "pbkdf2_sha256$30000$uzuXDjRY9cGB$7orw9rme6gdmtIXd23kY5riyg9kBeqGrZv1OLwUN2Zg=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.179Z", "username": "betty82", "name": "Nancy Ford", "email": "robin@chatterpoint.info", "role": "User", "avatar": "", "wechat": "angela75", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.179Z", "created_by": "susan70", "user_permissions": [], "groups": [1, 62]}}, {"model": "users.user", "pk": 87, "fields": {"password": "pbkdf2_sha256$30000$ihbKKzqLVsA4$qpHDQiNB0SRhGMQNOC3pyjfoHs0oLE4X90agkbwIoTg=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.356Z", "username": "cynthia80", "name": "Cheryl Brown", "email": "julia@centizu.info", "role": "User", "avatar": "", "wechat": "margaret72", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cras non velit nec nisi vulputate nonummy.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.356Z", "created_by": "heather70", "user_permissions": [], "groups": [1, 57]}}, {"model": "users.user", "pk": 88, "fields": {"password": "pbkdf2_sha256$30000$WTGLP7qH0AXv$ijXRG/BLJYM08HrZbXis0N1+3GZUQnYTmmOxMBqnZ08=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.526Z", "username": "lois88", "name": "Judith Wagner", "email": "laura@edgeclub.net", "role": "User", "avatar": "", "wechat": "stephanie75", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.526Z", "created_by": "margaret83", "user_permissions": [], "groups": [1, 84]}}, {"model": "users.user", "pk": 89, "fields": {"password": "pbkdf2_sha256$30000$2Jb6tBXjnnKG$KocwomlWiXZxNupZEitcXj68n85x72PBe2xv6wEic0E=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.698Z", "username": "melissa87", "name": "Sara Elliott", "email": "sharon@aibox.net", "role": "User", "avatar": "", "wechat": "teresa80", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Praesent id massa id nisl venenatis lacinia.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.698Z", "created_by": "rose65", "user_permissions": [], "groups": [1, 78]}}, {"model": "users.user", "pk": 90, "fields": {"password": "pbkdf2_sha256$30000$z81LhOVt6DtF$OuG7y3Z4IFLXRvMb0SFVJGerWUWmvea8Z9VwYiMXy6Y=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:43.870Z", "username": "virginia71", "name": "Beverly Grant", "email": "kimberly@youbridge.info", "role": "Admin", "avatar": "", "wechat": "katherine78", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:43.870Z", "created_by": "marie69", "user_permissions": [], "groups": [1, 18]}}, {"model": "users.user", "pk": 91, "fields": {"password": "pbkdf2_sha256$30000$hQEf332JcoN3$07Qubl2SHJY/mH4HYTQ6O3q4OvosQZ+tka+yXkYWSkM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:44.200Z", "username": "jennifer80", "name": "Donna Lawson", "email": "sharon@voonder.org", "role": "User", "avatar": "", "wechat": "joyce71", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Morbi a ipsum.", "is_first_login": false, "date_expired": "2086-08-19T11:40:44.200Z", "created_by": "jessica67", "user_permissions": [], "groups": [1, 9]}}, {"model": "users.user", "pk": 92, "fields": {"password": "pbkdf2_sha256$30000$787BXJlHQQyR$QVfF5bZEGTgJqGqJkJHIcGVRN9yFGejALpmKq9TCTAc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:44.372Z", "username": "louise73", "name": "Irene Hanson", "email": "lois@realcube.info", "role": "User", "avatar": "", "wechat": "theresa76", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.", "is_first_login": false, "date_expired": "2086-08-19T11:40:44.372Z", "created_by": "helen78", "user_permissions": [], "groups": [1, 69]}}, {"model": "users.user", "pk": 93, "fields": {"password": "pbkdf2_sha256$30000$TSpRU1MwSS9o$ji11Chzq8QYQ/5zELL+e7rsda3NovvmH64OPlovKV28=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:44.545Z", "username": "denise78", "name": "Amy Stevens", "email": "karen@topdrive.gov", "role": "Admin", "avatar": "", "wechat": "tammy63", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Duis aliquam convallis nunc.", "is_first_login": false, "date_expired": "2086-08-19T11:40:44.545Z", "created_by": "sara85", "user_permissions": [], "groups": [1, 39]}}, {"model": "users.user", "pk": 94, "fields": {"password": "pbkdf2_sha256$30000$KxdVhFziqW4Y$tV46izrsfKROm+eK1PQ3Spe2mA2DI7lpBRffBnXEkFs=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:44.716Z", "username": "beverly65", "name": "Pamela Murphy", "email": "kathleen@skyble.name", "role": "Admin", "avatar": "", "wechat": "cynthia79", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Ut at dolor quis odio consequat varius.", "is_first_login": false, "date_expired": "2086-08-19T11:40:44.716Z", "created_by": "judith78", "user_permissions": [], "groups": [1, 55]}}, {"model": "users.user", "pk": 95, "fields": {"password": "pbkdf2_sha256$30000$UT06FZhNcdT0$MHZ2vI4ILv4LNLxatI+uD4Ga3fmPykCbTVBwfCa2Vbc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:44.886Z", "username": "pamela91", "name": "Kathleen Hall", "email": "ashley@quimm.com", "role": "Admin", "avatar": "", "wechat": "pamela65", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Quisque ut erat.", "is_first_login": false, "date_expired": "2086-08-19T11:40:44.887Z", "created_by": "amanda72", "user_permissions": [], "groups": [1, 12]}}, {"model": "users.user", "pk": 96, "fields": {"password": "pbkdf2_sha256$30000$R8LIMYuDIRDC$CD4ZZ45zNLJqB4IkhoRRxaCc5AzeV/TAPXd6WJ918ww=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:45.053Z", "username": "annie80", "name": "Donna Gonzales", "email": "ashley@blogpad.org", "role": "Admin", "avatar": "", "wechat": "jessica93", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "is_first_login": false, "date_expired": "2086-08-19T11:40:45.053Z", "created_by": "diana82", "user_permissions": [], "groups": [1, 2]}}, {"model": "users.user", "pk": 97, "fields": {"password": "pbkdf2_sha256$30000$EB1azYvjRy4a$+r3s13wiSHjDyfhUPy+FW3aHwWleOjynlayGt9udaBQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:45.220Z", "username": "rebecca64", "name": "Kathy Long", "email": "rachel@divanoodle.net", "role": "Admin", "avatar": "", "wechat": "lori73", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Praesent lectus.", "is_first_login": false, "date_expired": "2086-08-19T11:40:45.220Z", "created_by": "shirley67", "user_permissions": [], "groups": [1, 94]}}, {"model": "users.user", "pk": 98, "fields": {"password": "pbkdf2_sha256$30000$Gs8j1WNM4gd6$XX82CgsJb2LJEQpcrS52gZNv9KZA0GRERgdVhPiNzPs=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:40:45.400Z", "username": "robin76", "name": "Jane Pierce", "email": "diana@realcube.biz", "role": "User", "avatar": "", "wechat": "beverly87", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Integer non velit.", "is_first_login": false, "date_expired": "2086-08-19T11:40:45.400Z", "created_by": "christine65", "user_permissions": [], "groups": [1, 35]}}] \ No newline at end of file +[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_created": "2016-09-08T03:03:36.498Z", "created_by": "System"}}, {"model": "users.usergroup", "pk": 2, "fields": {"name": "Brenda Johnston", "comment": "Ut at dolor quis odio consequat varius.", "date_created": "2016-09-08T03:03:50.661Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 3, "fields": {"name": "George Fisher", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros.", "date_created": "2016-09-08T03:03:50.665Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 4, "fields": {"name": "Jacqueline Holmes", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam.", "date_created": "2016-09-08T03:03:50.668Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 5, "fields": {"name": "Matthew Ford", "comment": "Vivamus in felis eu sapien cursus vestibulum.", "date_created": "2016-09-08T03:03:50.672Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 6, "fields": {"name": "Lois Howell", "comment": "Duis bibendum.", "date_created": "2016-09-08T03:03:50.674Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 7, "fields": {"name": "Carol Gordon", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_created": "2016-09-08T03:03:50.677Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 8, "fields": {"name": "Jennifer Coleman", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_created": "2016-09-08T03:03:50.679Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 9, "fields": {"name": "Tina Riley", "comment": "Suspendisse potenti.", "date_created": "2016-09-08T03:03:50.682Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 10, "fields": {"name": "Deborah Pierce", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "date_created": "2016-09-08T03:03:50.684Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 11, "fields": {"name": "Maria Ross", "comment": "Morbi non quam nec dui luctus rutrum.", "date_created": "2016-09-08T03:03:50.686Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 12, "fields": {"name": "Judy Hudson", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "date_created": "2016-09-08T03:03:50.688Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 13, "fields": {"name": "Juan Ortiz", "comment": "Proin eu mi.", "date_created": "2016-09-08T03:03:50.691Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 14, "fields": {"name": "Joyce Williams", "comment": "Integer ac neque.", "date_created": "2016-09-08T03:03:50.693Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 15, "fields": {"name": "Rachel Powell", "comment": "Fusce consequat.", "date_created": "2016-09-08T03:03:50.695Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 16, "fields": {"name": "Ashley Price", "comment": "In hac habitasse platea dictumst.", "date_created": "2016-09-08T03:03:50.697Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 17, "fields": {"name": "Joan Williamson", "comment": "Donec ut mauris eget massa tempor convallis.", "date_created": "2016-09-08T03:03:50.699Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 18, "fields": {"name": "Nicole Woods", "comment": "Nulla tempus.", "date_created": "2016-09-08T03:03:50.702Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 19, "fields": {"name": "Dorothy Scott", "comment": "Pellentesque eget nunc.", "date_created": "2016-09-08T03:03:50.704Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 20, "fields": {"name": "Cheryl Scott", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "date_created": "2016-09-08T03:03:50.706Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 21, "fields": {"name": "Susan Stevens", "comment": "Duis aliquam convallis nunc.", "date_created": "2016-09-08T03:03:50.708Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 22, "fields": {"name": "Jonathan Elliott", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "date_created": "2016-09-08T03:03:50.712Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 23, "fields": {"name": "Doris Hicks", "comment": "Phasellus id sapien in sapien iaculis congue.", "date_created": "2016-09-08T03:03:50.714Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 24, "fields": {"name": "Amy Martinez", "comment": "Nulla ac enim.", "date_created": "2016-09-08T03:03:50.716Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 25, "fields": {"name": "Katherine Coleman", "comment": "Nullam varius.", "date_created": "2016-09-08T03:03:50.719Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 26, "fields": {"name": "Martha Lane", "comment": "In hac habitasse platea dictumst.", "date_created": "2016-09-08T03:03:50.721Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 27, "fields": {"name": "Laura Perez", "comment": "Mauris ullamcorper purus sit amet nulla.", "date_created": "2016-09-08T03:03:50.723Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 28, "fields": {"name": "Frances Carroll", "comment": "Donec posuere metus vitae ipsum.", "date_created": "2016-09-08T03:03:50.726Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 29, "fields": {"name": "Joyce Anderson", "comment": "Nullam varius.", "date_created": "2016-09-08T03:03:50.728Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 30, "fields": {"name": "Wanda Garrett", "comment": "Integer ac neque.", "date_created": "2016-09-08T03:03:50.730Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 31, "fields": {"name": "Marie Wheeler", "comment": "In blandit ultrices enim.", "date_created": "2016-09-08T03:03:50.734Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 32, "fields": {"name": "Ralph Fisher", "comment": "Integer a nibh.", "date_created": "2016-09-08T03:03:50.736Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 33, "fields": {"name": "Ruby Wright", "comment": "Praesent id massa id nisl venenatis lacinia.", "date_created": "2016-09-08T03:03:50.739Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 34, "fields": {"name": "Kathryn Thompson", "comment": "Ut tellus.", "date_created": "2016-09-08T03:03:50.741Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 35, "fields": {"name": "Rose Palmer", "comment": "Nullam molestie nibh in lectus.", "date_created": "2016-09-08T03:03:50.743Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 36, "fields": {"name": "Norma Armstrong", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla.", "date_created": "2016-09-08T03:03:50.745Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 37, "fields": {"name": "Amy Wallace", "comment": "Duis ac nibh.", "date_created": "2016-09-08T03:03:50.748Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 38, "fields": {"name": "Kathy Nichols", "comment": "Donec dapibus.", "date_created": "2016-09-08T03:03:50.750Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 39, "fields": {"name": "Pamela Adams", "comment": "Nulla nisl.", "date_created": "2016-09-08T03:03:50.752Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 40, "fields": {"name": "Doris Lee", "comment": "Proin eu mi.", "date_created": "2016-09-08T03:03:50.755Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 41, "fields": {"name": "Alice Myers", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "date_created": "2016-09-08T03:03:50.758Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 42, "fields": {"name": "Patricia Thompson", "comment": "Duis at velit eu est congue elementum.", "date_created": "2016-09-08T03:03:50.761Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 43, "fields": {"name": "Barbara Berry", "comment": "Maecenas rhoncus aliquam lacus.", "date_created": "2016-09-08T03:03:50.763Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 44, "fields": {"name": "Diane Larson", "comment": "Duis mattis egestas metus.", "date_created": "2016-09-08T03:03:50.765Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 45, "fields": {"name": "Teresa Black", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.", "date_created": "2016-09-08T03:03:50.768Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 46, "fields": {"name": "Christine Garrett", "comment": "Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante.", "date_created": "2016-09-08T03:03:50.771Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 47, "fields": {"name": "Jane Burns", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "date_created": "2016-09-08T03:03:50.773Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 48, "fields": {"name": "Kelly Mendoza", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_created": "2016-09-08T03:03:50.775Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 49, "fields": {"name": "Kathleen Phillips", "comment": "Nulla ac enim.", "date_created": "2016-09-08T03:03:50.777Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 50, "fields": {"name": "Brenda Bennett", "comment": "Donec ut mauris eget massa tempor convallis.", "date_created": "2016-09-08T03:03:50.780Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 51, "fields": {"name": "Frances Campbell", "comment": "Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl.", "date_created": "2016-09-08T03:03:50.782Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 52, "fields": {"name": "Cynthia Bradley", "comment": "Curabitur gravida nisi at nibh.", "date_created": "2016-09-08T03:03:50.784Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 53, "fields": {"name": "Alice Green", "comment": "Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl.", "date_created": "2016-09-08T03:03:50.786Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 54, "fields": {"name": "Maria Smith", "comment": "Nulla nisl.", "date_created": "2016-09-08T03:03:50.788Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 55, "fields": {"name": "Emily Dunn", "comment": "Ut at dolor quis odio consequat varius.", "date_created": "2016-09-08T03:03:50.791Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 56, "fields": {"name": "Jean Cruz", "comment": "Donec ut dolor.", "date_created": "2016-09-08T03:03:50.794Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 57, "fields": {"name": "Mary Burke", "comment": "Sed sagittis.", "date_created": "2016-09-08T03:03:50.796Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 58, "fields": {"name": "Susan Hernandez", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est.", "date_created": "2016-09-08T03:03:50.798Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 59, "fields": {"name": "Debra Morris", "comment": "Suspendisse potenti.", "date_created": "2016-09-08T03:03:50.800Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 60, "fields": {"name": "Wanda Garza", "comment": "In hac habitasse platea dictumst.", "date_created": "2016-09-08T03:03:50.803Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 61, "fields": {"name": "Bonnie Jones", "comment": "Vestibulum sed magna at nunc commodo placerat.", "date_created": "2016-09-08T03:03:50.805Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 62, "fields": {"name": "Judy Davis", "comment": "Pellentesque ultrices mattis odio.", "date_created": "2016-09-08T03:03:50.808Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 63, "fields": {"name": "Karen Harris", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_created": "2016-09-08T03:03:50.811Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 64, "fields": {"name": "Mildred Kelley", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-08T03:03:50.814Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 65, "fields": {"name": "Judith Mitchell", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "date_created": "2016-09-08T03:03:50.816Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 66, "fields": {"name": "Lillian Banks", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "date_created": "2016-09-08T03:03:50.818Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 67, "fields": {"name": "Lillian Gomez", "comment": "Donec dapibus.", "date_created": "2016-09-08T03:03:50.820Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 68, "fields": {"name": "Janice Rodriguez", "comment": "Nullam porttitor lacus at turpis.", "date_created": "2016-09-08T03:03:50.822Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 69, "fields": {"name": "Amanda Dixon", "comment": "Aenean auctor gravida sem.", "date_created": "2016-09-08T03:03:50.825Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 70, "fields": {"name": "Judy Wells", "comment": "Nulla tempus.", "date_created": "2016-09-08T03:03:50.828Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 71, "fields": {"name": "Donna Hughes", "comment": "Sed vel enim sit amet nunc viverra dapibus.", "date_created": "2016-09-08T03:03:50.831Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 72, "fields": {"name": "Tammy Campbell", "comment": "Maecenas ut massa quis augue luctus tincidunt.", "date_created": "2016-09-08T03:03:50.833Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 73, "fields": {"name": "Lawrence Barnes", "comment": "Quisque ut erat.", "date_created": "2016-09-08T03:03:50.835Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 74, "fields": {"name": "Michelle Ramos", "comment": "Duis at velit eu est congue elementum.", "date_created": "2016-09-08T03:03:50.837Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 75, "fields": {"name": "Betty Wells", "comment": "Cras in purus eu magna vulputate luctus.", "date_created": "2016-09-08T03:03:50.839Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 76, "fields": {"name": "Jacqueline Adams", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-08T03:03:50.841Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 77, "fields": {"name": "Lori Evans", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "date_created": "2016-09-08T03:03:50.843Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 78, "fields": {"name": "Christina Nguyen", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "date_created": "2016-09-08T03:03:50.846Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 79, "fields": {"name": "Jane Long", "comment": "In hac habitasse platea dictumst.", "date_created": "2016-09-08T03:03:50.848Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 80, "fields": {"name": "Elizabeth Garrett", "comment": "Fusce lacus purus, aliquet at, feugiat non, pretium quis, lectus.", "date_created": "2016-09-08T03:03:50.851Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 81, "fields": {"name": "Frances Flores", "comment": "In eleifend quam a odio.", "date_created": "2016-09-08T03:03:50.853Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 82, "fields": {"name": "Bonnie Bowman", "comment": "Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.", "date_created": "2016-09-08T03:03:50.855Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 83, "fields": {"name": "Robin Thomas", "comment": "Nulla nisl.", "date_created": "2016-09-08T03:03:50.857Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 84, "fields": {"name": "Phyllis Martinez", "comment": "Aenean sit amet justo.", "date_created": "2016-09-08T03:03:50.860Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 85, "fields": {"name": "Tammy West", "comment": "Morbi porttitor lorem id ligula.", "date_created": "2016-09-08T03:03:50.863Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 86, "fields": {"name": "Kathryn Harrison", "comment": "Integer ac leo.", "date_created": "2016-09-08T03:03:50.865Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 87, "fields": {"name": "Denise Stanley", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.", "date_created": "2016-09-08T03:03:50.867Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 88, "fields": {"name": "Lois Foster", "comment": "Donec quis orci eget orci vehicula condimentum.", "date_created": "2016-09-08T03:03:50.869Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 89, "fields": {"name": "Ann Vasquez", "comment": "Mauris sit amet eros.", "date_created": "2016-09-08T03:03:50.872Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 90, "fields": {"name": "Annie Clark", "comment": "Duis at velit eu est congue elementum.", "date_created": "2016-09-08T03:03:50.874Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 91, "fields": {"name": "Stephanie Richards", "comment": "Donec ut dolor.", "date_created": "2016-09-08T03:03:50.877Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 92, "fields": {"name": "Louise Robinson", "comment": "Aliquam erat volutpat.", "date_created": "2016-09-08T03:03:50.879Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 93, "fields": {"name": "Melissa Kim", "comment": "Aenean fermentum.", "date_created": "2016-09-08T03:03:50.881Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 94, "fields": {"name": "Barbara Cooper", "comment": "Suspendisse potenti.", "date_created": "2016-09-08T03:03:50.883Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 95, "fields": {"name": "Louise Hall", "comment": "Etiam justo.", "date_created": "2016-09-08T03:03:50.886Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 96, "fields": {"name": "Brenda Roberts", "comment": "Suspendisse potenti.", "date_created": "2016-09-08T03:03:50.888Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 97, "fields": {"name": "Bonnie Lawrence", "comment": "In blandit ultrices enim.", "date_created": "2016-09-08T03:03:50.890Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 98, "fields": {"name": "Irene Perry", "comment": "Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo.", "date_created": "2016-09-08T03:03:50.893Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 99, "fields": {"name": "Helen Alvarez", "comment": "Donec quis orci eget orci vehicula condimentum.", "date_created": "2016-09-08T03:03:50.895Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 100, "fields": {"name": "Annie Bowman", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "date_created": "2016-09-08T03:03:50.898Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 101, "fields": {"name": "Mary Allen", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "date_created": "2016-09-08T03:03:50.900Z", "created_by": "admin"}}, {"model": "assets.idc", "pk": 1, "fields": {"name": "Sarah Garcia", "bandwidth": "200M", "contact": "Lillian Woods", "phone": "9-(989)805-2918", "address": "Los Gatos38602 Artisan Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.578Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Sed vel enim sit amet nunc viverra dapibus."}}, {"model": "assets.idc", "pk": 2, "fields": {"name": "Sara Jacobs", "bandwidth": "200M", "contact": "Karen Richardson", "phone": "1-(911)092-5399", "address": "Red Bluff16 Golf View Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.580Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 3, "fields": {"name": "Katherine Johnston", "bandwidth": "200M", "contact": "Barbara Morrison", "phone": "1-(277)477-6778", "address": "Corte Madera17 Kinsman Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.581Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla suscipit ligula in lacus."}}, {"model": "assets.idc", "pk": 4, "fields": {"name": "Susan Henderson", "bandwidth": "200M", "contact": "Beverly Kim", "phone": "6-(700)332-5745", "address": "Vacaville1 Mccormick Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.583Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Duis bibendum."}}, {"model": "assets.idc", "pk": 5, "fields": {"name": "Virginia Murphy", "bandwidth": "200M", "contact": "Debra Frazier", "phone": "0-(685)123-0909", "address": "Indian Wells20 High Crossing Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.584Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vivamus vel nulla eget eros elementum pellentesque."}}, {"model": "assets.idc", "pk": 6, "fields": {"name": "Amanda Spencer", "bandwidth": "200M", "contact": "Susan Hamilton", "phone": "8-(788)858-9745", "address": "Turlock629 Lien Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.585Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In congue."}}, {"model": "assets.idc", "pk": 7, "fields": {"name": "Doris Fuller", "bandwidth": "200M", "contact": "Ruby Dixon", "phone": "7-(611)985-8789", "address": "Corning6712 Sunbrook Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.587Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nunc purus."}}, {"model": "assets.idc", "pk": 8, "fields": {"name": "Rebecca West", "bandwidth": "200M", "contact": "Denise Burton", "phone": "8-(681)023-6320", "address": "Yucca Valley0 Linden Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.588Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nunc purus."}}, {"model": "assets.idc", "pk": 9, "fields": {"name": "Judith Martin", "bandwidth": "200M", "contact": "Paula Riley", "phone": "3-(953)498-9393", "address": "Mammoth Lakes394 Mosinee Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.589Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Sed ante."}}, {"model": "assets.idc", "pk": 10, "fields": {"name": "Mildred Graham", "bandwidth": "200M", "contact": "Gloria Kelley", "phone": "4-(826)981-1294", "address": "El Segundo0475 Westport Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.591Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla."}}, {"model": "assets.idc", "pk": 11, "fields": {"name": "Betty Payne", "bandwidth": "200M", "contact": "Martha Smith", "phone": "4-(077)936-4994", "address": "Tehachapi38097 Texas Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.593Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi ut odio."}}, {"model": "assets.idc", "pk": 12, "fields": {"name": "Christina Olson", "bandwidth": "200M", "contact": "Evelyn Sanchez", "phone": "2-(403)747-5722", "address": "Dana Point083 Hallows Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.595Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque porta volutpat erat."}}, {"model": "assets.idc", "pk": 13, "fields": {"name": "Rachel Evans", "bandwidth": "200M", "contact": "Mildred Ferguson", "phone": "9-(718)282-1930", "address": "Lodi45 Park Meadow Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.596Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla nisl."}}, {"model": "assets.idc", "pk": 14, "fields": {"name": "Kathleen Stanley", "bandwidth": "200M", "contact": "Heather Dean", "phone": "2-(467)650-8119", "address": "Carson29 Sauthoff Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.597Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Mauris sit amet eros."}}, {"model": "assets.idc", "pk": 15, "fields": {"name": "Mildred Olson", "bandwidth": "200M", "contact": "Amy Woods", "phone": "0-(721)578-5551", "address": "Maricopa75 Twin Pines Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.599Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo."}}, {"model": "assets.idc", "pk": 16, "fields": {"name": "Martha Fox", "bandwidth": "200M", "contact": "Nancy Hunt", "phone": "6-(751)553-7447", "address": "San Pablo18509 Starling Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.600Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi a ipsum."}}, {"model": "assets.idc", "pk": 17, "fields": {"name": "Mary Morgan", "bandwidth": "200M", "contact": "Julia Garza", "phone": "3-(761)154-0695", "address": "Riverside6 Corscot Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.601Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In eleifend quam a odio."}}, {"model": "assets.idc", "pk": 18, "fields": {"name": "Laura Gilbert", "bandwidth": "200M", "contact": "Joyce Reid", "phone": "1-(489)059-4526", "address": "Huron3 Westerfield Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.603Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 19, "fields": {"name": "Sharon Gutierrez", "bandwidth": "200M", "contact": "Robin Graham", "phone": "9-(488)714-5225", "address": "Palm Desert15 Petterle Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.604Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam."}}, {"model": "assets.idc", "pk": 20, "fields": {"name": "Joyce Sullivan", "bandwidth": "200M", "contact": "Alice Adams", "phone": "3-(803)533-8553", "address": "Winters84 Caliangt Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.605Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nunc nisl."}}, {"model": "assets.idc", "pk": 21, "fields": {"name": "Phyllis Vasquez", "bandwidth": "200M", "contact": "Judy Gray", "phone": "3-(968)523-4654", "address": "Los Angeles8704 Calypso Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.607Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Mauris sit amet eros."}}, {"model": "assets.idc", "pk": 22, "fields": {"name": "Alice Cunningham", "bandwidth": "200M", "contact": "Denise Simmons", "phone": "3-(552)123-5275", "address": "Temecula53706 Dapin Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.608Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Phasellus id sapien in sapien iaculis congue."}}, {"model": "assets.idc", "pk": 23, "fields": {"name": "Louise Gardner", "bandwidth": "200M", "contact": "Theresa Dixon", "phone": "8-(285)789-4870", "address": "Napa12843 Forster Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.609Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros."}}, {"model": "assets.idc", "pk": 24, "fields": {"name": "Donna Lawrence", "bandwidth": "200M", "contact": "Sandra Bryant", "phone": "2-(935)136-2730", "address": "La Ca\u00f1ada Flintridge87243 Crescent Oaks Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.611Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Etiam vel augue."}}, {"model": "assets.idc", "pk": 25, "fields": {"name": "Jacqueline Carter", "bandwidth": "200M", "contact": "Laura Simpson", "phone": "3-(679)977-4491", "address": "Anaheim46308 Merrick Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.612Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi ut odio."}}, {"model": "assets.idc", "pk": 26, "fields": {"name": "Louise Snyder", "bandwidth": "200M", "contact": "Lori Hayes", "phone": "4-(342)858-0193", "address": "Rocklin57 Vernon Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.614Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nunc purus."}}, {"model": "assets.idc", "pk": 27, "fields": {"name": "Doris Reynolds", "bandwidth": "200M", "contact": "Norma Wagner", "phone": "8-(952)261-6195", "address": "Indian Wells53 Ramsey Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.616Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla tellus."}}, {"model": "assets.idc", "pk": 28, "fields": {"name": "Kelly Reid", "bandwidth": "200M", "contact": "Sara Mcdonald", "phone": "5-(543)248-9479", "address": "Pinole64 Dorton Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.617Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Suspendisse potenti."}}, {"model": "assets.idc", "pk": 29, "fields": {"name": "Ruth Gray", "bandwidth": "200M", "contact": "Heather Vasquez", "phone": "3-(725)241-1940", "address": "Paramount963 Shasta Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.618Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem."}}, {"model": "assets.idc", "pk": 30, "fields": {"name": "Elizabeth Jones", "bandwidth": "200M", "contact": "Marilyn Castillo", "phone": "9-(571)254-8016", "address": "Hidden Hills24059 Clyde Gallagher Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.620Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Donec ut dolor."}}, {"model": "assets.idc", "pk": 31, "fields": {"name": "Bonnie Watson", "bandwidth": "200M", "contact": "Marilyn Brooks", "phone": "1-(006)215-0363", "address": "Montebello58 Northland Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.621Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Maecenas pulvinar lobortis est."}}, {"model": "assets.idc", "pk": 32, "fields": {"name": "Lois Stewart", "bandwidth": "200M", "contact": "Ashley Flores", "phone": "4-(991)326-9366", "address": "Brawley27158 Fair Oaks Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.623Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi a ipsum."}}, {"model": "assets.idc", "pk": 33, "fields": {"name": "Wanda Peterson", "bandwidth": "200M", "contact": "Susan Lawson", "phone": "5-(056)760-9786", "address": "Baldwin Park107 Briar Crest Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.624Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Proin risus."}}, {"model": "assets.idc", "pk": 34, "fields": {"name": "Sarah Sullivan", "bandwidth": "200M", "contact": "Christina Greene", "phone": "7-(850)229-0377", "address": "Cypress54 Hoepker Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.626Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque ut erat."}}, {"model": "assets.idc", "pk": 35, "fields": {"name": "Jane Rodriguez", "bandwidth": "200M", "contact": "Robin Knight", "phone": "5-(352)755-6372", "address": "Antioch542 Tennyson Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.636Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."}}, {"model": "assets.idc", "pk": 36, "fields": {"name": "Lois Brown", "bandwidth": "200M", "contact": "Robin Riley", "phone": "1-(857)758-4309", "address": "Redding4239 Beilfuss Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.638Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi non quam nec dui luctus rutrum."}}, {"model": "assets.idc", "pk": 37, "fields": {"name": "Ann Kelly", "bandwidth": "200M", "contact": "Evelyn Morales", "phone": "3-(877)185-2885", "address": "Culver City5980 Mallory Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.640Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Phasellus id sapien in sapien iaculis congue."}}, {"model": "assets.idc", "pk": 38, "fields": {"name": "Ruth Wilson", "bandwidth": "200M", "contact": "Ruby Medina", "phone": "0-(567)412-9481", "address": "Sonoma8579 Arkansas Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.641Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Suspendisse ornare consequat lectus."}}, {"model": "assets.idc", "pk": 39, "fields": {"name": "Diane Hayes", "bandwidth": "200M", "contact": "Robin White", "phone": "8-(517)345-4223", "address": "Rancho Cucamonga5023 Sycamore Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.642Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla."}}, {"model": "assets.idc", "pk": 40, "fields": {"name": "Donna Martin", "bandwidth": "200M", "contact": "Sandra Lynch", "phone": "2-(378)254-7616", "address": "St. Helena68 Grim Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.644Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Donec posuere metus vitae ipsum."}}, {"model": "assets.idc", "pk": 41, "fields": {"name": "Ashley Jenkins", "bandwidth": "200M", "contact": "Teresa Black", "phone": "5-(485)633-6931", "address": "Pleasanton546 Ryan Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.645Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Aenean lectus."}}, {"model": "assets.idc", "pk": 42, "fields": {"name": "Marilyn Butler", "bandwidth": "200M", "contact": "Julie Hicks", "phone": "3-(960)818-5834", "address": "Sausalito72680 Maryland Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.646Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam."}}, {"model": "assets.idc", "pk": 43, "fields": {"name": "Angela Carpenter", "bandwidth": "200M", "contact": "Lisa Holmes", "phone": "7-(830)614-5780", "address": "Camarillo32 Anzinger Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.648Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi quis tortor id nulla ultrices aliquet."}}, {"model": "assets.idc", "pk": 44, "fields": {"name": "Janice Medina", "bandwidth": "200M", "contact": "Mary Anderson", "phone": "8-(137)407-5518", "address": "Lincoln51 Darwin Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.649Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Curabitur convallis."}}, {"model": "assets.idc", "pk": 45, "fields": {"name": "Pamela Evans", "bandwidth": "200M", "contact": "Sharon Carter", "phone": "0-(899)129-7470", "address": "Maywood3067 Troy Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.650Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis."}}, {"model": "assets.idc", "pk": 46, "fields": {"name": "Joan Cruz", "bandwidth": "200M", "contact": "Laura Mcdonald", "phone": "6-(790)029-1689", "address": "Burbank42678 Harper Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.652Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 47, "fields": {"name": "Barbara Matthews", "bandwidth": "200M", "contact": "Janice White", "phone": "9-(607)152-4392", "address": "Sonora46105 Sullivan Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.653Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Vestibulum sed magna at nunc commodo placerat."}}, {"model": "assets.idc", "pk": 48, "fields": {"name": "Patricia Johnston", "bandwidth": "200M", "contact": "Christina Williamson", "phone": "5-(078)214-3571", "address": "Palos Verdes Estates09871 Upham Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.654Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Suspendisse accumsan tortor quis turpis."}}, {"model": "assets.idc", "pk": 49, "fields": {"name": "Michelle Fox", "bandwidth": "200M", "contact": "Diana Brown", "phone": "9-(428)218-1317", "address": "Corning0 Northland Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.656Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Etiam pretium iaculis justo."}}, {"model": "assets.idc", "pk": 50, "fields": {"name": "Katherine Greene", "bandwidth": "200M", "contact": "Barbara Allen", "phone": "7-(478)112-1822", "address": "Fremont415 Johnson Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.657Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla ut erat id mauris vulputate elementum."}}, {"model": "assets.idc", "pk": 51, "fields": {"name": "Wanda Watkins", "bandwidth": "200M", "contact": "Rebecca Spencer", "phone": "3-(088)780-4286", "address": "Lake Elsinore16473 Cherokee Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.659Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci."}}, {"model": "assets.idc", "pk": 52, "fields": {"name": "Evelyn Mendoza", "bandwidth": "200M", "contact": "Carol Frazier", "phone": "9-(767)843-3362", "address": "Cerritos6 Raven Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.660Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi a ipsum."}}, {"model": "assets.idc", "pk": 53, "fields": {"name": "Catherine Jordan", "bandwidth": "200M", "contact": "Theresa Fields", "phone": "3-(550)264-9110", "address": "Huron4 Carioca Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.661Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nullam varius."}}, {"model": "assets.idc", "pk": 54, "fields": {"name": "Andrea Arnold", "bandwidth": "200M", "contact": "Janice Henry", "phone": "9-(391)293-0447", "address": "Auburn124 Leroy Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.663Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla facilisi."}}, {"model": "assets.idc", "pk": 55, "fields": {"name": "Rebecca Johnson", "bandwidth": "200M", "contact": "Diana Johnston", "phone": "2-(342)711-1279", "address": "Pomona4 Hanover Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.664Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis."}}, {"model": "assets.idc", "pk": 56, "fields": {"name": "Margaret Wheeler", "bandwidth": "200M", "contact": "Evelyn Mason", "phone": "9-(643)580-2251", "address": "El Segundo4036 Dovetail Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.665Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi non quam nec dui luctus rutrum."}}, {"model": "assets.idc", "pk": 57, "fields": {"name": "Rachel Warren", "bandwidth": "200M", "contact": "Brenda Sims", "phone": "3-(498)355-6668", "address": "Moorpark96 Glendale Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.667Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Etiam pretium iaculis justo."}}, {"model": "assets.idc", "pk": 58, "fields": {"name": "Diane Mcdonald", "bandwidth": "200M", "contact": "Margaret Gibson", "phone": "3-(324)871-6721", "address": "Grover Beach02783 Haas Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.668Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Praesent blandit lacinia erat."}}, {"model": "assets.idc", "pk": 59, "fields": {"name": "Joyce Knight", "bandwidth": "200M", "contact": "Janet Tucker", "phone": "9-(362)424-3687", "address": "Port Hueneme1932 Barby Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.669Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nulla mollis molestie lorem."}}, {"model": "assets.idc", "pk": 60, "fields": {"name": "Julie Gonzales", "bandwidth": "200M", "contact": "Julie Payne", "phone": "1-(290)664-5180", "address": "San Ramon861 Spenser Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.670Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent id massa id nisl venenatis lacinia."}}, {"model": "assets.idc", "pk": 61, "fields": {"name": "Linda Jackson", "bandwidth": "200M", "contact": "Janet Mason", "phone": "8-(818)915-4748", "address": "Yucaipa7 Sunnyside Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.672Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Duis ac nibh."}}, {"model": "assets.idc", "pk": 62, "fields": {"name": "Kathleen Garza", "bandwidth": "200M", "contact": "Anna Garza", "phone": "7-(484)629-0239", "address": "Avenal672 Dapin Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.673Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nam dui."}}, {"model": "assets.idc", "pk": 63, "fields": {"name": "Joyce Gilbert", "bandwidth": "200M", "contact": "Rachel Gonzales", "phone": "1-(988)826-1084", "address": "Exeter0132 Laurel Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.674Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nulla justo."}}, {"model": "assets.idc", "pk": 64, "fields": {"name": "Judith Stanley", "bandwidth": "200M", "contact": "Sara Patterson", "phone": "3-(243)240-0628", "address": "Laguna Hills4293 Wayridge Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.675Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque porta volutpat erat."}}, {"model": "assets.idc", "pk": 65, "fields": {"name": "Denise Jordan", "bandwidth": "200M", "contact": "Ruby Perry", "phone": "6-(225)677-9653", "address": "Sunnyvale308 Manley Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.677Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi porttitor lorem id ligula."}}, {"model": "assets.idc", "pk": 66, "fields": {"name": "Susan Medina", "bandwidth": "200M", "contact": "Joyce Davis", "phone": "4-(973)281-1036", "address": "Highland89 Almo Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.678Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Suspendisse accumsan tortor quis turpis."}}, {"model": "assets.idc", "pk": 67, "fields": {"name": "Diane Lawson", "bandwidth": "200M", "contact": "Marilyn Rogers", "phone": "7-(613)944-2049", "address": "Palmdale4702 Hoard Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.680Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci."}}, {"model": "assets.idc", "pk": 68, "fields": {"name": "Anne Greene", "bandwidth": "200M", "contact": "Michelle Reid", "phone": "1-(416)221-9748", "address": "Dublin48967 Spaight Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.681Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Integer a nibh."}}, {"model": "assets.idc", "pk": 69, "fields": {"name": "Julia Hicks", "bandwidth": "200M", "contact": "Kelly Allen", "phone": "9-(657)457-2642", "address": "La Habra Heights53682 Bunker Hill Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.682Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Duis bibendum."}}, {"model": "assets.idc", "pk": 70, "fields": {"name": "Alice Watkins", "bandwidth": "200M", "contact": "Jane Berry", "phone": "4-(224)620-1407", "address": "Bellflower87 Fairview Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.683Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Etiam pretium iaculis justo."}}, {"model": "assets.idc", "pk": 71, "fields": {"name": "Lillian Perkins", "bandwidth": "200M", "contact": "Tammy Bryant", "phone": "1-(274)123-4455", "address": "Ripon542 Carioca Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.685Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Maecenas ut massa quis augue luctus tincidunt."}}, {"model": "assets.idc", "pk": 72, "fields": {"name": "Doris Campbell", "bandwidth": "200M", "contact": "Brenda Gordon", "phone": "0-(531)710-4188", "address": "Santa Barbara8 Manley Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.686Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "In sagittis dui vel nisl."}}, {"model": "assets.idc", "pk": 73, "fields": {"name": "Linda Austin", "bandwidth": "200M", "contact": "Bonnie Alexander", "phone": "8-(081)978-7177", "address": "Yucaipa520 Melody Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.687Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi quis tortor id nulla ultrices aliquet."}}, {"model": "assets.idc", "pk": 74, "fields": {"name": "Katherine Ray", "bandwidth": "200M", "contact": "Doris Kelley", "phone": "2-(098)399-2112", "address": "Atwater605 Boyd Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.689Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Donec ut mauris eget massa tempor convallis."}}, {"model": "assets.idc", "pk": 75, "fields": {"name": "Barbara Stanley", "bandwidth": "200M", "contact": "Virginia Morgan", "phone": "6-(120)039-5912", "address": "Novato53 Oak Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.690Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vestibulum sed magna at nunc commodo placerat."}}, {"model": "assets.idc", "pk": 76, "fields": {"name": "Brenda Adams", "bandwidth": "200M", "contact": "Janet Ellis", "phone": "9-(597)492-3981", "address": "San Rafael621 Spaight Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.692Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem."}}, {"model": "assets.idc", "pk": 77, "fields": {"name": "Carolyn Gardner", "bandwidth": "200M", "contact": "Carolyn Henry", "phone": "8-(718)258-6746", "address": "Woodside08 Victoria Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.693Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Duis mattis egestas metus."}}, {"model": "assets.idc", "pk": 78, "fields": {"name": "Andrea Butler", "bandwidth": "200M", "contact": "Norma Bell", "phone": "5-(405)151-6296", "address": "Shasta Lake57386 Springs Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.694Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Maecenas pulvinar lobortis est."}}, {"model": "assets.idc", "pk": 79, "fields": {"name": "Pamela Scott", "bandwidth": "200M", "contact": "Ruby Ford", "phone": "9-(440)049-6700", "address": "La Ca\u00f1ada Flintridge5174 Nelson Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.695Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Pellentesque eget nunc."}}, {"model": "assets.idc", "pk": 80, "fields": {"name": "Kathy Hawkins", "bandwidth": "200M", "contact": "Evelyn Gray", "phone": "8-(785)701-6664", "address": "Seaside362 Pine View Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.697Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "In congue."}}, {"model": "assets.idc", "pk": 81, "fields": {"name": "Jennifer Kennedy", "bandwidth": "200M", "contact": "Susan Jacobs", "phone": "3-(470)242-5893", "address": "Marysville12936 Village Green Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.698Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante."}}, {"model": "assets.idc", "pk": 82, "fields": {"name": "Andrea Bishop", "bandwidth": "200M", "contact": "Kelly Bishop", "phone": "9-(838)134-8682", "address": "Delano248 North Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.700Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 83, "fields": {"name": "Beverly Jenkins", "bandwidth": "200M", "contact": "Ann Anderson", "phone": "1-(622)378-6834", "address": "Danville320 Derek Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.701Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris viverra diam vitae quam."}}, {"model": "assets.idc", "pk": 84, "fields": {"name": "Elizabeth Lewis", "bandwidth": "200M", "contact": "Catherine Ross", "phone": "3-(759)815-3880", "address": "Blythe04918 Dexter Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.702Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa."}}, {"model": "assets.idc", "pk": 85, "fields": {"name": "Amy Stanley", "bandwidth": "200M", "contact": "Shirley Bennett", "phone": "5-(242)223-2401", "address": "Marysville37 Anniversary Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.704Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Curabitur convallis."}}, {"model": "assets.idc", "pk": 86, "fields": {"name": "Sarah Harrison", "bandwidth": "200M", "contact": "Julia Little", "phone": "7-(117)040-4718", "address": "Apple Valley71 Hovde Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.705Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nullam molestie nibh in lectus."}}, {"model": "assets.idc", "pk": 87, "fields": {"name": "Cynthia Perkins", "bandwidth": "200M", "contact": "Emily Garrett", "phone": "9-(407)716-3250", "address": "Lafayette8 Novick Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.706Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis."}}, {"model": "assets.idc", "pk": 88, "fields": {"name": "Frances Crawford", "bandwidth": "200M", "contact": "Paula Jordan", "phone": "6-(767)856-1779", "address": "Los Altos59 Nobel Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.708Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Integer ac leo."}}, {"model": "assets.idc", "pk": 89, "fields": {"name": "Denise Jackson", "bandwidth": "200M", "contact": "Paula Powell", "phone": "1-(714)929-3650", "address": "Port Hueneme8 Oakridge Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.709Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi vestibulum, velit id pretium iaculis, diam erat fermentum justo, nec condimentum neque sapien placerat ante."}}, {"model": "assets.idc", "pk": 90, "fields": {"name": "Katherine Fox", "bandwidth": "200M", "contact": "Doris Washington", "phone": "6-(452)637-6093", "address": "Kingsburg6294 Schurz Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.710Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla facilisi."}}, {"model": "assets.idc", "pk": 91, "fields": {"name": "Catherine Jordan", "bandwidth": "200M", "contact": "Louise Weaver", "phone": "3-(789)565-9624", "address": "Alturas054 Bunker Hill Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.712Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Suspendisse potenti."}}, {"model": "assets.idc", "pk": 92, "fields": {"name": "Lillian Howell", "bandwidth": "200M", "contact": "Ruth Jordan", "phone": "1-(088)412-0788", "address": "Pacific Grove9 Sage Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.713Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Donec ut dolor."}}, {"model": "assets.idc", "pk": 93, "fields": {"name": "Kelly Murphy", "bandwidth": "200M", "contact": "Virginia Simmons", "phone": "8-(344)877-8031", "address": "Ukiah13789 Rutledge Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.714Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Aenean fermentum."}}, {"model": "assets.idc", "pk": 94, "fields": {"name": "Mildred Sanchez", "bandwidth": "200M", "contact": "Jennifer Montgomery", "phone": "1-(853)653-5085", "address": "Laguna Woods5094 Stephen Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.715Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Maecenas tincidunt lacus at velit."}}, {"model": "assets.idc", "pk": 95, "fields": {"name": "Mary Matthews", "bandwidth": "200M", "contact": "Beverly Mccoy", "phone": "5-(448)087-2874", "address": "Kerman861 Carey Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.716Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla justo."}}, {"model": "assets.idc", "pk": 96, "fields": {"name": "Angela Gibson", "bandwidth": "200M", "contact": "Ashley Fox", "phone": "9-(368)523-3859", "address": "Temple City6983 Blue Bill Park Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.718Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi non lectus."}}, {"model": "assets.idc", "pk": 97, "fields": {"name": "Marilyn Ross", "bandwidth": "200M", "contact": "Louise Wilson", "phone": "0-(285)436-0947", "address": "Montclair68397 Nancy Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.719Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Curabitur at ipsum ac tellus semper interdum."}}, {"model": "assets.idc", "pk": 98, "fields": {"name": "Judy Robertson", "bandwidth": "200M", "contact": "Anne Brown", "phone": "6-(433)915-0987", "address": "Madera59172 Victoria Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.720Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Integer ac neque."}}, {"model": "assets.idc", "pk": 99, "fields": {"name": "Heather Taylor", "bandwidth": "200M", "contact": "Cynthia Moreno", "phone": "6-(490)900-9533", "address": "Orange840 Anhalt Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.721Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla tellus."}}, {"model": "assets.idc", "pk": 100, "fields": {"name": "Cynthia Kelley", "bandwidth": "200M", "contact": "Diana Weaver", "phone": "4-(412)590-7474", "address": "Ojai385 Thompson Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-08T03:04:17.723Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede."}} \ No newline at end of file diff --git a/apps/fixtures/init.json b/apps/fixtures/init.json index a9b504052..62a9125e8 100644 --- a/apps/fixtures/init.json +++ b/apps/fixtures/init.json @@ -1 +1 @@ -[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_added": "2016-09-05T11:39:25.770Z", "created_by": "System"}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$5ReHkQOQA2Hk$DIW0b5U/uK+U0xqjA3QpYvBcODNhm2MPCm7YWbQys3I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:39:25.771Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2086-08-19T11:39:25.771Z", "created_by": "System", "user_permissions": [], "groups": [1]}}] \ No newline at end of file +[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_created": "2016-09-14T15:34:43Z", "created_by": "System"}}, {"model": "users.usergroup", "pk": 2, "fields": {"name": "Brian Smith", "comment": "Pellentesque ultrices mattis odio.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 3, "fields": {"name": "Marie Lane", "comment": "Nulla ut erat id mauris vulputate elementum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 4, "fields": {"name": "Louise Perkins", "comment": "Proin at turpis a pede posuere nonummy.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 5, "fields": {"name": "Teresa Johnson", "comment": "Donec ut mauris eget massa tempor convallis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 6, "fields": {"name": "Sharon Morgan", "comment": "Aenean sit amet justo.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 7, "fields": {"name": "Tina Mason", "comment": "Suspendisse potenti.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 8, "fields": {"name": "Paula Marshall", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 9, "fields": {"name": "Ruby Crawford", "comment": "Nullam molestie nibh in lectus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 10, "fields": {"name": "Justin Robertson", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 11, "fields": {"name": "Ronald Perry", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 12, "fields": {"name": "Lois Armstrong", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 13, "fields": {"name": "Evelyn Stewart", "comment": "Proin interdum mauris non ligula pellentesque ultrices.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 14, "fields": {"name": "Shirley Fernandez", "comment": "Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 15, "fields": {"name": "Kathryn Hunter", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 16, "fields": {"name": "Virginia Hart", "comment": "Etiam faucibus cursus urna.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 17, "fields": {"name": "Amy Miller", "comment": "Nulla ac enim.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 18, "fields": {"name": "Marie Long", "comment": "Etiam vel augue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 19, "fields": {"name": "Martha Olson", "comment": "Mauris ullamcorper purus sit amet nulla.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 20, "fields": {"name": "Jennifer Powell", "comment": "Fusce consequat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 21, "fields": {"name": "Sara Jackson", "comment": "Vivamus tortor.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 22, "fields": {"name": "Robin Meyer", "comment": "Sed ante.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 23, "fields": {"name": "Judith Gonzales", "comment": "Donec quis orci eget orci vehicula condimentum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 24, "fields": {"name": "Jean Patterson", "comment": "Nam tristique tortor eu pede.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 25, "fields": {"name": "Raymond Simmons", "comment": "Duis bibendum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 26, "fields": {"name": "Mildred Nguyen", "comment": "Integer non velit.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 27, "fields": {"name": "Bonnie Flores", "comment": "Nullam porttitor lacus at turpis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 28, "fields": {"name": "Elizabeth Fox", "comment": "Ut tellus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 29, "fields": {"name": "Rebecca Peters", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 30, "fields": {"name": "Helen Howell", "comment": "Cras pellentesque volutpat dui.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 31, "fields": {"name": "Christopher Armstrong", "comment": "Nulla facilisi.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 32, "fields": {"name": "Kathryn Schmidt", "comment": "Duis at velit eu est congue elementum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 33, "fields": {"name": "Julia Reed", "comment": "Pellentesque ultrices mattis odio.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 34, "fields": {"name": "Ann Lewis", "comment": "Curabitur in libero ut massa volutpat convallis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 35, "fields": {"name": "Wanda Romero", "comment": "In sagittis dui vel nisl.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 36, "fields": {"name": "Jean Richards", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 37, "fields": {"name": "Jessica Spencer", "comment": "Suspendisse potenti.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 38, "fields": {"name": "Linda Bowman", "comment": "Mauris ullamcorper purus sit amet nulla.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 39, "fields": {"name": "Sarah Cooper", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 40, "fields": {"name": "Donna Mitchell", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 41, "fields": {"name": "Heather West", "comment": "Duis aliquam convallis nunc.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 42, "fields": {"name": "Lois Kennedy", "comment": "Suspendisse potenti.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 43, "fields": {"name": "Louise Porter", "comment": "Quisque porta volutpat erat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 44, "fields": {"name": "Lori Martin", "comment": "Duis aliquam convallis nunc.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 45, "fields": {"name": "Ruth Sullivan", "comment": "Curabitur gravida nisi at nibh.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 46, "fields": {"name": "Jacqueline Brown", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 47, "fields": {"name": "Margaret Larson", "comment": "Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 48, "fields": {"name": "Karen Marshall", "comment": "Nullam sit amet turpis elementum ligula vehicula consequat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 49, "fields": {"name": "Betty Carr", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 50, "fields": {"name": "Debra Lane", "comment": "Integer ac neque.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 51, "fields": {"name": "Heather Payne", "comment": "Praesent blandit lacinia erat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 52, "fields": {"name": "Gloria Jenkins", "comment": "Maecenas tincidunt lacus at velit.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 53, "fields": {"name": "Sara Lane", "comment": "Sed vel enim sit amet nunc viverra dapibus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 54, "fields": {"name": "Pamela Henry", "comment": "Proin at turpis a pede posuere nonummy.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 55, "fields": {"name": "Diana Dixon", "comment": "Ut tellus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 56, "fields": {"name": "Tina Graham", "comment": "Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 57, "fields": {"name": "Janice Flores", "comment": "Nulla justo.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 58, "fields": {"name": "Deborah Warren", "comment": "Sed sagittis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 59, "fields": {"name": "Anne Carroll", "comment": "Ut at dolor quis odio consequat varius.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 60, "fields": {"name": "Betty Matthews", "comment": "Maecenas pulvinar lobortis est.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 61, "fields": {"name": "Brenda Palmer", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 62, "fields": {"name": "Phyllis Shaw", "comment": "Vivamus vestibulum sagittis sapien.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 63, "fields": {"name": "Lisa Schmidt", "comment": "Aenean auctor gravida sem.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 64, "fields": {"name": "Sandra Lewis", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 65, "fields": {"name": "Brenda Burke", "comment": "In congue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 66, "fields": {"name": "Anna Wallace", "comment": "Donec vitae nisi.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 67, "fields": {"name": "Julia Gutierrez", "comment": "Etiam vel augue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 68, "fields": {"name": "Lori Phillips", "comment": "Sed accumsan felis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 69, "fields": {"name": "Sandra Perez", "comment": "Vivamus in felis eu sapien cursus vestibulum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 70, "fields": {"name": "Maria Nichols", "comment": "Aenean fermentum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 71, "fields": {"name": "Wanda Allen", "comment": "In est risus, auctor sed, tristique in, tempus sit amet, sem.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 72, "fields": {"name": "Karen Collins", "comment": "Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 73, "fields": {"name": "Theresa Harrison", "comment": "Nulla nisl.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 74, "fields": {"name": "Debra Carr", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 75, "fields": {"name": "Ashley Daniels", "comment": "Mauris ullamcorper purus sit amet nulla.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 76, "fields": {"name": "Amanda Matthews", "comment": "Maecenas pulvinar lobortis est.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 77, "fields": {"name": "Nancy Green", "comment": "Proin eu mi.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 78, "fields": {"name": "Lisa Ferguson", "comment": "Nullam molestie nibh in lectus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 79, "fields": {"name": "Cynthia Washington", "comment": "Maecenas rhoncus aliquam lacus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 80, "fields": {"name": "Michelle Wells", "comment": "Nulla tempus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 81, "fields": {"name": "Sara Graham", "comment": "Etiam faucibus cursus urna.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 82, "fields": {"name": "Beverly Armstrong", "comment": "In hac habitasse platea dictumst.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 83, "fields": {"name": "Andrea White", "comment": "Quisque porta volutpat erat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 84, "fields": {"name": "Angela Edwards", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 85, "fields": {"name": "Julia Alexander", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 86, "fields": {"name": "Dorothy Ward", "comment": "In blandit ultrices enim.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 87, "fields": {"name": "Brenda Gonzalez", "comment": "Nunc purus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 88, "fields": {"name": "Alice Chapman", "comment": "Nam tristique tortor eu pede.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 89, "fields": {"name": "Margaret Powell", "comment": "In sagittis dui vel nisl.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 90, "fields": {"name": "Jessica Riley", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 91, "fields": {"name": "Cheryl Coleman", "comment": "Sed accumsan felis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 92, "fields": {"name": "Diana Miller", "comment": "Donec vitae nisi.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 93, "fields": {"name": "Tammy Phillips", "comment": "Mauris lacinia sapien quis libero.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 94, "fields": {"name": "Dorothy Wood", "comment": "Etiam vel augue.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 95, "fields": {"name": "Deborah Ortiz", "comment": "Praesent blandit lacinia erat.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 96, "fields": {"name": "Debra Stevens", "comment": "Nulla suscipit ligula in lacus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 97, "fields": {"name": "Donna Lawson", "comment": "Integer non velit.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 98, "fields": {"name": "Anna Stewart", "comment": "Donec posuere metus vitae ipsum.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 99, "fields": {"name": "Cheryl Williamson", "comment": "Duis mattis egestas metus.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 100, "fields": {"name": "Carolyn Sanchez", "comment": "Pellentesque at nulla.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "users.usergroup", "pk": 101, "fields": {"name": "Deborah Reid", "comment": "Sed sagittis.", "date_created": "2016-09-15T01:55:12Z", "created_by": "admin"}}, {"model": "assets.idc", "pk": 7, "fields": {"name": "Wanda Henry", "bandwidth": "200M", "contact": "Bonnie Fields", "phone": "6-(107)118-3618", "address": "Ridgecrest08293 Bellgrove Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo."}}, {"model": "assets.idc", "pk": 8, "fields": {"name": "Theresa Matthews", "bandwidth": "200M", "contact": "Janet Marshall", "phone": "1-(158)666-7567", "address": "Burbank92540 Brown Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla nisl."}}, {"model": "assets.idc", "pk": 9, "fields": {"name": "Linda Green", "bandwidth": "200M", "contact": "Catherine Miller", "phone": "6-(186)047-7348", "address": "Shasta Lake0 Vernon Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Integer ac neque."}}, {"model": "assets.idc", "pk": 10, "fields": {"name": "Donna Willis", "bandwidth": "200M", "contact": "Lisa Mendoza", "phone": "9-(242)470-1639", "address": "Redondo Beach83027 Rigney Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi vel lectus in quam fringilla rhoncus."}}, {"model": "assets.idc", "pk": 11, "fields": {"name": "Shirley Gordon", "bandwidth": "200M", "contact": "Kimberly Palmer", "phone": "9-(328)343-6730", "address": "Pittsburg3657 Scoville Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Sed accumsan felis."}}, {"model": "assets.idc", "pk": 12, "fields": {"name": "Michelle Bradley", "bandwidth": "200M", "contact": "Heather Garcia", "phone": "7-(310)079-6347", "address": "City of Commerce91064 Vidon Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi a ipsum."}}, {"model": "assets.idc", "pk": 13, "fields": {"name": "Elizabeth Lopez", "bandwidth": "200M", "contact": "Cheryl Carr", "phone": "0-(772)467-1157", "address": "Dublin951 Rusk Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla tellus."}}, {"model": "assets.idc", "pk": 14, "fields": {"name": "Lillian Hamilton", "bandwidth": "200M", "contact": "Jacqueline Frazi", "phone": "1-(901)574-2748", "address": "Placentia0 American Ash Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Duis aliquam convallis nunc."}}, {"model": "assets.idc", "pk": 15, "fields": {"name": "Jennifer Perry", "bandwidth": "200M", "contact": "Linda Long", "phone": "8-(322)730-5262", "address": "Crescent City965 Sugar Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In quis justo."}}, {"model": "assets.idc", "pk": 16, "fields": {"name": "Martha Phillips", "bandwidth": "200M", "contact": "Diana Roberts", "phone": "9-(830)108-3261", "address": "Roseville04 Vermont Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Proin eu mi."}}, {"model": "assets.idc", "pk": 17, "fields": {"name": "Susan Gordon", "bandwidth": "200M", "contact": "Stephanie Bradle", "phone": "6-(426)121-7918", "address": "Santa Fe Springs7 Elgar Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo."}}, {"model": "assets.idc", "pk": 18, "fields": {"name": "Cynthia Sims", "bandwidth": "200M", "contact": "Mary Nichols", "phone": "7-(508)008-3082", "address": "Oakdale916 Barnett Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Proin eu mi."}}, {"model": "assets.idc", "pk": 19, "fields": {"name": "Catherine Wheeler", "bandwidth": "200M", "contact": "Annie Murphy", "phone": "1-(146)987-5320", "address": "Scotts Valley76 Evergreen Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."}}, {"model": "assets.idc", "pk": 21, "fields": {"name": "Denise Davis", "bandwidth": "200M", "contact": "Christine Crawfo", "phone": "5-(628)897-7260", "address": "Calipatria9418 Cottonwood Trail", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Donec ut dolor."}}, {"model": "assets.idc", "pk": 22, "fields": {"name": "Susan Ellis", "bandwidth": "200M", "contact": "Robin Stanley", "phone": "3-(703)665-6725", "address": "Dinuba36 Brentwood Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Suspendisse accumsan tortor quis turpis."}}, {"model": "assets.idc", "pk": 24, "fields": {"name": "Phyllis Myers", "bandwidth": "200M", "contact": "Diana Stone", "phone": "2-(902)492-5081", "address": "El Monte3 Merry Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "In tempor, turpis nec euismod scelerisque, quam turpis adipiscing lorem, vitae mattis nibh ligula nec sem."}}, {"model": "assets.idc", "pk": 25, "fields": {"name": "Jennifer Ross", "bandwidth": "200M", "contact": "Laura Thompson", "phone": "2-(199)831-8725", "address": "Oakdale0 Haas Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla facilisi."}}, {"model": "assets.idc", "pk": 26, "fields": {"name": "Margaret Sanchez", "bandwidth": "200M", "contact": "Amanda Fuller", "phone": "4-(084)319-6199", "address": "Truckee84 Muir Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Sed sagittis."}}, {"model": "assets.idc", "pk": 27, "fields": {"name": "Tammy Peterson", "bandwidth": "200M", "contact": "Phyllis Young", "phone": "4-(403)500-5429", "address": "Lompoc690 Barby Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Etiam vel augue."}}, {"model": "assets.idc", "pk": 28, "fields": {"name": "Jean Bell", "bandwidth": "200M", "contact": "Lois Carroll", "phone": "0-(883)815-1542", "address": "Hidden Hills9 Muir Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Praesent blandit lacinia erat."}}, {"model": "assets.idc", "pk": 29, "fields": {"name": "Gloria Cook", "bandwidth": "200M", "contact": "Deborah Wells", "phone": "4-(878)879-4593", "address": "Sierra Madre539 Lakewood Gardens Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "In hac habitasse platea dictumst."}}, {"model": "assets.idc", "pk": 30, "fields": {"name": "Christine Torres", "bandwidth": "200M", "contact": "Norma Martin", "phone": "5-(455)707-0466", "address": "Turlock24 Sachtjen Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Etiam faucibus cursus urna."}}, {"model": "assets.idc", "pk": 31, "fields": {"name": "Martha Coleman", "bandwidth": "200M", "contact": "Virginia Evans", "phone": "0-(797)352-0548", "address": "Pismo Beach0 Cascade Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Aliquam non mauris."}}, {"model": "assets.idc", "pk": 32, "fields": {"name": "Doris Young", "bandwidth": "200M", "contact": "Christina Lawren", "phone": "1-(624)334-5677", "address": "Orinda063 Lotheville Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Donec ut dolor."}}, {"model": "assets.idc", "pk": 33, "fields": {"name": "Brenda Gray", "bandwidth": "200M", "contact": "Rebecca Mcdonald", "phone": "2-(150)996-8788", "address": "Rancho Palos Verdes280 Kensington Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh."}}, {"model": "assets.idc", "pk": 34, "fields": {"name": "Gloria Arnold", "bandwidth": "200M", "contact": "Brenda Williams", "phone": "9-(230)324-2266", "address": "Pasadena4 School Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Donec dapibus."}}, {"model": "assets.idc", "pk": 35, "fields": {"name": "Julia Frazier", "bandwidth": "200M", "contact": "Janice Welch", "phone": "1-(580)141-7916", "address": "El Segundo5 Brentwood Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Integer ac leo."}}, {"model": "assets.idc", "pk": 36, "fields": {"name": "Ruby Watson", "bandwidth": "200M", "contact": "Emily Cooper", "phone": "1-(291)494-9845", "address": "Los Angeles0 Pond Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "In hac habitasse platea dictumst."}}, {"model": "assets.idc", "pk": 37, "fields": {"name": "Brenda Morrison", "bandwidth": "200M", "contact": "Nancy Schmidt", "phone": "8-(799)952-2019", "address": "Burlingame71 Autumn Leaf Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl."}}, {"model": "assets.idc", "pk": 38, "fields": {"name": "Amy Lee", "bandwidth": "200M", "contact": "Laura Mendoza", "phone": "5-(513)114-8850", "address": "Corona70 Dapin Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est."}}, {"model": "assets.idc", "pk": 39, "fields": {"name": "Shirley Mcdonald", "bandwidth": "200M", "contact": "Norma Rodriguez", "phone": "6-(163)727-5032", "address": "Studio City19423 Warbler Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent blandit lacinia erat."}}, {"model": "assets.idc", "pk": 40, "fields": {"name": "Jane Carr", "bandwidth": "200M", "contact": "Norma Kennedy", "phone": "9-(026)075-3121", "address": "Dorris029 Sunnyside Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Ut tellus."}}, {"model": "assets.idc", "pk": 41, "fields": {"name": "Tammy Adams", "bandwidth": "200M", "contact": "Karen Simmons", "phone": "0-(026)744-5786", "address": "Colusa9562 Starling Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vestibulum rutrum rutrum neque."}}, {"model": "assets.idc", "pk": 42, "fields": {"name": "Catherine Coleman", "bandwidth": "200M", "contact": "Jean Ferguson", "phone": "7-(203)893-9201", "address": "Hughson483 American Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Proin eu mi."}}, {"model": "assets.idc", "pk": 43, "fields": {"name": "Christina Ford", "bandwidth": "200M", "contact": "Anne Kelley", "phone": "7-(361)766-8108", "address": "Sonoma6517 Homewood Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 44, "fields": {"name": "Ashley Clark", "bandwidth": "200M", "contact": "Donna Weaver", "phone": "6-(865)303-2972", "address": "Williams59106 Judy Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In congue."}}, {"model": "assets.idc", "pk": 45, "fields": {"name": "Katherine Harper", "bandwidth": "200M", "contact": "Deborah Baker", "phone": "2-(077)530-8128", "address": "Orange853 Cody Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Cras in purus eu magna vulputate luctus."}}, {"model": "assets.idc", "pk": 46, "fields": {"name": "Christine Boyd", "bandwidth": "200M", "contact": "Stephanie Bailey", "phone": "8-(720)553-4835", "address": "Calistoga76913 Arapahoe Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "In eleifend quam a odio."}}, {"model": "assets.idc", "pk": 47, "fields": {"name": "Mildred Ramirez", "bandwidth": "200M", "contact": "Paula Chapman", "phone": "2-(230)486-4798", "address": "Roseville24 Pond Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo."}}, {"model": "assets.idc", "pk": 48, "fields": {"name": "Rachel Weaver", "bandwidth": "200M", "contact": "Frances Marshall", "phone": "3-(074)015-2372", "address": "Daly City8376 Kenwood Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nam nulla."}}, {"model": "assets.idc", "pk": 49, "fields": {"name": "Janet Schmidt", "bandwidth": "200M", "contact": "Lois Perez", "phone": "9-(286)963-6298", "address": "Bradbury485 Anhalt Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Aenean fermentum."}}, {"model": "assets.idc", "pk": 50, "fields": {"name": "Christine Porter", "bandwidth": "200M", "contact": "Denise Weaver", "phone": "6-(230)220-9488", "address": "Mendota86 Hauk Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Pellentesque eget nunc."}}, {"model": "assets.idc", "pk": 51, "fields": {"name": "Sarah Cooper", "bandwidth": "200M", "contact": "Katherine King", "phone": "2-(176)708-8202", "address": "Del Rey Oaks9 Clarendon Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Fusce posuere felis sed lacus."}}, {"model": "assets.idc", "pk": 52, "fields": {"name": "Rachel Gardner", "bandwidth": "200M", "contact": "Margaret Simmons", "phone": "1-(556)814-2223", "address": "Stockton98067 Burning Wood Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque ut erat."}}, {"model": "assets.idc", "pk": 53, "fields": {"name": "Ruth Crawford", "bandwidth": "200M", "contact": "Denise Reynolds", "phone": "0-(111)540-6291", "address": "Benicia5 Nelson Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Duis faucibus accumsan odio."}}, {"model": "assets.idc", "pk": 54, "fields": {"name": "Nicole Dunn", "bandwidth": "200M", "contact": "Ashley Daniels", "phone": "0-(593)650-4400", "address": "Atascadero541 Warbler Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nunc nisl."}}, {"model": "assets.idc", "pk": 55, "fields": {"name": "Sharon Scott", "bandwidth": "200M", "contact": "Mildred Parker", "phone": "8-(426)698-1400", "address": "Emeryville7 Debra Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Fusce lacus purus, aliquet at, feugiat non, pretium quis, lectus."}}, {"model": "assets.idc", "pk": 56, "fields": {"name": "Helen Harvey", "bandwidth": "200M", "contact": "Rachel Brooks", "phone": "9-(539)900-3281", "address": "Woodside8 Hayes Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla."}}, {"model": "assets.idc", "pk": 57, "fields": {"name": "Sharon Welch", "bandwidth": "200M", "contact": "Irene Knight", "phone": "9-(479)484-8960", "address": "Maricopa3 3rd Road", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "In blandit ultrices enim."}}, {"model": "assets.idc", "pk": 58, "fields": {"name": "Judith Perez", "bandwidth": "200M", "contact": "Doris Williams", "phone": "9-(070)853-9629", "address": "Wheatland9268 Stone Corner Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nam dui."}}, {"model": "assets.idc", "pk": 59, "fields": {"name": "Marie Gonzales", "bandwidth": "200M", "contact": "Helen Gonzales", "phone": "9-(663)074-3567", "address": "Fremont1 Jenna Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus."}}, {"model": "assets.idc", "pk": 60, "fields": {"name": "Annie Owens", "bandwidth": "200M", "contact": "Robin Spencer", "phone": "9-(505)754-4001", "address": "Glendale954 Butterfield Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nam nulla."}}, {"model": "assets.idc", "pk": 61, "fields": {"name": "Margaret Woods", "bandwidth": "200M", "contact": "Nancy Webb", "phone": "5-(741)490-5249", "address": "San Gabriel4231 Wayridge Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Pellentesque viverra pede ac diam."}}, {"model": "assets.idc", "pk": 62, "fields": {"name": "Lois Martin", "bandwidth": "200M", "contact": "Irene Hart", "phone": "8-(289)102-3580", "address": "Livingston31 Stang Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla nisl."}}, {"model": "assets.idc", "pk": 63, "fields": {"name": "Annie Brown", "bandwidth": "200M", "contact": "Jennifer Perkins", "phone": "9-(703)955-1074", "address": "Yorba Linda80561 Sugar Alley", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Proin eu mi."}}, {"model": "assets.idc", "pk": 64, "fields": {"name": "Lois Turner", "bandwidth": "200M", "contact": "Denise Garcia", "phone": "2-(294)228-0955", "address": "Bell Gardens961 Bartelt Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla ut erat id mauris vulputate elementum."}}, {"model": "assets.idc", "pk": 65, "fields": {"name": "Helen Gibson", "bandwidth": "200M", "contact": "Kathleen Cook", "phone": "9-(881)761-0055", "address": "Windsor63 Stephen Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent id massa id nisl venenatis lacinia."}}, {"model": "assets.idc", "pk": 66, "fields": {"name": "Tammy Washington", "bandwidth": "200M", "contact": "Lisa Bryant", "phone": "3-(644)666-6002", "address": "King City27634 Hooker Court", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Integer ac neque."}}, {"model": "assets.idc", "pk": 67, "fields": {"name": "Kelly Banks", "bandwidth": "200M", "contact": "Nancy Simmons", "phone": "9-(777)534-1801", "address": "Glendora9081 Lakeland Lane", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "In quis justo."}}, {"model": "assets.idc", "pk": 68, "fields": {"name": "Amy Perez", "bandwidth": "200M", "contact": "Joan Hunt", "phone": "0-(467)579-0353", "address": "Shasta Lake93546 Lawn Plaza", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Duis ac nibh."}}, {"model": "assets.idc", "pk": 69, "fields": {"name": "Teresa Foster", "bandwidth": "200M", "contact": "Jennifer Gonzale", "phone": "7-(350)688-7097", "address": "Barstow794 Ludington Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci."}}, {"model": "assets.idc", "pk": 70, "fields": {"name": "Diane Perry", "bandwidth": "200M", "contact": "Pamela Lee", "phone": "9-(268)952-7790", "address": "Larkspur258 Esch Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Fusce consequat."}}, {"model": "assets.idc", "pk": 71, "fields": {"name": "Jacqueline Stanley", "bandwidth": "200M", "contact": "Katherine Wilson", "phone": "2-(827)139-8785", "address": "Ceres218 Express Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent blandit lacinia erat."}}, {"model": "assets.idc", "pk": 72, "fields": {"name": "Debra Torres", "bandwidth": "200M", "contact": "Mary Gordon", "phone": "5-(985)757-8073", "address": "Coachella57640 Montana Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Phasellus sit amet erat."}}, {"model": "assets.idc", "pk": 73, "fields": {"name": "Mildred Hamilton", "bandwidth": "200M", "contact": "Shirley Hall", "phone": "3-(675)223-7431", "address": "Carlsbad945 Golf Course Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Maecenas ut massa quis augue luctus tincidunt."}}, {"model": "assets.idc", "pk": 74, "fields": {"name": "Julia Phillips", "bandwidth": "200M", "contact": "Ruth Richardson", "phone": "2-(368)626-3624", "address": "Union City4 Redwing Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Etiam vel augue."}}, {"model": "assets.idc", "pk": 75, "fields": {"name": "Mary Bennett", "bandwidth": "200M", "contact": "Andrea Simmons", "phone": "1-(683)983-8015", "address": "Suisun City57 Londonderry Drive", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Maecenas pulvinar lobortis est."}}, {"model": "assets.idc", "pk": 76, "fields": {"name": "Lisa Henry", "bandwidth": "200M", "contact": "Sandra Campbell", "phone": "9-(136)328-7239", "address": "Fortuna4 Mccormick Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Duis mattis egestas metus."}}, {"model": "assets.idc", "pk": 77, "fields": {"name": "Alice Hall", "bandwidth": "200M", "contact": "Dorothy Gardner", "phone": "7-(684)295-4754", "address": "Yreka3 Westend Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi porttitor lorem id ligula."}}, {"model": "assets.idc", "pk": 78, "fields": {"name": "Anne Montgomery", "bandwidth": "200M", "contact": "Lois Wright", "phone": "0-(624)672-3340", "address": "Calimesa3076 Onsgard Place", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus."}}, {"model": "assets.idc", "pk": 79, "fields": {"name": "Mary Robinson", "bandwidth": "200M", "contact": "Gloria Collins", "phone": "6-(691)568-4557", "address": "Rialto34706 Corben Terrace", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Suspendisse accumsan tortor quis turpis."}}, {"model": "assets.idc", "pk": 80, "fields": {"name": "Theresa Butler", "bandwidth": "200M", "contact": "Ann Barnes", "phone": "7-(831)628-2018", "address": "Upland62 Northwestern Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi non lectus."}}, {"model": "assets.idc", "pk": 81, "fields": {"name": "Donna Moore", "bandwidth": "200M", "contact": "Marilyn Cooper", "phone": "7-(997)355-3509", "address": "Chico53 Caliangt Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla nisl."}}, {"model": "assets.idc", "pk": 82, "fields": {"name": "Catherine Clark", "bandwidth": "200M", "contact": "Evelyn Gardner", "phone": "9-(936)729-0148", "address": "Encinitas3164 Elka Way", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Praesent blandit."}}, {"model": "assets.idc", "pk": 83, "fields": {"name": "Kelly Torres", "bandwidth": "200M", "contact": "Rose Ward", "phone": "3-(333)302-6150", "address": "Adelanto9 Lukken Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Morbi non quam nec dui luctus rutrum."}}, {"model": "assets.idc", "pk": 84, "fields": {"name": "Gloria Diaz", "bandwidth": "200M", "contact": "Shirley West", "phone": "7-(995)003-7181", "address": "San Mateo6 Dorton Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Aenean fermentum."}}, {"model": "assets.idc", "pk": 85, "fields": {"name": "Marie West", "bandwidth": "200M", "contact": "Dorothy Weaver", "phone": "3-(204)516-5417", "address": "Lodi456 Old Gate Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Aenean auctor gravida sem."}}, {"model": "assets.idc", "pk": 86, "fields": {"name": "Frances Hudson", "bandwidth": "200M", "contact": "Andrea Edwards", "phone": "1-(448)835-9553", "address": "Mission Viejo1523 5th Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo."}}, {"model": "assets.idc", "pk": 87, "fields": {"name": "Donna Peters", "bandwidth": "200M", "contact": "Lillian Lawrence", "phone": "3-(949)524-1176", "address": "Livingston6230 Prentice Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "BGP\u5168\u7f51\u901a", "created_by": "Fake", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh."}}, {"model": "assets.idc", "pk": 88, "fields": {"name": "Brenda Vasquez", "bandwidth": "200M", "contact": "Paula Gordon", "phone": "2-(481)082-9972", "address": "La Habra45 Dapin Street", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Phasellus id sapien in sapien iaculis congue."}}, {"model": "assets.idc", "pk": 89, "fields": {"name": "Margaret Morales", "bandwidth": "200M", "contact": "Teresa Rice", "phone": "6-(892)534-0804", "address": "Selma3 Tennyson Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Donec semper sapien a libero."}}, {"model": "assets.idc", "pk": 90, "fields": {"name": "Gloria Ruiz", "bandwidth": "200M", "contact": "Andrea Murphy", "phone": "8-(374)456-9736", "address": "Culver City23 Bayside Circle", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nulla facilisi."}}, {"model": "assets.idc", "pk": 91, "fields": {"name": "Sharon Cook", "bandwidth": "200M", "contact": "Lisa Fernandez", "phone": "1-(495)953-8047", "address": "Stanton12308 Parkside Parkway", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Nam tristique tortor eu pede."}}, {"model": "assets.idc", "pk": 92, "fields": {"name": "Norma Day", "bandwidth": "200M", "contact": "Doris Duncan", "phone": "4-(208)430-3206", "address": "El Segundo1074 Dorton Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo."}}, {"model": "assets.idc", "pk": 93, "fields": {"name": "Mary Castillo", "bandwidth": "200M", "contact": "Melissa Mason", "phone": "9-(682)061-3784", "address": "San Dimas3 Rockefeller Center", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Duis at velit eu est congue elementum."}}, {"model": "assets.idc", "pk": 94, "fields": {"name": "Stephanie Woods", "bandwidth": "200M", "contact": "Judy Moreno", "phone": "9-(112)159-3565", "address": "Pomona48359 Maywood Junction", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Aliquam quis turpis eget elit sodales scelerisque."}}, {"model": "assets.idc", "pk": 95, "fields": {"name": "Ruby Perez", "bandwidth": "200M", "contact": "Lois Hamilton", "phone": "1-(347)779-0602", "address": "City of Commerce093 Reindahl Pass", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis."}}, {"model": "assets.idc", "pk": 96, "fields": {"name": "Catherine Weaver", "bandwidth": "200M", "contact": "Beverly Freeman", "phone": "5-(281)093-1208", "address": "Del Mar584 Bay Point", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo."}}, {"model": "assets.idc", "pk": 97, "fields": {"name": "Sara Olson", "bandwidth": "200M", "contact": "Brenda Miller", "phone": "0-(958)684-8524", "address": "Twentynine Palms039 Lillian Park", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla."}}, {"model": "assets.idc", "pk": 98, "fields": {"name": "Linda Griffin", "bandwidth": "200M", "contact": "Robin Fox", "phone": "6-(187)802-5149", "address": "Benicia8541 Merchant Hill", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Proin leo odio, porttitor id, consequat in, consequat ut, nulla."}}, {"model": "assets.idc", "pk": 99, "fields": {"name": "Julie Thompson", "bandwidth": "200M", "contact": "Joan Lawson", "phone": "9-(645)340-3742", "address": "San Pablo7502 Calypso Avenue", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u7535\u4fe1", "created_by": "Fake", "comment": "Proin eu mi."}}, {"model": "assets.idc", "pk": 100, "fields": {"name": "Kathleen Morgan", "bandwidth": "200M", "contact": "Denise Hall", "phone": "4-(511)117-0401", "address": "Portola Valley907 Garrison Crossing", "network": "192.168.1.10/24\n192.168.1.20", "date_created": "2016-09-15T01:55:28Z", "operator": "\u5317\u4eac\u8054\u901a", "created_by": "Fake", "comment": "Nulla tempus."}}, {"model": "assets.assetgroup", "pk": 1, "fields": {"name": "Sandra Miller", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Ut at dolor quis odio consequat varius.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 2, "fields": {"name": "Theresa Thomas", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam porttitor lacus at turpis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 3, "fields": {"name": "Ruby Ross", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 4, "fields": {"name": "Larry Stone", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Mauris sit amet eros.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 5, "fields": {"name": "Lillian Diaz", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Ut tellus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 6, "fields": {"name": "Martha Robertson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Sed ante.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 7, "fields": {"name": "Christine Hunter", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nulla suscipit ligula in lacus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 8, "fields": {"name": "Irene Hill", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 9, "fields": {"name": "Lisa Rose", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 10, "fields": {"name": "Kathryn Moreno", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 11, "fields": {"name": "Marie Jones", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam porttitor lacus at turpis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 12, "fields": {"name": "Robin Frazier", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In sagittis dui vel nisl.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 13, "fields": {"name": "Nicole Mason", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 14, "fields": {"name": "Sarah Lawson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nunc nisl.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 15, "fields": {"name": "Carolyn Thomas", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Vestibulum quam sapien, varius ut, blandit non, interdum in, ante.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 16, "fields": {"name": "Sarah Taylor", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Etiam pretium iaculis justo.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 17, "fields": {"name": "Barbara Payne", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nulla facilisi.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 18, "fields": {"name": "Kelly Ryan", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 19, "fields": {"name": "Irene Gibson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam varius.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 20, "fields": {"name": "Helen Cole", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nulla neque libero, convallis eget, eleifend luctus, ultricies eu, nibh.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 21, "fields": {"name": "Barbara Watkins", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nam nulla.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 22, "fields": {"name": "Annie Martin", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nunc rhoncus dui vel sem.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 23, "fields": {"name": "Kathleen Martin", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 24, "fields": {"name": "Cynthia George", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam sit amet turpis elementum ligula vehicula consequat.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 25, "fields": {"name": "Cheryl Davis", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis consequat dui nec nisi volutpat eleifend.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 26, "fields": {"name": "Kathleen Daniels", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis at velit eu est congue elementum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 27, "fields": {"name": "Michelle Dean", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas tincidunt lacus at velit.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 28, "fields": {"name": "Judy Hudson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec posuere metus vitae ipsum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 29, "fields": {"name": "Sarah Daniels", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 30, "fields": {"name": "Beverly Lewis", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Phasellus id sapien in sapien iaculis congue.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 31, "fields": {"name": "Amanda Dixon", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 32, "fields": {"name": "Kathryn Roberts", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Cras pellentesque volutpat dui.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 33, "fields": {"name": "Diana Simmons", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Praesent blandit lacinia erat.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 34, "fields": {"name": "Lois Washington", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec ut mauris eget massa tempor convallis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 35, "fields": {"name": "Gloria White", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In quis justo.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 36, "fields": {"name": "Maria Griffin", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 37, "fields": {"name": "Louise Dunn", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 38, "fields": {"name": "Diane Tucker", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Integer ac neque.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 39, "fields": {"name": "Shirley Stanley", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas leo odio, condimentum id, luctus nec, molestie sed, justo.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 40, "fields": {"name": "Kathleen Marshall", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis mattis egestas metus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 41, "fields": {"name": "Jennifer Ramos", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 42, "fields": {"name": "Betty Porter", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec quis orci eget orci vehicula condimentum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 43, "fields": {"name": "Cynthia Turner", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla dapibus dolor vel est.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 44, "fields": {"name": "Linda Simmons", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 45, "fields": {"name": "Amy Garrett", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Praesent id massa id nisl venenatis lacinia.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 46, "fields": {"name": "Marilyn Stevens", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 47, "fields": {"name": "Martha Chavez", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In eleifend quam a odio.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 48, "fields": {"name": "Shirley Dean", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Integer non velit.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 49, "fields": {"name": "Margaret Brown", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 50, "fields": {"name": "Betty Watkins", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec posuere metus vitae ipsum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 51, "fields": {"name": "Patricia Bailey", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam varius.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 52, "fields": {"name": "Melissa Gonzales", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 53, "fields": {"name": "Janice Jordan", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Cras in purus eu magna vulputate luctus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 54, "fields": {"name": "Susan Johnson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Phasellus id sapien in sapien iaculis congue.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 55, "fields": {"name": "Karen Johnson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 56, "fields": {"name": "Ruth Bowman", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas tristique, est et tempus semper, est quam pharetra magna, ac consequat metus sapien ut nunc.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 57, "fields": {"name": "Melissa Bishop", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Vivamus vestibulum sagittis sapien.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 58, "fields": {"name": "Virginia Bowman", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas pulvinar lobortis est.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 59, "fields": {"name": "Kimberly Reynolds", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec semper sapien a libero.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 60, "fields": {"name": "Mildred Bishop", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 61, "fields": {"name": "Amy Bennett", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Ut tellus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 62, "fields": {"name": "Marie Burton", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Curabitur gravida nisi at nibh.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 63, "fields": {"name": "Rose Torres", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam sit amet diam in magna bibendum imperdiet.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 64, "fields": {"name": "Mary Johnson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Mauris ullamcorper purus sit amet nulla.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 65, "fields": {"name": "Louise Kim", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 66, "fields": {"name": "Judy Fields", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 67, "fields": {"name": "Amanda Rivera", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 68, "fields": {"name": "Kathy Dixon", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 69, "fields": {"name": "Brenda Adams", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In quis justo.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 70, "fields": {"name": "Annie Scott", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In hac habitasse platea dictumst.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 71, "fields": {"name": "Pamela Wells", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec quis orci eget orci vehicula condimentum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 72, "fields": {"name": "Nicole Gilbert", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Praesent blandit.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 73, "fields": {"name": "Barbara Ramos", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis bibendum, felis sed interdum venenatis, turpis enim blandit mi, in porttitor pede justo eu massa.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 74, "fields": {"name": "Katherine Campbell", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nullam sit amet turpis elementum ligula vehicula consequat.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 75, "fields": {"name": "Julia Gordon", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse accumsan tortor quis turpis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 76, "fields": {"name": "Shirley Lawson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nunc nisl.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 77, "fields": {"name": "Catherine Gonzales", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nam nulla.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 78, "fields": {"name": "Kathryn Chapman", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Integer non velit.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 79, "fields": {"name": "Carol Porter", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In hac habitasse platea dictumst.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 80, "fields": {"name": "Cynthia Evans", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Integer aliquet, massa id lobortis convallis, tortor risus dapibus augue, vel accumsan tellus nisi eu orci.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 81, "fields": {"name": "Amanda Thompson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aenean lectus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 82, "fields": {"name": "Michelle Perez", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In est risus, auctor sed, tristique in, tempus sit amet, sem.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 83, "fields": {"name": "Pamela Wilson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Morbi non lectus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 84, "fields": {"name": "Lori Wheeler", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 85, "fields": {"name": "Judith Lynch", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas pulvinar lobortis est.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 86, "fields": {"name": "Alice James", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Curabitur in libero ut massa volutpat convallis.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 87, "fields": {"name": "Norma Fuller", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Cras in purus eu magna vulputate luctus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 88, "fields": {"name": "Wanda Hill", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "In eleifend quam a odio.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 89, "fields": {"name": "Mary Phillips", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Phasellus id sapien in sapien iaculis congue.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 90, "fields": {"name": "Michelle Evans", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 91, "fields": {"name": "Ashley Hall", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Ut tellus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 92, "fields": {"name": "Amy Andrews", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Maecenas rhoncus aliquam lacus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 93, "fields": {"name": "Jessica Lawrence", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Suspendisse potenti.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 94, "fields": {"name": "Beverly Simpson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Donec posuere metus vitae ipsum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 95, "fields": {"name": "Ann Richardson", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Duis at velit eu est congue elementum.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 96, "fields": {"name": "Donna Green", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 97, "fields": {"name": "Janet Washington", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 98, "fields": {"name": "Ruby Tucker", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Nulla suscipit ligula in lacus.", "system_users": []}}, {"model": "assets.assetgroup", "pk": 99, "fields": {"name": "Janet Stone", "created_by": "Fake", "date_created": "2016-09-15T01:55:28Z", "comment": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", "system_users": []}}, {"model": "assets.asset", "pk": 1, "fields": {"ip": "g1G.KYl.oGF.Th8", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 2, "fields": {"ip": "1ZH.gKS.4pj.EhT", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 3, "fields": {"ip": "iPJ.pHE.UXs.ruG", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 4, "fields": {"ip": "Fzm.Mn9.nbe.D1z", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 5, "fields": {"ip": "JCh.X2G.RbS.XxM", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 6, "fields": {"ip": "oIT.fZd.91c.vh2", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 7, "fields": {"ip": "GIq.uyi.vMS.AVp", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 8, "fields": {"ip": "DSN.gL2.0Lp.nYS", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 9, "fields": {"ip": "JGP.bdf.6Cn.g79", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 10, "fields": {"ip": "aLh.JRN.5ub.VrO", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 11, "fields": {"ip": "aun.3uz.TKy.F44", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 12, "fields": {"ip": "9sY.3lR.pfJ.P4j", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 13, "fields": {"ip": "tgH.SPF.gO .PS3", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 14, "fields": {"ip": "q8T.oNU.PPH.D h", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 15, "fields": {"ip": "KsU.GJF.EEV.cWB", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 16, "fields": {"ip": "5Kt.ZIT.QmR.wCB", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 17, "fields": {"ip": "j50.SqW.mOw.DSI", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 18, "fields": {"ip": "3E8.ars.HSC.5Zo", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 19, "fields": {"ip": "ltH.xVS.TCt.FUa", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 20, "fields": {"ip": "3UL.xhk.SJx.aOU", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 21, "fields": {"ip": "unk.xf8. rW.9sA", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 22, "fields": {"ip": "Cs7.MEb.Jc3.LHe", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 23, "fields": {"ip": "m5g.O2b.RS2.r8r", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 24, "fields": {"ip": "QEN.7SL.jco.W7g", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 25, "fields": {"ip": "7zk.9qD.l1C.YBS", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 26, "fields": {"ip": "nxK.Z0X.80b.BOx", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 27, "fields": {"ip": "aH6.2Zm.T5u.d9R", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 28, "fields": {"ip": "g0T.QLO.ZCb.bot", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 29, "fields": {"ip": "rUE.9 g.tfx.Qfk", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 30, "fields": {"ip": "uGp.xQ .5Y5.9Nc", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 31, "fields": {"ip": "6l0.4ER.DDw.RwI", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 32, "fields": {"ip": "Nxw.dfl.hq5.K8m", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 33, "fields": {"ip": "bDl.QWN.KC7.pSQ", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 34, "fields": {"ip": "RnD.Es8.yck.vva", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 35, "fields": {"ip": "o1O.hSh.FA0.uuI", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 36, "fields": {"ip": "oze.jPZ.fkP.fEC", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 37, "fields": {"ip": "Uwa.cPZ.R1v.OP ", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 38, "fields": {"ip": "NS1.dm6.6ti.TFT", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 39, "fields": {"ip": "4Tk.50u.XmJ.ook", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 40, "fields": {"ip": "tT5.qiI.gLW.DjJ", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 41, "fields": {"ip": "hIf.LjT.h7A.Gv ", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 42, "fields": {"ip": "TWf.KU7.YiU.soO", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 43, "fields": {"ip": "wPO.H46.yGn.bq7", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 44, "fields": {"ip": "OOA.Hz8.trx.J97", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 45, "fields": {"ip": "ngu.pHZ.1em.Gj7", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 46, "fields": {"ip": "3nj.5DN.gNT.OlR", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 47, "fields": {"ip": "GPA.7oW.3ES.i4E", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 48, "fields": {"ip": "hmz.1Qt.6xL.wOR", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 49, "fields": {"ip": "3TU.hpQ.c5M.qIu", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 50, "fields": {"ip": "NAT.Fl4.h4f.H4t", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 51, "fields": {"ip": "MPd.e O.F1T.FoW", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 52, "fields": {"ip": "Jud.1cb.IgW.Iuk", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 53, "fields": {"ip": "tS8.vME.ATr.BgM", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 54, "fields": {"ip": "gh0.PWS.7 c.D4m", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 55, "fields": {"ip": "oQz.JKx.KJL.WTl", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 56, "fields": {"ip": "jfj.7f9.R8c.SF8", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 57, "fields": {"ip": "YhL.NZI.P97.hz2", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 58, "fields": {"ip": "Eyy.NhK.i1P.PSW", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 59, "fields": {"ip": "eq4.M8r.c2l.nN2", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 60, "fields": {"ip": "oYL.Kfk.l3f.fgt", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 61, "fields": {"ip": "WWy.5il.L7X.yMq", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 62, "fields": {"ip": "7jJ.cAn.Xfg.0Do", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 63, "fields": {"ip": "rOf.zbY.DCm.D2x", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 64, "fields": {"ip": "1o1.Pio.z7D.mSb", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 65, "fields": {"ip": "Uhc.I5w.0St.JQW", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 66, "fields": {"ip": "Lcj.YNr.Ern.2j6", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 67, "fields": {"ip": "zYb.n3V.DZU.4NG", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 68, "fields": {"ip": "3Vv.esS.2m5.ibk", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 69, "fields": {"ip": "VpF.VTE.yKV.f67", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 70, "fields": {"ip": "hLm.6QJ.oxX.vYE", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 71, "fields": {"ip": "3Hv.C8E.UkW.ZRZ", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 72, "fields": {"ip": "2An.AMA.6Jk.E1w", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 73, "fields": {"ip": "MWe.L0i.wdk.Ero", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 74, "fields": {"ip": "yFa.XdM.Uat.3o3", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 75, "fields": {"ip": "LjT. qK. B5.bDb", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 76, "fields": {"ip": "ufc.w I.cUW.pWg", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 77, "fields": {"ip": "w3A.Qvc.BEW.OAk", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 78, "fields": {"ip": "6at.uFL.kKh.lhD", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 79, "fields": {"ip": "V2k.Fmi.XZp.pkA", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 80, "fields": {"ip": "bkH.hcu.EiP.5yD", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 81, "fields": {"ip": "5l0.DWb.m6w.D6n", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 82, "fields": {"ip": "UoL.esA.Z0h.7t9", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 83, "fields": {"ip": "GBB.A4n.G9Y.IrM", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 84, "fields": {"ip": "BkA.ReK.6ai.U5W", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 85, "fields": {"ip": "uTO.sPz.v2M.wng", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 86, "fields": {"ip": "lPj.suA.5wH.qrD", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 87, "fields": {"ip": "VSY.rCc.VXm.wia", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 88, "fields": {"ip": "wSZ.Nui.j21.LUi", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 89, "fields": {"ip": "UWU.e1p.Srx.iBk", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 90, "fields": {"ip": "Ofx.ps7.7IN.t3C", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 91, "fields": {"ip": "CBn.T3D. r5.rOL", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 92, "fields": {"ip": "72o.nNQ.Nvq.NA4", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 93, "fields": {"ip": " G4.JSE.b5w.UUR", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 94, "fields": {"ip": " bp.6Yx.JPZ.CMs", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 95, "fields": {"ip": "xW9.z6n.2aO.CSo", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 96, "fields": {"ip": "MQS.i4v.OJI.m9X", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 97, "fields": {"ip": "E6w.404.bNe.zKm", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 98, "fields": {"ip": "t3i.MKo.ep7.Ald", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 99, "fields": {"ip": "i4H.oOJ.BYy.3w5", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "assets.asset", "pk": 100, "fields": {"ip": "tJu.cve.gBZ.43o", "other_ip": null, "remote_card_ip": null, "hostname": null, "port": 22, "username": null, "password": null, "admin_user": null, "idc": null, "mac_address": null, "brand": null, "cpu": null, "memory": null, "disk": null, "os": null, "cabinet_no": null, "cabinet_pos": null, "number": null, "sn": null, "created_by": "Fake", "is_active": true, "date_created": "2016-09-15T01:55:28Z", "comment": null, "groups": [], "system_user": [], "status": [], "type": [], "env": []}}, {"model": "contenttypes.contenttype", "pk": 1, "fields": {"app_label": "users", "model": "user"}}, {"model": "contenttypes.contenttype", "pk": 2, "fields": {"app_label": "users", "model": "usergroup"}}, {"model": "contenttypes.contenttype", "pk": 3, "fields": {"app_label": "assets", "model": "assetextend"}}, {"model": "contenttypes.contenttype", "pk": 4, "fields": {"app_label": "assets", "model": "label"}}, {"model": "contenttypes.contenttype", "pk": 5, "fields": {"app_label": "assets", "model": "systemuser"}}, {"model": "contenttypes.contenttype", "pk": 6, "fields": {"app_label": "assets", "model": "assetgroup"}}, {"model": "contenttypes.contenttype", "pk": 7, "fields": {"app_label": "assets", "model": "adminuser"}}, {"model": "contenttypes.contenttype", "pk": 8, "fields": {"app_label": "assets", "model": "idc"}}, {"model": "contenttypes.contenttype", "pk": 9, "fields": {"app_label": "assets", "model": "asset"}}, {"model": "contenttypes.contenttype", "pk": 10, "fields": {"app_label": "perms", "model": "assetpermission"}}, {"model": "contenttypes.contenttype", "pk": 11, "fields": {"app_label": "authtoken", "model": "token"}}, {"model": "contenttypes.contenttype", "pk": 12, "fields": {"app_label": "captcha", "model": "captchastore"}}, {"model": "contenttypes.contenttype", "pk": 13, "fields": {"app_label": "auth", "model": "group"}}, {"model": "contenttypes.contenttype", "pk": 14, "fields": {"app_label": "auth", "model": "permission"}}, {"model": "contenttypes.contenttype", "pk": 15, "fields": {"app_label": "contenttypes", "model": "contenttype"}}, {"model": "contenttypes.contenttype", "pk": 16, "fields": {"app_label": "sessions", "model": "session"}}, {"model": "auth.permission", "pk": 1, "fields": {"name": "Can add user", "content_type": 1, "codename": "add_user"}}, {"model": "auth.permission", "pk": 2, "fields": {"name": "Can change user", "content_type": 1, "codename": "change_user"}}, {"model": "auth.permission", "pk": 3, "fields": {"name": "Can delete user", "content_type": 1, "codename": "delete_user"}}, {"model": "auth.permission", "pk": 4, "fields": {"name": "Can add user group", "content_type": 2, "codename": "add_usergroup"}}, {"model": "auth.permission", "pk": 5, "fields": {"name": "Can change user group", "content_type": 2, "codename": "change_usergroup"}}, {"model": "auth.permission", "pk": 6, "fields": {"name": "Can delete user group", "content_type": 2, "codename": "delete_usergroup"}}, {"model": "auth.permission", "pk": 7, "fields": {"name": "Can add asset extend", "content_type": 3, "codename": "add_assetextend"}}, {"model": "auth.permission", "pk": 8, "fields": {"name": "Can change asset extend", "content_type": 3, "codename": "change_assetextend"}}, {"model": "auth.permission", "pk": 9, "fields": {"name": "Can delete asset extend", "content_type": 3, "codename": "delete_assetextend"}}, {"model": "auth.permission", "pk": 10, "fields": {"name": "Can add label", "content_type": 4, "codename": "add_label"}}, {"model": "auth.permission", "pk": 11, "fields": {"name": "Can change label", "content_type": 4, "codename": "change_label"}}, {"model": "auth.permission", "pk": 12, "fields": {"name": "Can delete label", "content_type": 4, "codename": "delete_label"}}, {"model": "auth.permission", "pk": 13, "fields": {"name": "Can add system user", "content_type": 5, "codename": "add_systemuser"}}, {"model": "auth.permission", "pk": 14, "fields": {"name": "Can change system user", "content_type": 5, "codename": "change_systemuser"}}, {"model": "auth.permission", "pk": 15, "fields": {"name": "Can delete system user", "content_type": 5, "codename": "delete_systemuser"}}, {"model": "auth.permission", "pk": 16, "fields": {"name": "Can add asset group", "content_type": 6, "codename": "add_assetgroup"}}, {"model": "auth.permission", "pk": 17, "fields": {"name": "Can change asset group", "content_type": 6, "codename": "change_assetgroup"}}, {"model": "auth.permission", "pk": 18, "fields": {"name": "Can delete asset group", "content_type": 6, "codename": "delete_assetgroup"}}, {"model": "auth.permission", "pk": 19, "fields": {"name": "Can add admin user", "content_type": 7, "codename": "add_adminuser"}}, {"model": "auth.permission", "pk": 20, "fields": {"name": "Can change admin user", "content_type": 7, "codename": "change_adminuser"}}, {"model": "auth.permission", "pk": 21, "fields": {"name": "Can delete admin user", "content_type": 7, "codename": "delete_adminuser"}}, {"model": "auth.permission", "pk": 22, "fields": {"name": "Can add idc", "content_type": 8, "codename": "add_idc"}}, {"model": "auth.permission", "pk": 23, "fields": {"name": "Can change idc", "content_type": 8, "codename": "change_idc"}}, {"model": "auth.permission", "pk": 24, "fields": {"name": "Can delete idc", "content_type": 8, "codename": "delete_idc"}}, {"model": "auth.permission", "pk": 25, "fields": {"name": "Can add asset", "content_type": 9, "codename": "add_asset"}}, {"model": "auth.permission", "pk": 26, "fields": {"name": "Can change asset", "content_type": 9, "codename": "change_asset"}}, {"model": "auth.permission", "pk": 27, "fields": {"name": "Can delete asset", "content_type": 9, "codename": "delete_asset"}}, {"model": "auth.permission", "pk": 28, "fields": {"name": "Can add asset permission", "content_type": 10, "codename": "add_assetpermission"}}, {"model": "auth.permission", "pk": 29, "fields": {"name": "Can change asset permission", "content_type": 10, "codename": "change_assetpermission"}}, {"model": "auth.permission", "pk": 30, "fields": {"name": "Can delete asset permission", "content_type": 10, "codename": "delete_assetpermission"}}, {"model": "auth.permission", "pk": 31, "fields": {"name": "Can add Token", "content_type": 11, "codename": "add_token"}}, {"model": "auth.permission", "pk": 32, "fields": {"name": "Can change Token", "content_type": 11, "codename": "change_token"}}, {"model": "auth.permission", "pk": 33, "fields": {"name": "Can delete Token", "content_type": 11, "codename": "delete_token"}}, {"model": "auth.permission", "pk": 34, "fields": {"name": "Can add captcha store", "content_type": 12, "codename": "add_captchastore"}}, {"model": "auth.permission", "pk": 35, "fields": {"name": "Can change captcha store", "content_type": 12, "codename": "change_captchastore"}}, {"model": "auth.permission", "pk": 36, "fields": {"name": "Can delete captcha store", "content_type": 12, "codename": "delete_captchastore"}}, {"model": "auth.permission", "pk": 37, "fields": {"name": "Can add group", "content_type": 13, "codename": "add_group"}}, {"model": "auth.permission", "pk": 38, "fields": {"name": "Can change group", "content_type": 13, "codename": "change_group"}}, {"model": "auth.permission", "pk": 39, "fields": {"name": "Can delete group", "content_type": 13, "codename": "delete_group"}}, {"model": "auth.permission", "pk": 40, "fields": {"name": "Can add permission", "content_type": 14, "codename": "add_permission"}}, {"model": "auth.permission", "pk": 41, "fields": {"name": "Can change permission", "content_type": 14, "codename": "change_permission"}}, {"model": "auth.permission", "pk": 42, "fields": {"name": "Can delete permission", "content_type": 14, "codename": "delete_permission"}}, {"model": "auth.permission", "pk": 43, "fields": {"name": "Can add content type", "content_type": 15, "codename": "add_contenttype"}}, {"model": "auth.permission", "pk": 44, "fields": {"name": "Can change content type", "content_type": 15, "codename": "change_contenttype"}}, {"model": "auth.permission", "pk": 45, "fields": {"name": "Can delete content type", "content_type": 15, "codename": "delete_contenttype"}}, {"model": "auth.permission", "pk": 46, "fields": {"name": "Can add session", "content_type": 16, "codename": "add_session"}}, {"model": "auth.permission", "pk": 47, "fields": {"name": "Can change session", "content_type": 16, "codename": "change_session"}}, {"model": "auth.permission", "pk": 48, "fields": {"name": "Can delete session", "content_type": 16, "codename": "delete_session"}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$IKVlHhkZLSou$WCC2vTcaXwcaKlyNNIK0iHxM2T/x7Ppus5YD1LqE5fM=", "last_login": "2016-09-15T03:33:24Z", "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-14T15:34:43Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": "", "enable_otp": true, "secret_key_otp": "", "_private_key": "Ii0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cclxuUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxyXG5ERUstSW5mbzogREVTLUVERTMtQ0JDLEU1NTdBQUY5RjFGNUJFODlcclxuXHJcbkljdFNjOCtKbVZ0VUNMYjZIcGdnKzc2RlQxRWtqVkppaks5R0d3dzFZdHNVcHJlcGFNSFY1TjhmQjJYbmxvVE9cclxuKzRYOXpWbS9DdWFSQ3l5KzJTdFNHNnNRcFJjM3k3c1F3eWZ2RVJjWkpiUHg2blhqRlpqeFdKWmk0UklvdzdSN1xyXG5zb3lmKzZ0c0NNVWZXYSswdXEyWE5BQ0xuWjRjTHRzVEdoZ000MnpKU2N6TGJsdVFZb2lWc1FFQkl0VWhYTTJKXHJcbjV2SzN6VlhtbVE2ZjhuTlhyZ3BZZkxwc21nNjd3UnQ5YmdtMDRQV1hlL2JpUHhRSnlPRzVWdE1UVzNPOFNDVVBcclxuR1QzN2NmV1pSOHMzRzBpV1hFelVUSEFpZHdlMTllajBtMVVwZHV0U2NMN1VwSTJqdUh0TndRN2FkNkNId3IvNlxyXG5oTTRkazc1cHBIbFdMQ0g4bXdMWmpMem01OWFUNk9VMmt6a3pTYjUxNnU0SHJQRXdEZ2YrMExXbXUzOWxRMUtWXHJcbmx1a1g1eFZyRTVDL1YzMUVLWVplb1NwTTd2Q2ZGbiswalZUR2t4aGw3dkdtOFl2dk51NCsrcWg1ZU51SXpjRU9cclxubmVGSE5KZW9sd0U0YUNZOW1oNWRQamhMeFZIRUJXSWdFRm1kNG5mMVlrN3BPbTlzV1VlWDJtbjRld0hYVmk4dlxyXG5TMnJkclg2WHMwdG1tVU5HL1ZXU0E1TlJRQ2hRVHBFd3d0NXNrOEJWV1BzSWd3RjBtN0czMmw0WFhTUTI1MXZNXHJcbldubkpPbjl2M3VjWGpkbW0yMXdqdHFsZm9tYmZwUURuaDI0cVVoSE1oSHBxc3BWeitnY3BjQXpiYjNKbDNjdENcclxuVE03MlhyMkJidWFOOWVaQkRleUhSZ25XUWtYU3RKMjB1SEpESHVmam4wbVpyOVlSZ2N6ZEpvc0RLRmsrR1ZHRVxyXG43VDdncFJtalJaVlkrdkwvY2xkdVgwcmphNmlZeFVkZjA0YVVhYmZjTThLdjUvZ2J4WUJBRnMrdTlEb2Z2MGE1XHJcbllMYkUwUG9GSG9SSUJHMUhQQ01ndzhHN2hXUEZTcWp4aEkwQStObC8rS2o1Z0xoTkRzN1Exc20zem95R05ZMnlcclxub2VIRzZWWEdEVmJRbEVqSjZubmpCZUt4QjR0Qi9PdURFdDlQUTQxVlFpZUw5Q29rbkhGUU1MbEg4UU05WjdiNVxyXG5jbktpVHNzaFlGQ2tsaUpVWDBoVmcybUFOSW5FU25wK1FJOFpUMG9MWHV3aGpPeHhqUkZ5VWkyVi9TYzlpRG41XHJcbnJsR2h3OGNhQ0U5VTBuY0VLSmpINmJHeHNKdDdNMjQ5bjlrNmlWKzY0SnNFMDk0Zm5VcUlmMWZtSmZZTkhtc0dcclxuWDNMekpwditoWm9YeUZjNjRXdW11c25BeXhCQWNHV2U2RjgwV3Y5cUJlR0cyMXM5U0tGNjJQY2lWZUJTL2NBaFxyXG5JY3luTGNHVTcwVjFOSy9XTlp1SWIva3dEbHdvZm1XSitWV2NHRGRkbFU0YnhSRlhhbSsvTFMyNVF1Skh2bjZHXHJcbkhtY2RCdVhzY3oraE9WQmtsYkQ1UHpoTXg3cTNqbXYvdWEyM1Fab2VaRHB6QURQVll3bTJVN2NtV215ZHgxOFBcclxuSE1uWlloVGdPMWJ1L2NlV0EvSmNYb0RsMXkxbktqS2wwUmg4V2xNTDFHQlhDOXRmYTJld3BpTzlFZHlSWjYwaFxyXG5jZmFLdUZFM3BUZWxCZUluRmdGSWwweVJjVy8zSjZTSGxCZGRNTlB3QlNnek5HcVA1K0lERkhwU1l0REJmZUhBXHJcbjJpbVRON0p1ejhZZCtpa1FDd3RDa3cyS0pxMWhVMFN1RjR1TnEveVRpNTAwblJhSU8xUUJ1N2pFV1VDS2xoTmVcclxuejd6RStqUUNYQTg2SURLZ3JqUTA2NmdkMGcwS29UVDl1U29wTGM2ckZkeHFJcXJ0RExCVURBU2ZyY2NBbjdJS1xyXG5xWHpyTGVwOXVYYVJjeGNRS1MxSkl4SnQ2NTluWkhNY3lrZ0ZvMEYzL1Y5NXk4ZzV3eS9PQnNUQll6YXgxYXM2XHJcbnA2aHdKZTlidDhQUTRObmd3YSt1ZGJBRS9nLzcvdEJ1QWN0L0kzTE5XZEhENUpMSGIyNXNHUT09XHJcbi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tIg:1bkMko:NwpgeKKEYr8zzdgi7xGcqHbM60c", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2086-08-28T15:34:43Z", "created_by": "System", "user_permissions": [], "groups": [1]}}, {"model": "users.user", "pk": 2, "fields": {"password": "pbkdf2_sha256$30000$yTbM0j71TqJm$DUQ5AOGEGTZku1PCl693KtZGtktOl2TebVikbo/+pnc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "bonnie74", "name": "Bonnie Stanley", "email": "andrea@tagpad.name", "role": "User", "avatar": "", "wechat": "paula83", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "admin", "user_permissions": [], "groups": [1, 99]}}, {"model": "users.user", "pk": 3, "fields": {"password": "pbkdf2_sha256$30000$B1xwFMJAuRAr$cscOSKmlgUEHBYa/6wNFrxLl1vKqUJ2R19HGvGJ/L+k=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "joan94", "name": "Carol Foster", "email": "kathy@topicblab.com", "role": "Admin", "avatar": "", "wechat": "stephanie68", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "bonnie74", "user_permissions": [], "groups": [1, 71]}}, {"model": "users.user", "pk": 4, "fields": {"password": "pbkdf2_sha256$30000$iJOPMQ4Js0Ta$E3D9fc6IjzKwTY8SZclQwBTcJfP2kzHeC2FHEerS0xU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "lillian64", "name": "Frances Campbell", "email": "teresa@buzzshare.gov", "role": "Admin", "avatar": "", "wechat": "margaret91", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Suspendisse ornare consequat lectus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "joan94", "user_permissions": [], "groups": [1, 12]}}, {"model": "users.user", "pk": 5, "fields": {"password": "pbkdf2_sha256$30000$UIWBVIVgs3OM$5L/0ErLjSio/EutGd0XYue7UYuTNe0AfJ8WXqvCSKv4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "cynthia71", "name": "Margaret Ruiz", "email": "sarah@browseblab.biz", "role": "Admin", "avatar": "", "wechat": "susan85", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam faucibus cursus urna.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "joan94", "user_permissions": [], "groups": [1, 74]}}, {"model": "users.user", "pk": 6, "fields": {"password": "pbkdf2_sha256$30000$lHMLI3qcSH3I$QRavGd3dJUGIaG0gnt/4pq8pcGWCNl+6OZVkGLk68z8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "katherine70", "name": "Judith Washington", "email": "norma@pixonyx.info", "role": "Admin", "avatar": "", "wechat": "mildred72", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "admin", "user_permissions": [], "groups": [1, 13]}}, {"model": "users.user", "pk": 7, "fields": {"password": "pbkdf2_sha256$30000$nv1Q7BxGoI2C$dWEa9krCWSWMwzt0ZecO7and7wO3YgCGE+HXrvClc3Q=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "lisa86", "name": "Amy Frazier", "email": "brenda@edgeblab.edu", "role": "Admin", "avatar": "", "wechat": "sharon85", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "cynthia71", "user_permissions": [], "groups": [1, 41]}}, {"model": "users.user", "pk": 8, "fields": {"password": "pbkdf2_sha256$30000$MZIGNEGrlPEf$MTcuU1Yqz6x47DwYiJ06psFmIZwWtr02bDyxsIPK9xU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:12Z", "username": "tina63", "name": "Paula Ruiz", "email": "marilyn@twitternation.gov", "role": "User", "avatar": "", "wechat": "diane83", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:12Z", "created_by": "cynthia71", "user_permissions": [], "groups": [1, 13]}}, {"model": "users.user", "pk": 9, "fields": {"password": "pbkdf2_sha256$30000$AR5gO3nKEAtz$7zpuAPZGu0g753t/nWxqHYLLJK9qm2ctVcfC/f7qLxM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "julie92", "name": "Beverly Simpson", "email": "rebecca@yamia.mil", "role": "Admin", "avatar": "", "wechat": "rachel81", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Praesent lectus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "bonnie74", "user_permissions": [], "groups": [1, 3]}}, {"model": "users.user", "pk": 10, "fields": {"password": "pbkdf2_sha256$30000$sJOgrLoEWfL7$jaNm3yAay97Jcs5DBzWjXjYpTwnpg1KYBwYvY8q+/LE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "robin70", "name": "Susan Mendoza", "email": "melissa@pixoboo.name", "role": "Admin", "avatar": "", "wechat": "martha81", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "julie92", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 11, "fields": {"password": "pbkdf2_sha256$30000$hMUrdtxQ5EgG$1bxzOJjC06tM0Hl8ULZ3QuloGLArDTRUijlYGg7xICU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "virginia70", "name": "Lillian Thompson", "email": "tammy@trupe.biz", "role": "Admin", "avatar": "", "wechat": "kimberly80", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In blandit ultrices enim.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "tina63", "user_permissions": [], "groups": [1, 54]}}, {"model": "users.user", "pk": 12, "fields": {"password": "pbkdf2_sha256$30000$CHC8oKnRYErw$T9VvJEG9p+UVmIgvrA5QIpBzJaMvbxt4IlROsj+ScqE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "heather66", "name": "Betty Gray", "email": "susan@twitterworks.name", "role": "User", "avatar": "", "wechat": "ann68", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "bonnie74", "user_permissions": [], "groups": [1, 88]}}, {"model": "users.user", "pk": 13, "fields": {"password": "pbkdf2_sha256$30000$kerem95dK7Qy$ncmqkm62ZTzJZ1WL+dtRrD0BxNup9/EiHQl9+ilaGGY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "jacqueline88", "name": "Jean Simmons", "email": "teresa@yakidoo.name", "role": "User", "avatar": "", "wechat": "michelle94", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam faucibus cursus urna.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "admin", "user_permissions": [], "groups": [1, 18]}}, {"model": "users.user", "pk": 14, "fields": {"password": "pbkdf2_sha256$30000$WgA67aeCgkRM$j+8yC7SZ+iUZuW6yKpQrWNlA13h7kl2ngdvCpUYYmrI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "laura66", "name": "Pamela Montgomery", "email": "lillian@dabvine.com", "role": "User", "avatar": "", "wechat": "cheryl92", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec vitae nisi.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "lisa86", "user_permissions": [], "groups": [1, 101]}}, {"model": "users.user", "pk": 15, "fields": {"password": "pbkdf2_sha256$30000$IIumaITLEGcv$/7sidlSgncQeHS+ZvzuAiO8uJyfNES6r5t9i+RnjsiQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "gloria77", "name": "Tina Moore", "email": "rebecca@nlounge.mil", "role": "Admin", "avatar": "", "wechat": "lori63", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "jacqueline88", "user_permissions": [], "groups": [1, 64]}}, {"model": "users.user", "pk": 16, "fields": {"password": "pbkdf2_sha256$30000$9vfYJpuhD5n7$lZ8Tb2Oxp2KOwOINoTEkpxwtopHyQFy/gxqsfLfzL9E=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "kimberly74", "name": "Cynthia Knight", "email": "christina@tazz.net", "role": "Admin", "avatar": "", "wechat": "marie74", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer pede justo, lacinia eget, tincidunt eget, tempus vel, pede.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "joan94", "user_permissions": [], "groups": [1, 37]}}, {"model": "users.user", "pk": 17, "fields": {"password": "pbkdf2_sha256$30000$qvAwMLep4lYG$IAZoxF1oWjPyJtSZEYZpbwC/06GfyRrxpuVFTX+6nyE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "stephanie69", "name": "Stephanie Mitchell", "email": "tammy@gabspot.gov", "role": "User", "avatar": "", "wechat": "diane71", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Curabitur at ipsum ac tellus semper interdum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "virginia70", "user_permissions": [], "groups": [1, 64]}}, {"model": "users.user", "pk": 18, "fields": {"password": "pbkdf2_sha256$30000$yb2hZR4Nl6r2$QcBAeZXMV7qYnvkgCDylHTACpCLDtxVUqfsg+bgFXjw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "tina83", "name": "Jessica Miller", "email": "cheryl@browsebug.biz", "role": "Admin", "avatar": "", "wechat": "debra77", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce consequat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "stephanie69", "user_permissions": [], "groups": [1, 74]}}, {"model": "users.user", "pk": 19, "fields": {"password": "pbkdf2_sha256$30000$ziE2wz8ndf80$xo1OHl0fnCaqM0+ZA9b16JSfb7XZQmvkFNmAqwfobBE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "stephanie78", "name": "Irene Hawkins", "email": "diana@innotype.biz", "role": "User", "avatar": "", "wechat": "sara71", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer ac neque.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "tina83", "user_permissions": [], "groups": [1, 39]}}, {"model": "users.user", "pk": 20, "fields": {"password": "pbkdf2_sha256$30000$sYONHXGdiRn1$FGIm+r2dvWMvIRzCla/WqPJHvmwpmc4xGoObFHSuWLM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "kathy65", "name": "Ruby Garza", "email": "mildred@twinte.gov", "role": "User", "avatar": "", "wechat": "robin89", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nunc purus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "tina63", "user_permissions": [], "groups": [1, 41]}}, {"model": "users.user", "pk": 21, "fields": {"password": "pbkdf2_sha256$30000$lDn2qWQc2yYN$1vNW9nRjgXqu5RuGuqjMs32Eew1bXnjtS9vSqp4lZI0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "patricia88", "name": "Wanda Kelly", "email": "karen@browseblab.com", "role": "Admin", "avatar": "", "wechat": "mary73", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam varius.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "admin", "user_permissions": [], "groups": [1, 7]}}, {"model": "users.user", "pk": 22, "fields": {"password": "pbkdf2_sha256$30000$7t0FLB3KW6SA$WYkh5ULr98tyisZFdWW7S5wNMlLsNz7PzhfWe/QO8Dw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:13Z", "username": "judith93", "name": "Beverly Hanson", "email": "shirley@ntags.net", "role": "Admin", "avatar": "", "wechat": "rachel92", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:13Z", "created_by": "lillian64", "user_permissions": [], "groups": [1, 91]}}, {"model": "users.user", "pk": 23, "fields": {"password": "pbkdf2_sha256$30000$znNvYgOuvCNQ$VO9YeB5O1IGCAy/nbUqpgshoG18B5Zrz0DF0qfCxBP8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "janice76", "name": "Rachel Warren", "email": "linda@yambee.edu", "role": "Admin", "avatar": "", "wechat": "alice79", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce consequat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "katherine70", "user_permissions": [], "groups": [1, 37]}}, {"model": "users.user", "pk": 24, "fields": {"password": "pbkdf2_sha256$30000$Qs5zbrWqzqZ5$oLcDl5JfX2Xx1WSyYooAPEZSXlz92xJ7v6kwpnWVyME=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "bonnie69", "name": "Joyce Cooper", "email": "jane@mybuzz.gov", "role": "User", "avatar": "", "wechat": "shirley77", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec posuere metus vitae ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "admin", "user_permissions": [], "groups": [1, 52]}}, {"model": "users.user", "pk": 25, "fields": {"password": "pbkdf2_sha256$30000$RrIx5IS2Ii77$ygyjb2/NemojFgyN7MD0hD795KLiztXQl1swdiJpsxU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "jane63", "name": "Frances Little", "email": "janice@yoveo.biz", "role": "Admin", "avatar": "", "wechat": "sarah69", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec pharetra, magna vestibulum aliquet ultrices, erat tortor sollicitudin mi, sit amet lobortis sapien sapien non mi.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "janice76", "user_permissions": [], "groups": [1, 93]}}, {"model": "users.user", "pk": 26, "fields": {"password": "pbkdf2_sha256$30000$cMOC4o1WLusE$14SpC+FmWEi+M0fXetEO2+Imrku404D07e+AbdD+zpw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "deborah87", "name": "Tammy Peters", "email": "wanda@dablist.info", "role": "User", "avatar": "", "wechat": "lisa84", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "jacqueline88", "user_permissions": [], "groups": [1, 6]}}, {"model": "users.user", "pk": 27, "fields": {"password": "pbkdf2_sha256$30000$khqNw4q6bATe$7kDg72CEb5yep1UkXl6+x67d0uFK7gfcOKdwZWz41zc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "eric66", "name": "Amanda Cole", "email": "susan@skyba.edu", "role": "Admin", "avatar": "", "wechat": "angela65", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "stephanie69", "user_permissions": [], "groups": [1]}}, {"model": "users.user", "pk": 28, "fields": {"password": "pbkdf2_sha256$30000$5s7gTw39QQbA$NsgOOSPCtEf62R3jEB4wlLF14msTTV3LIbTamR9mKek=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "angela81", "name": "Rebecca Morales", "email": "laura@skiba.com", "role": "User", "avatar": "", "wechat": "evelyn93", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Duis aliquam convallis nunc.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "robin70", "user_permissions": [], "groups": [1, 16]}}, {"model": "users.user", "pk": 29, "fields": {"password": "pbkdf2_sha256$30000$DSckYQ2FEjUu$8K3i1XrX6Jv7ZzdVG2TfvGdaookEzsh/JYb/4F4OkO4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "nicole84", "name": "Jacqueline Long", "email": "linda@aibox.gov", "role": "User", "avatar": "", "wechat": "laura69", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Praesent lectus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "stephanie69", "user_permissions": [], "groups": [1, 45]}}, {"model": "users.user", "pk": 30, "fields": {"password": "pbkdf2_sha256$30000$ufE0c3a4NA2d$FCCSaGClO69MlyocQm/KhBwUbMf7wga9NL2s27rzcpU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "patricia69", "name": "Michelle Reyes", "email": "tammy@photofeed.name", "role": "Admin", "avatar": "", "wechat": "carolyn79", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Mauris lacinia sapien quis libero.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "virginia70", "user_permissions": [], "groups": [1, 82]}}, {"model": "users.user", "pk": 31, "fields": {"password": "pbkdf2_sha256$30000$G2FaLsITBp7g$phz2O4yV9k2iRm5a+lcuFJRcH1tYawrIQgZkubqoZC8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "sharon69", "name": "Margaret Bradley", "email": "tina@quamba.info", "role": "User", "avatar": "", "wechat": "sara64", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Sed vel enim sit amet nunc viverra dapibus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "laura66", "user_permissions": [], "groups": [1, 99]}}, {"model": "users.user", "pk": 32, "fields": {"password": "pbkdf2_sha256$30000$TulVgtY2Ub27$EJxHTVI/4NYWlyKo+Dk4d/iJsuLdrcN70gMbQWoF3M8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "ann87", "name": "Phyllis Meyer", "email": "betty@wikivu.edu", "role": "User", "avatar": "", "wechat": "ann79", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce congue, diam id ornare imperdiet, sapien urna pretium nisl, ut volutpat sapien arcu sed augue.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "patricia69", "user_permissions": [], "groups": [1, 92]}}, {"model": "users.user", "pk": 33, "fields": {"password": "pbkdf2_sha256$30000$ZMEVifwXza6c$rrVAYG/fT8Q2YBC9FmP2ZUgkGprYDc2dWmi85H8/1No=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "lois83", "name": "Judith Riley", "email": "lori@trilia.name", "role": "Admin", "avatar": "", "wechat": "marie67", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "laura66", "user_permissions": [], "groups": [1, 11]}}, {"model": "users.user", "pk": 34, "fields": {"password": "pbkdf2_sha256$30000$c5PRuduC4a0r$V6Etecsme7plCHgUgV4JccUK+51u11V7eqXqHnurzYY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "melissa84", "name": "Judith Fisher", "email": "julie@bluezoom.edu", "role": "Admin", "avatar": "", "wechat": "julie87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nulla tellus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "laura66", "user_permissions": [], "groups": [1, 99]}}, {"model": "users.user", "pk": 35, "fields": {"password": "pbkdf2_sha256$30000$8ggGlsGSu9TP$aGRk+9awfyACmrEkuRphzTZ7ornyMhwg8zKQNoPO9ug=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "sarah69", "name": "Sara Mason", "email": "christine@zoombeat.name", "role": "User", "avatar": "", "wechat": "rose89", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "virginia70", "user_permissions": [], "groups": [1, 22]}}, {"model": "users.user", "pk": 36, "fields": {"password": "pbkdf2_sha256$30000$TYpQCb6Zi75h$QzST/dPDA8Brj4vHGSJg/ZXadSiPaLUS7O2DCk/Nc3Q=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:14Z", "username": "lisa91", "name": "Debra Coleman", "email": "joyce@bubblemix.net", "role": "User", "avatar": "", "wechat": "joyce87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nam congue, risus semper porta volutpat, quam pede lobortis ligula, sit amet eleifend pede libero quis orci.", "is_first_login": true, "date_expired": "2086-08-29T01:55:14Z", "created_by": "melissa84", "user_permissions": [], "groups": [1, 4]}}, {"model": "users.user", "pk": 37, "fields": {"password": "pbkdf2_sha256$30000$ItBS2CuGi4OW$ETaZNY1yhbiUzJJpPxTqBETqOx5bY8bZ7QJ9HVNubJo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "lisa81", "name": "Kimberly Ellis", "email": "lori@rhynyx.mil", "role": "Admin", "avatar": "", "wechat": "linda92", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer tincidunt ante vel ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "tina83", "user_permissions": [], "groups": [1, 81]}}, {"model": "users.user", "pk": 38, "fields": {"password": "pbkdf2_sha256$30000$Czlc4Lh9DzqH$ChoPoT9EzaUDHtBb5wdHgf8fRvKCrcter1zFaSGluE0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "carolyn87", "name": "Andrea Flores", "email": "teresa@edgeclub.info", "role": "User", "avatar": "", "wechat": "wanda74", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vestibulum sed magna at nunc commodo placerat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "sarah69", "user_permissions": [], "groups": [1, 96]}}, {"model": "users.user", "pk": 39, "fields": {"password": "pbkdf2_sha256$30000$gozl2rwG7Skn$Kze1I7WRzv4a0pklpyAt+wvC2rTkQ7y32frOZsgsKn4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "denise82", "name": "Wanda Rice", "email": "barbara@jabbersphere.biz", "role": "User", "avatar": "", "wechat": "jean70", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nunc purus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "nicole84", "user_permissions": [], "groups": [1, 44]}}, {"model": "users.user", "pk": 40, "fields": {"password": "pbkdf2_sha256$30000$zh3ZO7WTLm82$bdsTjDzl1MXvJWNL8hIYl9YS1YJ9pTo831EqiFfd2D4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "michelle85", "name": "Beverly Romero", "email": "andrea@yotz.edu", "role": "Admin", "avatar": "", "wechat": "judith91", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Aliquam augue quam, sollicitudin vitae, consectetuer eget, rutrum at, lorem.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "carolyn87", "user_permissions": [], "groups": [1, 39]}}, {"model": "users.user", "pk": 41, "fields": {"password": "pbkdf2_sha256$30000$yoPKAAOx9Hdp$a7U34qlMJXphTWWN1pMV+BA0wcdle3CMFXEkUtazV5Y=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "anne65", "name": "Judy Peterson", "email": "irene@yakijo.mil", "role": "User", "avatar": "", "wechat": "kathleen68", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer ac neque.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "lisa81", "user_permissions": [], "groups": [1, 74]}}, {"model": "users.user", "pk": 42, "fields": {"password": "pbkdf2_sha256$30000$6f5CGxHQXjBP$tDX6khIvMCzuCOfSx9U7I4pRB0V5kM4ugU0WTdRkh8w=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "phyllis69", "name": "Andrea Banks", "email": "emily@skiba.edu", "role": "User", "avatar": "", "wechat": "donna68", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce consequat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "joan94", "user_permissions": [], "groups": [1, 33]}}, {"model": "users.user", "pk": 43, "fields": {"password": "pbkdf2_sha256$30000$kRjEXCXl63ra$lwtpXDY5JOg3Oi6wHeztp37t+CGhpcvRTqk1Rp49YqQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "barbara64", "name": "Tammy Stevens", "email": "patricia@talane.biz", "role": "Admin", "avatar": "", "wechat": "tina84", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce lacus purus, aliquet at, feugiat non, pretium quis, lectus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "eric66", "user_permissions": [], "groups": [1, 59]}}, {"model": "users.user", "pk": 44, "fields": {"password": "pbkdf2_sha256$30000$JxFODu6sZhU7$4MKMJOO+ofE/WXui1qeSAYuLZ60GzL2XpxGEu+F5Pdc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "deborah76", "name": "Dorothy Day", "email": "elizabeth@browsezoom.gov", "role": "Admin", "avatar": "", "wechat": "andrea87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Curabitur gravida nisi at nibh.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "judith93", "user_permissions": [], "groups": [1, 30]}}, {"model": "users.user", "pk": 45, "fields": {"password": "pbkdf2_sha256$30000$xrfrSxouc3FY$WSiiICGq9IhM7en4PDNqzIXQoWzzUytpaE3cwQkWVck=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "katherine86", "name": "Angela Campbell", "email": "rebecca@feedfish.mil", "role": "User", "avatar": "", "wechat": "bonnie82", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer tincidunt ante vel ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "michelle85", "user_permissions": [], "groups": [1, 62]}}, {"model": "users.user", "pk": 46, "fields": {"password": "pbkdf2_sha256$30000$M0tJnOlIGeHQ$xqXbhzCmphUp+lQG1ghGLdUTVhvEnzfC+Yta4LgkMa8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "judy90", "name": "Amanda Carroll", "email": "paula@babbleblab.biz", "role": "Admin", "avatar": "", "wechat": "judy69", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vivamus metus arcu, adipiscing molestie, hendrerit at, vulputate vitae, nisl.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "patricia69", "user_permissions": [], "groups": [1, 2]}}, {"model": "users.user", "pk": 47, "fields": {"password": "pbkdf2_sha256$30000$h472D89xtNj3$506FYhENOcvsebtIH2N/40UoFgHjnCO3UAMPz2i9q0U=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "rose93", "name": "Jennifer Webb", "email": "sandra@skivee.biz", "role": "Admin", "avatar": "", "wechat": "deborah71", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Sed accumsan felis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "lillian64", "user_permissions": [], "groups": [1, 20]}}, {"model": "users.user", "pk": 48, "fields": {"password": "pbkdf2_sha256$30000$WN0Ro8nyuDEi$nFj4JUyetQhnUCeQWESpjb6TUR1kIurLKpEDbt/FSeQ=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "marilyn72", "name": "Cynthia Olson", "email": "rachel@jabberstorm.edu", "role": "User", "avatar": "", "wechat": "barbara81", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Aliquam quis turpis eget elit sodales scelerisque.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "bonnie69", "user_permissions": [], "groups": [1, 2]}}, {"model": "users.user", "pk": 49, "fields": {"password": "pbkdf2_sha256$30000$1ZfVz6ss6RlK$5clrvMZxbTrv2+HDErEj2AdFGqxIGHErjVpFxgJ4Cw8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:15Z", "username": "jacqueline81", "name": "Frances Elliott", "email": "patricia@yakitri.gov", "role": "Admin", "avatar": "", "wechat": "amanda72", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:15Z", "created_by": "eric66", "user_permissions": [], "groups": [1, 41]}}, {"model": "users.user", "pk": 50, "fields": {"password": "pbkdf2_sha256$30000$8FvciDFPJdBD$9l416Fl453Zm6mi2ZO9ZgZVvO0yqOh9eMxfNc9boudc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "jennifer84", "name": "Louise Hansen", "email": "jean@blognation.net", "role": "User", "avatar": "", "wechat": "kathleen80", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam varius.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "melissa84", "user_permissions": [], "groups": [1, 25]}}, {"model": "users.user", "pk": 51, "fields": {"password": "pbkdf2_sha256$30000$BDw3WSK0ZSj4$HEBo0qI+AFVacPPuYElQSDl1n5RA0mdESF53WbWs83M=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "theresa64", "name": "Lois Fernandez", "email": "anna@eadel.edu", "role": "User", "avatar": "", "wechat": "lisa65", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque erat eros, viverra eget, congue eget, semper rutrum, nulla.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "anne65", "user_permissions": [], "groups": [1, 86]}}, {"model": "users.user", "pk": 52, "fields": {"password": "pbkdf2_sha256$30000$Y4zvVQBV3RYb$S57vpWdHHTiDLPm3KbQ3ZAYCL/OerVoZa/JccyhkB9Y=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "jennifer81", "name": "Martha Willis", "email": "margaret@topicware.com", "role": "User", "avatar": "", "wechat": "jennifer88", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam vel augue.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "janice76", "user_permissions": [], "groups": [1, 10]}}, {"model": "users.user", "pk": 53, "fields": {"password": "pbkdf2_sha256$30000$muAHw50f1PJy$N3P/qa6dV//nWxZYo44lwUTTY6FVeI/3MhHsTUmmSjA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "nancy90", "name": "Tina Arnold", "email": "irene@muxo.mil", "role": "User", "avatar": "", "wechat": "carolyn68", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nam ultrices, libero non mattis pulvinar, nulla pede ullamcorper augue, a suscipit nulla elit ac nulla.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "julie92", "user_permissions": [], "groups": [1, 24]}}, {"model": "users.user", "pk": 54, "fields": {"password": "pbkdf2_sha256$30000$6ti6txNiKdBw$O+oePFgL3ICqQipsSQuFtWBuDEHfv9dryD+s7WBKcrw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "nancy79", "name": "Carolyn Morris", "email": "jean@quimba.mil", "role": "User", "avatar": "", "wechat": "stephanie63", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In hac habitasse platea dictumst.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "jacqueline81", "user_permissions": [], "groups": [1, 36]}}, {"model": "users.user", "pk": 55, "fields": {"password": "pbkdf2_sha256$30000$rRobV9wodYl7$9Ru4xZfQRNzpW9jSMMp/YpG8EzdAVp6TiUvrqOFlyNE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "anne82", "name": "Michelle Foster", "email": "lillian@roombo.gov", "role": "User", "avatar": "", "wechat": "elizabeth72", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "janice76", "user_permissions": [], "groups": [1, 79]}}, {"model": "users.user", "pk": 56, "fields": {"password": "pbkdf2_sha256$30000$h6faFBdaN7Ir$PQ6Qs7GmZc5AH7JyNLKTRvzeJxArrkzF0I8n+EpO+S4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "kathy64", "name": "Katherine Jackson", "email": "alice@twitterlist.name", "role": "Admin", "avatar": "", "wechat": "carol79", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Proin eu mi.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "gloria77", "user_permissions": [], "groups": [1, 8]}}, {"model": "users.user", "pk": 57, "fields": {"password": "pbkdf2_sha256$30000$c4iLKp44LRVQ$zlE9dNgPSdbgMmjE6Ge/CErPK8PQrj7sLpuMVj//hd0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "andrea85", "name": "Teresa Little", "email": "barbara@dabvine.biz", "role": "Admin", "avatar": "", "wechat": "debra72", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam vel augue.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "marilyn72", "user_permissions": [], "groups": [1, 80]}}, {"model": "users.user", "pk": 58, "fields": {"password": "pbkdf2_sha256$30000$KJw6szUO6zsF$pqWiqk/3a1dPc2zON7miii5lCuXb7RK3goN31N1cDIw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "janet86", "name": "Carolyn Ford", "email": "irene@wikivu.edu", "role": "User", "avatar": "", "wechat": "robin89", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec quis orci eget orci vehicula condimentum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "heather66", "user_permissions": [], "groups": [1, 22]}}, {"model": "users.user", "pk": 59, "fields": {"password": "pbkdf2_sha256$30000$jAZTcyzAITI4$FMAL9dQ/5fbSbVXPtpkZES/tEVFOAttUD4TbD25s6A4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "lillian65", "name": "Katherine Palmer", "email": "theresa@rooxo.mil", "role": "User", "avatar": "", "wechat": "doris64", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Curabitur gravida nisi at nibh.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "jane63", "user_permissions": [], "groups": [1, 8]}}, {"model": "users.user", "pk": 60, "fields": {"password": "pbkdf2_sha256$30000$SmrnEoxozF1L$QB1t73gAGaR3JPlXlVRcDIn9JXw6DdnhwylqQynoJJY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "brenda84", "name": "Kathleen Dean", "email": "rachel@cogibox.mil", "role": "User", "avatar": "", "wechat": "margaret73", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vivamus tortor.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "carolyn87", "user_permissions": [], "groups": [1, 20]}}, {"model": "users.user", "pk": 61, "fields": {"password": "pbkdf2_sha256$30000$g0xJWkJ7WxDf$8kn654GW+E9uKSF9L3sjtNvKS4UDCquSSGutqFNfW/A=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:16Z", "username": "paula73", "name": "Kathy Garza", "email": "diane@skidoo.edu", "role": "Admin", "avatar": "", "wechat": "dorothy92", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vestibulum sed magna at nunc commodo placerat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:16Z", "created_by": "lisa91", "user_permissions": [], "groups": [1, 76]}}, {"model": "users.user", "pk": 62, "fields": {"password": "pbkdf2_sha256$30000$0GOuM8IRehSo$ep5zLCs289Rw15TmmMW6NU0Uev6M4LTCwxU3dNYmQJs=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "nicole69", "name": "Sandra Lopez", "email": "nancy@yakitri.name", "role": "User", "avatar": "", "wechat": "frances76", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam sit amet turpis elementum ligula vehicula consequat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "lisa86", "user_permissions": [], "groups": [1, 36]}}, {"model": "users.user", "pk": 63, "fields": {"password": "pbkdf2_sha256$30000$eGI0SYEfKVrj$VGPQiaxk4GlNjf3Kr2JRxBqStLSf42knNIsgIZBALNU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "bonnie85", "name": "Kelly Chavez", "email": "cynthia@ailane.biz", "role": "Admin", "avatar": "", "wechat": "diana79", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "lillian65", "user_permissions": [], "groups": [1, 84]}}, {"model": "users.user", "pk": 64, "fields": {"password": "pbkdf2_sha256$30000$mYa0lSMe7SBm$egCzgBqBCZjYcnu7MiAUBQD5e3fh0/3vLn2JpXLlQ6s=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "sara86", "name": "Maria Sanders", "email": "kimberly@eidel.net", "role": "User", "avatar": "", "wechat": "emily85", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nulla suscipit ligula in lacus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "bonnie85", "user_permissions": [], "groups": [1, 84]}}, {"model": "users.user", "pk": 65, "fields": {"password": "pbkdf2_sha256$30000$AZnonfYt27Nz$EIKRJWiit0swQ0m8r8PaVBXEP5fVr8Bpgowb1FegVBE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "carlos80", "name": "Patricia Hudson", "email": "amanda@mudo.com", "role": "Admin", "avatar": "", "wechat": "martha64", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Praesent blandit lacinia erat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "paula73", "user_permissions": [], "groups": [1, 23]}}, {"model": "users.user", "pk": 66, "fields": {"password": "pbkdf2_sha256$30000$990fqt6iUR8W$BPq+nPIoJBfrAO0AkK/Qw1QCQNBSglgT2xKwpx1tMQI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "elizabeth63", "name": "Mary Sims", "email": "cheryl@browsetype.mil", "role": "Admin", "avatar": "", "wechat": "janet73", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Etiam pretium iaculis justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "judy90", "user_permissions": [], "groups": [1, 84]}}, {"model": "users.user", "pk": 67, "fields": {"password": "pbkdf2_sha256$30000$2F1e9rZQKC1H$X1dgFUltjCoil7Fh3me1McLZW6rjlZen7zL9GOpUvFo=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "rebecca68", "name": "Michelle Holmes", "email": "julie@plambee.biz", "role": "User", "avatar": "", "wechat": "susan76", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nam tristique tortor eu pede.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "katherine86", "user_permissions": [], "groups": [1, 28]}}, {"model": "users.user", "pk": 68, "fields": {"password": "pbkdf2_sha256$30000$IJyXJnaZ6Daa$YorHVCNkR+S6d6MHknJfjrauRdIAWXR8+a1WjT704oI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "lori73", "name": "Ruby Lawrence", "email": "ruby@tagtune.net", "role": "User", "avatar": "", "wechat": "lillian91", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Mauris enim leo, rhoncus sed, vestibulum sit amet, cursus id, turpis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "jennifer84", "user_permissions": [], "groups": [1, 97]}}, {"model": "users.user", "pk": 69, "fields": {"password": "pbkdf2_sha256$30000$D7g4k0cD3Pbj$KNTXQ6+A0HLt7SJRqT0fRpLR5WLF/w1MxqbJnCXQ5IA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "linda88", "name": "Donna Morris", "email": "annie@trupe.com", "role": "Admin", "avatar": "", "wechat": "janice93", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Suspendisse potenti.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "lillian65", "user_permissions": [], "groups": [1, 29]}}, {"model": "users.user", "pk": 70, "fields": {"password": "pbkdf2_sha256$30000$mNvDDYaDA7Ob$CZQ7mGIkdk7dbSGqUL92yG58c/xX4zrbnnFsPyaXCbA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "ruby65", "name": "Barbara Austin", "email": "christine@meezzy.info", "role": "Admin", "avatar": "", "wechat": "judy72", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras non velit nec nisi vulputate nonummy.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "jennifer81", "user_permissions": [], "groups": [1, 36]}}, {"model": "users.user", "pk": 71, "fields": {"password": "pbkdf2_sha256$30000$ZG5zSpblnVHv$+DmWQ9HV0/biw1jsweqEd1yTbnnk9/hLnfdHRVMAd7Y=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "carol83", "name": "Lisa Baker", "email": "jane@kayveo.info", "role": "Admin", "avatar": "", "wechat": "frances71", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec odio justo, sollicitudin ut, suscipit a, feugiat et, eros.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "elizabeth63", "user_permissions": [], "groups": [1, 16]}}, {"model": "users.user", "pk": 72, "fields": {"password": "pbkdf2_sha256$30000$rho4MaMy7ZzH$El/9X5pBIiPXEQPohvRrQsoQWNHS/hg4rBFI6YYWX0I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "cheryl68", "name": "Susan Chapman", "email": "jane@gabvine.org", "role": "User", "avatar": "", "wechat": "rebecca93", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Maecenas pulvinar lobortis est.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "judith93", "user_permissions": [], "groups": [1, 22]}}, {"model": "users.user", "pk": 73, "fields": {"password": "pbkdf2_sha256$30000$anEm0e1qZe3B$BINmray3lflxUco7bbkb44PgAgYihiglgJ12j34EZzU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:17Z", "username": "kathryn79", "name": "Louise Murphy", "email": "rachel@avavee.edu", "role": "User", "avatar": "", "wechat": "heather69", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Pellentesque eget nunc.", "is_first_login": true, "date_expired": "2086-08-29T01:55:17Z", "created_by": "melissa84", "user_permissions": [], "groups": [1, 48]}}, {"model": "users.user", "pk": 74, "fields": {"password": "pbkdf2_sha256$30000$srPP9EzYb93I$ce8+nbRpenHBSAbMnuPBrdRq4G7RaFp2ULk27FPBRsA=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "ruby90", "name": "Diane Elliott", "email": "louise@leexo.name", "role": "User", "avatar": "", "wechat": "anna74", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Vestibulum ac est lacinia nisi venenatis tristique.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "lisa81", "user_permissions": [], "groups": [1, 66]}}, {"model": "users.user", "pk": 75, "fields": {"password": "pbkdf2_sha256$30000$rm77CbmRmQwd$WkEZuvokZ1zYYS8xCbK5VZTz3nSVB0+ywA0Gxr0+pdY=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "linda89", "name": "Louise Dean", "email": "michelle@npath.com", "role": "User", "avatar": "", "wechat": "brenda94", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Proin risus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "deborah87", "user_permissions": [], "groups": [1, 13]}}, {"model": "users.user", "pk": 76, "fields": {"password": "pbkdf2_sha256$30000$ZMvFYikBYWaN$8GoJyS9A/hSvgRB+UzSkV6iAp3FkVJtK1WI7IAAxD9g=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "sandra69", "name": "Laura West", "email": "pamela@ntag.edu", "role": "Admin", "avatar": "", "wechat": "linda76", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam orci pede, venenatis non, sodales sed, tincidunt eu, felis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "laura66", "user_permissions": [], "groups": [1, 41]}}, {"model": "users.user", "pk": 77, "fields": {"password": "pbkdf2_sha256$30000$2KJj0hrJZveX$xJJ/mUDR6VUgbts4s9JGCynEebSHX02yIoN+Z/vkm0I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "sandra83", "name": "Patricia Nguyen", "email": "heather@dabshots.com", "role": "User", "avatar": "", "wechat": "catherine87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer ac neque.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "phyllis69", "user_permissions": [], "groups": [1, 41]}}, {"model": "users.user", "pk": 78, "fields": {"password": "pbkdf2_sha256$30000$AZYdtWL4oiET$aFNHutAWF2p8aJ6osIthOK6b3kHF5ZzXUoloZDqJJco=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "sarah77", "name": "Carol Richards", "email": "andrea@mydeo.info", "role": "Admin", "avatar": "", "wechat": "maria74", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Fusce lacus purus, aliquet at, feugiat non, pretium quis, lectus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "patricia69", "user_permissions": [], "groups": [1, 64]}}, {"model": "users.user", "pk": 79, "fields": {"password": "pbkdf2_sha256$30000$uy7N7rTghX4m$xtRdNZ5bQx5lG4je3aPhBO1ejn3re5qSEccR5R3w+Hk=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "betty91", "name": "Jessica Gray", "email": "carol@yodoo.info", "role": "User", "avatar": "", "wechat": "judith90", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Morbi a ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "melissa84", "user_permissions": [], "groups": [1, 93]}}, {"model": "users.user", "pk": 80, "fields": {"password": "pbkdf2_sha256$30000$orws1WK4ck1a$SxToLTjrJ9wYLHeDURMDfBCGjYZ3utSAUmmJx+Dbz2M=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "stephanie63", "name": "Martha Hughes", "email": "katherine@quamba.mil", "role": "User", "avatar": "", "wechat": "anna69", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nullam varius.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "jacqueline88", "user_permissions": [], "groups": [1, 68]}}, {"model": "users.user", "pk": 81, "fields": {"password": "pbkdf2_sha256$30000$9uAN25AaYrN9$Axz7EkHzfM1XVgS30jrBbV2YjNtol8cwKTZBH4UYXc4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "beverly79", "name": "Wanda Butler", "email": "kathleen@viva.edu", "role": "User", "avatar": "", "wechat": "teresa64", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In quis justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "jennifer84", "user_permissions": [], "groups": [1, 87]}}, {"model": "users.user", "pk": 82, "fields": {"password": "pbkdf2_sha256$30000$XSCXwKOSMkv7$cLvc9ilhhS7eET95+DA0XuBM6cCw7kTLfTWLnNmNziU=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "judy75", "name": "Frances Ross", "email": "ruth@oyondu.com", "role": "User", "avatar": "", "wechat": "norma83", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Nulla suscipit ligula in lacus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "bonnie85", "user_permissions": [], "groups": [1]}}, {"model": "users.user", "pk": 83, "fields": {"password": "pbkdf2_sha256$30000$dDIouWmOTgbc$UIsnigZXUP5AaQ+fEGQGnwJoYqtDHFp1gcoaLrZL2Ow=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "mildred83", "name": "Melissa Banks", "email": "brenda@twitterwire.com", "role": "Admin", "avatar": "", "wechat": "brenda88", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Curabitur in libero ut massa volutpat convallis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "jennifer81", "user_permissions": [], "groups": [1, 96]}}, {"model": "users.user", "pk": 84, "fields": {"password": "pbkdf2_sha256$30000$HXmeR1kfq6N5$S1Ng7jQNTeZGRmwWWivUa/azHI4+1nQ2IgFFrZT9CiE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "anne91", "name": "Catherine Bailey", "email": "tammy@jabbersphere.info", "role": "User", "avatar": "", "wechat": "wanda77", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Morbi sem mauris, laoreet ut, rhoncus aliquet, pulvinar sed, nisl.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "joan94", "user_permissions": [], "groups": [1, 67]}}, {"model": "users.user", "pk": 85, "fields": {"password": "pbkdf2_sha256$30000$8t9jr25DEX2M$oWDX+5WAXy+ncQZ3a1cCpWylybahtaZjcA1JVObm8mw=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "ruby79", "name": "Rebecca Greene", "email": "amy@jazzy.gov", "role": "User", "avatar": "", "wechat": "helen78", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec quis orci eget orci vehicula condimentum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "carlos80", "user_permissions": [], "groups": [1, 74]}}, {"model": "users.user", "pk": 86, "fields": {"password": "pbkdf2_sha256$30000$lUKpfJXuSH9w$GiEpV/YNed080JXRPrSSeqBqyjIxKko1gdnPkF6xdbM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:18Z", "username": "tina75", "name": "Jean Pierce", "email": "joan@quinu.mil", "role": "Admin", "avatar": "", "wechat": "rebecca87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque id justo sit amet sapien dignissim vestibulum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:18Z", "created_by": "sarah69", "user_permissions": [], "groups": [1, 72]}}, {"model": "users.user", "pk": 87, "fields": {"password": "pbkdf2_sha256$30000$m7ZoQnIldps7$Ky7ZmY61QRK/Hm5oTf3KgIRXxqzSf7knJxOq8l4+McM=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "joyce73", "name": "Cheryl Bryant", "email": "denise@myworks.biz", "role": "Admin", "avatar": "", "wechat": "kathryn82", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec posuere metus vitae ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "rebecca68", "user_permissions": [], "groups": [1, 8]}}, {"model": "users.user", "pk": 88, "fields": {"password": "pbkdf2_sha256$30000$PyDh6KFIkNi9$PyHeNzexW/ksT09D3gK1czE5sUKopyO0G/dGylcyJ+0=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "lois67", "name": "Barbara Kelly", "email": "kelly@divavu.edu", "role": "User", "avatar": "", "wechat": "kathleen87", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Integer tincidunt ante vel ipsum.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "judy75", "user_permissions": [], "groups": [1, 71]}}, {"model": "users.user", "pk": 89, "fields": {"password": "pbkdf2_sha256$30000$3ewpjVwGjV0r$O2efrXjrLkovn0gDzxtt430kugxtDujUR2lTahtxYbE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "helen80", "name": "Phyllis Jordan", "email": "marilyn@youopia.name", "role": "User", "avatar": "", "wechat": "catherine91", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec ut mauris eget massa tempor convallis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "virginia70", "user_permissions": [], "groups": [1, 82]}}, {"model": "users.user", "pk": 90, "fields": {"password": "pbkdf2_sha256$30000$YCN7Y4OXGe9j$BC4apeXu9hZUlndOmBnkWULvT5JhcuCVLXBZvpwtB9s=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "katherine65", "name": "Elizabeth Peterson", "email": "mildred@feedspan.gov", "role": "User", "avatar": "", "wechat": "brenda73", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "In est risus, auctor sed, tristique in, tempus sit amet, sem.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "kathy64", "user_permissions": [], "groups": [1, 71]}}, {"model": "users.user", "pk": 91, "fields": {"password": "pbkdf2_sha256$30000$ztfF2R3gx3AV$KZByDcNg/3eDFTXij2lRyv/1TmEG+jAZB+/FLBeRT8c=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "kimberly64", "name": "Amy Coleman", "email": "rose@kazio.mil", "role": "User", "avatar": "", "wechat": "tammy82", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Morbi quis tortor id nulla ultrices aliquet.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "kathryn79", "user_permissions": [], "groups": [1, 70]}}, {"model": "users.user", "pk": 92, "fields": {"password": "pbkdf2_sha256$30000$U5IKqQEDwcX7$E8Cbiw4czEFLfwPPqSQ+aHhABwDe7DuDwlDZXa8amio=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "doris67", "name": "Lori Ross", "email": "frances@riffpedia.edu", "role": "User", "avatar": "", "wechat": "tina92", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque arcu libero, rutrum ac, lobortis vel, dapibus at, diam.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "sandra83", "user_permissions": [], "groups": [1, 24]}}, {"model": "users.user", "pk": 93, "fields": {"password": "pbkdf2_sha256$30000$SRFrehlptcfI$wdD+DbNfxWceUx1LWmQAya+E7ERQQFszoN7ju9OiTvI=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "louise68", "name": "Mildred Hanson", "email": "martha@tagchat.mil", "role": "User", "avatar": "", "wechat": "denise75", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Maecenas rhoncus aliquam lacus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "sarah77", "user_permissions": [], "groups": [1, 26]}}, {"model": "users.user", "pk": 94, "fields": {"password": "pbkdf2_sha256$30000$1VmciJRCgLkF$7wvjjaIXn6qJnBhoEXoc3sZ4SVwogj5wVmhPqzFIZqE=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "jessica89", "name": "Virginia Stone", "email": "kathleen@vinder.edu", "role": "Admin", "avatar": "", "wechat": "cynthia71", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras in purus eu magna vulputate luctus.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "jane63", "user_permissions": [], "groups": [1, 6]}}, {"model": "users.user", "pk": 95, "fields": {"password": "pbkdf2_sha256$30000$F4xh4xhxFepR$MjkKz+TeEtlG19OsWDXuNsV0g1J9nOuFvY5Ou1Wyx/g=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "kathleen90", "name": "Julie Bailey", "email": "louise@reallinks.com", "role": "Admin", "avatar": "", "wechat": "wanda67", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque ut erat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "gloria77", "user_permissions": [], "groups": [1, 85]}}, {"model": "users.user", "pk": 96, "fields": {"password": "pbkdf2_sha256$30000$Bu3uw0GnHZ8X$mDHWUyNZKiWpXhf14hKbKDJvmrw+5J4+7WkryqaUFvs=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "theresa84", "name": "Rachel Lawson", "email": "evelyn@pixonyx.info", "role": "User", "avatar": "", "wechat": "cynthia84", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Quisque ut erat.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "tina63", "user_permissions": [], "groups": [1, 70]}}, {"model": "users.user", "pk": 97, "fields": {"password": "pbkdf2_sha256$30000$o2InNwJyGjqv$RtvS2Rjl0AWNepVJI3aELIFuwSyxMD93LdJcXkECAn4=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "helen64", "name": "Mary Cunningham", "email": "laura@katz.biz", "role": "User", "avatar": "", "wechat": "annie93", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Cras mi pede, malesuada in, imperdiet et, commodo vulputate, justo.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "kathryn79", "user_permissions": [], "groups": [1, 88]}}, {"model": "users.user", "pk": 98, "fields": {"password": "pbkdf2_sha256$30000$nbkZrF7fDTCL$Gs2AA+54g4/muEQBrlYxgILMLN3EKwi7hLcX7UEsQgc=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "evelyn78", "name": "Irene White", "email": "ann@jabbercube.com", "role": "User", "avatar": "", "wechat": "elizabeth90", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Donec diam neque, vestibulum eget, vulputate ut, ultrices vel, augue.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "sara86", "user_permissions": [], "groups": [1, 90]}}, {"model": "users.user", "pk": 99, "fields": {"password": "pbkdf2_sha256$30000$LRQ6c9p5TaHK$ZR1LflnFcbrFu287KB82Rlz18zEBaSCMdZTLjXx60Q8=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-15T01:55:19Z", "username": "jane86", "name": "Denise Davis", "email": "bonnie@eidel.com", "role": "Admin", "avatar": "", "wechat": "susan84", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Curabitur in libero ut massa volutpat convallis.", "is_first_login": true, "date_expired": "2086-08-29T01:55:19Z", "created_by": "carolyn87", "user_permissions": [], "groups": [1, 96]}}, {"model": "authtoken.token", "pk": "0052f4d9b32f048bbd82bdd78b6e3089bb01bd2b", "fields": {"user": 77, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "063c7c58e2873bead8bbf29ecf9551f04ec77680", "fields": {"user": 33, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "077b9ce3bfe3e1147532902dada3cabbc1ceb5e1", "fields": {"user": 1, "created": "2016-09-14T15:34:43Z"}}, {"model": "authtoken.token", "pk": "0a818ff504de3ca8c2e08c2d9c68eed8d46fe9a1", "fields": {"user": 11, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "0b89fb24dcd3fbbd8bc5e85434c6d78869f7351f", "fields": {"user": 46, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "0cf3cd51ff1f526f5d0cecf5c8dedaa6e318645c", "fields": {"user": 64, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "0f62e2271f3e7c4e3471da1f3ef82777d7e799ae", "fields": {"user": 32, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "12a99652b335ead9b880a6752bb2c562a9511636", "fields": {"user": 47, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "132968929c1f44bf9bfcdd7955ac53a5b2a8c745", "fields": {"user": 18, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "14798fe789c1180faf00e52e3bb79ff5a47c8d43", "fields": {"user": 42, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "15a17d944cad348deca2ef3b834fc7dd63247860", "fields": {"user": 6, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "162dd083febc79004495190a3821d63ae48866b3", "fields": {"user": 94, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "174aaeabc95f0c43a74c7a4abd42a055b88cd5a6", "fields": {"user": 65, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "17f84f34d96cae1be23814ab1b273c14f47d9eff", "fields": {"user": 74, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "258c867538c3dc1a7ba91ec0451588b4532af5eb", "fields": {"user": 85, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "27198516f392eae6e1b573c58a16b2c7e66096b0", "fields": {"user": 72, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "29ac945773f8b90d8062fa171edf66e332d2f942", "fields": {"user": 49, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "2b66ed29cdc0503d08a93185315c567d48be3ec8", "fields": {"user": 12, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "2f42e915df0ceae877bc17a705b907af74ccc196", "fields": {"user": 62, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "2f51aec4240d5dec1103b1b4681692f5ff78d18d", "fields": {"user": 67, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "32ab6bbda35d8032a40096b768f00ba000b19846", "fields": {"user": 3, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "33476ce7224222f8d0600230d4b0a9b83c50d387", "fields": {"user": 57, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "3bd78b8360870becc45f952e20a5cbdb293b59c2", "fields": {"user": 36, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "3e6f61f6d77129991a26ddf83a6f317556a61a53", "fields": {"user": 75, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "3f18ba1a5d815b958538904e51bbb990408fca26", "fields": {"user": 2, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "4096d6ed67e12d7dd63d27b87c155a328dffca28", "fields": {"user": 60, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "42da7a87648dd1a6e172d63ee7f6c743ec642237", "fields": {"user": 83, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "450379e85f2839dbff7cbd5243da8a25b4280a97", "fields": {"user": 78, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "474942254cedf9972161fb96eab79a32f0dae7dd", "fields": {"user": 88, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "48c1e83245fbca16c008b295ba47223e8cee251b", "fields": {"user": 24, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "490440da4da363d2a338f424e576829d25109c1f", "fields": {"user": 71, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "4f5770ad3b5305f518cfe9531bb190e254672ead", "fields": {"user": 73, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "4fad3d0bf66e04699bac60b399c2b055726fee91", "fields": {"user": 91, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "526131bf8ca38ac65a2417c9d8af87d181360a51", "fields": {"user": 95, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "55d81e2650f5c94356d2db022d6f52de87f5037c", "fields": {"user": 10, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "56b72c93c249fa199651df5b8c7e7ea50b651648", "fields": {"user": 9, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "596aae3ab94eefcc304d609d3b525918fb0bb708", "fields": {"user": 14, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "63cb55f9220696383ccd8b748fc61f6c54f83da1", "fields": {"user": 45, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "64ff8a3fe8e004d192a4fb32b0e61395cadf5fdf", "fields": {"user": 28, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "65dcacc5fc2bb2bafbe20e40e6c103c472b8ddbf", "fields": {"user": 44, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "67fc4320b885e9c7cb056eea008b47ba1bfa4408", "fields": {"user": 80, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "6adcf213cfad9559fcbffbcb6db2fc6a0144d00b", "fields": {"user": 34, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "6b859b44bf73d70dae1baa9922f307b018ccaaef", "fields": {"user": 29, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "6bd96294132c03417d3e32180790deaa41eecde6", "fields": {"user": 63, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "6eee1352b3a7f20467a3e8bf8b718369e9daabe3", "fields": {"user": 52, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "6f7fb132213b495b946b1fcc49ed3bf366d9818d", "fields": {"user": 96, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "6fea9a08ca65a17067ae9a373c2c33b8cfa9d4b7", "fields": {"user": 21, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "71a18ea26318d42de342e0b96082a1b155cf240f", "fields": {"user": 89, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "727a8a6446a3fa98da82162111d3274bcb784886", "fields": {"user": 40, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "7503bd5d951691ae60a05435be255774c4a97049", "fields": {"user": 20, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "781077e250503c0dbfb14722d8badc6dd1e7a700", "fields": {"user": 61, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "7b867a5632756d436009c84421dbc14e06dc46c3", "fields": {"user": 54, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "7e568eba6054d39b65cd026ab8f2d8a475c88415", "fields": {"user": 55, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "85efaf02b19a224bc749c0bb99ee82a6fda119d1", "fields": {"user": 68, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "86425234af7f6f044bd50516dbffd520871eadc5", "fields": {"user": 17, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "87b741af6785494d68af310c4465cfe07e7c728d", "fields": {"user": 39, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "891e8b9ad3ce558aeab4e98daf4d7a811afa9709", "fields": {"user": 90, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "893137746504f500b297478ea30b63df301f946a", "fields": {"user": 79, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "8bf67db798fce8129b51b8cefa3f372ad6bb2d5e", "fields": {"user": 70, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "8d02135b8f789d855511da02f700ac18669c4834", "fields": {"user": 48, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "8dd57211cdae4436b2eed83336b2f12f444f1052", "fields": {"user": 87, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "8f0a8790af4d1e55002fbd1c6eca1444fe91cfca", "fields": {"user": 7, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "96151a96e03feefb09f7ea86625bab693253661a", "fields": {"user": 37, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "96e6f5c3e309c8ad8c1d7c8878b41b56cde3ceee", "fields": {"user": 27, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "97759930a8cc3e9adaba6a291e274c2aabd89ded", "fields": {"user": 31, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "994610158c0a223ecff8f05ba2fb1e970e54a318", "fields": {"user": 26, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "99fd4d123474fee0364d16a92676af99ed15d36f", "fields": {"user": 66, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "9cd9ed991bae13b02886d5a5e6110ac31b8d3712", "fields": {"user": 81, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "9d6aa86d49ad31b4740c227edb28f6f4c8d87a24", "fields": {"user": 8, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "9efedb9c8470613fa518e3bc470ea865365447a2", "fields": {"user": 35, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "a39a81849cd68c5fd1604fb02011157db5a479ef", "fields": {"user": 97, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "a461ec72157bdba40a1dd35f4c757ab4c8d55085", "fields": {"user": 93, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "a59365a3beb40c1214ace0be23fea00a39bbb5c7", "fields": {"user": 98, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "ade619e8cf991ab2af8d8f9810da4056041aa113", "fields": {"user": 56, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "b13695f80f650c85d41ad003bfd3bece61f95da3", "fields": {"user": 43, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "b64314163e0f6d6d7400895a24df567e8c2da378", "fields": {"user": 41, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "b8868b92dbc83914f7751373553863eb782426d8", "fields": {"user": 38, "created": "2016-09-15T01:55:15Z"}}, {"model": "authtoken.token", "pk": "ba06d7f8a970127e0c38a79181eb97bce06935fd", "fields": {"user": 16, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "bb5da543ae0dd5be4b3b205dca863e5a48b0bcd3", "fields": {"user": 50, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "bc47ea0ba3b775969c439363be1efcf636cfc579", "fields": {"user": 86, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "c17f59dc47af6bf154df09a574429d8cd0affd59", "fields": {"user": 30, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "cb79ea2b425c503abff0a3ec11c5653f3e237326", "fields": {"user": 51, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "e1b7d0309c65fbbc958d7df2ab9248857f0da4c3", "fields": {"user": 5, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "e5055424e2239d0161eb7627d29e5c173dca28bc", "fields": {"user": 23, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "e67e6cd279c7d0029495f15882dfd88c69ad69b1", "fields": {"user": 22, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "e8d084f1ec91977253916104b6df590bdd49a632", "fields": {"user": 69, "created": "2016-09-15T01:55:17Z"}}, {"model": "authtoken.token", "pk": "e9f2200e6a35ab55bf65d0519b3e64cb7e1d0463", "fields": {"user": 4, "created": "2016-09-15T01:55:12Z"}}, {"model": "authtoken.token", "pk": "e9ff60aaf9eeba3f0da292e05ae84fa51fd78eaf", "fields": {"user": 92, "created": "2016-09-15T01:55:19Z"}}, {"model": "authtoken.token", "pk": "ec04f367d2865eb0a42e0ec67d8a0b17bce384ba", "fields": {"user": 84, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "ec5bff72ee0aeeb669a7f6cea660d1cbc40bd555", "fields": {"user": 19, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "ec85a152209f68bbed0435696a4d6b650bba58d7", "fields": {"user": 53, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "edc41450fe78c8425d8ac97fc301335f95451166", "fields": {"user": 25, "created": "2016-09-15T01:55:14Z"}}, {"model": "authtoken.token", "pk": "ef9fe285acf84987ac730747316fe66f25b91f82", "fields": {"user": 59, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "f02b33b00c3cb4c6030e9ff5930ab62a55b4080f", "fields": {"user": 13, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "f31869c9e99235a75e366148c19928c55043e64c", "fields": {"user": 82, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "f31f4d4b16f20656b4b9c1107fcba6214a63329a", "fields": {"user": 76, "created": "2016-09-15T01:55:18Z"}}, {"model": "authtoken.token", "pk": "f44d67aa9abf09fc87299a35c7d0f3cc0afb4469", "fields": {"user": 15, "created": "2016-09-15T01:55:13Z"}}, {"model": "authtoken.token", "pk": "fb5c5e8412eda7187cfe1d6ef349be3d79a7bb46", "fields": {"user": 58, "created": "2016-09-15T01:55:16Z"}}, {"model": "authtoken.token", "pk": "fcfd1cd0c6d5a7ab40297aa1a36bf0b20d3f48fa", "fields": {"user": 99, "created": "2016-09-15T01:55:19Z"}}] \ No newline at end of file diff --git a/apps/fixtures/users.json b/apps/fixtures/users.json index a9b504052..dc4c209f0 100644 --- a/apps/fixtures/users.json +++ b/apps/fixtures/users.json @@ -1 +1 @@ -[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_added": "2016-09-05T11:39:25.770Z", "created_by": "System"}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$5ReHkQOQA2Hk$DIW0b5U/uK+U0xqjA3QpYvBcODNhm2MPCm7YWbQys3I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:39:25.771Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": "", "enable_otp": false, "secret_key_otp": "", "private_key": "", "public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2086-08-19T11:39:25.771Z", "created_by": "System", "user_permissions": [], "groups": [1]}}] \ No newline at end of file +[{"model": "users.usergroup", "pk": 1, "fields": {"name": "Default", "comment": "Default user group for all user", "date_created": "2016-09-05T11:39:25.770Z", "created_by": "System"}}, {"model": "users.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$30000$5ReHkQOQA2Hk$DIW0b5U/uK+U0xqjA3QpYvBcODNhm2MPCm7YWbQys3I=", "last_login": null, "first_name": "", "last_name": "", "is_active": true, "date_joined": "2016-09-05T11:39:25.771Z", "username": "admin", "name": "Administrator", "email": "admin@jumpserver.org", "role": "Admin", "avatar": "", "wechat": "", "phone": "", "enable_otp": false, "secret_key_otp": "", "_private_key": "", "_public_key": "", "comment": "Administrator is the super user of system", "is_first_login": false, "date_expired": "2086-08-19T11:39:25.771Z", "created_by": "System", "user_permissions": [], "groups": [1]}}] \ No newline at end of file diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index 0e8487b2a..31c39fe49 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -108,6 +108,7 @@ TEMPLATES = [ # WSGI_APPLICATION = 'jumpserver.wsgi.application' LOGIN_REDIRECT_URL = reverse_lazy('index') +LOGIN_URL = reverse_lazy('users:login') # Database # https://docs.djangoproject.com/en/1.10/ref/settings/#databases @@ -227,7 +228,7 @@ USE_L10N = True USE_TZ = True # I18N translation -LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale'),] +LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale'), ] # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.10/howto/static-files/ @@ -313,3 +314,5 @@ CAPTCHA_IMAGE_SIZE = (75, 33) CAPTCHA_FOREGROUND_COLOR = '#001100' # +SESSION_COOKIE_AGE = 10800 # 3 hours +SESSION_SAVE_EVERY_REQUEST = True diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py index 0c1b83403..e593e60a8 100644 --- a/apps/jumpserver/urls.py +++ b/apps/jumpserver/urls.py @@ -17,7 +17,6 @@ from django.conf.urls import url, include from django.conf import settings from django.conf.urls.static import static from django.views.generic.base import TemplateView -from django.http import HttpResponseRedirect urlpatterns = [ @@ -25,6 +24,7 @@ urlpatterns = [ url(r'^$', TemplateView.as_view(template_name='base.html'), name='index'), url(r'^(api/)?users/', include('users.urls')), url(r'^assets/', include('assets.urls')), + url(r'^perms/', include('perms.urls')), url(r'^terminal/', include('webterminal.urls')), ] diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index e6457f782..58a2c50f2 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 3a1181aca..230d1b0f1 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -8,301 +8,1057 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-05 20:18+0800\n" +"POT-Creation-Date: 2016-09-15 12:13+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" -"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" -#: assets/forms.py:20 -msgid "Join assetgroups" -msgstr "添加到用户组" +#: assets/forms.py:19 assets/forms.py:156 perms/forms.py:27 +#: perms/templates/perms/asset_permission_asset_list.html:139 +msgid "Select asset groups" +msgstr "添加到资产组" -#: assets/models.py:9 assets/models.py:21 assets/models.py:54 -#: assets/models.py:76 assets/templates/assets/assetgroup_list.html:12 -#: users/models.py:60 users/models.py:107 -#: users/templates/users/user_detail.html:69 -#: users/templates/users/user_list.html:12 -msgid "Name" -msgstr "名称" - -#: assets/models.py:10 assets/models.py:29 assets/models.py:42 -#: assets/models.py:61 assets/models.py:90 assets/models.py:125 -#: assets/models.py:145 users/models.py:122 -#: users/templates/users/user_detail.html:101 -msgid "Created by" -msgstr "创建者" - -#: assets/models.py:11 assets/models.py:30 assets/models.py:44 -#: assets/models.py:62 assets/models.py:91 assets/models.py:128 -#: assets/models.py:147 assets/templates/assets/assetgroup_list.html:14 -#: users/models.py:61 users/models.py:118 -#: users/templates/users/user_detail.html:113 -msgid "Comment" -msgstr "备注" - -#: assets/models.py:22 -msgid "Bandwidth" -msgstr "带宽" - -#: assets/models.py:23 -msgid "Contact" -msgstr "联系人" - -#: assets/models.py:24 users/models.py:113 -#: users/templates/users/user_detail.html:82 -msgid "Phone" -msgstr "手机" - -#: assets/models.py:25 -msgid "Address" -msgstr "地址" - -#: assets/models.py:26 -msgid "Network" -msgstr "网络" - -#: assets/models.py:27 assets/models.py:127 -msgid "Date added" -msgstr "加入日期" - -#: assets/models.py:28 -msgid "Operator" -msgstr "运营商" - -#: assets/models.py:40 assets/models.py:142 -msgid "KEY" -msgstr "KEY" - -#: assets/models.py:41 assets/models.py:143 -msgid "VALUE" -msgstr "VALUE" - -#: assets/models.py:55 assets/models.py:77 users/forms.py:12 -#: users/models.py:106 users/templates/users/login.html:54 -#: users/templates/users/user_detail.html:73 -#: users/templates/users/user_edit.html:5 -#: users/templates/users/user_list.html:13 -msgid "Username" -msgstr "用户名" - -#: assets/models.py:56 assets/models.py:78 users/forms.py:13 -#: users/templates/users/login.html:57 -#: users/templates/users/reset_password.html:52 -#: users/templates/users/user_add.html:8 users/templates/users/user_add.html:10 -#: users/templates/users/user_edit.html:12 -#: users/templates/users/user_edit.html:14 -msgid "Password" -msgstr "密码" - -#: assets/models.py:57 assets/models.py:80 -msgid "SSH private key" -msgstr "ssh密钥" - -#: assets/models.py:58 assets/models.py:82 -msgid "As default" -msgstr "默认使用" - -#: assets/models.py:59 assets/models.py:84 -msgid "Auto update pass/key" -msgstr "自动更新密码/密钥" - -#: assets/models.py:79 -msgid "Protocol" -msgstr "协议" - -#: assets/models.py:81 -msgid "SSH public key" -msgstr "ssh公钥" - -#: assets/models.py:83 -msgid "Auto push" -msgstr "自动推送" - -#: assets/models.py:85 -msgid "Sudo" -msgstr "Sudo" - -#: assets/models.py:86 -msgid "Shell" -msgstr "Shell" - -#: assets/models.py:87 templates/_header_bar.html:35 templates/_nav.html:4 -msgid "Home" -msgstr "仪表盘" - -#: assets/models.py:88 -msgid "Uid" -msgstr "Uid" - -#: assets/models.py:101 -msgid "IP" -msgstr "IP" - -#: assets/models.py:102 -msgid "Other IP" -msgstr "其它IP" - -#: assets/models.py:103 -msgid "Remote card IP" -msgstr "远控卡IP" - -#: assets/models.py:104 -msgid "Hostname" -msgstr "主机名" - -#: assets/models.py:105 -msgid "Port" -msgstr "端口" - -#: assets/models.py:106 -msgid "Asset groups" -msgstr "用户组" - -#: assets/models.py:107 assets/models.py:109 templates/_nav.html:24 -msgid "Admin user" -msgstr "管理用户" - -#: assets/models.py:108 -msgid "Admin password" -msgstr "管理员密码" - -#: assets/models.py:111 templates/_nav.html:23 -msgid "IDC" -msgstr "机房" - -#: assets/models.py:112 -msgid "Mac address" -msgstr "Mac地址" - -#: assets/models.py:113 -msgid "Brand" -msgstr "品牌" - -#: assets/models.py:114 -msgid "CPU" -msgstr "CPU" - -#: assets/models.py:115 -msgid "Memory" -msgstr "内存" - -#: assets/models.py:116 -msgid "Disk" -msgstr "硬盘" - -#: assets/models.py:117 -msgid "OS" -msgstr "操作系统" - -#: assets/models.py:118 -msgid "Cabinet number" -msgstr "机柜编号" - -#: assets/models.py:119 -msgid "Cabinet position" -msgstr "机柜层号" - -#: assets/models.py:120 -msgid "Asset number" -msgstr "资产编号" - -#: assets/models.py:121 -msgid "Asset status" -msgstr "资产状态" - -#: assets/models.py:122 -msgid "Asset type" -msgstr "系统类型" - -#: assets/models.py:123 -msgid "Asset environment" -msgstr "资产环境" - -#: assets/models.py:124 -msgid "Serial number" -msgstr "序列号" - -#: assets/models.py:126 -msgid "Is active" -msgstr "是否激活" - -#: assets/models.py:144 assets/templates/assets/assetgroup_add.html:35 +#: assets/forms.py:26 assets/forms.py:57 assets/forms.py:88 +#: assets/forms.py:146 assets/models.py:322 +#: perms/templates/perms/asset_permission_create_update.html:40 #: templates/_nav.html:21 msgid "Asset" msgstr "资产" -#: assets/templates/assets/assetgroup_add.html:16 -#: assets/templates/assets/assetgroup_list.html:5 assets/views.py:60 -msgid "Create asset group" -msgstr "创建资产组" - -#: assets/templates/assets/assetgroup_add.html:37 -msgid "Select asset" +#: assets/forms.py:29 assets/forms.py:60 assets/forms.py:91 +#: assets/forms.py:149 perms/forms.py:25 +msgid "Select assets" msgstr "选择资产" -#: assets/templates/assets/assetgroup_add.html:49 +#: assets/forms.py:79 assets/forms.py:134 assets/forms.py:206 +#: assets/models.py:14 assets/models.py:88 assets/models.py:153 +#: assets/models.py:222 assets/templates/assets/admin_user_detail.html:50 +#: assets/templates/assets/admin_user_list.html:10 +#: assets/templates/assets/asset_group_detail.html:46 +#: assets/templates/assets/asset_group_list.html:12 +#: assets/templates/assets/idc_list.html:10 +#: assets/templates/assets/system_user_asset_group.html:53 +#: assets/templates/assets/system_user_detail.html:55 +#: assets/templates/assets/system_user_list.html:10 perms/models.py:19 +#: perms/templates/perms/asset_permission_create_update.html:33 +#: perms/templates/perms/asset_permission_detail.html:56 +#: perms/templates/perms/asset_permission_list.html:12 +#: perms/templates/perms/asset_permission_user_list.html:66 +#: perms/templates/perms/perm_user_asset_list.html:12 users/models.py:20 +#: users/models.py:67 users/templates/users/user_detail.html:54 +#: users/templates/users/user_list.html:12 +msgid "Name" +msgstr "名称" + +#: assets/forms.py:96 assets/forms.py:161 +msgid "If also set private key, use that first" +msgstr "如果设置私钥,则优先使用私钥" + +#: assets/forms.py:135 assets/forms.py:207 assets/models.py:89 +#: assets/models.py:154 assets/templates/assets/admin_user_detail.html:54 +#: assets/templates/assets/admin_user_list.html:11 +#: assets/templates/assets/system_user_detail.html:59 +#: assets/templates/assets/system_user_list.html:11 +#: perms/templates/perms/asset_permission_user_list.html:67 +#: perms/templates/perms/perm_user_asset_list.html:13 users/forms.py:13 +#: users/models.py:66 users/templates/users/login.html:53 +#: users/templates/users/user_detail.html:58 +#: users/templates/users/user_list.html:13 +#: users/templates/users/user_update.html:6 +msgid "Username" +msgstr "用户名" + +#: assets/forms.py:152 perms/templates/perms/perm_user_asset_list.html:16 +#: templates/_nav.html:22 +msgid "Asset group" +msgstr "资产组" + +#: assets/models.py:15 assets/templates/assets/idc_list.html:12 +msgid "Bandwidth" +msgstr "带宽" + +#: assets/models.py:16 assets/templates/assets/idc_list.html:13 +msgid "Contact" +msgstr "联系人" + +#: assets/models.py:17 assets/templates/assets/idc_list.html:14 +#: users/models.py:73 users/templates/users/user_detail.html:67 +msgid "Phone" +msgstr "手机" + +#: assets/models.py:18 assets/templates/assets/idc_list.html:15 +msgid "Address" +msgstr "地址" + +#: assets/models.py:19 +msgid "Network" +msgstr "网络" + +#: assets/models.py:20 assets/models.py:225 assets/models.py:286 +msgid "Date added" +msgstr "加入日期" + +#: assets/models.py:21 +msgid "Operator" +msgstr "运营商" + +#: assets/models.py:22 assets/models.py:59 assets/models.py:96 +#: assets/models.py:167 assets/models.py:224 assets/models.py:284 +#: assets/models.py:323 assets/templates/assets/admin_user_detail.html:62 +#: assets/templates/assets/asset_group_detail.html:54 +#: assets/templates/assets/system_user_detail.html:105 perms/models.py:28 +#: perms/templates/perms/asset_permission_detail.html:96 users/models.py:82 +#: users/templates/users/user_detail.html:86 +msgid "Created by" +msgstr "创建者" + +#: assets/models.py:23 assets/models.py:61 assets/models.py:94 +#: assets/models.py:168 assets/models.py:226 assets/models.py:287 +#: assets/models.py:325 assets/templates/assets/admin_user_detail.html:66 +#: assets/templates/assets/admin_user_list.html:14 +#: assets/templates/assets/asset_group_detail.html:58 +#: assets/templates/assets/asset_group_list.html:14 +#: assets/templates/assets/system_user_asset_group.html:56 +#: assets/templates/assets/system_user_detail.html:109 +#: assets/templates/assets/system_user_list.html:15 perms/models.py:30 +#: perms/templates/perms/asset_permission_detail.html:100 users/models.py:21 +#: users/models.py:78 users/templates/users/user_detail.html:98 +msgid "Comment" +msgstr "备注" + +#: assets/models.py:57 assets/models.py:320 +msgid "KEY" +msgstr "KEY" + +#: assets/models.py:58 assets/models.py:321 +msgid "VALUE" +msgstr "VALUE" + +#: assets/models.py:69 assets/models.py:70 +msgid "status" +msgstr "状态" + +#: assets/models.py:69 +#, fuzzy +#| msgid "Admin user" +msgid "In use" +msgstr "管理用户" + +#: assets/models.py:70 +#, fuzzy +#| msgid "Auto push" +msgid "Out of use" +msgstr "自动推送" + +#: assets/models.py:71 assets/models.py:72 assets/models.py:73 +#: assets/models.py:74 assets/models.py:75 assets/models.py:76 +msgid "type" +msgstr "" + +#: assets/models.py:71 +msgid "Server" +msgstr "" + +#: assets/models.py:72 +msgid "VM" +msgstr "" + +#: assets/models.py:73 +msgid "Switch" +msgstr "" + +#: assets/models.py:74 +#, fuzzy +#| msgid "Role" +msgid "Router" +msgstr "角色" + +#: assets/models.py:75 +msgid "Firewall" +msgstr "" + +#: assets/models.py:76 +msgid "Storage" +msgstr "" + +#: assets/models.py:77 assets/models.py:78 assets/models.py:79 +msgid "env" +msgstr "" + +#: assets/models.py:77 +msgid "Production" +msgstr "" + +#: assets/models.py:78 +msgid "Development" +msgstr "" + +#: assets/models.py:79 +#, fuzzy +msgid "Setting" +msgstr "设置" + +#: assets/models.py:90 assets/models.py:155 users/forms.py:15 +#: users/templates/users/login.html:56 +#: users/templates/users/reset_password.html:52 +#: users/templates/users/user_create.html:8 +#: users/templates/users/user_create.html:10 +#: users/templates/users/user_update.html:13 +#: users/templates/users/user_update.html:15 +msgid "Password" +msgstr "密码" + +#: assets/models.py:91 assets/models.py:157 +msgid "SSH private key" +msgstr "ssh密钥" + +#: assets/models.py:92 assets/models.py:158 +msgid "SSH public key" +msgstr "ssh公钥" + +#: assets/models.py:93 assets/models.py:159 +#: assets/templates/assets/admin_user_create_update.html:43 +#: assets/templates/assets/system_user_create_update.html:44 +#: assets/templates/assets/system_user_detail.html:75 +msgid "As default" +msgstr "默认使用" + +#: assets/models.py:156 assets/templates/assets/system_user_detail.html:63 +msgid "Protocol" +msgstr "协议" + +#: assets/models.py:160 +#: assets/templates/assets/system_user_create_update.html:50 +#: assets/templates/assets/system_user_detail.html:67 +msgid "Auto push" +msgstr "自动推送" + +#: assets/models.py:161 +msgid "Auto update pass/key" +msgstr "自动更新密码/密钥" + +#: assets/models.py:162 assets/templates/assets/system_user_detail.html:79 +msgid "Sudo" +msgstr "Sudo" + +#: assets/models.py:163 assets/templates/assets/system_user_detail.html:84 +msgid "Shell" +msgstr "Shell" + +#: assets/models.py:164 assets/templates/assets/system_user_detail.html:90 +#: templates/_header_bar.html:41 templates/_nav.html:4 +msgid "Home" +msgstr "仪表盘" + +#: assets/models.py:165 assets/templates/assets/system_user_detail.html:96 +msgid "Uid" +msgstr "Uid" + +#: assets/models.py:236 +#, fuzzy +#| msgid "As default" +msgid "Default" +msgstr "默认使用" + +#: assets/models.py:236 +#, fuzzy +#| msgid "Create asset group" +msgid "Default asset group" +msgstr "创建资产组" + +#: assets/models.py:259 assets/templates/assets/admin_user_detail.html:100 +#: assets/templates/assets/asset_group_detail.html:88 +#: assets/templates/assets/system_user_asset.html:53 +#: perms/templates/perms/asset_permission_asset_list.html:67 +msgid "IP" +msgstr "IP" + +#: assets/models.py:260 +msgid "Other IP" +msgstr "其它IP" + +#: assets/models.py:261 +msgid "Remote card IP" +msgstr "远控卡IP" + +#: assets/models.py:262 assets/templates/assets/admin_user_detail.html:99 +#: assets/templates/assets/asset_group_detail.html:87 +#: assets/templates/assets/system_user_asset.html:52 +#: perms/templates/perms/asset_permission_asset_list.html:66 +msgid "Hostname" +msgstr "主机名" + +#: assets/models.py:263 assets/templates/assets/admin_user_detail.html:101 +#: assets/templates/assets/asset_group_detail.html:89 +#: assets/templates/assets/system_user_asset.html:54 +#: perms/templates/perms/asset_permission_asset_list.html:68 +msgid "Port" +msgstr "端口" + +#: assets/models.py:264 +msgid "Asset groups" +msgstr "用户组" + +#: assets/models.py:265 assets/models.py:268 templates/_nav.html:24 +msgid "Admin user" +msgstr "管理用户" + +#: assets/models.py:266 +msgid "Admin password" +msgstr "管理员密码" + +#: assets/models.py:269 +msgid "System User" +msgstr "系统用户" + +#: assets/models.py:270 templates/_nav.html:23 +msgid "IDC" +msgstr "机房" + +#: assets/models.py:271 +msgid "Mac address" +msgstr "Mac地址" + +#: assets/models.py:272 +msgid "Brand" +msgstr "品牌" + +#: assets/models.py:273 +msgid "CPU" +msgstr "CPU" + +#: assets/models.py:274 +msgid "Memory" +msgstr "内存" + +#: assets/models.py:275 +msgid "Disk" +msgstr "硬盘" + +#: assets/models.py:276 +msgid "OS" +msgstr "操作系统" + +#: assets/models.py:277 +msgid "Cabinet number" +msgstr "机柜编号" + +#: assets/models.py:278 +msgid "Cabinet position" +msgstr "机柜层号" + +#: assets/models.py:279 +msgid "Asset number" +msgstr "资产编号" + +#: assets/models.py:280 +msgid "Asset status" +msgstr "资产状态" + +#: assets/models.py:281 +msgid "Asset type" +msgstr "系统类型" + +#: assets/models.py:282 +msgid "Asset environment" +msgstr "资产环境" + +#: assets/models.py:283 +msgid "Serial number" +msgstr "序列号" + +#: assets/models.py:285 perms/templates/perms/asset_permission_detail.html:84 +msgid "Is active" +msgstr "是否激活" + +#: assets/templates/assets/admin_user_create_update.html:16 +#: assets/templates/assets/admin_user_list.html:5 +#, fuzzy +#| msgid "Create user" +msgid "Create admin user" +msgstr "创建用户" + +#: assets/templates/assets/admin_user_create_update.html:35 +#: assets/templates/assets/system_user_create_update.html:36 +#, fuzzy +#| msgid "Auto update pass/key" +msgid "Auto generate key" +msgstr "自动更新密码/密钥" + +#: assets/templates/assets/admin_user_create_update.html:53 +#: assets/templates/assets/admin_user_detail.html:152 +#: assets/templates/assets/asset_group_create.html:38 +#: assets/templates/assets/idc_create_update.html:44 +#: assets/templates/assets/system_user_create_update.html:71 +#: assets/templates/assets/system_user_detail.html:148 +#: perms/templates/perms/asset_permission_create_update.html:69 #: users/templates/users/_user.html:70 -#: users/templates/users/user_detail.html:162 -#: users/templates/users/user_detail.html:170 +#: users/templates/users/user_detail.html:147 +#: users/templates/users/user_detail.html:155 msgid "Reset" msgstr "重置" -#: assets/templates/assets/assetgroup_add.html:50 -#: assets/templates/assets/assetgroup_list.html:51 +#: assets/templates/assets/admin_user_create_update.html:54 +#: assets/templates/assets/asset_group_create.html:39 +#: assets/templates/assets/asset_group_list.html:51 +#: assets/templates/assets/idc_create_update.html:45 +#: assets/templates/assets/system_user_create_update.html:72 +#: perms/templates/perms/asset_permission_create_update.html:70 +#: perms/templates/perms/asset_permission_list.html:65 +#: perms/templates/perms/perm_user_asset_list.html:58 #: users/templates/users/_user.html:71 -#: users/templates/users/forget_password.html:44 -#: users/templates/users/user_list.html:63 +#: users/templates/users/forgot_password.html:44 +#: users/templates/users/user_list.html:64 msgid "Submit" msgstr "提交" -#: assets/templates/assets/assetgroup_list.html:13 +#: assets/templates/assets/admin_user_detail.html:18 +#: assets/templates/assets/asset_group_detail.html:18 +#: assets/templates/assets/system_user_asset.html:19 +#: assets/templates/assets/system_user_asset_group.html:19 +#: assets/templates/assets/system_user_detail.html:19 +#: perms/templates/perms/asset_permission_asset_list.html:20 +#: perms/templates/perms/asset_permission_detail.html:20 +#: perms/templates/perms/asset_permission_user_list.html:20 +msgid "Detail" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:20 +#: assets/templates/assets/system_user_asset.html:22 +#: assets/templates/assets/system_user_asset_group.html:22 +#: assets/templates/assets/system_user_detail.html:23 +#, fuzzy +#| msgid "User assets" +msgid "Associate assets" +msgstr "用户资产" + +#: assets/templates/assets/admin_user_detail.html:58 +#: assets/templates/assets/asset_group_detail.html:50 +#: assets/templates/assets/system_user_detail.html:101 perms/models.py:29 +#: perms/templates/perms/asset_permission_detail.html:92 +#, fuzzy +#| msgid "Date added" +msgid "Date created" +msgstr "加入日期" + +#: assets/templates/assets/admin_user_detail.html:76 +#: assets/templates/assets/asset_group_detail.html:68 +#: assets/templates/assets/system_user_asset.html:33 +#: assets/templates/assets/system_user_asset_group.html:34 +#: perms/templates/perms/asset_permission_asset_list.html:47 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset list of " +msgstr "资产组列表" + +#: assets/templates/assets/admin_user_detail.html:102 +#: assets/templates/assets/asset_group_detail.html:90 +#: assets/templates/assets/system_user_asset.html:55 +#, fuzzy +msgid "Alive" +msgstr "激活" + +#: assets/templates/assets/admin_user_detail.html:125 +#: assets/templates/assets/system_user_detail.html:121 +#: perms/templates/perms/asset_permission_detail.html:112 +msgid "Quick update" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:131 +msgid "Get install script" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:134 +#: assets/templates/assets/system_user_detail.html:130 +msgid "Get" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:140 +#: assets/templates/assets/system_user_detail.html:136 +#: perms/templates/perms/asset_permission_detail.html:132 +msgid "Retest asset connectivity" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:143 +#: assets/templates/assets/system_user_detail.html:139 +#: perms/templates/perms/asset_permission_detail.html:135 +msgid "Start" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:149 +#: assets/templates/assets/system_user_detail.html:145 +#, fuzzy +#| msgid "ssh private key" +msgid "Reset private key" +msgstr "ssh密钥" + +#: assets/templates/assets/admin_user_detail.html:163 +msgid "Replace asset admin user with this" +msgstr "" + +#: assets/templates/assets/admin_user_detail.html:171 +#: assets/templates/assets/system_user_asset.html:86 +#, fuzzy +#| msgid "Select assets" +msgid "Select asset" +msgstr "选择资产" + +#: assets/templates/assets/admin_user_detail.html:180 +msgid "Replace" +msgstr "" + +#: assets/templates/assets/admin_user_list.html:9 +#: assets/templates/assets/idc_list.html:9 +#: assets/templates/assets/system_user_list.html:9 +#, fuzzy +#| msgid "IDC" +msgid "ID" +msgstr "机房" + +#: assets/templates/assets/admin_user_list.html:12 +#: assets/templates/assets/asset_group_list.html:13 +#: assets/templates/assets/idc_list.html:11 +#: assets/templates/assets/system_user_asset_group.html:54 +#: assets/templates/assets/system_user_list.html:12 +#: perms/templates/perms/perm_user_asset_list.html:15 #: users/templates/users/user_list.html:16 msgid "Asset num" msgstr "资产数量" -#: assets/templates/assets/assetgroup_list.html:32 -#: users/templates/users/user_list.html:44 -msgid "Edit" -msgstr "编辑" +#: assets/templates/assets/admin_user_list.html:13 +msgid "Lost connection" +msgstr "" -#: assets/templates/assets/assetgroup_list.html:33 +#: assets/templates/assets/admin_user_list.html:33 +#: assets/templates/assets/system_user_list.html:35 +msgid "Script" +msgstr "" + +#: assets/templates/assets/admin_user_list.html:35 +#: assets/templates/assets/system_user_list.html:37 +msgid "Refresh" +msgstr "" + +#: assets/templates/assets/admin_user_list.html:36 +#: assets/templates/assets/asset_group_list.html:32 +#: assets/templates/assets/idc_list.html:30 +#: assets/templates/assets/system_user_list.html:38 +#: perms/templates/perms/asset_permission_list.html:46 +#: users/templates/users/user_list.html:44 +msgid "Update" +msgstr "更新" + +#: assets/templates/assets/admin_user_list.html:37 +#: assets/templates/assets/asset_group_list.html:33 +#: assets/templates/assets/idc_list.html:31 +#: assets/templates/assets/system_user_list.html:39 +#: perms/templates/perms/asset_permission_list.html:47 #: users/templates/users/user_list.html:45 +#: users/templates/users/user_list.html:46 msgid "Delete" msgstr "删除" -#: assets/templates/assets/assetgroup_list.html:43 -#: users/templates/users/user_list.html:55 +#: assets/templates/assets/asset_group_create.html:16 +#: assets/templates/assets/asset_group_list.html:5 assets/views.py:61 +#: assets/views.py:131 +msgid "Create asset group" +msgstr "创建资产组" + +#: assets/templates/assets/asset_group_detail.html:20 +#, fuzzy +#| msgid "Asset group" +msgid "Asset group perm" +msgstr "资产组" + +#: assets/templates/assets/asset_group_detail.html:113 +#, fuzzy +#| msgid "System user" +msgid "Associate system user" +msgstr "系统" + +#: assets/templates/assets/asset_group_detail.html:119 +#, fuzzy +#| msgid "System user" +msgid "repush system user" +msgstr "系统" + +#: assets/templates/assets/asset_group_detail.html:129 +#, fuzzy +#| msgid "System user" +msgid "Select system user" +msgstr "系统" + +#: assets/templates/assets/asset_group_detail.html:138 +msgid "Associate" +msgstr "" + +#: assets/templates/assets/asset_group_detail.html:157 +#, fuzzy +#| msgid "Asset group" +msgid "Add asset to this group" +msgstr "资产组" + +#: assets/templates/assets/asset_group_detail.html:165 +#, fuzzy +#| msgid "Select assets" +msgid "Select asset user" +msgstr "选择资产" + +#: assets/templates/assets/asset_group_detail.html:174 +#: assets/templates/assets/system_user_asset.html:95 +#: assets/templates/assets/system_user_asset_group.html:96 +#: perms/templates/perms/asset_permission_asset_list.html:120 +#: perms/templates/perms/asset_permission_user_list.html:120 +#, fuzzy +#| msgid "Address" +msgid "Add" +msgstr "地址" + +#: assets/templates/assets/asset_group_list.html:43 +#: perms/templates/perms/asset_permission_list.html:57 +#: perms/templates/perms/perm_user_asset_list.html:50 +#: users/templates/users/user_list.html:56 msgid "Delete selected" msgstr "批量删除" -#: assets/templates/assets/assetgroup_list.html:44 -#: users/templates/users/user_list.html:56 +#: assets/templates/assets/asset_group_list.html:44 +#: perms/templates/perms/asset_permission_list.html:58 +#: perms/templates/perms/perm_user_asset_list.html:51 +#: users/templates/users/user_list.html:57 msgid "Update selected" msgstr "批量更新" -#: assets/templates/assets/assetgroup_list.html:45 -#: users/templates/users/user_list.html:57 +#: assets/templates/assets/asset_group_list.html:45 +#: perms/templates/perms/asset_permission_list.html:59 +#: perms/templates/perms/perm_user_asset_list.html:52 +#: users/templates/users/user_list.html:58 msgid "Deactive selected" msgstr "禁用所选" -#: assets/templates/assets/assetgroup_list.html:46 -#: users/templates/users/user_list.html:58 +#: assets/templates/assets/asset_group_list.html:46 +#: perms/templates/perms/asset_permission_list.html:60 +#: perms/templates/perms/perm_user_asset_list.html:53 +#: users/templates/users/user_list.html:59 msgid "Export selected" msgstr "批量导出" -#: assets/views.py:59 assets/views.py:74 templates/_nav.html:18 +#: assets/templates/assets/asset_list.html:27 +msgid "Create asset" +msgstr "创建资产" + +#: assets/templates/assets/delete_confirm.html:6 +#: perms/templates/perms/delete_confirm.html:6 +#: users/templates/users/user_delete_confirm.html:6 +msgid "Confirm delete" +msgstr "确认删除" + +#: assets/templates/assets/idc_create_update.html:16 +#, fuzzy +#| msgid "Created by" +msgid "Create idc" +msgstr "创建者" + +#: assets/templates/assets/idc_list.html:5 +#, fuzzy +#| msgid "Created by" +msgid "Create IDC" +msgstr "创建者" + +#: assets/templates/assets/system_user_asset.html:25 +#: assets/templates/assets/system_user_asset_group.html:26 +#: assets/templates/assets/system_user_detail.html:28 +#, fuzzy +#| msgid "Create asset group" +msgid "Associate asset groups" +msgstr "创建资产组" + +#: assets/templates/assets/system_user_asset.html:78 +msgid "Add asset to this system user" +msgstr "" + +#: assets/templates/assets/system_user_asset_group.html:55 +msgid "Unavailable num" +msgstr "" + +#: assets/templates/assets/system_user_asset_group.html:79 +#, fuzzy +#| msgid "Asset group list" +msgid "Add asset group to this system user" +msgstr "资产组列表" + +#: assets/templates/assets/system_user_asset_group.html:87 +#, fuzzy +#| msgid "Select asset groups" +msgid "Select asset group" +msgstr "添加到资产组" + +#: assets/templates/assets/system_user_create_update.html:16 +#: assets/templates/assets/system_user_list.html:5 assets/views.py:349 +#, fuzzy +#| msgid "Create user" +msgid "Create system user" +msgstr "创建用户" + +#: assets/templates/assets/system_user_create_update.html:56 +#: assets/templates/assets/system_user_detail.html:71 +#, fuzzy +#| msgid "Auto update pass/key" +msgid "Auto update" +msgstr "自动更新密码/密钥" + +#: assets/templates/assets/system_user_detail.html:127 +msgid "Get mannual install script" +msgstr "" + +#: assets/templates/assets/system_user_list.html:13 +#, fuzzy +#| msgid "Asset group" +msgid "Asset group num" +msgstr "资产组" + +#: assets/templates/assets/system_user_list.html:14 +msgid "Unavailable" +msgstr "" + +#: assets/views.py:60 assets/views.py:80 assets/views.py:114 +#: assets/views.py:130 assets/views.py:152 assets/views.py:219 +#: assets/views.py:318 assets/views.py:348 assets/views.py:372 +#: assets/views.py:390 templates/_nav.html:18 msgid "Assets" msgstr "资产管理" -#: assets/views.py:75 +#: assets/views.py:81 msgid "Asset group list" msgstr "资产组列表" -#: templates/_header_bar.html:8 users/templates/users/user_detail.html:29 +#: assets/views.py:115 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset group detail" +msgstr "资产组列表" + +#: assets/views.py:153 +msgid "IDC list" +msgstr "" + +#: assets/views.py:220 +#, fuzzy +#| msgid "Admin user" +msgid "Admin user list" +msgstr "管理用户" + +#: assets/views.py:256 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Create admin user %s successfully." +msgstr "创建用户 %s 成功" + +#: assets/views.py:319 +#, fuzzy +#| msgid "System user" +msgid "System user list" +msgstr "系统" + +#: assets/views.py:355 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Create system user %s successfully." +msgstr "创建用户 %s 成功" + +#: assets/views.py:368 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Update system user %s successfully." +msgstr "创建用户 %s 成功" + +#: assets/views.py:373 +#, fuzzy +#| msgid "Update user" +msgid "Update system user" +msgstr "编辑用户" + +#: assets/views.py:391 +#, fuzzy +#| msgid "System user" +msgid "System user detail" +msgstr "系统" + +#: perms/forms.py:21 +#, fuzzy +#| msgid "Select assets" +msgid "Select users" +msgstr "选择资产" + +#: perms/forms.py:23 perms/templates/perms/asset_permission_user_list.html:139 +#, fuzzy +#| msgid "Select asset groups" +msgid "Select user groups" +msgstr "添加到资产组" + +#: perms/forms.py:29 perms/templates/perms/asset_permission_detail.html:163 +#, fuzzy +#| msgid "System user" +msgid "Select system users" +msgstr "系统" + +#: perms/models.py:26 +#: perms/templates/perms/asset_permission_create_update.html:49 +#: perms/templates/perms/perm_user_asset_list.html:18 +#: users/templates/users/user_detail.html:115 +#: users/templates/users/user_list.html:17 +#, fuzzy +msgid "Active" +msgstr "激活" + +#: perms/models.py:27 perms/templates/perms/asset_permission_detail.html:88 +#: users/models.py:81 users/templates/users/user_detail.html:82 +msgid "Date expired" +msgstr "失效日期" + +#: perms/templates/perms/asset_permission_asset_list.html:24 +#: perms/templates/perms/asset_permission_detail.html:24 +#: perms/templates/perms/asset_permission_user_list.html:24 +#, fuzzy +#| msgid "Join user groups" +msgid "Users and user groups" +msgstr "添加到用户组" + +#: perms/templates/perms/asset_permission_asset_list.html:29 +#: perms/templates/perms/asset_permission_detail.html:29 +#: perms/templates/perms/asset_permission_user_list.html:29 +#, fuzzy +#| msgid "Select asset groups" +msgid "Assets and asset gruops" +msgstr "添加到资产组" + +#: perms/templates/perms/asset_permission_asset_list.html:69 +#: perms/templates/perms/asset_permission_list.html:18 +#: perms/templates/perms/asset_permission_user_list.html:69 +msgid "Is valid" +msgstr "" + +#: perms/templates/perms/asset_permission_asset_list.html:103 +msgid "Add asset to this permission" +msgstr "" + +#: perms/templates/perms/asset_permission_asset_list.html:111 +#, fuzzy +#| msgid "Select assets" +msgid "Select asset " +msgstr "选择资产" + +#: perms/templates/perms/asset_permission_asset_list.html:131 +msgid "Add asset group to this permission" +msgstr "" + +#: perms/templates/perms/asset_permission_asset_list.html:148 +#: perms/templates/perms/asset_permission_detail.html:172 +#: perms/templates/perms/asset_permission_user_list.html:148 +#: users/templates/users/user_detail.html:183 +msgid "Join" +msgstr "加入" + +#: perms/templates/perms/asset_permission_create_update.html:17 +#, fuzzy +#| msgid "Create asset group" +msgid "Create asset permission " +msgstr "创建资产组" + +#: perms/templates/perms/asset_permission_create_update.html:36 +#: templates/_nav.html:12 templates/_user_profile.html:14 users/models.py:63 +msgid "User" +msgstr "用户" + +#: perms/templates/perms/asset_permission_create_update.html:45 +#, fuzzy +#| msgid "Other IP" +msgid "Other" +msgstr "其它IP" + +#: perms/templates/perms/asset_permission_detail.html:60 +#: perms/templates/perms/asset_permission_list.html:13 +#, fuzzy +#| msgid "User group" +msgid "User count" +msgstr "用户组" + +#: perms/templates/perms/asset_permission_detail.html:64 +#: perms/templates/perms/asset_permission_list.html:14 +#, fuzzy +#| msgid "User group list" +msgid "User group count" +msgstr "用户组列表" + +#: perms/templates/perms/asset_permission_detail.html:68 +#: perms/templates/perms/asset_permission_list.html:15 +#, fuzzy +#| msgid "Asset group" +msgid "Asset count" +msgstr "资产组" + +#: perms/templates/perms/asset_permission_detail.html:72 +#: perms/templates/perms/asset_permission_list.html:16 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset group count" +msgstr "资产组列表" + +#: perms/templates/perms/asset_permission_detail.html:76 +#: perms/templates/perms/asset_permission_list.html:17 +#, fuzzy +#| msgid "System user" +msgid "System user count" +msgstr "系统" + +#: perms/templates/perms/asset_permission_detail.html:80 +#, fuzzy +msgid "Action" +msgstr "激活" + +#: perms/templates/perms/asset_permission_detail.html:141 +#, fuzzy +#| msgid "System user" +msgid "Repush system user" +msgstr "系统" + +#: perms/templates/perms/asset_permission_detail.html:144 +msgid "Push" +msgstr "" + +#: perms/templates/perms/asset_permission_detail.html:155 +#: perms/templates/perms/perm_user_asset_list.html:17 templates/_nav.html:25 +msgid "System user" +msgstr "系统" + +#: perms/templates/perms/asset_permission_list.html:5 +#, fuzzy +#| msgid "Create perm" +msgid "Create permission" +msgstr "创建权限" + +#: perms/templates/perms/asset_permission_user_list.html:47 +#, fuzzy +#| msgid "User list" +msgid "User list of " +msgstr "用户列表" + +#: perms/templates/perms/asset_permission_user_list.html:68 users/models.py:68 +#: users/templates/users/user_detail.html:62 +msgid "Email" +msgstr "邮件" + +#: perms/templates/perms/asset_permission_user_list.html:103 +msgid "Add user to asset permission" +msgstr "" + +#: perms/templates/perms/asset_permission_user_list.html:111 +#, fuzzy +#| msgid "Select assets" +msgid "Select user" +msgstr "选择资产" + +#: perms/templates/perms/asset_permission_user_list.html:131 +#, fuzzy +#| msgid "Asset group list" +msgid "Add user group to asset permission" +msgstr "资产组列表" + +#: perms/templates/perms/perm_user_asset_list.html:5 +#, fuzzy +#| msgid "Create perm" +msgid "Create perm " +msgstr "创建权限" + +#: perms/templates/perms/perm_user_asset_list.html:14 users/models.py:70 +#: users/templates/users/user_detail.html:78 +#: users/templates/users/user_list.html:14 +msgid "Role" +msgstr "角色" + +#: perms/templates/perms/perm_user_asset_list.html:39 +msgid "Create perm" +msgstr "创建权限" + +#: perms/templates/perms/perm_user_asset_list.html:40 +msgid "Flush" +msgstr "" + +#: perms/views.py:29 perms/views.py:66 perms/views.py:89 perms/views.py:107 +#: perms/views.py:146 perms/views.py:181 templates/_nav.html:30 +msgid "Perms" +msgstr "权限管理" + +#: perms/views.py:30 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset permission list" +msgstr "资产组列表" + +#: perms/views.py:67 +#, fuzzy +#| msgid "Create asset group" +msgid "Create asset permission" +msgstr "创建资产组" + +#: perms/views.py:73 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Create asset permission %s successfully." +msgstr "创建用户 %s 成功" + +#: perms/views.py:85 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Update asset permission %s successfully." +msgstr "创建用户 %s 成功" + +#: perms/views.py:90 +msgid "Update asset permission" +msgstr "" + +#: perms/views.py:108 +#, fuzzy +#| msgid "Asset environment" +msgid "Asset permission detail" +msgstr "资产环境" + +#: perms/views.py:147 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset permission user list" +msgstr "资产组列表" + +#: perms/views.py:182 +#, fuzzy +#| msgid "Asset group list" +msgid "Asset permission asset list" +msgstr "资产组列表" + +#: templates/_foot_js.html:24 +msgid "Are you sure delete ?" +msgstr "" + +#: templates/_foot_js.html:28 +msgid "Cancel" +msgstr "" + +#: templates/_foot_js.html:30 +msgid "Yes, delete it!" +msgstr "" + +#: templates/_foot_js.html:40 +# msgid "Deleted!" +# msgstr "删除" + +#: templates/_foot_js.html:40 +msgid "has been deleted." +msgstr "已被删除" + +#: templates/_header_bar.html:8 msgid "Search" msgstr "搜索" @@ -314,42 +1070,40 @@ msgstr "欢迎使用Jumpserver开源跳板机系统" msgid "Help" msgstr "帮助" -#: templates/_nav.html:9 users/views.py:100 users/views.py:113 -#: users/views.py:153 users/views.py:170 users/views.py:195 users/views.py:208 +#: templates/_header_bar.html:24 templates/_user_profile.html:21 +msgid "Logout" +msgstr "注销登录" + +#: templates/_header_bar.html:28 users/templates/users/login.html:42 +#: users/templates/users/login.html:61 +msgid "Login" +msgstr "登录" + +#: templates/_modal.html:15 +msgid "Close" +msgstr "" + +#: templates/_nav.html:9 users/views.py:107 users/views.py:120 +#: users/views.py:160 users/views.py:191 users/views.py:216 users/views.py:229 +#: users/views.py:345 msgid "Users" msgstr "用户管理" -#: templates/_nav.html:12 users/models.py:103 -msgid "User" -msgstr "用户" - -#: templates/_nav.html:13 +#: templates/_nav.html:13 users/models.py:69 +#: users/templates/users/user_detail.html:166 +#: users/templates/users/user_list.html:15 msgid "User group" msgstr "用户组" -#: templates/_nav.html:22 -msgid "Asset group" -msgstr "资产组" - -#: templates/_nav.html:25 -msgid "System user" -msgstr "系统" - #: templates/_nav.html:26 msgid "Label" msgstr "标签" -#: templates/_nav.html:30 -msgid "Perms" -msgstr "权限管理" - #: templates/_nav.html:33 -msgid "Perm" -msgstr "权限" - -#: templates/_nav.html:36 -msgid "Create perm" -msgstr "创建权限" +#, fuzzy +#| msgid "Asset type" +msgid "Asset permission" +msgstr "系统类型" #: templates/_nav.html:42 msgid "Audits" @@ -379,10 +1133,6 @@ msgstr "访问官网" msgid "Profile" msgstr "个人信息" -#: templates/_user_profile.html:21 -msgid "Logout" -msgstr "注销登录" - #: templates/captcha/image.html:3 msgid "Play CAPTCHA as audio file" msgstr "" @@ -391,62 +1141,93 @@ msgstr "" msgid "Captcha" msgstr "验证码" -#: users/forms.py:31 users/forms.py:50 +#: templates/rest_framework/base.html:128 +#, fuzzy +msgid "Filters" +msgstr "过滤" + +#: users/forms.py:35 users/forms.py:55 +#: users/templates/users/user_detail.html:174 msgid "Join user groups" msgstr "添加到用户组" -#: users/models.py:102 users/models.py:225 +#: users/forms.py:74 +#, fuzzy +#| msgid "Name" +msgid "name" +msgstr "名称" + +#: users/forms.py:75 +#, fuzzy +#| msgid "Avatar" +msgid "avatar" +msgstr "头像" + +#: users/forms.py:76 +#, fuzzy +#| msgid "Wechat" +msgid "wechat" +msgstr "微信" + +#: users/forms.py:77 +#, fuzzy +#| msgid "Phone" +msgid "phone" +msgstr "手机" + +#: users/forms.py:78 +#, fuzzy +#| msgid "Enable OTP" +msgid "enable otp" +msgstr "二次验证" + +#: users/forms.py:82 +#, fuzzy +#| msgid "SSH private key" +msgid "private key" +msgstr "ssh密钥" + +#: users/forms.py:89 users/serializers.py:55 +#, fuzzy +#| msgid "ssh private key" +msgid "Not a valid ssh private key." +msgstr "ssh密钥" + +#: users/models.py:62 users/models.py:206 msgid "Administrator" msgstr "管理员" -#: users/models.py:108 users/templates/users/user_detail.html:77 -msgid "Email" -msgstr "邮件" - -#: users/models.py:109 users/templates/users/user_detail.html:181 -#: users/templates/users/user_list.html:15 -msgid "Usergroup" -msgstr "用户组" - -#: users/models.py:110 users/templates/users/user_detail.html:93 -#: users/templates/users/user_list.html:14 -msgid "Role" -msgstr "角色" - -#: users/models.py:111 +#: users/models.py:71 msgid "Avatar" msgstr "头像" -#: users/models.py:112 users/templates/users/user_detail.html:88 +#: users/models.py:72 users/templates/users/user_detail.html:73 msgid "Wechat" msgstr "微信" -#: users/models.py:114 users/templates/users/_user.html:57 +#: users/models.py:74 users/templates/users/_user.html:57 +#: users/templates/users/user_detail.html:129 msgid "Enable OTP" msgstr "二次验证" -#: users/models.py:116 +#: users/models.py:76 msgid "ssh private key" msgstr "ssh密钥" -#: users/models.py:117 +#: users/models.py:77 msgid "ssh public key" msgstr "ssh公钥" -#: users/models.py:121 users/templates/users/user_detail.html:97 -msgid "Date expired" -msgstr "失效日期" - -#: users/models.py:228 +#: users/models.py:209 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" -#: users/models.py:229 +#: users/models.py:210 msgid "System" msgstr "系统" #: users/templates/users/_user.html:17 users/templates/users/user_list.html:5 -#: users/views.py:113 +#: users/views.py:120 msgid "Create user" msgstr "创建用户" @@ -458,24 +1239,53 @@ msgstr "账户" msgid "Security and Role" msgstr "角色安全" -#: users/templates/users/forget_password.html:26 -msgid "Forget password" +#: users/templates/users/_user_reset_pk_modal.html:4 +#, fuzzy +#| msgid "SSH private key" +msgid "Reset User SSH Private Key" +msgstr "ssh密钥" + +#: users/templates/users/first_login.html:16 users/views.py:345 +#, fuzzy +#| msgid "Last login" +msgid "First Login" +msgstr "最后登录" + +#: users/templates/users/first_login.html:33 +#, fuzzy +#| msgid "System" +msgid "Step" +msgstr "系统" + +#: users/templates/users/first_login.html:55 +msgid "first step" +msgstr "" + +#: users/templates/users/first_login.html:56 +msgid "prev step" +msgstr "" + +#: users/templates/users/first_login.html:58 +#, fuzzy +#| msgid "Submit" +msgid "submit" +msgstr "提交" + +#: users/templates/users/forgot_password.html:26 +#: users/templates/users/login.html:64 +msgid "Forgot password" msgstr "忘记密码" -#: users/templates/users/forget_password.html:33 +#: users/templates/users/forgot_password.html:33 msgid "Input your email, that will send a mail to your" msgstr "输入您的邮箱, 将会发一封重置短信邮件到您的邮箱中" -#: users/templates/users/login.html:42 users/templates/users/login.html:62 -msgid "Login" -msgstr "登录" - #: users/templates/users/login.html:47 msgid "Captcha invalid" msgstr "验证码错误" #: users/templates/users/reset_password.html:45 -#: users/templates/users/user_detail.html:159 users/utils.py:98 +#: users/templates/users/user_detail.html:144 users/utils.py:99 msgid "Reset password" msgstr "重置密码" @@ -483,75 +1293,107 @@ msgstr "重置密码" msgid "Password again" msgstr "再次输入密码" -#: users/templates/users/reset_password.html:57 -msgid "Setting" -msgstr "设置" - -#: users/templates/users/user_add.html:12 +#: users/templates/users/user_create.html:12 msgid "Reset link will be generated and sent to the user. " msgstr "生成重置密码连接,通过邮件发送给用户" -#: users/templates/users/user_delete_confirm.html:6 -msgid "Confirm delete" -msgstr "确认删除" - -#: users/templates/users/user_detail.html:18 users/views.py:170 +#: users/templates/users/user_detail.html:20 users/views.py:191 msgid "User detail" msgstr "用户详情" -#: users/templates/users/user_detail.html:20 +#: users/templates/users/user_detail.html:22 msgid "User assets" msgstr "用户资产" -#: users/templates/users/user_detail.html:21 +#: users/templates/users/user_detail.html:23 msgid "User log" msgstr "登录日志" -#: users/templates/users/user_detail.html:105 +#: users/templates/users/user_detail.html:90 msgid "Date joined" msgstr "创建日期" -#: users/templates/users/user_detail.html:109 +#: users/templates/users/user_detail.html:94 msgid "Last login" msgstr "最后登录" -#: users/templates/users/user_detail.html:124 +#: users/templates/users/user_detail.html:109 msgid "Quick modify" msgstr "快速修改" -#: users/templates/users/user_detail.html:167 +#: users/templates/users/user_detail.html:152 msgid "Reset ssh key" msgstr "重置密钥" -#: users/templates/users/user_detail.html:189 -msgid "Select usergroups" -msgstr "选择用户组" +#: users/templates/users/user_detail.html:233 +msgid "UserGroup Update Success!" +msgstr "" -#: users/templates/users/user_detail.html:198 -msgid "Add" -msgstr "添加" +#: users/templates/users/user_detail.html:251 +#: users/templates/users/user_detail.html:257 +#, fuzzy +#| msgid "Create account successfully" +msgid "Update Successfully!" +msgstr "创建账户成功" -#: users/templates/users/user_list.html:17 -msgid "Active" -msgstr "激活" +#: users/templates/users/user_detail.html:290 +msgid "E-mail sent successfully. An e-mail has been sent to the user\\" +msgstr "" -#: users/utils.py:47 +#: users/templates/users/user_detail.html:291 +#, fuzzy +#| msgid "Password" +msgid "Password-Reset" +msgstr "密码" + +#: users/templates/users/user_detail.html:296 +msgid "Are you sure?" +msgstr "" + +#: users/templates/users/user_detail.html:297 +msgid "This will reset the user\\" +msgstr "" + +#: users/templates/users/user_detail.html:315 +msgid "Successfully updated the SSH private key." +msgstr "" + +#: users/templates/users/user_detail.html:316 +#: users/templates/users/user_detail.html:321 +#, fuzzy +#| msgid "SSH private key" +msgid "User SSH Private Key Reset" +msgstr "ssh密钥" + +#: users/templates/users/user_detail.html:319 +msgid "Failed to update the user\\" +msgstr "" + +#: users/templates/users/user_group_create.html:16 users/views.py:229 +msgid "Create user group" +msgstr "创建用户组" + +#: users/templates/users/user_update.html:3 users/views.py:160 +msgid "Update user" +msgstr "编辑用户" + +#: users/utils.py:48 msgid "Begin to generate ssh private key ..." msgstr "开始生成ssh密钥" -#: users/utils.py:59 +#: users/utils.py:60 msgid "Finish to generate ssh private key ..." msgstr "生成ssh密钥成功" -#: users/utils.py:63 +#: users/utils.py:64 msgid "These is error when generate ssh key." msgstr "创建密钥失败" -#: users/utils.py:67 +#: users/utils.py:68 msgid "Create account successfully" msgstr "创建账户成功" -#: users/utils.py:69 +#: users/utils.py:70 #, python-format msgid "" "\n" @@ -562,8 +1404,8 @@ msgid "" " click " "here to set your password\n" "
\n" -" This link is valid for 1 hour. After it expires, request new one\n" +" This link is valid for 1 hour. After it expires, request new one\n" "\n" "
\n" " ---\n" @@ -592,7 +1434,7 @@ msgstr "" "
\n" " " -#: users/utils.py:100 +#: users/utils.py:101 #, python-format msgid "" "\n" @@ -604,8 +1446,8 @@ msgid "" " Click " "here reset password\n" "
\n" -" This link is valid for 1 hour. After it expires, request new one<\n" +" This link is valid for 1 hour. After it expires, request new one<\n" "\n" "
\n" " ---\n" @@ -636,69 +1478,64 @@ msgstr "" "
\n" " " -#: users/views.py:53 -msgid "Username or password invalid" -msgstr "用户名或密码错误" - -#: users/views.py:70 +#: users/views.py:78 msgid "Logout success" msgstr "退出登录成功" -#: users/views.py:71 +#: users/views.py:79 msgid "Logout success, return login page" msgstr "退出登录成功,返回到登录页面" -#: users/views.py:100 +#: users/views.py:107 msgid "User list" msgstr "用户列表" -#: users/views.py:109 -#, python-format -msgid "Create user%s success." -msgstr "创建用户%s 成功" +#: users/views.py:116 +#, fuzzy, python-format +#| msgid "Create user %s success." +msgid "Create user %s successfully." +msgstr "创建用户 %s 成功" -#: users/views.py:153 -msgid "Edit user" -msgstr "编辑用户" - -#: users/views.py:195 -msgid "Usergroup list" +#: users/views.py:216 +msgid "User group list" msgstr "用户组列表" -#: users/views.py:208 -msgid "Create usergroup" -msgstr "创建用户组" - -#: users/views.py:240 +#: users/views.py:261 msgid "Email address invalid, input again" msgstr "邮箱地址错误,重新输入" -#: users/views.py:251 +#: users/views.py:272 msgid "Send reset password message" msgstr "发送重置密码邮件" -#: users/views.py:252 +#: users/views.py:273 msgid "Send reset password mail success, login your mail box and follow it " msgstr "" "发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)" -#: users/views.py:264 +#: users/views.py:285 msgid "Reset password success" msgstr "重置密码成功" -#: users/views.py:265 +#: users/views.py:286 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" -#: users/views.py:281 users/views.py:294 +#: users/views.py:302 users/views.py:315 msgid "Token invalid or expired" msgstr "Token错误或失效" -#: users/views.py:290 +#: users/views.py:311 msgid "Password not same" msgstr "密码不一致" #, fuzzy -#~| msgid "Asset groups" -#~ msgid "Assetgroup" -#~ msgstr "用户组" +#~| msgid "Create user %s success." +#~ msgid "Update admin user %s successfully." +#~ msgstr "创建用户 %s 成功" + +#~ msgid "Perm" +#~ msgstr "权限" + +#~ msgid "Username or password invalid" +#~ msgstr "用户名或密码错误" diff --git a/apps/perms/forms.py b/apps/perms/forms.py new file mode 100644 index 000000000..1826b4c29 --- /dev/null +++ b/apps/perms/forms.py @@ -0,0 +1,36 @@ +# ~*~ coding: utf-8 ~*~ + +from __future__ import absolute_import, unicode_literals +from django import forms +from django.utils.translation import ugettext_lazy as _ + +# from .hands import User, UserGroup, Asset, AssetGroup, SystemUser +from .models import AssetPermission + + +class AssetPermissionForm(forms.ModelForm): + + class Meta: + model = AssetPermission + fields = [ + 'name', 'users', 'user_groups', 'assets', 'asset_groups', + 'system_users', 'action', 'is_active', 'date_expired', 'comment', + ] + widgets = { + 'users': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select users')}), + 'user_groups': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select user groups')}), + 'assets': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select assets')}), + 'asset_groups': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select asset groups')}), + 'system_users': forms.SelectMultiple(attrs={'class': 'select2', + 'data-placeholder': _('Select system users')}), + } + help_texts = { + 'name': '* required', + 'user_groups': '* User or user group at least one required', + 'asset_groups': '* Asset or Asset group at least one required', + 'system_users': '* required', + } diff --git a/apps/perms/hands.py b/apps/perms/hands.py new file mode 100644 index 000000000..2a0f5b43f --- /dev/null +++ b/apps/perms/hands.py @@ -0,0 +1,12 @@ +# ~*~ coding: utf-8 ~*~ +# + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +from users.utils import AdminUserRequiredMixin +from users.models import User, UserGroup +from assets.models import Asset, AssetGroup, SystemUser + + diff --git a/apps/perms/models.py b/apps/perms/models.py index bd4b2abe9..60e150672 100644 --- a/apps/perms/models.py +++ b/apps/perms/models.py @@ -1,5 +1,70 @@ -from __future__ import unicode_literals +from __future__ import unicode_literals, absolute_import +import functools from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.utils import timezone + +from users.models import User, UserGroup +from assets.models import Asset, AssetGroup, SystemUser +from common.utils import date_expired_default, combine_seq + + +class AssetPermission(models.Model): + ACTION_CHOICE = ( + ('1', 'Allow'), + ('0', 'Deny'), + ) + + name = models.CharField(max_length=128, verbose_name=_('Name')) + users = models.ManyToManyField(User, related_name='asset_permissions', blank=True) + user_groups = models.ManyToManyField(UserGroup, related_name='asset_permissions', blank=True) + assets = models.ManyToManyField(Asset, related_name='granted_by_permissions', blank=True) + asset_groups = models.ManyToManyField(AssetGroup, related_name='granted_by_permissions', blank=True) + system_users = models.ManyToManyField(SystemUser, related_name='granted_by_permissions') + action = models.CharField(choices=ACTION_CHOICE, max_length=8, default='1') + is_active = models.BooleanField(default=True, verbose_name=_('Active')) + date_expired = models.DateTimeField(default=date_expired_default, verbose_name=_('Date expired')) + created_by = models.CharField(max_length=128, blank=True, verbose_name=_('Created by')) + date_created = models.DateTimeField(auto_now=True, verbose_name=_('Date created')) + comment = models.TextField(verbose_name=_('Comment'), blank=True) + + def __unicode__(self): + return '%(name)s: %(action)s' % {'name': self.name, 'action': self.action} + + @property + def is_valid(self): + if self.date_expired < timezone.now() and self.is_active: + return True + return True + + @staticmethod + def set_inherit(obj): + setattr(obj, 'inherited', True) + return obj + + def get_granted_users(self): + return list(set(self.users.all() or []) | set(self.get_granted_user_groups_member())) + + def get_granted_user_groups_member(self): + combine_users = functools.partial(combine_seq, callback=AssetPermission.set_inherit) + try: + return functools.reduce(combine_users, [user_group.users.all() + for user_group in self.user_groups.iterator()]) + except TypeError: + return [] + + def get_granted_assets(self): + return list(set(self.assets.all() or []) | set(self.get_granted_asset_groups_member())) + + def get_granted_asset_groups_member(self): + combine_assets = functools.partial(combine_seq, callback=AssetPermission.set_inherit) + try: + return functools.reduce(combine_assets, [asset_group.users.all() + for asset_group in self.asset_groups.iterator()]) + except TypeError: + return [] + + class Meta: + db_table = 'asset_permission' -# Create your models here. diff --git a/apps/perms/templates/perms/asset_permission_asset_list.html b/apps/perms/templates/perms/asset_permission_asset_list.html new file mode 100644 index 000000000..baad101d1 --- /dev/null +++ b/apps/perms/templates/perms/asset_permission_asset_list.html @@ -0,0 +1,196 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {% trans 'Asset list of ' %} {{ asset_permission.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + {% for asset in page_obj %} + + + + + + + + + {% endfor %} + +
{% trans 'Hostname' %}{% trans 'IP' %}{% trans 'Port' %}{% trans 'Is valid' %}
{{ asset.hostname }}{{ asset.ip }}{{ user.port }} + {% if asset.is_active %} + + {% else %} + + {% endif %} + + +
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Add asset to this permission' %} +
+
+ + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+ {% trans 'Add asset group to this permission' %} +
+
+ + + + + + + + + + + + {% for asset_group in asset_groups %} + + + + + {% endfor %} + +
+ +
+ +
{{ asset_group.name }} + +
+
+
+
+
+
+
+
+
+ +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/perms/templates/perms/asset_permission_create_update.html b/apps/perms/templates/perms/asset_permission_create_update.html new file mode 100644 index 000000000..68c023d59 --- /dev/null +++ b/apps/perms/templates/perms/asset_permission_create_update.html @@ -0,0 +1,96 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} +{% load bootstrap %} +{% block custom_head_css_js %} + + + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{% trans 'Create asset permission ' %}
+ +
+
+
+ {% csrf_token %} +

{% trans 'Name' %}

+ {{ form.name|bootstrap_horizontal }} +
+

{% trans 'User' %}

+ {{ form.users|bootstrap_horizontal }} + {{ form.user_groups|bootstrap_horizontal }} +
+

{% trans 'Asset' %}

+ {{ form.assets|bootstrap_horizontal }} + {{ form.asset_groups|bootstrap_horizontal }} + {{ form.system_users |bootstrap_horizontal }} +
+

{% trans 'Other' %}

+ {{ form.action|bootstrap_horizontal }} + +
+ +
+ {{ form.is_active }} +
+
+ +
+ +
+
+ + +
+ {{ form.date_expired.errors }} +
+
+ {{ form.comment|bootstrap_horizontal }} + +
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + + +{% endblock %} \ No newline at end of file diff --git a/apps/perms/templates/perms/asset_permission_detail.html b/apps/perms/templates/perms/asset_permission_detail.html new file mode 100644 index 000000000..ee4d1fab3 --- /dev/null +++ b/apps/perms/templates/perms/asset_permission_detail.html @@ -0,0 +1,220 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} + +{% block content %} +
+
+
+
+ +
+
+
+
+ {{ asset_permission.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{% trans 'Name' %}:{{ asset_permission.name }}
{% trans 'User count' %}:{{ asset_permission.users.count }}
{% trans 'User group count' %}:{{ asset_permission.users.count }}
{% trans 'Asset count' %}:{{ asset_permission.assets.count }}
{% trans 'Asset group count' %}:{{ asset_permission.asset_groups.count }}
{% trans 'System user count' %}:{{ asset_permission.system_users.count }}
{% trans 'Action' %}:{{ asset_permission.get_action_display }}
{% trans 'Is active' %}:{{ asset_permission.is_active|yesno:'Yes, No, Unkown' }}
{% trans 'Date expired' %}:{{ asset_permission.date_expired }}
{% trans 'Date created' %}:{{ asset_permission.date_created }}
{% trans 'Created by' %}:{{ asset_permission.created_by }}
{% trans 'Comment' %}:{{ asset_permission.comment }}
+
+
+
+ +
+
+
+ {% trans 'Quick update' %} +
+
+ + + + + + + + + + + + + + + + +
Active: +
+
+ + +
+
+
{% trans 'Retest asset connectivity' %}: + + + +
{% trans 'Repush system user' %}: + + + +
+
+
+ +
+
+ {% trans 'System user' %} +
+
+ + + + + + + + + + + + {% for system_user in system_users %} + + + + + {% endfor %} + +
+ +
+ +
{{ system_user.name }} + +
+
+
+
+
+
+
+
+
+ +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/perms/templates/perms/asset_permission_list.html b/apps/perms/templates/perms/asset_permission_list.html new file mode 100644 index 000000000..d6e30a35b --- /dev/null +++ b/apps/perms/templates/perms/asset_permission_list.html @@ -0,0 +1,73 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create permission" %} +{% endblock %} + +{% block table_head %} + + + + {% trans 'Name' %} + {% trans 'User count' %} + {% trans 'User group count' %} + {% trans 'Asset count' %} + {% trans 'Asset group count' %} + {% trans 'System user count' %} + {% trans 'Is valid' %} + +{% endblock %} + +{% block table_body %} + {% for asset_permission in asset_permission_list %} + + + + + + + {{ asset_permission.name }} + + + {{ asset_permission.users.count}} + {{ asset_permission.user_groups.count}} + {{ asset_permission.assets.count }} + {{ asset_permission.asset_groups.count }} + {{ asset_permission.system_users.count }} + + {% if asset_permission.is_valid %} + + {% else %} + + {% endif %} + + + {% trans 'Update' %} + {% trans 'Delete' %} + + + {% endfor %} +{% endblock %} + +{% block content_bottom_left %} + +{% endblock %} + + diff --git a/apps/perms/templates/perms/asset_permission_user_list.html b/apps/perms/templates/perms/asset_permission_user_list.html new file mode 100644 index 000000000..886127dd0 --- /dev/null +++ b/apps/perms/templates/perms/asset_permission_user_list.html @@ -0,0 +1,196 @@ +{% extends 'base.html' %} +{% load common_tags %} +{% load users_tags %} +{% load static %} +{% load i18n %} + +{% block custom_head_css_js %} + + +{% endblock %} +{% block content %} +
+
+
+
+ +
+
+
+
+ {% trans 'User list of ' %} {{ asset_permission.name }} +
+ + + + + + + + + + +
+
+
+ + + + + + + + + + + + {% for user in page_obj %} + + + + + + + + + {% endfor %} + +
{% trans 'Name' %}{% trans 'Username' %}{% trans 'Email' %}{% trans 'Is valid' %}
{{ user.name }}{{ user.username }}{{ user.email }} + {% if user.is_expired and user.is_active %} + + {% else %} + + {% endif %} + + +
+
+ {% include '_pagination.html' %} +
+
+
+
+
+
+
+ {% trans 'Add user to asset permission' %} +
+
+ + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+ {% trans 'Add user group to asset permission' %} +
+
+ + + + + + + + + + + + {% for user_group in user_groups %} + + + + + {% endfor %} + +
+ +
+ +
{{ user_group.name }} + +
+
+
+
+
+
+
+
+
+ +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} \ No newline at end of file diff --git a/apps/perms/templates/perms/delete_confirm.html b/apps/perms/templates/perms/delete_confirm.html new file mode 100644 index 000000000..777d1dbf9 --- /dev/null +++ b/apps/perms/templates/perms/delete_confirm.html @@ -0,0 +1,15 @@ +{% load i18n %} + + + + + {% trans 'Confirm delete' %} + + +
+ {% csrf_token %} +

Are you sure you want to delete "{{ object.name }}"?

+ +
+ + \ No newline at end of file diff --git a/apps/perms/templates/perms/example.html b/apps/perms/templates/perms/example.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/apps/perms/templates/perms/perm_user_asset_list.html b/apps/perms/templates/perms/perm_user_asset_list.html new file mode 100644 index 000000000..792716f0b --- /dev/null +++ b/apps/perms/templates/perms/perm_user_asset_list.html @@ -0,0 +1,66 @@ +{% extends '_list_base.html' %} +{% load i18n %} +{% load common_tags %} +{% block content_left_head %} + {% trans "Create perm " %} +{% endblock %} + +{% block table_head %} + + + + {% trans 'Name' %} + {% trans 'Username' %} + {% trans 'Role' %} + {% trans 'Asset num' %} + {% trans 'Asset group' %} + {% trans 'System user' %} + {% trans 'Active' %} + +{% endblock %} + +{% block table_body %} + {% for perm in page_obj %} + + + + + + + {{ user.name }} + + + {{ user.username }} + {{ user.get_role_display }} + 35/40 + 20 + 3 + + {% trans 'Create perm' %} + {% trans 'Flush' %} + + + {% endfor %} +{% endblock %} + +{% block content_bottom_left %} + +{% endblock %} + + diff --git a/apps/perms/urls.py b/apps/perms/urls.py index 39b3350fb..2749ff36c 100644 --- a/apps/perms/urls.py +++ b/apps/perms/urls.py @@ -1 +1,22 @@ +# coding:utf-8 + from django.conf.urls import url +import views + +app_name = 'perms' + +urlpatterns = [ + 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/(?P[0-9]+)/update$', views.AssetPermissionUpdateView.as_view(), + name='asset-permission-update'), + url(r'^asset-permission/(?P[0-9]+)$', views.AssetPermissionDetailView.as_view(), + name='asset-permission-detail'), + url(r'^asset-permission/(?P[0-9]+)/delete$', views.AssetPermissionDeleteView.as_view(), + name='asset-permission-delete'), + url(r'^asset-permission/(?P[0-9]+)/user$', views.AssetPermissionUserListView.as_view(), + name='asset-permission-user-list'), + url(r'^asset-permission/(?P[0-9]+)/asset$', views.AssetPermissionAssetListView.as_view(), + name='asset-permission-asset-list'), +] + diff --git a/apps/perms/views.py b/apps/perms/views.py index 91ea44a21..e30a94774 100644 --- a/apps/perms/views.py +++ b/apps/perms/views.py @@ -1,3 +1,190 @@ -from django.shortcuts import render +# ~*~ coding: utf-8 ~*~ -# Create your views here. +from __future__ import unicode_literals, absolute_import +import functools + +from django.utils.translation import ugettext as _ +from django.conf import settings +from django.db.models import Q +from django.views.generic import TemplateView, ListView +from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView +from django.urls import reverse_lazy +from django.contrib.messages.views import SuccessMessageMixin +from django.views.generic.detail import DetailView, SingleObjectMixin + +from common.utils import search_object_attr +from .hands import AdminUserRequiredMixin, User, UserGroup, SystemUser, Asset, AssetGroup +from .models import AssetPermission +from .forms import AssetPermissionForm + + +class AssetPermissionListView(AdminUserRequiredMixin, ListView): + model = AssetPermission + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + context_object_name = 'asset_permission_list' + template_name = 'perms/asset_permission_list.html' + + def get_context_data(self, **kwargs): + context = { + 'app': _('Perms'), + 'action': _('Asset permission list'), + 'keyword': self.keyword, + } + kwargs.update(context) + return super(AssetPermissionListView, self).get_context_data(**kwargs) + + def get_queryset(self): + # Todo: Default order by lose asset connection num + self.queryset = super(AssetPermissionListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.sort = sort = self.request.GET.get('sort', '-date_created') + + if keyword: + self.queryset = self.queryset.filter(Q(users__name__contains=keyword) | + Q(users__username__contains=keyword) | + Q(user_groups__name__contains=keyword) | + Q(assets__ip__contains=keyword) | + Q(assets__hostname__contains=keyword) | + Q(system_users__username__icontains=keyword) | + Q(system_users__name__icontains=keyword) | + Q(asset_groups__name__icontains=keyword) | + Q(comment__icontains=keyword) | + Q(name__icontains=keyword)).distinct() + if sort: + self.queryset = self.queryset.order_by(sort) + return self.queryset + + +class AssetPermissionCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): + model = AssetPermission + form_class = AssetPermissionForm + template_name = 'perms/asset_permission_create_update.html' + success_url = reverse_lazy('perms:asset-permission-list') + + def get_context_data(self, **kwargs): + context = { + 'app': _('Perms'), + 'action': _('Create asset permission'), + } + kwargs.update(context) + return super(AssetPermissionCreateView, self).get_context_data(**kwargs) + + def get_success_message(self, cleaned_data): + success_message = _('Create asset permission %s successfully.' % + ( + reverse_lazy('perms:asset-permission-detail', kwargs={'pk': self.object.pk}), + self.object.name, + )) + return success_message + + +class AssetPermissionUpdateView(AdminUserRequiredMixin, UpdateView): + model = AssetPermission + form_class = AssetPermissionForm + template_name = 'perms/asset_permission_create_update.html' + success_message = _('Update asset permission %s successfully.') + + def get_context_data(self, **kwargs): + context = { + 'app': _('Perms'), + 'action': _('Update asset permission') + } + kwargs.update(context) + return super(AssetPermissionUpdateView, self).get_context_data(**kwargs) + + def get_success_url(self): + success_url = reverse_lazy('perms:asset-permission-detail', kwargs={'pk': self.object.pk}) + return success_url + + +class AssetPermissionDetailView(AdminUserRequiredMixin, DetailView): + template_name = 'perms/asset_permission_detail.html' + context_object_name = 'asset_permission' + model = AssetPermission + + def get_context_data(self, **kwargs): + context = { + 'app': _('Perms'), + 'action': _('Asset permission detail'), + 'system_users_remain': [system_user for system_user in SystemUser.objects.all() + if system_user not in self.object.system_users.all()], + 'system_users': self.object.system_users.all(), + } + kwargs.update(context) + return super(AssetPermissionDetailView, self).get_context_data(**kwargs) + + +class AssetPermissionDeleteView(AdminUserRequiredMixin, DeleteView): + model = AssetPermission + template_name = 'perms/delete_confirm.html' + success_url = reverse_lazy('perms:asset-permission-list') + + +class AssetPermissionUserListView(AdminUserRequiredMixin, SingleObjectMixin, ListView): + template_name = 'perms/asset_permission_user_list.html' + context_object_name = 'asset_permission' + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=AssetPermission.objects.all()) + self.keyword = self.request.GET.get('keyword', '') + return super(AssetPermissionUserListView, self).get(request, *args, **kwargs) + + def get_queryset(self): + queryset = self.object.get_granted_users() + if self.keyword: + search_func = functools.partial(search_object_attr, value=self.keyword, + attr_list=['username', 'name', 'email'], + ignore_case=True) + queryset = filter(search_func, queryset) + return queryset + + def get_context_data(self, **kwargs): + users_granted = self.get_queryset() + user_groups_granted = self.object.user_groups.all() + context = { + 'app': _('Perms'), + 'action': _('Asset permission user list'), + 'users_remain': [user for user in User.objects.all() if user not in users_granted], + 'user_groups': self.object.user_groups.all(), + 'user_groups_remain': [user_group for user_group in UserGroup.objects.all() + if user_group not in user_groups_granted], + 'keyword': self.keyword, + } + kwargs.update(context) + return super(AssetPermissionUserListView, self).get_context_data(**kwargs) + + +class AssetPermissionAssetListView(AdminUserRequiredMixin, SingleObjectMixin, ListView): + template_name = 'perms/asset_permission_asset_list.html' + context_object_name = 'asset_permission' + paginate_by = settings.CONFIG.DISPLAY_PER_PAGE + + def get(self, request, *args, **kwargs): + self.object = self.get_object(queryset=AssetPermission.objects.all()) + self.keyword = self.request.GET.get('keyword', '') + return super(AssetPermissionAssetListView, self).get(request, *args, **kwargs) + + def get_queryset(self): + queryset = self.object.get_granted_assets() + if self.keyword: + search_func = functools.partial(search_object_attr, value=self.keyword, + attr_list=['hostname', 'ip'], + ignore_case=True) + queryset = filter(search_func, queryset) + return queryset + + def get_context_data(self, **kwargs): + assets_granted = self.get_queryset() + asset_groups_granted = self.object.user_groups.all() + context = { + 'app': _('Perms'), + 'action': _('Asset permission asset list'), + 'assets_remain': (asset for asset in Asset.objects.all() if asset not in assets_granted), + 'asset_groups': self.object.asset_groups.all(), + 'asset_groups_remain': [asset_group for asset_group in AssetGroup.objects.all() + if asset_group not in asset_groups_granted], + 'keyword': self.keyword, + } + kwargs.update(context) + return super(AssetPermissionAssetListView, self).get_context_data(**kwargs) diff --git a/apps/static/css/images/jbox-button1.png b/apps/static/css/images/jbox-button1.png new file mode 100644 index 000000000..7d8a6a4b2 Binary files /dev/null and b/apps/static/css/images/jbox-button1.png differ diff --git a/apps/static/css/images/jbox-close.gif b/apps/static/css/images/jbox-close.gif new file mode 100644 index 000000000..83ffe0b6c Binary files /dev/null and b/apps/static/css/images/jbox-close.gif differ diff --git a/apps/static/css/images/jbox-icons.png b/apps/static/css/images/jbox-icons.png new file mode 100644 index 000000000..c35abcffc Binary files /dev/null and b/apps/static/css/images/jbox-icons.png differ diff --git a/apps/static/css/jumpserver.css b/apps/static/css/jumpserver.css index e293dc860..7948a33df 100644 --- a/apps/static/css/jumpserver.css +++ b/apps/static/css/jumpserver.css @@ -38,6 +38,7 @@ th a { color: white; } +.select2-selection--single, .select2-selection--multiple { border: 1px solid #e5e6e7 !important; cursor: text !important; diff --git a/apps/static/css/plugins/sweetalert/sweetalert.css b/apps/static/css/plugins/sweetalert/sweetalert.css new file mode 100644 index 000000000..4469aea6b --- /dev/null +++ b/apps/static/css/plugins/sweetalert/sweetalert.css @@ -0,0 +1,715 @@ +body.stop-scrolling { + height: 100%; + overflow: hidden; } + +.sweet-overlay { + background-color: black; + /* IE8 */ + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + /* IE8 */ + background-color: rgba(0, 0, 0, 0.4); + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: none; + z-index: 10000; } + +.sweet-alert { + background-color: white; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + width: 478px; + padding: 17px; + border-radius: 5px; + text-align: center; + position: fixed; + left: 50%; + top: 50%; + margin-left: -256px; + margin-top: -200px; + overflow: hidden; + display: none; + z-index: 99999; } + @media all and (max-width: 540px) { + .sweet-alert { + width: auto; + margin-left: 0; + margin-right: 0; + left: 15px; + right: 15px; } } + .sweet-alert h2 { + color: #575757; + font-size: 30px; + text-align: center; + font-weight: 600; + text-transform: none; + position: relative; + margin: 25px 0; + padding: 0; + line-height: 40px; + display: block; } + .sweet-alert p { + color: #797979; + font-size: 16px; + text-align: center; + font-weight: 300; + position: relative; + text-align: inherit; + float: none; + margin: 0; + padding: 0; + line-height: normal; } + .sweet-alert fieldset { + border: none; + position: relative; } + .sweet-alert .sa-error-container { + background-color: #f1f1f1; + margin-left: -17px; + margin-right: -17px; + overflow: hidden; + padding: 0 10px; + max-height: 0; + webkit-transition: padding 0.15s, max-height 0.15s; + transition: padding 0.15s, max-height 0.15s; } + .sweet-alert .sa-error-container.show { + padding: 10px 0; + max-height: 100px; + webkit-transition: padding 0.2s, max-height 0.2s; + transition: padding 0.25s, max-height 0.25s; } + .sweet-alert .sa-error-container .icon { + display: inline-block; + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #ea7d7d; + color: white; + line-height: 24px; + text-align: center; + margin-right: 3px; } + .sweet-alert .sa-error-container p { + display: inline-block; } + .sweet-alert .sa-input-error { + position: absolute; + top: 29px; + right: 26px; + width: 20px; + height: 20px; + opacity: 0; + -webkit-transform: scale(0.5); + transform: scale(0.5); + -webkit-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -webkit-transition: all 0.1s; + transition: all 0.1s; } + .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after { + content: ""; + width: 20px; + height: 6px; + background-color: #f06e57; + border-radius: 3px; + position: absolute; + top: 50%; + margin-top: -4px; + left: 50%; + margin-left: -9px; } + .sweet-alert .sa-input-error::before { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-input-error::after { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-input-error.show { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); } + .sweet-alert input { + width: 100%; + box-sizing: border-box; + border-radius: 3px; + border: 1px solid #d7d7d7; + height: 43px; + margin-top: 10px; + margin-bottom: 17px; + font-size: 18px; + box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06); + padding: 0 12px; + display: none; + -webkit-transition: all 0.3s; + transition: all 0.3s; } + .sweet-alert input:focus { + outline: none; + box-shadow: 0px 0px 3px #c4e6f5; + border: 1px solid #b4dbed; } + .sweet-alert input:focus::-moz-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input:focus:-ms-input-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input:focus::-webkit-input-placeholder { + transition: opacity 0.3s 0.03s ease; + opacity: 0.5; } + .sweet-alert input::-moz-placeholder { + color: #bdbdbd; } + .sweet-alert input:-ms-input-placeholder { + color: #bdbdbd; } + .sweet-alert input::-webkit-input-placeholder { + color: #bdbdbd; } + .sweet-alert.show-input input { + display: block; } + .sweet-alert button { + background-color: #AEDEF4; + color: white; + border: none; + box-shadow: none; + font-size: 17px; + font-weight: 500; + -webkit-border-radius: 4px; + border-radius: 5px; + padding: 10px 32px; + margin: 26px 5px 0 5px; + cursor: pointer; } + .sweet-alert button:focus { + outline: none; + box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); } + .sweet-alert button:hover { + background-color: #a1d9f2; } + .sweet-alert button:active { + background-color: #81ccee; } + .sweet-alert button.cancel { + background-color: #D0D0D0; } + .sweet-alert button.cancel:hover { + background-color: #c8c8c8; } + .sweet-alert button.cancel:active { + background-color: #b6b6b6; } + .sweet-alert button.cancel:focus { + box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; } + .sweet-alert button::-moz-focus-inner { + border: 0; } + .sweet-alert[data-has-cancel-button=false] button { + box-shadow: none !important; } + .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] { + padding-bottom: 40px; } + .sweet-alert .sa-icon { + width: 80px; + height: 80px; + border: 4px solid gray; + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + margin: 20px auto; + padding: 0; + position: relative; + box-sizing: content-box; } + .sweet-alert .sa-icon.sa-error { + border-color: #F27474; } + .sweet-alert .sa-icon.sa-error .sa-x-mark { + position: relative; + display: block; } + .sweet-alert .sa-icon.sa-error .sa-line { + position: absolute; + height: 5px; + width: 47px; + background-color: #F27474; + display: block; + top: 37px; + border-radius: 2px; } + .sweet-alert .sa-icon.sa-error .sa-line.sa-left { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + left: 17px; } + .sweet-alert .sa-icon.sa-error .sa-line.sa-right { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + right: 16px; } + .sweet-alert .sa-icon.sa-warning { + border-color: #F8BB86; } + .sweet-alert .sa-icon.sa-warning .sa-body { + position: absolute; + width: 5px; + height: 47px; + left: 50%; + top: 10px; + -webkit-border-radius: 2px; + border-radius: 2px; + margin-left: -2px; + background-color: #F8BB86; } + .sweet-alert .sa-icon.sa-warning .sa-dot { + position: absolute; + width: 7px; + height: 7px; + -webkit-border-radius: 50%; + border-radius: 50%; + margin-left: -3px; + left: 50%; + bottom: 10px; + background-color: #F8BB86; } + .sweet-alert .sa-icon.sa-info { + border-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-info::before { + content: ""; + position: absolute; + width: 5px; + height: 29px; + left: 50%; + bottom: 17px; + border-radius: 2px; + margin-left: -2px; + background-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-info::after { + content: ""; + position: absolute; + width: 7px; + height: 7px; + border-radius: 50%; + margin-left: -3px; + top: 19px; + background-color: #C9DAE1; } + .sweet-alert .sa-icon.sa-success { + border-color: #A5DC86; } + .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after { + content: ''; + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + position: absolute; + width: 60px; + height: 120px; + background: white; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-icon.sa-success::before { + -webkit-border-radius: 120px 0 0 120px; + border-radius: 120px 0 0 120px; + top: -7px; + left: -33px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 60px 60px; + transform-origin: 60px 60px; } + .sweet-alert .sa-icon.sa-success::after { + -webkit-border-radius: 0 120px 120px 0; + border-radius: 0 120px 120px 0; + top: -11px; + left: 30px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + -webkit-transform-origin: 0px 60px; + transform-origin: 0px 60px; } + .sweet-alert .sa-icon.sa-success .sa-placeholder { + width: 80px; + height: 80px; + border: 4px solid rgba(165, 220, 134, 0.2); + -webkit-border-radius: 40px; + border-radius: 40px; + border-radius: 50%; + box-sizing: content-box; + position: absolute; + left: -4px; + top: -4px; + z-index: 2; } + .sweet-alert .sa-icon.sa-success .sa-fix { + width: 5px; + height: 90px; + background-color: white; + position: absolute; + left: 28px; + top: 8px; + z-index: 1; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-icon.sa-success .sa-line { + height: 5px; + background-color: #A5DC86; + display: block; + border-radius: 2px; + position: absolute; + z-index: 2; } + .sweet-alert .sa-icon.sa-success .sa-line.sa-tip { + width: 25px; + left: 14px; + top: 46px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); } + .sweet-alert .sa-icon.sa-success .sa-line.sa-long { + width: 47px; + right: 8px; + top: 38px; + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); } + .sweet-alert .sa-icon.sa-custom { + background-size: contain; + border-radius: 0; + border: none; + background-position: center center; + background-repeat: no-repeat; } + +/* + * Animations + */ +@-webkit-keyframes showSweetAlert { + 0% { + transform: scale(0.7); + -webkit-transform: scale(0.7); } + 45% { + transform: scale(1.05); + -webkit-transform: scale(1.05); } + 80% { + transform: scale(0.95); + -webkit-transform: scale(0.95); } + 100% { + transform: scale(1); + -webkit-transform: scale(1); } } + +@keyframes showSweetAlert { + 0% { + transform: scale(0.7); + -webkit-transform: scale(0.7); } + 45% { + transform: scale(1.05); + -webkit-transform: scale(1.05); } + 80% { + transform: scale(0.95); + -webkit-transform: scale(0.95); } + 100% { + transform: scale(1); + -webkit-transform: scale(1); } } + +@-webkit-keyframes hideSweetAlert { + 0% { + transform: scale(1); + -webkit-transform: scale(1); } + 100% { + transform: scale(0.5); + -webkit-transform: scale(0.5); } } + +@keyframes hideSweetAlert { + 0% { + transform: scale(1); + -webkit-transform: scale(1); } + 100% { + transform: scale(0.5); + -webkit-transform: scale(0.5); } } + +@-webkit-keyframes slideFromTop { + 0% { + top: 0%; } + 100% { + top: 50%; } } + +@keyframes slideFromTop { + 0% { + top: 0%; } + 100% { + top: 50%; } } + +@-webkit-keyframes slideToTop { + 0% { + top: 50%; } + 100% { + top: 0%; } } + +@keyframes slideToTop { + 0% { + top: 50%; } + 100% { + top: 0%; } } + +@-webkit-keyframes slideFromBottom { + 0% { + top: 70%; } + 100% { + top: 50%; } } + +@keyframes slideFromBottom { + 0% { + top: 70%; } + 100% { + top: 50%; } } + +@-webkit-keyframes slideToBottom { + 0% { + top: 50%; } + 100% { + top: 70%; } } + +@keyframes slideToBottom { + 0% { + top: 50%; } + 100% { + top: 70%; } } + +.showSweetAlert[data-animation=pop] { + -webkit-animation: showSweetAlert 0.3s; + animation: showSweetAlert 0.3s; } + +.showSweetAlert[data-animation=none] { + -webkit-animation: none; + animation: none; } + +.showSweetAlert[data-animation=slide-from-top] { + -webkit-animation: slideFromTop 0.3s; + animation: slideFromTop 0.3s; } + +.showSweetAlert[data-animation=slide-from-bottom] { + -webkit-animation: slideFromBottom 0.3s; + animation: slideFromBottom 0.3s; } + +.hideSweetAlert[data-animation=pop] { + -webkit-animation: hideSweetAlert 0.2s; + animation: hideSweetAlert 0.2s; } + +.hideSweetAlert[data-animation=none] { + -webkit-animation: none; + animation: none; } + +.hideSweetAlert[data-animation=slide-from-top] { + -webkit-animation: slideToTop 0.4s; + animation: slideToTop 0.4s; } + +.hideSweetAlert[data-animation=slide-from-bottom] { + -webkit-animation: slideToBottom 0.3s; + animation: slideToBottom 0.3s; } + +@-webkit-keyframes animateSuccessTip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@keyframes animateSuccessTip { + 0% { + width: 0; + left: 1px; + top: 19px; } + 54% { + width: 0; + left: 1px; + top: 19px; } + 70% { + width: 50px; + left: -8px; + top: 37px; } + 84% { + width: 17px; + left: 21px; + top: 48px; } + 100% { + width: 25px; + left: 14px; + top: 45px; } } + +@-webkit-keyframes animateSuccessLong { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0px; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@keyframes animateSuccessLong { + 0% { + width: 0; + right: 46px; + top: 54px; } + 65% { + width: 0; + right: 46px; + top: 54px; } + 84% { + width: 55px; + right: 0px; + top: 35px; } + 100% { + width: 47px; + right: 8px; + top: 38px; } } + +@-webkit-keyframes rotatePlaceholder { + 0% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + 5% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + 12% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } + 100% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } } + +@keyframes rotatePlaceholder { + 0% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + 5% { + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); } + 12% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } + 100% { + transform: rotate(-405deg); + -webkit-transform: rotate(-405deg); } } + +.animateSuccessTip { + -webkit-animation: animateSuccessTip 0.75s; + animation: animateSuccessTip 0.75s; } + +.animateSuccessLong { + -webkit-animation: animateSuccessLong 0.75s; + animation: animateSuccessLong 0.75s; } + +.sa-icon.sa-success.animate::after { + -webkit-animation: rotatePlaceholder 4.25s ease-in; + animation: rotatePlaceholder 4.25s ease-in; } + +@-webkit-keyframes animateErrorIcon { + 0% { + transform: rotateX(100deg); + -webkit-transform: rotateX(100deg); + opacity: 0; } + 100% { + transform: rotateX(0deg); + -webkit-transform: rotateX(0deg); + opacity: 1; } } + +@keyframes animateErrorIcon { + 0% { + transform: rotateX(100deg); + -webkit-transform: rotateX(100deg); + opacity: 0; } + 100% { + transform: rotateX(0deg); + -webkit-transform: rotateX(0deg); + opacity: 1; } } + +.animateErrorIcon { + -webkit-animation: animateErrorIcon 0.5s; + animation: animateErrorIcon 0.5s; } + +@-webkit-keyframes animateXMark { + 0% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + transform: scale(1.15); + -webkit-transform: scale(1.15); + margin-top: -6px; } + 100% { + transform: scale(1); + -webkit-transform: scale(1); + margin-top: 0; + opacity: 1; } } + +@keyframes animateXMark { + 0% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 50% { + transform: scale(0.4); + -webkit-transform: scale(0.4); + margin-top: 26px; + opacity: 0; } + 80% { + transform: scale(1.15); + -webkit-transform: scale(1.15); + margin-top: -6px; } + 100% { + transform: scale(1); + -webkit-transform: scale(1); + margin-top: 0; + opacity: 1; } } + +.animateXMark { + -webkit-animation: animateXMark 0.5s; + animation: animateXMark 0.5s; } + +@-webkit-keyframes pulseWarning { + 0% { + border-color: #F8D486; } + 100% { + border-color: #F8BB86; } } + +@keyframes pulseWarning { + 0% { + border-color: #F8D486; } + 100% { + border-color: #F8BB86; } } + +.pulseWarning { + -webkit-animation: pulseWarning 0.75s infinite alternate; + animation: pulseWarning 0.75s infinite alternate; } + +@-webkit-keyframes pulseWarningIns { + 0% { + background-color: #F8D486; } + 100% { + background-color: #F8BB86; } } + +@keyframes pulseWarningIns { + 0% { + background-color: #F8D486; } + 100% { + background-color: #F8BB86; } } + +.pulseWarningIns { + -webkit-animation: pulseWarningIns 0.75s infinite alternate; + animation: pulseWarningIns 0.75s infinite alternate; } + +/* Internet Explorer 9 has some special quirks that are fixed here */ +/* The icons are not animated. */ +/* This file is automatically merged into sweet-alert.min.js through Gulp */ +/* Error icon */ +.sweet-alert .sa-icon.sa-error .sa-line.sa-left { + -ms-transform: rotate(45deg) \9; } + +.sweet-alert .sa-icon.sa-error .sa-line.sa-right { + -ms-transform: rotate(-45deg) \9; } + +/* Success icon */ +.sweet-alert .sa-icon.sa-success { + border-color: transparent\9; } + +.sweet-alert .sa-icon.sa-success .sa-line.sa-tip { + -ms-transform: rotate(45deg) \9; } + +.sweet-alert .sa-icon.sa-success .sa-line.sa-long { + -ms-transform: rotate(-45deg) \9; } diff --git a/apps/static/css/plugins/toastr/toastr.min.css b/apps/static/css/plugins/toastr/toastr.min.css new file mode 100644 index 000000000..567716ea2 --- /dev/null +++ b/apps/static/css/plugins/toastr/toastr.min.css @@ -0,0 +1,222 @@ +.toast-title { + font-weight: 700 +} + +.toast-message { + -ms-word-wrap: break-word; + word-wrap: break-word +} + +.toast-message a, .toast-message label { + color: #fff +} + +.toast-message a:hover { + color: #ccc; + text-decoration: none +} + +.toast-close-button { + position: relative; + right: -.3em; + top: -.3em; + float: right; + font-size: 20px; + font-weight: 700; + color: #fff; + -webkit-text-shadow: 0 1px 0 #fff; + text-shadow: 0 1px 0 #fff; + opacity: .8; + -ms-filter: alpha(Opacity=80); + filter: alpha(opacity=80) +} + +.toast-close-button:focus, .toast-close-button:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .4; + -ms-filter: alpha(Opacity=40); + filter: alpha(opacity=40) +} + +button.toast-close-button { + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.toast-top-center { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-center { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-full-width { + top: 0; + right: 0; + width: 100% +} + +.toast-bottom-full-width { + bottom: 0; + right: 0; + width: 100% +} + +.toast-top-left { + top: 12px; + left: 12px +} + +.toast-top-right { + top: 12px; + right: 12px +} + +.toast-bottom-right { + right: 12px; + bottom: 12px +} + +.toast-bottom-left { + bottom: 12px; + left: 12px +} + +#toast-container { + position: fixed; + z-index: 999999 +} + +#toast-container * { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box +} + +#toast-container > div { + position: relative; + overflow: hidden; + margin: 0 0 6px; + padding: 15px 15px 15px 50px; + width: 300px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background-position: 15px center; + background-repeat: no-repeat; + -moz-box-shadow: 0 0 12px #999; + -webkit-box-shadow: 0 0 12px #999; + box-shadow: 0 0 12px #999; + color: #fff; + opacity: .8; + -ms-filter: alpha(Opacity=80); + filter: alpha(opacity=80) +} + +#toast-container > :hover { + -moz-box-shadow: 0 0 12px #000; + -webkit-box-shadow: 0 0 12px #000; + box-shadow: 0 0 12px #000; + opacity: 1; + -ms-filter: alpha(Opacity=100); + filter: alpha(opacity=100); + cursor: pointer +} + +#toast-container > .toast-info { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-error { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=) !important +} + +#toast-container > .toast-success { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==) !important +} + +#toast-container > .toast-warning { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=) !important +} + +#toast-container.toast-bottom-center > div, #toast-container.toast-top-center > div { + width: 300px; + margin: auto +} + +#toast-container.toast-bottom-full-width > div, #toast-container.toast-top-full-width > div { + width: 96%; + margin: auto +} + +.toast { + background-color: #030303 +} + +.toast-success { + background-color: #51a351 +} + +.toast-error { + background-color: #bd362f +} + +.toast-info { + background-color: #2f96b4 +} + +.toast-warning { + background-color: #f89406 +} + +.toast-progress { + position: absolute; + left: 0; + bottom: 0; + height: 4px; + background-color: #000; + opacity: .4; + -ms-filter: alpha(Opacity=40); + filter: alpha(opacity=40) +} + +@media all and (max-width: 240px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 11em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 241px) and (max-width: 480px) { + #toast-container > div { + padding: 8px 8px 8px 50px; + width: 18em + } + + #toast-container .toast-close-button { + right: -.2em; + top: -.2em + } +} + +@media all and (min-width: 481px) and (max-width: 768px) { + #toast-container > div { + padding: 15px 15px 15px 50px; + width: 25em + } +} \ No newline at end of file diff --git a/apps/static/jbox/Skins/jumpserver/Desktop.ini b/apps/static/jbox/Skins/jumpserver/Desktop.ini new file mode 100644 index 000000000..09485b11b --- /dev/null +++ b/apps/static/jbox/Skins/jumpserver/Desktop.ini @@ -0,0 +1,3 @@ +[.ShellClassInfo] +IconFile=%SystemRoot%\system32\SHELL32.dll +IconIndex=161 diff --git a/apps/static/jbox/Skins/jumpserver/images/Thumbs.db b/apps/static/jbox/Skins/jumpserver/images/Thumbs.db new file mode 100644 index 000000000..37d2c8e06 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/Thumbs.db differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-button1.png b/apps/static/jbox/Skins/jumpserver/images/jbox-button1.png new file mode 100644 index 000000000..7d8a6a4b2 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-button1.png differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-button2.png b/apps/static/jbox/Skins/jumpserver/images/jbox-button2.png new file mode 100644 index 000000000..456a48100 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-button2.png differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-close1.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-close1.gif new file mode 100644 index 000000000..a87057e89 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-close1.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-close2.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-close2.gif new file mode 100644 index 000000000..dd2dde900 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-close2.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-content-loading.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-content-loading.gif new file mode 100644 index 000000000..f3e165009 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-content-loading.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-icons-ie6.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-icons-ie6.gif new file mode 100644 index 000000000..201b912e0 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-icons-ie6.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-icons.png b/apps/static/jbox/Skins/jumpserver/images/jbox-icons.png new file mode 100644 index 000000000..c35abcffc Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-icons.png differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-loading1.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-loading1.gif new file mode 100644 index 000000000..684c59dbe Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-loading1.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-loading2.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-loading2.gif new file mode 100644 index 000000000..60f007036 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-loading2.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-loading3.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-loading3.gif new file mode 100644 index 000000000..5e0e6c17b Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-loading3.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/images/jbox-title-icon.gif b/apps/static/jbox/Skins/jumpserver/images/jbox-title-icon.gif new file mode 100644 index 000000000..b9c772fb5 Binary files /dev/null and b/apps/static/jbox/Skins/jumpserver/images/jbox-title-icon.gif differ diff --git a/apps/static/jbox/Skins/jumpserver/jbox.css b/apps/static/jbox/Skins/jumpserver/jbox.css new file mode 100644 index 000000000..e34a7b3d8 --- /dev/null +++ b/apps/static/jbox/Skins/jumpserver/jbox.css @@ -0,0 +1,43 @@ +@charset "utf-8"; +/* + ʾCSS ʽֻ޸ɫԣͼƬĵַͼƬСҪĬϵһ£border:dotted solid double dashed +*/ +*:focus {outline: none;} +/* fade */ +.jbox-fade{background-color:#000000;} +/* drag */ +.jbox-drag{border:1px dashed #003870;} +/* jbox */ +div.jbox {padding:0px;border:none;font-size:12px;} +/* border */ +div.jbox .jbox-border{background: none repeat scroll 0 0 #000000;filter:alpha(opacity=20);-moz-opacity:0.2;opacity:0.2;} +/* container */ +div.jbox .jbox-container{background-color:#ffffff;border:1px solid #999999;} +/* title-panel */ +div.jbox .jbox-title-panel{background:#2f4050;border-bottom:1px solid #CCCCCC;} +div.jbox .jbox-title{font-weight:bold;color:#ffffff;} +div.jbox .jbox-title-icon{background:url(images/jbox-title-icon.gif) no-repeat scroll 3px 5px transparent;} +div.jbox .jbox-close,div.jbox .jbox-close-hover{background:url(images/jbox-close1.gif) no-repeat scroll 0px 0px transparent;} +div.jbox .jbox-close-hover{background-position:-16px 0;} +/* content */ +div.jbox .jbox-content{min-height:24px;line-height:18px;color:#444444;} +div.jbox .jbox-content-loading{background-color:#E6E6E6;} +div.jbox .jbox-content-loading-image{background:url(images/jbox-content-loading.gif) no-repeat bottom center;} +/* button-panel */ +div.jbox .jbox-button-panel{border-top:1px solid #CCCCCC;background-color: #EEEEEE;} +div.jbox .jbox-bottom-text{text-indent:10px;color:#444444;} +div.jbox .jbox-button{background:url(images/jbox-button2.png) repeat-x transparent;border:#AAAAAA 1px solid;color:#888888;border-radius:3px 3px 3px 3px;margin:1px 7px 0px 0px;height:22px;cursor:default;} +div.jbox .jbox-button-hover{background-position:0px -20px;color:#666666;} +div.jbox .jbox-button-active{background-position:0px -40px;} +div.jbox-warning .jbox .jbox-button-panel{background-color: #FFFFFF;} +/* tip-color */ +div.jbox .jbox-tip-color{background-color:#003870;border-color:#003870;border-radius:3px 3px 3px 3px;color:#ffffff;} +/* icons */ +div.jbox span.jbox-icon{background:url(images/jbox-icons.png) no-repeat scroll 0 0 transparent;_background:url(images/jbox-icons-ie6.gif) no-repeat scroll 0 0 transparent;} +div.jbox span.jbox-icon-info {background-position:0 0;} +div.jbox span.jbox-icon-question {background-position:-36px 0;} +div.jbox span.jbox-icon-success {background-position:-72px 0;} +div.jbox span.jbox-icon-warning {background-position:-108px 0;} +div.jbox span.jbox-icon-error {background-position:-144px 0;} +div.jbox span.jbox-icon-none {display: none; overflow:hidden;} +div.jbox span.jbox-icon-loading {background:url(images/jbox-loading1.gif) no-repeat scroll 0 0 transparent;} \ No newline at end of file diff --git a/apps/static/jbox/Skins2/jumpserver/Desktop.ini b/apps/static/jbox/Skins2/jumpserver/Desktop.ini new file mode 100644 index 000000000..09485b11b --- /dev/null +++ b/apps/static/jbox/Skins2/jumpserver/Desktop.ini @@ -0,0 +1,3 @@ +[.ShellClassInfo] +IconFile=%SystemRoot%\system32\SHELL32.dll +IconIndex=161 diff --git a/apps/static/jbox/Skins2/jumpserver/images/Thumbs.db b/apps/static/jbox/Skins2/jumpserver/images/Thumbs.db new file mode 100644 index 000000000..c9e4ec7f9 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/Thumbs.db differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-close1.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-close1.gif new file mode 100644 index 000000000..a87057e89 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-close1.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-close2.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-close2.gif new file mode 100644 index 000000000..dd2dde900 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-close2.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-content-loading.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-content-loading.gif new file mode 100644 index 000000000..f04301a94 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-content-loading.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-icons-ie6.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-icons-ie6.gif new file mode 100644 index 000000000..201b912e0 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-icons-ie6.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-icons.png b/apps/static/jbox/Skins2/jumpserver/images/jbox-icons.png new file mode 100644 index 000000000..f72f29240 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-icons.png differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-loading1.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading1.gif new file mode 100644 index 000000000..5e0834f1d Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading1.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-loading2.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading2.gif new file mode 100644 index 000000000..209124ab6 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading2.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-loading3.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading3.gif new file mode 100644 index 000000000..770540141 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-loading3.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/images/jbox-title-icon.gif b/apps/static/jbox/Skins2/jumpserver/images/jbox-title-icon.gif new file mode 100644 index 000000000..b9c772fb5 Binary files /dev/null and b/apps/static/jbox/Skins2/jumpserver/images/jbox-title-icon.gif differ diff --git a/apps/static/jbox/Skins2/jumpserver/jbox.css b/apps/static/jbox/Skins2/jumpserver/jbox.css new file mode 100644 index 000000000..81ba8cc10 --- /dev/null +++ b/apps/static/jbox/Skins2/jumpserver/jbox.css @@ -0,0 +1,41 @@ +@charset "utf-8"; + +*:focus {outline: none;} +/* fade */ +.jbox-fade{background-color:#000000;} +/* drag */ +.jbox-drag{border:1px dashed #0097d4;} +/* jbox */ +div.jbox {padding:0px;border:none;font-size:12px;} +/* border */ +div.jbox .jbox-border{background: none repeat scroll 0 0 #000000;filter:alpha(opacity=20);-moz-opacity:0.2;opacity:0.2;} +/* container */ +div.jbox .jbox-container{background-color:#ffffff;border:1px solid #999999;} +/* title-panel */ +div.jbox .jbox-title-panel{background: #2f4050;background: -webkit-gradient(linear, left top, left bottom, from(#2f4050), to(#2f4050));background: -moz-linear-gradient(top, #2f4050, #2f4050);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2f4050', endColorstr='#2f4050');border-bottom:1px solid #999999;} +div.jbox .jbox-title{font-weight:bold;color:#ffffff;} +div.jbox .jbox-title-icon{background:url(images/jbox-title-icon.gif) no-repeat scroll 3px 5px transparent;} +div.jbox .jbox-close,div.jbox .jbox-close-hover{background:url(images/jbox-close1.gif) no-repeat scroll 0px 0px transparent;} +div.jbox .jbox-close-hover{background-position:-16px 0;} +/* content */ +div.jbox .jbox-content{min-height:24px;line-height:18px;color:#444444;} +div.jbox .jbox-content-loading{background-color:#E6E6E6;} +div.jbox .jbox-content-loading-image{background:url(images/jbox-content-loading.gif) no-repeat bottom center;} +/* button-panel */ +div.jbox .jbox-button-panel{border-top:1px solid #CCCCCC;background-color: #EEEEEE;} +div.jbox .jbox-bottom-text{text-indent:10px;color:#444444;} +div.jbox .jbox-button{background: #0097d4;background: -webkit-gradient(linear, left top, left bottom, from(#2f4050), to(#2f4050));background: -moz-linear-gradient(top, #2f4050, #2f4050);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2f4050', endColorstr='#2f4050');border:#004b6a 1px solid;color:#fff;border-radius:3px 3px 3px 3px;margin:1px 7px 0px 0px;height:22px;cursor:default;} +div.jbox .jbox-button-hover{background: #0097d4;background: -webkit-gradient(linear, left top, left bottom, from(#0097d4), to(#005b7f));background: -moz-linear-gradient(top, #0097d4, #005b7f);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0097d4', endColorstr='#005b7f');} +div.jbox .jbox-button-active{background: -webkit-gradient(linear, left top, left bottom, from(#005b7f), to(#0097d4));background: -moz-linear-gradient(top, #005b7f, #0097d4);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#005b7f', endColorstr='#0097d4');} +div.jbox-warning .jbox .jbox-button-panel{background-color: #FFFFFF;} +/* tip-color */ +div.jbox .jbox-tip-color{background: #0097d4;background: -webkit-gradient(linear, left top, left bottom, from(#0097d4), to(#005b7f));background: -moz-linear-gradient(top, #0097d4, #005b7f);filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0097d4', endColorstr='#005b7f');border-color:#004b6a;border-radius:3px 3px 3px 3px;color:#fff;} +/* icons */ +div.jbox span.jbox-icon{background:url(images/jbox-icons.png) no-repeat scroll 0 0 transparent;_background:url(images/jbox-icons-ie6.gif) no-repeat scroll 0 0 transparent;} +div.jbox span.jbox-icon-info {background-position:0 0;} +div.jbox span.jbox-icon-question {background-position:-36px 0;} +div.jbox span.jbox-icon-success {background-position:-72px 0;} +div.jbox span.jbox-icon-warning {background-position:-108px 0;} +div.jbox span.jbox-icon-error {background-position:-144px 0;} +div.jbox span.jbox-icon-none {display: none; overflow:hidden;} +div.jbox span.jbox-icon-loading {background:url(images/jbox-loading1.gif) no-repeat scroll 0 0 transparent;} \ No newline at end of file diff --git a/apps/static/jbox/i18n/jquery.jBox-zh-CN.js b/apps/static/jbox/i18n/jquery.jBox-zh-CN.js new file mode 100644 index 000000000..7783f954a --- /dev/null +++ b/apps/static/jbox/i18n/jquery.jBox-zh-CN.js @@ -0,0 +1,77 @@ + +/* jBox 全局设置 */ +var jBoxConfig = {}; + +jBoxConfig.defaults = { + id: null, /* 在页面中的唯一id,如果为null则自动生成随机id,一个id只会显示一个jBox */ + top: '15%', /* 窗口离顶部的距离,可以是百分比或像素(如 '100px') */ + border: 5, /* 窗口的外边框像素大小,必须是0以上的整数 */ + opacity: 0.1, /* 窗口隔离层的透明度,如果设置为0,则不显示隔离层 */ + timeout: 0, /* 窗口显示多少毫秒后自动关闭,如果设置为0,则不自动关闭 */ + showType: 'fade', /* 窗口显示的类型,可选值有:show、fade、slide */ + showSpeed: 'fast', /* 窗口显示的速度,可选值有:'slow'、'fast'、表示毫秒的整数 */ + showIcon: true, /* 是否显示窗口标题的图标,true显示,false不显示,或自定义的CSS样式类名(以为图标为背景) */ + showClose: true, /* 是否显示窗口右上角的关闭按钮 */ + draggable: true, /* 是否可以拖动窗口 */ + dragLimit: true, /* 在可以拖动窗口的情况下,是否限制在可视范围 */ + dragClone: false, /* 在可以拖动窗口的情况下,鼠标按下时窗口是否克隆窗口 */ + persistent: true, /* 在显示隔离层的情况下,点击隔离层时,是否坚持窗口不关闭 */ + showScrolling: true, /* 是否显示浏览的滚动条 */ + ajaxData: {}, /* 在窗口内容使用get:或post:前缀标识的情况下,ajax post的数据,例如:{ id: 1 } 或 "id=1" */ + iframeScrolling: 'auto', /* 在窗口内容使用iframe:前缀标识的情况下,iframe的scrolling属性值,可选值有:'auto'、'yes'、'no' */ + + title: 'jBox', /* 窗口的标题 */ + width: 350, /* 窗口的宽度,值为'auto'或表示像素的整数 */ + height: 'auto', /* 窗口的高度,值为'auto'或表示像素的整数 */ + bottomText: '', /* 窗口的按钮左边的内容,当没有按钮时此设置无效 */ + buttons: { '确定': 'ok' }, /* 窗口的按钮 */ + buttonsFocus: 0, /* 表示第几个按钮为默认按钮,索引从0开始 */ + loaded: function (h) { }, /* 窗口加载完成后执行的函数,需要注意的是,如果是ajax或iframe也是要等加载完http请求才算窗口加载完成,参数h表示窗口内容的jQuery对象 */ + submit: function (v, h, f) { return true; }, /* 点击窗口按钮后的回调函数,返回true时表示关闭窗口,参数有三个,v表示所点的按钮的返回值,h表示窗口内容的jQuery对象,f表示窗口内容里的form表单键值 */ + closed: function () { } /* 窗口关闭后执行的函数 */ +}; + +jBoxConfig.stateDefaults = { + content: '', /* 状态的内容,不支持前缀标识 */ + buttons: { '确定': 'ok' }, /* 状态的按钮 */ + buttonsFocus: 0, /* 表示第几个按钮为默认按钮,索引从0开始 */ + submit: function (v, h, f) { return true; } /* 点击状态按钮后的回调函数,返回true时表示关闭窗口,参数有三个,v表示所点的按钮的返回值,h表示窗口内容的jQuery对象,f表示窗口内容里的form表单键值 */ +}; + +jBoxConfig.tipDefaults = { + content: '', /* 提示的内容,不支持前缀标识 */ + icon: 'info', /* 提示的图标,可选值有'info'、'success'、'warning'、'error'、'loading',默认值为'info',当为'loading'时,timeout值会被设置为0,表示不会自动关闭。 */ + top: '40%', /* 提示离顶部的距离,可以是百分比或像素(如 '100px') */ + width: 'auto', /* 提示的高度,值为'auto'或表示像素的整数 */ + height: 'auto', /* 提示的高度,值为'auto'或表示像素的整数 */ + opacity: 0, /* 窗口隔离层的透明度,如果设置为0,则不显示隔离层 */ + timeout: 3000, /* 提示显示多少毫秒后自动关闭,必须是大于0的整数 */ + closed: function () { } /* 提示关闭后执行的函数 */ +}; + +jBoxConfig.messagerDefaults = { + content: '', /* 信息的内容,不支持前缀标识 */ + title: 'jBox', /* 信息的标题 */ + icon: 'none', /* 信息图标,值为'none'时为不显示图标,可选值有'none'、'info'、'question'、'success'、'warning'、'error' */ + width: 350, /* 信息的高度,值为'auto'或表示像素的整数 */ + height: 'auto', /* 信息的高度,值为'auto'或表示像素的整数 */ + timeout: 3000, /* 信息显示多少毫秒后自动关闭,如果设置为0,则不自动关闭 */ + showType: 'slide', /* 信息显示的类型,可选值有:show、fade、slide */ + showSpeed: 600, /* 信息显示的速度,可选值有:'slow'、'fast'、表示毫秒的整数 */ + border: 0, /* 信息的外边框像素大小,必须是0以上的整数 */ + buttons: {}, /* 信息的按钮 */ + buttonsFocus: 0, /* 表示第几个按钮为默认按钮,索引从0开始 */ + loaded: function (h) { }, /* 窗口加载完成后执行的函数,参数h表示窗口内容的jQuery对象 */ + submit: function (v, h, f) { return true; }, /* 点击信息按钮后的回调函数,返回true时表示关闭窗口,参数有三个,v表示所点的按钮的返回值,h表示窗口内容的jQuery对象,f表示窗口内容里的form表单键值 */ + closed: function () { } /* 信息关闭后执行的函数 */ +}; + +jBoxConfig.languageDefaults = { + close: '关闭', /* 窗口右上角关闭按钮提示 */ + ok: '确定', /* $.jBox.prompt() 系列方法的“确定”按钮文字 */ + yes: '是', /* $.jBox.warning() 方法的“是”按钮文字 */ + no: '否', /* $.jBox.warning() 方法的“否”按钮文字 */ + cancel: '取消' /* $.jBox.confirm() 和 $.jBox.warning() 方法的“取消”按钮文字 */ +}; + +$.jBox.setDefaults(jBoxConfig); diff --git a/apps/static/jbox/jquery-migrate-1.1.1.min.js b/apps/static/jbox/jquery-migrate-1.1.1.min.js new file mode 100644 index 000000000..7aa623713 --- /dev/null +++ b/apps/static/jbox/jquery-migrate-1.1.1.min.js @@ -0,0 +1,9 @@ +/*! + * jQuery Migrate - v1.1.1 - 2013-02-16 + * https://github.com/jquery/jquery-migrate + * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT + */ +(function(s,p,i){var D={};s.migrateWarnings=[];if(!s.migrateMute&&p.console&&console.log){console.log("JQMIGRATE: Logging is active")}if(s.migrateTrace===i){s.migrateTrace=true}s.migrateReset=function(){D={};s.migrateWarnings.length=0};function h(G){if(!D[G]){D[G]=true;s.migrateWarnings.push(G);if(p.console&&console.warn&&!s.migrateMute){console.warn("JQMIGRATE: "+G);if(s.migrateTrace&&console.trace){console.trace()}}}}function a(I,K,H,J){if(Object.defineProperty){try{Object.defineProperty(I,K,{configurable:true,enumerable:true,get:function(){h(J);return H},set:function(L){h(J);H=L}});return}catch(G){}}s._definePropertyBroken=true;I[K]=H}if(document.compatMode==="BackCompat"){h("jQuery is not compatible with Quirks Mode")}var f=s("",{size:1}).attr("size")&&s.attrFn,x=s.attr,w=s.attrHooks.value&&s.attrHooks.value.get||function(){return null},j=s.attrHooks.value&&s.attrHooks.value.set||function(){return i},t=/^(?:input|button)$/i,y=/^[238]$/,B=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,k=/^(?:checked|selected)$/i;a(s,"attrFn",f||{},"jQuery.attrFn is deprecated");s.attr=function(K,I,L,J){var H=I.toLowerCase(),G=K&&K.nodeType;if(J){if(x.length<4){h("jQuery.fn.attr( props, pass ) is deprecated")}if(K&&!y.test(G)&&(f?I in f:s.isFunction(s.fn[I]))){return s(K)[I](L)}}if(I==="type"&&L!==i&&t.test(K.nodeName)&&K.parentNode){h("Can't change the 'type' of an input or button in IE 6/7/8")}if(!s.attrHooks[H]&&B.test(H)){s.attrHooks[H]={get:function(N,M){var P,O=s.prop(N,M);return O===true||typeof O!=="boolean"&&(P=N.getAttributeNode(M))&&P.nodeValue!==false?M.toLowerCase():i},set:function(N,P,M){var O;if(P===false){s.removeAttr(N,M)}else{O=s.propFix[M]||M;if(O in N){N[O]=true}N.setAttribute(M,M.toLowerCase())}return M}};if(k.test(H)){h("jQuery.fn.attr('"+H+"') may use property instead of attribute") +}}return x.call(s,K,I,L)};s.attrHooks.value={get:function(H,G){var I=(H.nodeName||"").toLowerCase();if(I==="button"){return w.apply(this,arguments)}if(I!=="input"&&I!=="option"){h("jQuery.fn.attr('value') no longer gets properties")}return G in H?H.value:null},set:function(G,H){var I=(G.nodeName||"").toLowerCase();if(I==="button"){return j.apply(this,arguments)}if(I!=="input"&&I!=="option"){h("jQuery.fn.attr('value', val) no longer sets properties")}G.value=H}};var q,E,z=s.fn.init,A=s.parseJSON,v=/^(?:[^<]*(<[\w\W]+>)[^>]*|#([\w\-]*))$/;s.fn.init=function(G,J,I){var H;if(G&&typeof G==="string"&&!s.isPlainObject(J)&&(H=v.exec(G))&&H[1]){if(G.charAt(0)!=="<"){h("$(html) HTML strings must start with '<' character")}if(J&&J.context){J=J.context}if(s.parseHTML){return z.call(this,s.parseHTML(s.trim(G),J,true),J,I)}}return z.apply(this,arguments)};s.fn.init.prototype=s.fn;s.parseJSON=function(G){if(!G&&G!==null){h("jQuery.parseJSON requires a valid JSON string");return null}return A.apply(this,arguments)};s.uaMatch=function(H){H=H.toLowerCase();var G=/(chrome)[ \/]([\w.]+)/.exec(H)||/(webkit)[ \/]([\w.]+)/.exec(H)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(H)||/(msie) ([\w.]+)/.exec(H)||H.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(H)||[];return{browser:G[1]||"",version:G[2]||"0"}};if(!s.browser){q=s.uaMatch(navigator.userAgent);E={};if(q.browser){E[q.browser]=true;E.version=q.version}if(E.chrome){E.webkit=true}else{if(E.webkit){E.safari=true}}s.browser=E}a(s,"browser",s.browser,"jQuery.browser is deprecated");s.sub=function(){function G(J,K){return new G.fn.init(J,K)}s.extend(true,G,this);G.superclass=this;G.fn=G.prototype=this();G.fn.constructor=G;G.sub=this.sub;G.fn.init=function I(J,K){if(K&&K instanceof s&&!(K instanceof G)){K=G(K)}return s.fn.init.call(this,J,K,H)};G.fn.init.prototype=G.fn;var H=G(document);h("jQuery.sub() is deprecated");return G};s.ajaxSetup({converters:{"text json":s.parseJSON}});var n=s.fn.data;s.fn.data=function(I){var H,G,J=this[0];if(J&&I==="events"&&arguments.length===1){H=s.data(J,I); +G=s._data(J,I);if((H===i||H===G)&&G!==i){h("Use of jQuery.fn.data('events') is deprecated");return G}}return n.apply(this,arguments)};var o=/\/(java|ecma)script/i,u=s.fn.andSelf||s.fn.addBack;s.fn.andSelf=function(){h("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");return u.apply(this,arguments)};if(!s.clean){s.clean=function(G,H,N,J){H=H||document;H=!H.nodeType&&H[0]||H;H=H.ownerDocument||H;h("jQuery.clean() is deprecated");var K,I,L,O,M=[];s.merge(M,s.buildFragment(G,H).childNodes);if(N){L=function(P){if(!P.type||o.test(P.type)){return J?J.push(P.parentNode?P.parentNode.removeChild(P):P):N.appendChild(P)}};for(K=0;(I=M[K])!=null;K++){if(!(s.nodeName(I,"script")&&L(I))){N.appendChild(I);if(typeof I.getElementsByTagName!=="undefined"){O=s.grep(s.merge([],I.getElementsByTagName("script")),L);M.splice.apply(M,[K+1,0].concat(O));K+=O.length}}}}return M}}var c=s.event.add,b=s.event.remove,g=s.event.trigger,r=s.fn.toggle,d=s.fn.live,m=s.fn.die,C="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",e=new RegExp("\\b(?:"+C+")\\b"),F=/(?:^|\s)hover(\.\S+|)\b/,l=function(G){if(typeof(G)!=="string"||s.event.special.hover){return G}if(F.test(G)){h("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'")}return G&&G.replace(F,"mouseenter$1 mouseleave$1")};if(s.event.props&&s.event.props[0]!=="attrChange"){s.event.props.unshift("attrChange","attrName","relatedNode","srcElement")}if(s.event.dispatch){a(s.event,"handle",s.event.dispatch,"jQuery.event.handle is undocumented and deprecated")}s.event.add=function(J,H,I,K,G){if(J!==document&&e.test(H)){h("AJAX events should be attached to document: "+H)}c.call(this,J,l(H||""),I,K,G)};s.event.remove=function(K,I,J,G,H){b.call(this,K,l(I)||"",J,G,H)};s.fn.error=function(){var G=Array.prototype.slice.call(arguments,0);h("jQuery.fn.error() is deprecated");G.splice(0,0,"error");if(arguments.length){return this.bind.apply(this,G)}this.triggerHandler.apply(this,G);return this};s.fn.toggle=function(K,I){if(!s.isFunction(K)||!s.isFunction(I)){return r.apply(this,arguments) +}h("jQuery.fn.toggle(handler, handler...) is deprecated");var H=arguments,G=K.guid||s.guid++,J=0,L=function(M){var N=(s._data(this,"lastToggle"+K.guid)||0)%J;s._data(this,"lastToggle"+K.guid,N+1);M.preventDefault();return H[N].apply(this,arguments)||false};L.guid=G;while(J35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('(8(a){a.7=8(b,c){c=a.1n({},a.7.17,c);c.1M=c.1V>9;c.1p=c.1p||1q;c.1A=c.1A||1q;5(b==1y){b=\'\'};5(c.W<9){c.W=9};5(c.1t==1y){c.1t=\'51\'+2U.52(2U.3i()*4Z)};6 d=(a.1U.2e&&3u(a.1U.3a)<3r);6 e=a(\'#\'+c.1t);5(e.1I>9){c.1k=a.7.17.1k++;e.16({1k:c.1k});e.10(\'#4\').16({1k:c.1k+1h});1j e};6 f={2g:\'\',1x:\'\',1e:\'\',2j:b.50==53};5(!f.2j){b=b+\'\';6 N=b.56();5(N.1X(\'1t:\')==9)f.1x=\'4t\';1b 5(N.1X(\'4C:\')==9)f.1x=\'35\';1b 5(N.1X(\'57:\')==9)f.1x=\'30\';1b 5(N.1X(\'1F:\')==9)f.1x=\'2w\';1b 5(N.1X(\'1e:\')==9)f.1x=\'3h\';1b{b=\'1e:\'+b;f.1x=\'3h\'};b=b.54(b.1X(":")+1h,b.1I)};5(!c.1p&&!c.1A&&!c.4s){a(a.1U.2e?\'1e\':\'1z\').3c(\'11\',\'2a:2l;1f-27:55;\')};6 g=!c.1p&&!(c.1o==1y);6 h=f.1x==\'35\'||f.1x==\'30\'||f.1x==\'2w\';6 i=1L c.14==\'36\'?(c.14-4Y)+\'19\':"4R%";6 j=[];j.X(\'\');5(c.1M){5((d&&a(\'1F\').1I>9)||a(\'4S, 4P\').1I>9){j.X(\'<1F 1t="4-24" 1a="4-24" 3y="3M:3X" 11="1D:2R;1s:1B;z-3t:-1;">\')}1b{5(d){a(\'3Z\').16(\'3L\',\'2l\')};j.X(\'\')}};j.X(\'\');5(c.1Y){j.X(\'\')};j.X(\'\');j.X(\'\');j.X(\'\');j.X(\'<4p W="0" 4X="0" 4U="0" 11="1E:1c;1f:1c;W:1d;">\');5(c.W>9){j.X(\'<2n>\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;W-3d:\'+c.W+\'19 0 0 0;14:\'+c.W+\'19;Y:\'+c.W+\'19;">\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;Y:\'+c.W+\'19;2a: 2l;">\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;W-3d:0 \'+c.W+\'19 0 0;14:\'+c.W+\'19;Y:\'+c.W+\'19;">\');j.X(\'\')};j.X(\'<2n>\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;">\');j.X(\'<1u 4V="18" 11="1E:1c;1f:1c;W:1d;">\');j.X(\'\');j.X(\'\');5(g){j.X(\'\');j.X(\'\'+(c.1o==\'\'?\'&5p;\':c.1o)+\'\');j.X(\'\')};j.X(\'\');j.X(\'\');j.X(\'\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;">\');j.X(\'\');5(c.W>9){j.X(\'<2n>\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;W-3d:0 0 0 \'+c.W+\'19; 14:\'+c.W+\'19; Y:\'+c.W+\'19;">\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;Y:\'+c.W+\'19;2a: 2l;">\');j.X(\'<1u 1a="4-W" 11="1E:1c;1f:1c;W:1d;W-3d:0 0 \'+c.W+\'19 0; 14:\'+c.W+\'19; Y:\'+c.W+\'19;">\');j.X(\'\')};j.X(\'\');j.X(\'\');j.X(\'\');6 k=\'<1F 2h="4-1F" 1t="4-1F" 14="2v%" Y="2v%" 5i="0" 5b="0" 5c="0" 59="\'+c.4r+\'">\';6 l=a(2f);6 m=a(1H.1z);6 n=a(j.2m(\'\')).5a(m);6 o=n.2r(\'#4\');6 p=n.2r(\'#4-24\');6 q=n.2r(\'#4-3m\');5(!f.2j){3H(f.1x){1R"4t":f.1e=a(\'#\'+b).1e();1K;1R"35":1R"30":f.1e=\'\';f.2g=b;1K;1R"3h":f.1e=b;1K;1R"2w":f.1e=k;5(b.1X(\'#\')==-1h){f.2g=b+(b.1X(\'?\')==-1h?\'?39\':\'&39\')+2U.3i()}1b{6 N=b.5d(\'#\');f.2g=N[9]+(N[9].1X(\'?\')==-1h?\'?39\':\'&39\')+2U.3i()+\'#\'+N[1h]};1K};b={5g:{13:f.1e,1C:c.1C,2o:c.2o,1W:c.1W}}};6 r=[];6 s=o.10(\'.4-2W-1o\').3N(1i);6 t=o.10(\'.4-2W-1l\').3N(1i);6 u=a.1U.2e?\'3j-Y:3V;1f:1c 3O 1c 3O;\':\'1f:1c 2N 1c 2N;\';a.2C(b,8(N,O){5(f.2j){O=a.1n({},a.7.2O,O)};b[N]=O;5(O.1C==1y){O.1C={}};6 P=1q;a.2C(O.1C,8(T,U){P=1i});6 Q=\'1m\';5(1L c.Y==\'36\'){Q=c.Y;5(g){Q=Q-s};5(P){Q=Q-t};Q=(Q-1h)+\'19\'};6 R=\'\';6 S=\'2s\';5(!f.2j&&h){6 T=c.Y;5(1L c.Y==\'36\'){5(g){T=T-s};5(P){T=T-t};S=((T/2X)*1N)+\'19\';T=(T-1h)+\'19\'};R=[\'\',\'\',\'\'].2m(\'\')};r.X(\'\');r.X(\'\'+R+\'\'+O.13+\'\');r.X(\'\');5(!c.1p){r.X(\'<26 1a="4-29-1T" 11="3W:1g;1D:2R;3j-Y:2s;">\')};a.2C(O.1C,8(T,U){r.X(\'<1l 1a="4-1l" 31="\'+U+\'" 11="\'+u+\'">\'+T+\'\')});r.X(\'\')});o.10(\'#4-2T\').1e(r.2m(\'\')).2r(\'.4-1G:3k\').16(\'1D\',\'2R\');5(h){6 N=o.10(\'#4-13\').16({1s:(d)?"1B":"32",1g:-4H})};a.2C(b,8(N,O){6 P=o.10(\'#4-1G-\'+N);P.2r(\'.4-1l-23\').2r(\'1l\').2c(8(){6 Q=P.10(\'#4-13\');6 R=O.1C[a(21).1T()];6 S={};a.2C(o.10(\'#4-2T :4h\').4M(),8(U,V){5(S[V.2h]===1y){S[V.2h]=V.31}1b 5(1L S[V.2h]==4L){S[V.2h].X(V.31)}1b{S[V.2h]=[S[V.2h],V.31]}});6 T=O.1W(R,Q,S);5(T===1y||T){I()}}).1P(\'2t\',8(){a(21).2x(\'4-1l-3x\')}).1P(\'4A\',8(){a(21).2I(\'4-1l-3x\')}).1P(\'4G\',8(){a(21).2x(\'4-1l-2E\')}).1P(\'4O\',8(){a(21).2I(\'4-1l-3x\').2I(\'4-1l-2E\')});P.10(\'.4-1l-23 1l:2V(\'+O.2o+\')\').2x(\'4-1l-1O\')});6 v=8(){n.16({18:l.3e()});5(c.1A){o.16({1s:(d)?"1B":"32",27:1h,29:1h})}};6 w=8(){6 N=l.14();1j 1H.1z.3I1h){4I(O);n.2I(\'4-25\')}},4N)}1b{I()}};6 z=8(N){5(c.1p||c.1A){1j 1q};6 O=(2f.4f)?4f.4g:N.4g;5(O==4F){I()};5(O==5Z){6 P=a(\':4h:5Y:2p\',n);6 Q=!N.4e&&N.1r==P[P.1I-1h];6 R=N.4e&&N.1r==P[9];5(Q||R){38(8(){5(!P)1j;6 S=P[R===1i?P.1I-1h:9];5(S)S.1O()},2G);1j 1q}}};6 A=8(){5(c.1M){p.16({1s:"1B",Y:c.1p?x():l.Y(),14:d?l.14():"2v%",18:9,1g:9,27:9,29:9})}};6 B=8(){5(c.1A){o.16({1s:(d)?"1B":"32",27:1h,29:1h})}1b{q.16({18:c.18});o.16({1s:"1B",18:q.3f().18+(c.1p?l.3e():9),1g:((l.14()-o.3S())/1N)})};5((c.1M&&!c.1p)||(!c.1M&&!c.1p&&!c.1A)){n.16({1s:(d)?"1B":"32",Y:c.1M?l.Y():9,14:"2v%",18:(d)?l.3e():9,1g:9,27:9,29:9})};A()};6 C=8(){c.1k=a.7.17.1k++;n.16({1k:c.1k});o.16({1k:c.1k+1h})};6 D=8(){c.1k=a.7.17.1k++;n.16({1k:c.1k});o.16({1D:"1d",1k:c.1k+1h});5(c.1M){p.16({1D:"1d",1k:c.1k,1V:c.1V})}};6 E=8(N){6 O=N.1w;O.1r.10(\'1F\').2K();5(c.22){O.1r.2u().16({1g:O.1r.16(\'1g\'),18:O.1r.16(\'18\'),61:-1N,60:-1N,14:O.1r.14()+1N,Y:O.1r.Y()+1N}).1Z()};1j 1q};6 F=8(N){6 O=N.1w;6 P=O.49+N.4c-O.43;6 Q=O.4y+N.48-O.4a;5(c.4o){6 R=1h;6 S=1H.46.3C-N.1w.1r.Y()-1h;6 T=1h;6 U=1H.46.3I-N.1w.1r.14()-1h;5(QS)Q=S-(c.22?1N:9);5(PU)P=U-(c.22?1N:9)};5(c.22){O.1r.2u().16({1g:P,18:Q})}1b{O.1r.16({1g:P,18:Q})};1j 1q};6 G=8(N){a(1H).2i(\'.1Y\');5(c.22){6 O=N.1w.1r.2u().2K();N.1w.1r.16({1g:O.16(\'1g\'),18:O.16(\'18\')}).10(\'1F\').1Z()}1b{N.1w.1r.10(\'1F\').1Z()};1j 1q};6 H=8(N){6 O=N.1w.1r.1s();6 P={1r:N.1w.1r,43:N.4c,4a:N.48,49:O.1g,4y:O.18};a(1H).1P(\'2t.1Y\',P,E).1P(\'5V.1Y\',P,F).1P(\'4A.1Y\',P,G)};6 I=8(){5(!c.1p&&!c.1A){5(a(\'.4-1z\').1I==1h){a(a.1U.2e?\'1e\':\'1z\').5U(\'11\')};J()}1b{5(c.1p){6 1v=a(1H.1z).1w(\'1v\');5(1v&&1v.2F==1i){q.16(\'18\',1v.33.18);6 N=q.3f().18+l.3e();5(N==o.3f().18){J()}1b{o.10(\'#4-13\').1e(1v.33.13.5X(2X)).5W().16({1g:((l.14()-o.3S())/1N)}).41({18:N,1V:0.1},3J,J)}}1b{o.41({18:\'-=62\',1V:9},3J,J)}}1b{3H(c.2J){1R\'3D\':o.4b(c.20,J);1K;1R\'24\':o.3P(c.20,J);1K;1R\'1Z\':3R:o.2K(c.20,J);1K}}}};6 J=8(){l.2i(\'3U\',A);5(c.1Y&&!c.1p&&!c.1A){o.10(\'.4-1o-23\').2i(\'2t\',H)};5(f.1x!=\'2w\'){o.10(\'#4-1F\').3c({\'3y\':\'3M:3X\'})};o.1e(\'\').3F();5(d&&!c.1p){m.2i(\'3T\',v)};5(c.1M){p.3P(\'37\',8(){p.2i(\'2c\',y).2i(\'2t\',C).1e(\'\').3F()})};n.2i(\'3Y 3K\',z).1e(\'\').3F();5(d&&c.1M){a(\'3Z\').16(\'3L\',\'2p\')};5(1L c.2H==\'8\'){c.2H()}};6 K=8(){5(c.1Q>9){o.1w(\'3B\',2f.38(I,c.1Q));5(c.1A){o.2E(8(){2f.63(o.1w(\'3B\'))},8(){o.1w(\'3B\',2f.38(I,c.1Q))})}}};6 L=8(){5(1L c.2Y==\'8\'){c.2Y(o.10(\'.4-1G:2p\').10(\'.4-13\'))}};5(!f.2j){3H(f.1x){1R"35":1R"30":a.64({1x:f.1x,2g:f.2g,1w:c.3g==1y?{}:c.3g,5B:\'1e\',5A:1q,2y:8(N,O){o.10(\'#4-13\').16({1s:"3Q"}).1e(N).1Z().2u().2K();L()},2z:8(){o.10(\'#4-13-2B\').1e(\'5z 5C.\')}});1K;1R"2w":o.10(\'#4-1F\').3c({\'3y\':f.2g}).1P("5F",8(N){a(21).5E().16({1s:"3Q"}).1Z().2u().2K();o.10(\'#4-2T .4-1G:3k .4-1l-1O\').1O();L()});1K;3R:o.10(\'#4-13\').1Z();1K}};B();D();5(d&&!c.1p){l.3T(v)};5(c.1M){p.2c(y)};l.3U(A);n.1P(\'3Y 3K\',z);o.10(\'.4-1J\').2c(I);5(c.1M){p.4u(\'37\')};6 M=\'1Z\';5(c.2J==\'3D\'){M=\'44\'}1b 5(c.2J==\'24\'){M=\'4u\'};5(c.1A){o[M](c.20,K)}1b{6 1v=a(1H.1z).1w(\'1v\');5(1v&&1v.2F==1i){a(1H.1z).1w(\'1v\',{2F:1q,33:{}});o.16(\'1D\',\'\')}1b{5(!f.2j&&h){o[M](c.20)}1b{o[M](c.20,L);}}};5(!c.1p){o.10(\'.4-29-1T\').1e(c.4E)}1b{o.10(\'.4-4v,.4-13\').2x(\'4-1v-4x\')};5(f.1x!=\'2w\'){o.10(\'#4-2T .4-1G:3k .4-1l-1O\').1O()}1b{o.1O()};5(!c.1A){K()};n.1P(\'2t\',C);5(c.1Y&&!c.1p&&!c.1A){o.10(\'.4-1o-23\').1P(\'2t\',{1r:o},H).16(\'4w\',\'5D\')};1j n};a.7.3a=2.3;a.7.17={1t:3A,18:"15%",1k:5u,W:2X,1V:0.1,1Q:9,2J:\'24\',20:\'37\',2L:1i,34:1i,1Y:1i,4o:1i,22:1q,4q:1i,4s:1i,3g:{},4r:\'1m\',1o:\'7\',14:3p,Y:\'1m\',4E:\'\',1C:{\'3z\':\'2b\'},2o:9,2Y:8(b){},1W:8(b,c,d){1j 1i},2H:8(){}};a.7.2O={13:\'\',1C:{\'3z\':\'2b\'},2o:9,1W:8(b,c,d){1j 1i}};a.7.2Q={13:\'\',12:\'28\',18:\'40%\',14:\'1m\',Y:\'1m\',1V:9,1Q:4B,2H:8(){}};a.7.2A={13:\'\',1o:\'7\',12:\'1d\',14:3p,Y:\'1m\',1Q:4B,2J:\'3D\',20:5t,W:9,1C:{},2o:9,2Y:8(){},1W:8(b,c,d){1j 1i},2H:8(){}};a.7.1S={1J:\'5s\',2b:\'3z\',3n:\'5v\',3q:\'5y\',2S:\'5x\'};a.7.5w=8(b){a.7.17=a.1n({},a.7.17,b.17);a.7.2O=a.1n({},a.7.2O,b.2O);a.7.2Q=a.1n({},a.7.2Q,b.2Q);a.7.2A=a.1n({},a.7.2A,b.2A);a.7.1S=a.1n({},a.7.1S,b.1S)};a.7.2D=8(){1j a(\'.4-1z\').2V(a(\'.4-1z\').1I-1h)};a.7.5P=8(b){6 c=(1L b==\'3v\')?a(\'#\'+b):a.7.2D();1j c.10(\'#4-1F\').4C(9)};a.7.5O=8(){1j a.7.3b().10(\'.4-13\').1e()};a.7.5N=8(b){1j a.7.3b().10(\'.4-13\').1e(b)};a.7.3b=8(b){5(b==1y){1j a.7.2D().10(\'.4-1G:2p\')}1b{1j a.7.2D().10(\'#4-1G-\'+b)}};a.7.5Q=8(){1j a.7.3b().3c(\'1t\').5T(\'4-1G-\',\'\')};a.7.3w=8(b,c){6 d=a.7.2D();5(d!=1y&&d!=3A){6 e;b=b||1q;d.10(\'.4-1G\').4b(\'37\');5(1L b==\'3v\'){e=d.10(\'#4-1G-\'+b)}1b{e=b?d.10(\'.4-1G:2p\').2F():d.10(\'.4-1G:2p\').2u()};e.44(3p,8(){2f.38(8(){e.10(\'.4-1l-1O\').1O();5(c!=1y){e.10(\'.4-13\').1e(c)}},5S)})}};a.7.5R=8(b){a.7.3w(1i,b)};a.7.5I=8(b){a.7.3w(1q,b)};a.7.1J=8(b,c){b=b||1q;c=c||\'1z\';5(1L b==\'3v\'){a(\'#\'+b).10(\'.4-1J\').2c()}1b{6 d=a(\'.4-\'+c);5(b){5H(6 e=9,l=d.1I;e9){d.2V(d.1I-1h).10(\'.4-1J\').2c()}}}};a.7.5G=8(b,c,d,e,f){6 17={13:b,1o:c,14:d,Y:e};f=a.1n({},17,f);f=a.1n({},a.7.17,f);a.7(f.13,f)};a.7.2d=8(b,c,d,e){6 17={13:b,1o:c,12:d,1C:3s(\'({ "\'+a.7.1S.2b+\'": "2b" })\')};e=a.1n({},17,e);e=a.1n({},a.7.17,e);5(e.W<9){e.W=9};5(e.12!=\'28\'&&e.12!=\'25\'&&e.12!=\'2y\'&&e.12!=\'2z\'&&e.12!=\'3G\'){1f=\'\';e.12=\'1d\'};6 f=e.1o==1y?2G:4j;6 g=e.12==\'1d\'?\'Y:1m;\':\'2P-Y:2M;\'+((a.1U.2e&&3u(a.1U.3a)<3r)?\'Y:1m !4l;Y:2v%;4n:2M;\':\'Y:1m;\');6 h=[];h.X(\'1e:\');h.X(\'\');h.X(\'<26 1a="4-12 4-12-\'+e.12+\'" 11="1s:1B; 18:\'+(f+e.W)+\'19;1g:\'+(2G+e.W)+\'19; 14:2q; Y:2q;">\');h.X(e.13);h.X(\'\');e.13=h.2m(\'\');a.7(e.13,e)};a.7.5J=8(b,c,d){a.7.2d(b,c,\'1d\',d)};a.7.28=8(b,c,d){a.7.2d(b,c,\'28\',d)};a.7.2y=8(b,c,d){a.7.2d(b,c,\'2y\',d)};a.7.2z=8(b,c,d){a.7.2d(b,c,\'2z\',d)};a.7.5M=8(b,c,d,e){6 17={1C:3s(\'({ "\'+a.7.1S.2b+\'": "2b", "\'+a.7.1S.2S+\'": "2S" })\')};5(d!=1y&&1L d==\'8\'){17.1W=d}1b{17.1W=8(f,g,h){1j 1i}};e=a.1n({},17,e);a.7.2d(b,c,\'3G\',e)};a.7.25=8(b,c,d,e){6 17={1C:3s(\'({ "\'+a.7.1S.3n+\'": "3n", "\'+a.7.1S.3q+\'": "3q", "\'+a.7.1S.2S+\'": "2S" })\')};5(d!=1y&&1L d==\'8\'){17.1W=d}1b{17.1W=8(f,g,h){1j 1i}};e=a.1n({},17,e);a.7.2d(b,c,\'25\',e)};a.7.1v=8(b,c,d){6 17={13:b,12:c,1V:9,W:9,34:1q,1C:{},1p:1i};5(17.12==\'2B\'){17.1Q=9;17.1V=0.1};d=a.1n({},17,d);d=a.1n({},a.7.2Q,d);d=a.1n({},a.7.17,d);5(d.1Q<9){d.1Q=9};5(d.W<9){d.W=9};5(d.12!=\'28\'&&d.12!=\'25\'&&d.12!=\'2y\'&&d.12!=\'2z\'&&d.12!=\'2B\'){d.12=\'28\'};6 e=[];e.X(\'1e:\');e.X(\'\');e.X(\'<26 1a="4-12 4-12-\'+d.12+\'" 11="1s:1B;18:\'+(4d+d.W)+\'19;1g:\'+(4d+d.W)+\'19; 14:2q; Y:2q;">\');e.X(d.13);e.X(\'\');d.13=e.2m(\'\');5(a(\'.4-1v\').1I>9){a(1H.1z).1w(\'1v\',{2F:1i,33:d});a.7.4k()};5(d.3E!=1y){a(\'#\'+d.3E).1O();18.$(\'#\'+d.3E).1O()};a.7(d.13,d)};a.7.4k=8(){a.7.1J(1q,\'1v\')};a.7.3l=8(b,c,d,e){a.7.4i();6 17={13:b,1o:c,1Q:(d==1y?a.7.2A.1Q:d),1V:9,34:1i,1Y:1q,1A:1i};e=a.1n({},17,e);e=a.1n({},a.7.2A,e);6 f=a.1n({},a.7.17,{});f.1o=3A;e=a.1n({},f,e);5(e.W<9){e.W=9};5(e.12!=\'28\'&&e.12!=\'25\'&&e.12!=\'2y\'&&e.12!=\'2z\'&&e.12!=\'3G\'){1f=\'\';e.12=\'1d\'};6 g=e.1o==1y?2G:4j;6 h=e.12==\'1d\'?\'Y:1m;\':\'2P-Y:2M;\'+((a.1U.2e&&3u(a.1U.3a)<3r)?\'Y:1m !4l;Y:2v%;4n:2M;\':\'Y:1m;\');6 i=[];i.X(\'1e:\');i.X(\'\');i.X(\'<26 1a="4-12 4-12-\'+e.12+\'" 11="1s:1B; 18:\'+(g+e.W)+\'19;1g:\'+(2G+e.W)+\'19; 14:2q; Y:2q;">\');i.X(e.13);i.X(\'\');e.13=i.2m(\'\');a.7(e.13,e)};a.7.4i=8(){a.7.1J(1q,\'3l\')};2f.7=a.7})(5K);',62,377,'||||jbox|if|var|jBox|function|0x0|||||||||||||||||||||||||||||||||||||||||||||||||border|push|height|div|find|style|icon|content|width||css|defaults|top|px|class|else|0px|none|html|padding|left|0x1|true|return|zIndex|button|auto|extend|title|isTip|false|target|position|id|td|tip|data|type|undefined|body|isMessager|absolute|buttons|display|margin|iframe|state|document|length|close|break|typeof|showFade|0x2|focus|bind|timeout|case|languageDefaults|text|browser|opacity|submit|indexOf|draggable|show|showSpeed|this|dragClone|panel|fade|warning|span|right|info|bottom|overflow|ok|click|prompt|msie|window|url|name|unbind|isObject|align|hidden|join|tr|buttonsFocus|visible|32px|children|25px|mousedown|prev|100|IFRAME|addClass|success|error|messagerDefaults|loading|each|getBox|hover|next|0xa|closed|removeClass|showType|hide|showIcon|30px|10px|stateDefaults|min|tipDefaults|block|cancel|states|Math|eq|help|0x5|loaded|5px|POST|value|fixed|options|showClose|GET|number|fast|setTimeout|___t|version|getState|attr|radius|scrollTop|offset|ajaxData|HTML|random|line|first|messager|temp|yes|50px|0x15e|no|0x7|eval|index|parseInt|string|goToState|active|src|确定|null|autoClosing|clientHeight|slide|focusId|remove|question|switch|clientWidth|0x1f4|keypress|visibility|about|outerHeight|6px|fadeOut|static|default|outerWidth|scroll|resize|19px|float|blank|keydown|select||animate|center|startX|slideDown|1984|documentElement|drag|pageY|startLeft|startY|slideUp|pageX|0x4|shiftKey|event|keyCode|input|closeMessager|0x23|closeTip|important|0x28|_height|dragLimit|table|persistent|iframeScrolling|showScrolling|ID|fadeIn|container|cursor|color|startTop|15px|mouseup|0xbb8|get|0x6|bottomText|0x1b|mouseover|0x2710|clearInterval|toggleClass|setInterval|Array|serializeArray|0x64|mouseout|applet|background|90|object|ff3300|cellspacing|valign|fdisplay|cellpadding|0x32|0xf4240|constructor|jBox_|floor|Object|substring|17px|toLowerCase|post|onmouseover|scrolling|appendTo|marginwidth|frameborder|split|image|220px|state0|70px|marginheight|0x19|0x18|onmouseout|pointer|0x12|all|nbsp|ellipsis|word|关闭|0x258|0x7c0|是|setDefaults|取消|否|Loading|cache|dataType|Error|move|parent|load|open|for|prevState|alert|jQuery|18px|confirm|setContent|getContent|getIframe|getStateName|nextState|0x14|replace|removeAttr|mousemove|end|substr|enabled|0x9|marginTop|marginLeft|200|clearTimeout|ajax'.split('|'),0,{})); \ No newline at end of file diff --git a/apps/static/js/jumpserver.js b/apps/static/js/jumpserver.js index b872558f3..8bd303f2c 100644 --- a/apps/static/js/jumpserver.js +++ b/apps/static/js/jumpserver.js @@ -4,10 +4,10 @@ var checked=false; function check_all(form) { var checkboxes = document.getElementById(form); - if (checked == false) { - checked = true + if (checked === false) { + checked = true; } else { - checked = false + checked = false; } for (var i = 0; i < checkboxes.elements.length; i++) { if (checkboxes.elements[i].type == "checkbox") { @@ -51,13 +51,13 @@ function GetRowData(row){ //此函数用于在多选提交时至少要选择一行 function GetTableDataBox() { var tabProduct = document.getElementById("editable"); - var tableData = new Array(); - var returnData = new Array(); + var tableData = []; + var returnData = []; var checkboxes = document.getElementById("contents_form"); - var id_list = new Array(); + var id_list = []; len = checkboxes.elements.length; for (var i=0; i < len; i++) { - if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked == true && checkboxes.elements[i].value != "checkall") { + if (checkboxes.elements[i].type == "checkbox" && checkboxes.elements[i].checked === true && checkboxes.elements[i].value != "checkall") { id_list.push(i); } } @@ -67,7 +67,7 @@ function GetTableDataBox() { tableData.push(GetRowData(tabProduct.rows[id_list[i]])); } - if (id_list.length == 0){ + if (id_list.length === 0){ alert('请至少选择一行!'); } returnData.push(tableData); @@ -77,7 +77,7 @@ function GetTableDataBox() { function move(from, to, from_o, to_o) { $("#" + from + " option").each(function () { - if ($(this).prop("selected") == true) { + if ($(this).prop("selected") === true) { $("#" + to).append(this); if( typeof from_o !== 'undefined'){ $("#"+to_o).append($("#"+from_o +" option[value='"+this.value+"']")); @@ -88,7 +88,7 @@ function move(from, to, from_o, to_o) { function move_left(from, to, from_o, to_o) { $("#" + from + " option").each(function () { - if ($(this).prop("selected") == true) { + if ($(this).prop("selected") === true) { $("#" + to).append(this); if( typeof from_o !== 'undefined'){ $("#"+to_o).append($("#"+from_o +" option[value='"+this.value+"']")); @@ -124,31 +124,120 @@ function move_left(from, to, from_o, to_o) { function selectAll(){ - // 选择该页面所有option + // Select all check box $('option').each(function(){ - $(this).attr('selected', true) - }) + $(this).attr('selected', true); + }); } -// -//function move_all(from, to){ -// $("#"+from).children().each(function(){ -// $("#"+to).append(this); -// }); -//} +// function getIDall() { +// var check_array = []; +// $(".gradeX input:checked").each(function () { +// var id = $(this).attr("value"); +// check_array.push(id); +// }); +// return check_array.join(","); +// } -//function commit_select(form_array){ -// $('#{0} option'.format(form_array)).each(function(){ -// $(this).prop('selected', true) -// }) -//} +function getCookie(name) { + var cookieValue = null; + if (document.cookie && document.cookie !== '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; +} -function getIDall() { - var check_array = []; - $(".gradeX input:checked").each(function () { - var id = $(this).attr("value"); - check_array.push(id); +function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); +} + +function setAjaxCSRFToken() { + var csrftoken = getCookie('csrftoken'); + var sessionid = getCookie('sessionid'); + + $.ajaxSetup({ + beforeSend: function(xhr, settings) { + if (!csrfSafeMethod(settings.type) && !this.crossDomain) { + xhr.setRequestHeader("X-CSRFToken", csrftoken); + } + } }); - return check_array.join(","); -} \ No newline at end of file +} + +function activeNav() { + var url_array = document.location.pathname.split("/"); + var app = url_array[1]; + var resource = url_array[2]; + if (app == ''){ + $('#index').addClass('active') + } else { + $("#" + app).addClass('active'); + $('#' + app + ' #' + resource).addClass('active'); + } +} + +function APIUpdateAttr(props) { + // props = {url: .., body: , success: , error: , method: ,} + props = props || {}; + success_message = props.success_message || 'Update Successfully!'; + fail_message = props.fail_message || 'Error occurred while updating.'; + + $.ajax({ + url: props.url, + type: props.method || "PATCH", + data: props.body, + contentType: props.content_type || "application/json; charset=utf-8", + dataType: props.data_type || "json", + }).done(function(data, textStatue, jqXHR) { + if (typeof props.success === 'function') { + return props.success(data); + } else { + toastr.success(success_message); + } + }).fail(function(jqXHR, textStatue, errorThrown) { + if (typeof props.error === 'function') { + return props.error(errorThrown); + } else { + toastr.error(fail_message); + } + }); + return true; +} + +// Sweet Alert for Delete +function objectDelete(obj, name, url){ + swal({ + title: 'Are you sure delete ?', + text: "【" + name + "】", + type: "warning", + showCancelButton: true, + cancelButtonText: 'Cancel', + confirmButtonColor: "#DD6B55", + confirmButtonText: 'Yes, delete it!', + closeOnConfirm: false + }, function () { + $.ajax({ + type : "post", + url : url, + data : { + }, + dataType : "text", + success : function(data) { + swal('Deleted!' , "【"+name+"】"+"has been deleted.", "success"); + $(obj).parent().parent().remove(); + } + }) + }); +} + +var jumpserver = {}; diff --git a/apps/static/js/plugins/sweetalert/sweetalert.min.js b/apps/static/js/plugins/sweetalert/sweetalert.min.js new file mode 100644 index 000000000..3e4e7ff4c --- /dev/null +++ b/apps/static/js/plugins/sweetalert/sweetalert.min.js @@ -0,0 +1 @@ +!function(e,t,n){"use strict";!function o(e,t,n){function a(s,l){if(!t[s]){if(!e[s]){var i="function"==typeof require&&require;if(!l&&i)return i(s,!0);if(r)return r(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var c=t[s]={exports:{}};e[s][0].call(c.exports,function(t){var n=e[s][1][t];return a(n?n:t)},c,c.exports,o,e,t,n)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s=0;)n=n.replace(" "+t+" "," ");e.className=n.replace(/^\s+|\s+$/g,"")}},i=function(e){var n=t.createElement("div");return n.appendChild(t.createTextNode(e)),n.innerHTML},u=function(e){e.style.opacity="",e.style.display="block"},c=function(e){if(e&&!e.length)return u(e);for(var t=0;t0?setTimeout(o,t):e.style.display="none"});o()},h=function(n){if("function"==typeof MouseEvent){var o=new MouseEvent("click",{view:e,bubbles:!1,cancelable:!0});n.dispatchEvent(o)}else if(t.createEvent){var a=t.createEvent("MouseEvents");a.initEvent("click",!1,!1),n.dispatchEvent(a)}else t.createEventObject?n.fireEvent("onclick"):"function"==typeof n.onclick&&n.onclick()},g=function(t){"function"==typeof t.stopPropagation?(t.stopPropagation(),t.preventDefault()):e.event&&e.event.hasOwnProperty("cancelBubble")&&(e.event.cancelBubble=!0)};a.hasClass=r,a.addClass=s,a.removeClass=l,a.escapeHtml=i,a._show=u,a.show=c,a._hide=d,a.hide=f,a.isDescendant=p,a.getTopMargin=m,a.fadeIn=v,a.fadeOut=y,a.fireClick=h,a.stopEventPropagation=g},{}],5:[function(t,o,a){Object.defineProperty(a,"__esModule",{value:!0});var r=t("./handle-dom"),s=t("./handle-swal-dom"),l=function(t,o,a){var l=t||e.event,i=l.keyCode||l.which,u=a.querySelector("button.confirm"),c=a.querySelector("button.cancel"),d=a.querySelectorAll("button[tabindex]");if(-1!==[9,13,32,27].indexOf(i)){for(var f=l.target||l.srcElement,p=-1,m=0;m"),i.innerHTML=e.html?e.text:s.escapeHtml(e.text||"").split("\n").join("
"),e.text&&s.show(i),e.customClass)s.addClass(t,e.customClass),t.setAttribute("data-custom-class",e.customClass);else{var d=t.getAttribute("data-custom-class");s.removeClass(t,d),t.setAttribute("data-custom-class","")}if(s.hide(t.querySelectorAll(".sa-icon")),e.type&&!a.isIE8()){var f=function(){for(var o=!1,a=0;ao;o++)n=parseInt(e.substr(2*o,2),16),n=Math.round(Math.min(Math.max(0,n+n*t),255)).toString(16),a+=("00"+n).substr(n.length);return a};o.extend=a,o.hexToRgb=r,o.isIE8=s,o.logStr=l,o.colorLuminance=i},{}]},{},[1]),"function"==typeof define&&define.amd?define(function(){return sweetAlert}):"undefined"!=typeof module&&module.exports&&(module.exports=sweetAlert)}(window,document); \ No newline at end of file diff --git a/apps/static/js/plugins/toastr/toastr.min.js b/apps/static/js/plugins/toastr/toastr.min.js new file mode 100644 index 000000000..cf70cf63d --- /dev/null +++ b/apps/static/js/plugins/toastr/toastr.min.js @@ -0,0 +1,2 @@ +!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return f({type:O.error,iconClass:g().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=g()),v=e("#"+t.containerId),v.length?v:(n&&(v=c(t)),v)}function i(e,t,n){return f({type:O.info,iconClass:g().iconClasses.info,message:e,optionsOverride:n,title:t})}function o(e){w=e}function s(e,t,n){return f({type:O.success,iconClass:g().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return f({type:O.warning,iconClass:g().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e){var t=g();v||n(t),l(e,t)||u(t)}function d(t){var i=g();return v||n(i),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function u(t){for(var n=v.children(),i=n.length-1;i>=0;i--)l(e(n[i]),t)}function l(t,n){return t&&0===e(":focus",t).length?(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0):!1}function c(t){return v=e("
").attr("id",t.containerId).addClass(t.positionClass).attr("aria-live","polite").attr("role","alert"),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",target:"body",closeHtml:'',newestOnTop:!0,preventDuplicates:!1,progressBar:!1}}function m(e){w&&w(e)}function f(t){function i(t){return!e(":focus",l).length||t?(clearTimeout(O.intervalId),l[r.hideMethod]({duration:r.hideDuration,easing:r.hideEasing,complete:function(){h(l),r.onHidden&&"hidden"!==b.state&&r.onHidden(),b.state="hidden",b.endTime=new Date,m(b)}})):void 0}function o(){(r.timeOut>0||r.extendedTimeOut>0)&&(u=setTimeout(i,r.extendedTimeOut),O.maxHideTime=parseFloat(r.extendedTimeOut),O.hideEta=(new Date).getTime()+O.maxHideTime)}function s(){clearTimeout(u),O.hideEta=0,l.stop(!0,!0)[r.showMethod]({duration:r.showDuration,easing:r.showEasing})}function a(){var e=(O.hideEta-(new Date).getTime())/O.maxHideTime*100;f.width(e+"%")}var r=g(),d=t.iconClass||r.iconClass;if("undefined"!=typeof t.optionsOverride&&(r=e.extend(r,t.optionsOverride),d=t.optionsOverride.iconClass||d),r.preventDuplicates){if(t.message===C)return;C=t.message}T++,v=n(r,!0);var u=null,l=e("
"),c=e("
"),p=e("
"),f=e("
"),w=e(r.closeHtml),O={intervalId:null,hideEta:null,maxHideTime:null},b={toastId:T,state:"visible",startTime:new Date,options:r,map:t};return t.iconClass&&l.addClass(r.toastClass).addClass(d),t.title&&(c.append(t.title).addClass(r.titleClass),l.append(c)),t.message&&(p.append(t.message).addClass(r.messageClass),l.append(p)),r.closeButton&&(w.addClass("toast-close-button").attr("role","button"),l.prepend(w)),r.progressBar&&(f.addClass("toast-progress"),l.prepend(f)),l.hide(),r.newestOnTop?v.prepend(l):v.append(l),l[r.showMethod]({duration:r.showDuration,easing:r.showEasing,complete:r.onShown}),r.timeOut>0&&(u=setTimeout(i,r.timeOut),O.maxHideTime=parseFloat(r.timeOut),O.hideEta=(new Date).getTime()+O.maxHideTime,r.progressBar&&(O.intervalId=setInterval(a,10))),l.hover(s,o),!r.onclick&&r.tapToDismiss&&l.click(i),r.closeButton&&w&&w.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),i(!0)}),r.onclick&&l.click(function(){r.onclick(),i()}),m(b),r.debug&&console&&console.log(b),l}function g(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),C=void 0))}var v,w,C,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:d,error:t,getContainer:n,info:i,options:{},subscribe:o,success:s,version:"2.1.0",warning:a};return b}()})}("function"==typeof define&&define.amd?define:function(e,t){"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):window.toastr=t(window.jQuery)}); +//# sourceMappingURL=/toastr.js.map \ No newline at end of file diff --git a/apps/templates/_foot_js.html b/apps/templates/_foot_js.html index ca20a0423..04bac17dd 100644 --- a/apps/templates/_foot_js.html +++ b/apps/templates/_foot_js.html @@ -1,56 +1,19 @@ +{% load i18n %} {% load static %} + - \ No newline at end of file + diff --git a/apps/templates/_head_css_js.html b/apps/templates/_head_css_js.html index 08728fbc0..53bfa683b 100644 --- a/apps/templates/_head_css_js.html +++ b/apps/templates/_head_css_js.html @@ -3,13 +3,26 @@ + + - + + - - + + + + + + + + + + + + diff --git a/apps/templates/_header_bar.html b/apps/templates/_header_bar.html index 66699be53..419ca717f 100644 --- a/apps/templates/_header_bar.html +++ b/apps/templates/_header_bar.html @@ -19,9 +19,15 @@
  • + {% if user.is_authenticated %} - Log out + {% trans 'Logout' %} + {% else %} + + {% trans 'Login' %} + + {% endif %}
  • diff --git a/apps/templates/_list_base.html b/apps/templates/_list_base.html index 11be26259..b0f1524c0 100644 --- a/apps/templates/_list_base.html +++ b/apps/templates/_list_base.html @@ -22,7 +22,6 @@
    - {# left button add #} {% block content_left_head %} {% endblock %} + + {% if filter_form %} + {{ filter_form }} + {% endif %} + + {% block script %} + + + + + + + + + {% endblock %} + + + {% endblock %} + diff --git a/apps/users/api.py b/apps/users/api.py index 489ec35e5..a2e196456 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -3,11 +3,9 @@ import logging -from rest_framework import generics, mixins, status, permissions -from rest_framework.views import APIView -from rest_framework.response import Response +from rest_framework import generics -from .serializers import UserSerializer, UserGroupSerializer, UserActiveSerializer +from .serializers import UserSerializer, UserGroupSerializer, UserAttributeSerializer, UserGroupEditSerializer from .models import User, UserGroup @@ -33,16 +31,6 @@ class UserDetailDeleteUpdateApi(generics.RetrieveUpdateDestroyAPIView): # return super(UserDetailDeleteUpdateApi, self).get(request, *args, **kwargs) -class UserActiveApi(generics.RetrieveUpdateDestroyAPIView): - queryset = User.objects.all() - serializer_class = UserActiveSerializer - - # def put(self, request, *args, **kwargs): - # for k, v in request.META.items(): - # logger.debug("%s --> %s" % (k, v)) - # return super(UserActiveApi, self).put(request, *args, **kwargs) - - class UserGroupListAddApi(generics.ListCreateAPIView): queryset = UserGroup.objects.all() serializer_class = UserGroupSerializer @@ -52,3 +40,39 @@ class UserGroupDetailDeleteUpdateApi(generics.RetrieveUpdateDestroyAPIView): queryset = UserGroup.objects.all() serializer_class = UserGroupSerializer + +class UserAttributeApi(generics.RetrieveUpdateDestroyAPIView): + queryset = User.objects.all() + serializer_class = UserAttributeSerializer + + +class UserGroupEditApi(generics.RetrieveUpdateAPIView): + queryset = User.objects.all() + serializer_class = UserGroupEditSerializer + + +class UserResetPasswordApi(generics.UpdateAPIView): + queryset = User.objects.all() + serializer_class = UserGroupEditSerializer + + def perform_update(self, serializer): + # Note: we are not updating the user object here. + # We just do the reset-password staff. + user = self.get_object() + import uuid + user.password_raw = str(uuid.uuid4()) + user.save() + from .utils import send_reset_password_mail + send_reset_password_mail(user) + + +class UserResetPKApi(generics.UpdateAPIView): + queryset = User.objects.all() + serializer_class = UserGroupEditSerializer + + def perform_update(self, serializer): + user = self.get_object() + user._public_key = '' + user.save() + from .utils import send_reset_ssh_key_mail + send_reset_ssh_key_mail(user) diff --git a/apps/users/forms.py b/apps/users/forms.py index 7f90f0f5e..5f0e3bed6 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -1,20 +1,24 @@ # ~*~ coding: utf-8 ~*~ -from django.forms import ModelForm from django import forms -from captcha.fields import CaptchaField +from django.contrib.auth.forms import AuthenticationForm from django.utils.translation import gettext_lazy as _ +from captcha.fields import CaptchaField + from .models import User, UserGroup -class UserLoginForm(forms.Form): +class UserLoginForm(AuthenticationForm): username = forms.CharField(label=_('Username'), max_length=100) - password = forms.CharField(label=_('Password'), widget=forms.PasswordInput, max_length=100) + password = forms.CharField( + label=_('Password'), widget=forms.PasswordInput, max_length=100, + strip=False) captcha = CaptchaField() -class UserCreateForm(ModelForm): +class UserCreateForm(forms.ModelForm): + class Meta: model = User fields = [ @@ -32,7 +36,8 @@ class UserCreateForm(ModelForm): } -class UserUpdateForm(ModelForm): +class UserUpdateForm(forms.ModelForm): + class Meta: model = User fields = [ @@ -47,11 +52,12 @@ class UserUpdateForm(ModelForm): } widgets = { - 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join usergroups')}), + 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join user groups')}), } -class UserGroupForm(ModelForm): +class UserGroupForm(forms.ModelForm): + class Meta: model = UserGroup @@ -62,3 +68,33 @@ class UserGroupForm(ModelForm): help_texts = { 'name': '* required' } + + +class UserInfoForm(forms.Form): + name = forms.CharField(max_length=20, label=_('name')) + avatar = forms.ImageField(label=_('avatar'), required=False) + wechat = forms.CharField(max_length=30, label=_('wechat'), required=False) + phone = forms.CharField(max_length=20, label=_('phone'), required=False) + enable_otp = forms.BooleanField(required=False, label=_('enable otp')) + + +class UserKeyForm(forms.Form): + public_key = forms.CharField( + label=_('ssh public key'), max_length=5000, + widget=forms.Textarea(attrs={'placeholder': _('ssh-rsa AAAA...')}), + help_text=_('Paste your id_ras.pub here.')) + + def clean_public_key(self): + from sshpubkeys import SSHKey + from sshpubkeys.exceptions import InvalidKeyException + public_key = self.cleaned_data['public_key'] + ssh = SSHKey(public_key) + try: + ssh.parse() + except InvalidKeyException as e: + print e + raise forms.ValidationError(_('Not a valid ssh public key')) + except NotImplementedError as e: + print e + raise forms.ValidationError(_('Not a valid ssh public key')) + return public_key diff --git a/apps/users/hands.py b/apps/users/hands.py new file mode 100644 index 000000000..e87060ecd --- /dev/null +++ b/apps/users/hands.py @@ -0,0 +1,14 @@ +""" + jumpserver.__app__.hands.py + ~~~~~~~~~~~~~~~~~ + + This app depends other apps api, function .. should be import or write mack here. + + Other module of this app shouldn't connect with other app. + + :copyright: (c) 2014-2016 by Jumpserver Team. + :license: GPL v2, see LICENSE for more details. +""" + + + diff --git a/apps/users/models.py b/apps/users/models.py index c6fe74c91..0b27009ca 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -2,71 +2,36 @@ from __future__ import unicode_literals -import datetime - from django.conf import settings from django.contrib.auth.hashers import make_password -from django.utils import timezone -from django.db import models -from django.contrib.auth.models import AbstractUser, Permission +from django.contrib.auth.models import AbstractUser +from django.core import signing +from django.db import models, IntegrityError from django.db.models.signals import post_save from django.dispatch import receiver -from django.db import IntegrityError +from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from rest_framework.authtoken.models import Token -from django.core import signing - -# class Role(models.Model): -# name = models.CharField('name', max_length=80, unique=True) -# permissions = models.ManyToManyField( -# Permission, -# verbose_name='permissions', -# blank=True, -# ) -# date_added = models.DateTimeField(auto_now_add=True) -# created_by = models.CharField(max_length=100) -# comment = models.CharField(max_length=80, blank=True) -# -# def __unicode__(self): -# return self.name -# -# def delete(self, using=None, keep_parents=False): -# if self.users.all().count() > 0: -# raise OperationalError('Role %s has some member, should not be delete.' % self.name) -# else: -# return super(Role, self).delete(using=using, keep_parents=keep_parents) -# -# class Meta: -# db_table = 'role' -# -# @classmethod -# def initial(cls): -# roles = { -# 'Administrator': {'permissions': Permission.objects.all(), 'comment': '管理员'}, -# 'User': {'permissions': [], 'comment': '用户'}, -# 'Auditor': {'permissions': Permission.objects.filter(content_type__app_label='audits'), -# 'comment': '审计员'}, -# } - -# for role_name, props in roles.items(): -# if not cls.objects.filter(name=role_name): -# role = cls.objects.create(name=role_name, comment=props.get('comment', ''), created_by='System') -# if props.get('permissions'): -# role.permissions = props.get('permissions') +from common.utils import encrypt, decrypt, date_expired_default class UserGroup(models.Model): name = models.CharField(max_length=100, unique=True, verbose_name=_('Name')) comment = models.TextField(blank=True, verbose_name=_('Comment')) - date_added = models.DateTimeField(auto_now_add=True) + date_created = models.DateTimeField(auto_now_add=True) created_by = models.CharField(max_length=100) def __unicode__(self): return self.name + def has_member(self, user): + if user in self.users.all(): + return True + return False + class Meta: - db_table = 'user-group' + db_table = 'user_group' @classmethod def initial(cls): @@ -76,16 +41,15 @@ class UserGroup(models.Model): @classmethod def generate_fake(cls, count=100): - from random import seed, randint, choice + from random import seed, choice import forgery_py - from django.db import IntegrityError seed() for i in range(count): group = cls(name=forgery_py.name.full_name(), comment=forgery_py.lorem_ipsum.sentence(), created_by=choice(User.objects.all()).username - ) + ) try: group.save() except IntegrityError: @@ -93,10 +57,6 @@ class UserGroup(models.Model): continue -def date_expired_default(): - return timezone.now() + timezone.timedelta(days=365 * 70) - - class User(AbstractUser): ROLE_CHOICES = ( ('Admin', _('Administrator')), @@ -106,17 +66,17 @@ class User(AbstractUser): username = models.CharField(max_length=20, unique=True, verbose_name=_('Username')) name = models.CharField(max_length=20, blank=True, verbose_name=_('Name')) email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email')) - groups = models.ManyToManyField(UserGroup, related_name='users', blank=True, verbose_name=_('Usergroup')) + groups = models.ManyToManyField(UserGroup, related_name='users', blank=True, verbose_name=_('User group')) role = models.CharField(choices=ROLE_CHOICES, default='User', max_length=10, blank=True, verbose_name=_('Role')) avatar = models.ImageField(upload_to="avatar", verbose_name=_('Avatar')) wechat = models.CharField(max_length=30, blank=True, verbose_name=_('Wechat')) phone = models.CharField(max_length=20, blank=True, verbose_name=_('Phone')) enable_otp = models.BooleanField(default=False, verbose_name=_('Enable OTP')) secret_key_otp = models.CharField(max_length=16, blank=True) - private_key = models.CharField(max_length=5000, blank=True, verbose_name=_('ssh private key')) - public_key = models.CharField(max_length=1000, blank=True, verbose_name=_('ssh public key')) + _private_key = models.CharField(max_length=5000, blank=True, verbose_name=_('ssh private key')) + _public_key = models.CharField(max_length=1000, blank=True, verbose_name=_('ssh public key')) comment = models.TextField(max_length=200, blank=True, verbose_name=_('Comment')) - is_first_login = models.BooleanField(default=False) + is_first_login = models.BooleanField(default=True) date_expired = models.DateTimeField(default=date_expired_default, blank=True, null=True, verbose_name=_('Date expired')) created_by = models.CharField(max_length=30, default='', verbose_name=_('Created by')) @@ -131,8 +91,8 @@ class User(AbstractUser): #: user = User(username='example', ...) #: user.set_password('password') @password_raw.setter - def password_raw(self, raw_password): - self.set_password(raw_password) + def password_raw(self, password_raw_): + self.set_password(password_raw_) @property def is_expired(self): @@ -141,6 +101,22 @@ class User(AbstractUser): else: return True + @property + def private_key(self): + return decrypt(self._private_key) + + @private_key.setter + def private_key(self, private_key_raw): + self._private_key = encrypt(private_key_raw) + + @property + def public_key(self): + return decrypt(self._public_key) + + @public_key.setter + def public_key(self, public_key_raw): + self._public_key = encrypt(public_key_raw) + @property def is_superuser(self): if self.role == 'Admin': @@ -198,6 +174,11 @@ class User(AbstractUser): def generate_reset_token(self): return signing.dumps({'reset': self.id, 'email': self.email}) + def is_member_of(self, user_group): + if user_group in self.groups.all(): + return True + return False + @classmethod def validate_reset_token(cls, token, max_age=3600): try: @@ -246,7 +227,7 @@ class User(AbstractUser): wechat=forgery_py.internet.user_name(True), comment=forgery_py.lorem_ipsum.sentence(), created_by=choice(cls.objects.all()).username, - ) + ) try: user.save() except IntegrityError: @@ -258,13 +239,13 @@ class User(AbstractUser): def init_all_models(): for model in (UserGroup, User): - if hasattr(model, 'initial'): + if hasattr(model, b'initial'): model.initial() def generate_fake(): for model in (UserGroup, User): - if hasattr(model, 'generate_fake'): + if hasattr(model, b'generate_fake'): model.generate_fake() @@ -275,4 +256,3 @@ def create_auth_token(sender, instance=None, created=False, **kwargs): Token.objects.create(user=instance) except IntegrityError: pass - diff --git a/apps/users/serializers.py b/apps/users/serializers.py index d61842415..7e70049f8 100644 --- a/apps/users/serializers.py +++ b/apps/users/serializers.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- # +from django.utils.translation import ugettext_lazy as _ + from rest_framework import serializers from .models import User, UserGroup @@ -17,15 +19,38 @@ class UserSerializer(serializers.ModelSerializer): ] -class UserActiveSerializer(serializers.ModelSerializer): - class Meta: - model = User - fields = ['is_active'] - - class UserGroupSerializer(serializers.ModelSerializer): users = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='users:user-detail-api') class Meta: model = UserGroup fields = '__all__' + + +class UserAttributeSerializer(serializers.ModelSerializer): + + class Meta: + model = User + fields = ['avatar', 'wechat', 'phone', 'enable_otp', 'comment', 'is_active', 'name'] + + +class UserGroupEditSerializer(serializers.ModelSerializer): + groups = serializers.PrimaryKeyRelatedField(many=True, queryset=UserGroup.objects.all()) + + class Meta: + model = User + fields = ['id', 'groups'] + + +class UserPKUpdateSerializer(serializers.ModelSerializer): + + class Meta: + model = User + fields = ['id', '_private_key'] + + def validate__private_key(self, value): + from users.utils import validate_ssh_pk + checked, reason = validate_ssh_pk(value) + if not checked: + raise serializers.ValidationError(_('Not a valid ssh private key.')) + return value diff --git a/apps/users/templates/users/_user.html b/apps/users/templates/users/_user.html index b8acec82c..59d03e5ee 100644 --- a/apps/users/templates/users/_user.html +++ b/apps/users/templates/users/_user.html @@ -14,7 +14,7 @@
    -
    {% trans 'Create user' %}
    +
    {% block user_template_title %}{% trans 'Create user' %}{% endblock %}
    -
    + {% csrf_token %}

    {% trans 'Account' %}

    {% block username %} {% endblock %} @@ -94,4 +94,4 @@ }); }) -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/apps/users/templates/users/_user_reset_pk_modal.html b/apps/users/templates/users/_user_reset_pk_modal.html new file mode 100644 index 000000000..bd6b62715 --- /dev/null +++ b/apps/users/templates/users/_user_reset_pk_modal.html @@ -0,0 +1,8 @@ +{% extends '_modal.html' %} +{% load i18n %} +{% block modal_id %}user_reset_pk_modal{% endblock %} +{% block modal_title%}{% trans 'Reset User SSH Private Key' %}{% endblock %} +{% block modal_body %} + +{% endblock %} +{% block modal_confirm_id %}btn_user_reset_pk{% endblock %} diff --git a/apps/users/templates/users/first_login.html b/apps/users/templates/users/first_login.html new file mode 100644 index 000000000..915a1f425 --- /dev/null +++ b/apps/users/templates/users/first_login.html @@ -0,0 +1,80 @@ +{% extends 'base.html' %} +{% load static %} +{% load i18n %} +{% load bootstrap %} + +{% block custom_head_css_js %} +{{ wizard.form.media }} + +{% endblock %} +{% block content %} +
    +
    +
    +
    + +
    +
    +
    + +
    +
    + + {% csrf_token %} + {{ wizard.management_form }} + {% if wizard.form.forms %} + {{ wizard.form.management_form }} + {% for form in wizard.form.forms %} + {{ form|bootstrap }} + {% endfor %} + {% else %} + {{ wizard.form|bootstrap }} + {% endif %} + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +{% endblock %} +{% block custom_foot_js %} + +{% endblock %} diff --git a/apps/users/templates/users/forget_password.html b/apps/users/templates/users/forgot_password.html similarity index 98% rename from apps/users/templates/users/forget_password.html rename to apps/users/templates/users/forgot_password.html index efb0ed410..e435485da 100644 --- a/apps/users/templates/users/forget_password.html +++ b/apps/users/templates/users/forgot_password.html @@ -23,7 +23,7 @@
    -

    {% trans 'Forget password' %} ?

    +

    {% trans 'Forgot password' %} ?

    {% if errors %} diff --git a/apps/users/templates/users/login.html b/apps/users/templates/users/login.html index 40dc48e0f..455e15eb7 100644 --- a/apps/users/templates/users/login.html +++ b/apps/users/templates/users/login.html @@ -40,16 +40,15 @@
    {% trans 'Login' %}
    -
    + {% csrf_token %} {% if form.errors %} {% if 'captcha' in form.errors %}

    {% trans 'Captcha invalid' %}

    + {% else %} +

    {{ form.non_field_errors.as_text }}

    {% endif %} {% endif %} - {% if errors %} -

    {{ errors }}

    - {% endif %}
    @@ -61,8 +60,8 @@
    - - Forgot password? + + {% trans 'Forgot password' %}?

    @@ -84,7 +83,4 @@

    - - - diff --git a/apps/users/templates/users/user_detail.html b/apps/users/templates/users/user_detail.html index 1bf190259..89ef5a0e2 100644 --- a/apps/users/templates/users/user_detail.html +++ b/apps/users/templates/users/user_detail.html @@ -6,7 +6,9 @@ {% block custom_head_css_js %} + + {% endblock %} {% block content %}
    @@ -19,26 +21,13 @@
  • {% trans 'User assets' %}
  • {% trans 'User log' %}
  • -
    - -
    - -
    - -
    -
    - -
    -
    +
    -
    +
    {% trans 'Quick modify' %} @@ -127,11 +112,11 @@ - - + - - + @@ -178,34 +163,34 @@
    - {% trans 'Usergroup' %} + {% trans 'User group' %}
    -
    Active: + {% trans 'Active' %}:
    - +
    二次验证: + {% trans 'Enable OTP' %}:
    - -
    {% trans 'Reset password' %}: - - + +
    {% trans 'Reset ssh key' %}: - - + +
    +
    - {% for group in user.groups.all %} + {% for group in user_object.groups.all %} - - + + {% endfor %} @@ -218,30 +203,128 @@ - - {% endblock %} {% block custom_foot_js %} - -{% endblock %} \ No newline at end of file +} +$(document).ready(function () { + $('.select2').select2() + .on('select2:select', function(evt) { + var data = evt.params.data; + jumpserver.selected_groups[data.id] = data.text; + }).on('select2:unselect', function(evt) { + var data = evt.params.data; + delete jumpserver.selected_groups[data.id] + }) +}).on('click', '#is_active', function(){ + var the_url = "{% url 'users:user-patch-api' pk=user_object.id %}"; + var checked = !$(this).prop('checked'); + var body = {'is_active': checked }; + var success = '{% trans "Update Successfully!" %}'; + APIUpdateAttr({ url: the_url, body: JSON.stringify(body), success_message: success}); +}).on('click', '#enable_otp', function(){ + var the_url = "{% url 'users:user-patch-api' pk=user_object.id %}"; + var checked = !$(this).prop('checked'); + var body = {'enable_otp': checked }; + var success = '{% trans "Update Successfully!" %}'; + APIUpdateAttr({ url: the_url, body: JSON.stringify(body), success_message: success}); +}).on('click', '#btn_add_user_group', function(){ + if (Object.keys(jumpserver.selected_groups).length === 0) { + return false; + } + var user_groups = $('.bdg_user_group').map(function(){ + return $(this).data('gid'); + }).get(); + $.map(jumpserver.selected_groups, function(value, index){ + user_groups.push(parseInt(index)); + $('#opt_' + index).remove(); + }); + updateUserGroups(user_groups) +}).on('click', '.btn_delete_user_group', function(){ + var $this = $(this); + var $tr = $this.closest('tr'); + var $badge = $tr.find('.bdg_user_group'); + var gid = $badge.data('gid'); + var group_name = $badge.html() || $badge.text(); + $('#slct_groups').append( + '' + ); + $tr.remove(); + var user_groups = $('.bdg_user_group').map(function(){ + return $(this).data('gid'); + }).get(); + updateUserGroups(user_groups) +}).on('click', '#btn_reset_password', function(){ + function doReset() { + var the_url = '{% url "users:user-reset-password-api" pk=user_object.id %}'; + var body = {}; + var success = function() { + var msg = "{% trans 'E-mail sent successfully. An e-mail has been sent to the user\'s mailbox.' %}"; + swal("{% trans 'Password-Reset' %}", msg, "success"); + } + APIUpdateAttr({ url: the_url, body: JSON.stringify(body), success: success}); + } + swal({ + title: "{% trans 'Are you sure?' %}", + text: "{% trans 'This will reset the user\'s password.' %}", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "{% trans 'Confirm' %}", + closeOnConfirm: false + }, function () { + doReset(); + } + ); +}).on('click', '#btn_reset_pk', function(){ + function doReset() { + var the_url = '{% url "users:user-reset-pk-api" pk=user_object.id %}'; + var body = {}; + var success = function() { + var msg = "{% trans 'The reset-ssh-public-key E-mail has been sent successfully. Please inform the user to update his new ssh public key.' %}"; + swal("{% trans 'SSH-Public-Key Reset' %}", msg, "success"); + } + APIUpdateAttr({ url: the_url, body: JSON.stringify(body), success: success}); + } + swal({ + title: "{% trans 'Are you sure?' %}", + text: "{% trans 'This will reset the user\'s public key.' %}", + type: "warning", + showCancelButton: true, + confirmButtonColor: "#DD6B55", + confirmButtonText: "{% trans 'Confirm' %}", + closeOnConfirm: false + }, function () { + doReset(); + } + ); +}); + +{% endblock %} diff --git a/apps/users/templates/users/user_group_create.html b/apps/users/templates/users/user_group_create.html index 0b11c9679..6b80c68cd 100644 --- a/apps/users/templates/users/user_group_create.html +++ b/apps/users/templates/users/user_group_create.html @@ -27,7 +27,7 @@
    -
    + {% csrf_token %} {{ form.name|bootstrap_horizontal }} diff --git a/apps/users/templates/users/user_list.html b/apps/users/templates/users/user_list.html index 3980bba17..d220a4a84 100644 --- a/apps/users/templates/users/user_list.html +++ b/apps/users/templates/users/user_list.html @@ -12,14 +12,14 @@
    - + {% endblock %} {% block table_body %} - {% for user in user_list %} + {% for user in object_list %} {% endfor %} diff --git a/apps/users/templates/users/user_update.html b/apps/users/templates/users/user_update.html index fb3725a75..f0a0907e2 100644 --- a/apps/users/templates/users/user_update.html +++ b/apps/users/templates/users/user_update.html @@ -1,5 +1,6 @@ {% extends 'users/_user.html' %} {% load i18n %} +{% block user_template_title %}{% trans "Update user" %}{% endblock %} {% block username %}
    @@ -16,4 +17,4 @@
    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/apps/users/urls.py b/apps/users/urls.py index 138f6144f..5a83c64b1 100644 --- a/apps/users/urls.py +++ b/apps/users/urls.py @@ -1,6 +1,4 @@ -from django.conf.urls import url, include -from django.contrib.auth import views as auth_views -from django.urls import reverse_lazy +from django.conf.urls import url import views import api @@ -10,13 +8,16 @@ app_name = 'users' urlpatterns = [ url(r'^login$', views.UserLoginView.as_view(), name='login'), url(r'^logout$', views.UserLogoutView.as_view(), name='logout'), - url(r'^password/forget$', views.UserForgetPasswordView.as_view(), name='forget-password'), - url(r'^password/forget/sendmail-success$', - views.UserForgetPasswordSendmailSuccessView.as_view(), name='forget-password-sendmail-success'), + url(r'^password/forgot$', views.UserForgotPasswordView.as_view(), name='forgot-password'), + url(r'^password/forgot/sendmail-success$', + views.UserForgotPasswordSendmailSuccessView.as_view(), name='forgot-password-sendmail-success'), url(r'^password/reset$', views.UserResetPasswordView.as_view(), name='reset-password'), - url(r'^password/reset/success$', views.UserResetPasswordSuccessView.as_view(), name='reset-password-success'), + url(r'^password/reset/success$', views.UserResetPasswordSuccessView.as_view(), + name='reset-password-success'), url(r'^user$', views.UserListView.as_view(), name='user-list'), url(r'^user/(?P[0-9]+)$', views.UserDetailView.as_view(), name='user-detail'), + url(r'^first-login/$', views.UserFirstLoginView.as_view(), name='user-first-login'), + url(r'^user/(?P[0-9]+)/assets-perm$', views.UserDetailView.as_view(), name='user-detail'), url(r'^user/create$', views.UserCreateView.as_view(), name='user-create'), url(r'^user/(?P[0-9]+)/update$', views.UserUpdateView.as_view(), name='user-update'), url(r'^user/(?P[0-9]+)/delete$', views.UserDeleteView.as_view(), name='user-delete'), @@ -30,8 +31,15 @@ urlpatterns = [ urlpatterns += [ url(r'^v1/users$', api.UserListAddApi.as_view(), name='user-list-api'), - url(r'^v1/users/(?P[0-9]+)$', api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'), - url(r'^v1/users/(?P[0-9]+)/active$', api.UserActiveApi.as_view(), name='user-active-api'), - url(r'^v1/usergroups$', api.UserGroupListAddApi.as_view(), name='user-group-list-api'), - url(r'^v1/usergroups/(?P[0-9]+)$', api.UserGroupDetailDeleteUpdateApi.as_view(), name='user-group-detail-api'), + url(r'^v1/users/(?P[0-9]+)$', + api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'), + url(r'^v1/users/(?P[0-9]+)/patch$', + api.UserAttributeApi.as_view(), name='user-patch-api'), + url(r'^v1/users/(?P\d+)/reset-password/$', api.UserResetPasswordApi.as_view(), name='user-reset-password-api'), + url(r'^v1/users/(?P\d+)/reset-pk/$', api.UserResetPKApi.as_view(), name='user-reset-pk-api'), + url(r'^v1/user-groups$', api.UserGroupListAddApi.as_view(), name='user-group-list-api'), + url(r'^v1/user-groups/(?P[0-9]+)$', + api.UserGroupDetailDeleteUpdateApi.as_view(), name='user-group-detail-api'), + url(r'^v1/user-groups/(?P[0-9]+)/edit$', + api.UserGroupEditApi.as_view(), name='user-group-edit-api'), ] diff --git a/apps/users/utils.py b/apps/users/utils.py index 587c8ec7d..a94de773a 100644 --- a/apps/users/utils.py +++ b/apps/users/utils.py @@ -1,18 +1,19 @@ # ~*~ coding: utf-8 ~*~ # - from __future__ import unicode_literals -import os import logging +import os +import re -from paramiko.rsakey import RSAKey +from django.conf import settings from django.contrib.auth.mixins import UserPassesTestMixin from django.urls import reverse_lazy from django.utils.translation import ugettext as _ +from paramiko.rsakey import RSAKey + from common.tasks import send_mail_async from common.utils import reverse -from users.models import User try: @@ -86,7 +87,7 @@ def user_add_success_next(user): 'name': user.name, 'rest_password_url': reverse('users:reset-password', external=True), 'rest_password_token': user.generate_reset_token(), - 'forget_password_url': reverse('users:forget-password', external=True), + 'forget_password_url': reverse('users:forgot-password', external=True), 'email': user.email, 'login_url': reverse('users:login', external=True), } @@ -117,13 +118,88 @@ def send_reset_password_mail(user): 'name': user.name, 'rest_password_url': reverse('users:reset-password', external=True), 'rest_password_token': user.generate_reset_token(), - 'forget_password_url': reverse('users:forget-password', external=True), + 'forget_password_url': reverse('users:forgot-password', external=True), 'email': user.email, 'login_url': reverse('users:login', external=True), } + if settings.DEBUG: + logger.debug(message) send_mail_async.delay(subject, message, recipient_list, html_message=message) +def send_reset_ssh_key_mail(user): + subject = _('SSH Key Reset') + recipient_list = [user.email] + message = _(""" + Hello %(name)s: +
    + Your ssh public key has been reset by site administrator. + Please login and reset your ssh public key. +
    + Login direct + +
    + """) % { + 'name': user.name, + 'login_url': reverse('users:login', external=True), + } + if settings.DEBUG: + logger.debug(message) + + send_mail_async.delay(subject, message, recipient_list, html_message=message) +def validate_ssh_pk(text): + """ + Expects a SSH private key as string. + Returns a boolean and a error message. + If the text is parsed as private key successfully, + (True,'') is returned. Otherwise, + (False, ) is returned. + + from https://github.com/githubnemo/SSH-private-key-validator/blob/master/validate.py + + """ + + if not text: + return False, 'No text given' + + startPattern = re.compile("^-----BEGIN [A-Z]+ PRIVATE KEY-----") + optionPattern = re.compile("^.+: .+") + contentPattern = re.compile("^([a-zA-Z0-9+/]{64}|[a-zA-Z0-9+/]{1,64}[=]{0,2})$") + endPattern = re.compile("^-----END [A-Z]+ PRIVATE KEY-----") + + def contentState(text): + for i in range(0, len(text)): + line = text[i] + + if endPattern.match(line): + if i == len(text) - 1 or len(text[i + 1]) == 0: + return True, '' + else: + return False, 'At end but content coming' + + elif not contentPattern.match(line): + return False, 'Wrong string in content section' + + return False, 'No content or missing end line' + + def optionState(text): + for i in range(0, len(text)): + line = text[i] + + if line[-1:] == '\\': + return optionState(text[i + 2:]) + + if not optionPattern.match(line): + return contentState(text[i + 1:]) + + return False, 'Expected option, found nothing' + + def startState(text): + if len(text) == 0 or not startPattern.match(text[0]): + return False, 'Header is wrong' + return optionState(text[1:]) + + return startState([n.strip() for n in text.splitlines()]) diff --git a/apps/users/views.py b/apps/users/views.py index f23b3a84c..73b5c072f 100644 --- a/apps/users/views.py +++ b/apps/users/views.py @@ -2,67 +2,69 @@ from __future__ import unicode_literals -import logging - -from django.shortcuts import get_object_or_404, reverse, render, Http404, redirect -from django.urls import reverse_lazy -from django.utils.translation import ugettext as _ -from django.db.models import Q -from django.views.generic.base import View, TemplateView -from django.views.generic.list import ListView -from django.views.generic.edit import CreateView, DeleteView, UpdateView, ProcessFormView, FormView -from django.views.generic.detail import DetailView -from django.contrib.messages.views import SuccessMessageMixin from django.conf import settings +from django.contrib.auth import login as auth_login, logout as auth_logout +from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib.messages.views import SuccessMessageMixin +from django.core.files.storage import default_storage +from django.db.models import Q from django.http import HttpResponseRedirect -from django.contrib.auth import views as auth_view, authenticate, login, logout +from django.shortcuts import get_object_or_404, reverse, redirect +from django.utils.decorators import method_decorator +from django.utils.translation import ugettext as _ +from django.urls import reverse_lazy +from django.views.decorators.cache import never_cache +from django.views.decorators.csrf import csrf_protect +from django.views.decorators.debug import sensitive_post_parameters +from django.views.generic.base import TemplateView +from django.views.generic.list import ListView +from django.views.generic.edit import CreateView, DeleteView, UpdateView, FormView +from django.views.generic.detail import DetailView -from common.utils import get_object_or_none +from formtools.wizard.views import SessionWizardView + +from common.utils import get_object_or_none, get_logger from .models import User, UserGroup -from .forms import UserCreateForm, UserUpdateForm, UserGroupForm, UserLoginForm -from .utils import AdminUserRequiredMixin, ssh_key_gen, user_add_success_next, send_reset_password_mail +from .forms import UserCreateForm, UserUpdateForm, UserGroupForm, UserLoginForm, UserInfoForm, UserKeyForm +from .utils import AdminUserRequiredMixin, user_add_success_next, send_reset_password_mail -logger = logging.getLogger('jumpserver.users.views') +logger = get_logger(__name__) +@method_decorator(sensitive_post_parameters(), name='dispatch') +@method_decorator(csrf_protect, name='dispatch') +@method_decorator(never_cache, name='dispatch') class UserLoginView(FormView): template_name = 'users/login.html' form_class = UserLoginForm redirect_field_name = 'next' def get(self, request, *args, **kwargs): - if self.request.user.is_staff: - return redirect(request.POST.get(self.redirect_field_name, reverse('index'))) - # Todo: Django have bug, lose context issue: https://github.com/django/django/pull/7202 - # so we jump it and use origin method render_to_response - # return super(UserLoginView, self).get(request, *args, **kwargs) - return self.render_to_response(self.get_context_data(**kwargs)) + if request.user.is_staff: + return redirect(self.get_success_url()) + return super(UserLoginView, self).get(request, *args, **kwargs) - def post(self, request, *args, **kwargs): - form = self.get_form() - if not form.is_valid(): - return self.form_invalid(form) + def form_valid(self, form): + auth_login(self.request, form.get_user()) + return redirect(self.get_success_url()) - username = form['username'].value() - password = form['password'].value() + def get_success_url(self): + if self.request.user.is_first_login: + return reverse('users:user-first-login') - user = authenticate(username=username, password=password) - if user is None: - kwargs.update({'errors': _('Username or password invalid')}) - return self.get(request, *args, **kwargs) - - login(request, user) - return redirect(request.GET.get(self.redirect_field_name, reverse('index'))) + return self.request.POST.get( + self.redirect_field_name, + self.request.GET.get(self.redirect_field_name, reverse('index'))) +@method_decorator(never_cache, name='dispatch') class UserLogoutView(TemplateView): template_name = 'common/flash_message_standalone.html' def get(self, request, *args, **kwargs): - logout(request) - + auth_logout(request) return super(UserLogoutView, self).get(request) def get_context_data(self, **kwargs): @@ -80,7 +82,7 @@ class UserListView(AdminUserRequiredMixin, ListView): model = User paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'user_list' - template_name = 'users/user_list.html' + template_name = 'users/asset_permission_list.html' ordering = '-date_joined' def get_queryset(self): @@ -90,7 +92,6 @@ class UserListView(AdminUserRequiredMixin, ListView): if keyword: self.queryset = self.queryset.filter(Q(username__icontains=keyword) | Q(name__icontains=keyword)) - if sort: self.queryset = self.queryset.order_by(sort) return self.queryset @@ -106,7 +107,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): form_class = UserCreateForm template_name = 'users/user_create.html' success_url = reverse_lazy('users:user-list') - success_message = _('Create user%s success.') + success_message = _('Create user %s successfully.') def get_context_data(self, **kwargs): context = super(UserCreateView, self).get_context_data(**kwargs) @@ -150,7 +151,7 @@ class UserUpdateView(AdminUserRequiredMixin, UpdateView): def get_context_data(self, **kwargs): context = super(UserUpdateView, self).get_context_data(**kwargs) - context.update({'app': _('Users'), 'action': _('Edit user')}) + context.update({'app': _('Users'), 'action': _('Update user')}) return context @@ -159,14 +160,28 @@ class UserDeleteView(AdminUserRequiredMixin, DeleteView): success_url = reverse_lazy('users:user-list') template_name = 'users/user_delete_confirm.html' + def delete(self, request, *args, **kwargs): + """ + Calls the delete() method on the fetched object and then + redirects to the success URL. + """ + self.object = self.get_object() + success_url = self.get_success_url() + if self.object.name == "admin" or self.object.id == request.session.get('_auth_user_id'): + pass + else: + self.object.delete() + + return HttpResponseRedirect(success_url) + class UserDetailView(AdminUserRequiredMixin, DetailView): model = User template_name = 'users/user_detail.html' - context_object_name = "user" + context_object_name = "user_object" def get_context_data(self, **kwargs): - groups = [group for group in UserGroup.objects.iterator() if group not in self.object.groups.iterator()] + groups = UserGroup.objects.exclude(id__in=self.object.groups.all()) context = {'app': _('Users'), 'action': _('User detail'), 'groups': groups} kwargs.update(context) return super(UserDetailView, self).get_context_data(**kwargs) @@ -177,7 +192,7 @@ class UserGroupListView(AdminUserRequiredMixin, ListView): paginate_by = settings.CONFIG.DISPLAY_PER_PAGE context_object_name = 'user_group_list' template_name = 'users/user_group_list.html' - ordering = '-date_added' + ordering = '-date_created' def get_queryset(self): self.queryset = super(UserGroupListView, self).get_queryset() @@ -192,7 +207,7 @@ class UserGroupListView(AdminUserRequiredMixin, ListView): def get_context_data(self, **kwargs): context = super(UserGroupListView, self).get_context_data(**kwargs) - context.update({'app': _('Users'), 'action': _('Usergroup list'), 'keyword': self.keyword}) + context.update({'app': _('Users'), 'action': _('User group list'), 'keyword': self.keyword}) return context @@ -230,20 +245,20 @@ class UserGroupDeleteView(DeleteView): pass -class UserForgetPasswordView(TemplateView): - template_name = 'users/forget_password.html' +class UserForgotPasswordView(TemplateView): + template_name = 'users/forgot_password.html' - def post(self, request, *args, **kwargs): + def post(self, request): email = request.POST.get('email') user = get_object_or_none(User, email=email) if not user: return self.get(request, errors=_('Email address invalid, input again')) else: send_reset_password_mail(user) - return HttpResponseRedirect(reverse('users:forget-password-sendmail-success')) + return HttpResponseRedirect(reverse('users:forgot-password-sendmail-success')) -class UserForgetPasswordSendmailSuccessView(TemplateView): +class UserForgotPasswordSendmailSuccessView(TemplateView): template_name = 'common/flash_message_standalone.html' def get_context_data(self, **kwargs): @@ -253,7 +268,7 @@ class UserForgetPasswordSendmailSuccessView(TemplateView): 'redirect_url': reverse('users:login'), } kwargs.update(context) - return super(UserForgetPasswordSendmailSuccessView, self).get_context_data(**kwargs) + return super(UserForgotPasswordSendmailSuccessView, self).get_context_data(**kwargs) class UserResetPasswordSuccessView(TemplateView): @@ -295,3 +310,42 @@ class UserResetPasswordView(TemplateView): user.reset_password(password) return HttpResponseRedirect(reverse('users:reset-password-success')) + + +class UserFirstLoginView(LoginRequiredMixin, SessionWizardView): + template_name = 'users/first_login.html' + form_list = [UserInfoForm, UserKeyForm] + file_storage = default_storage + + def dispatch(self, request, *args, **kwargs): + if request.user.is_authenticated() and not request.user.is_first_login: + return redirect(reverse('index')) + return super(UserFirstLoginView, self).dispatch(request, *args, **kwargs) + + def done(self, form_list, form_dict, **kwargs): + user = self.request.user + for form in form_list: + for field in form: + if field.value(): + setattr(user, field.name, field.value()) + if field.name == 'enable_otp': + user.enable_otp = field.value() + user.is_first_login = False + user.save() + return redirect(reverse('index')) + + def get_context_data(self, **kwargs): + context = super(UserFirstLoginView, self).get_context_data(**kwargs) + context.update({'app': _('Users'), 'action': _('First Login')}) + return context + + def get_form_initial(self, step): + user = self.request.user + if step == '0': + return { + 'name': user.name or user.username, + 'enable_otp': user.enable_otp or True, + 'wechat': user.wechat or '', + 'phone': user.phone or '' + } + return super(UserFirstLoginView, self).get_form_initial(step) diff --git a/docs/table_design.xml b/docs/table_design.xml index 5fb4b4b4b..de825486b 100644 --- a/docs/table_design.xml +++ b/docs/table_design.xml @@ -71,16 +71,12 @@ INTEGER 0 - + INTEGER 0 - -CHAR -NULL INTEGER -NULL - +NULL VARCHAR NULL @@ -106,7 +102,7 @@ id
    - {% for group in groups %} - + {% endfor %}
    - +
    {{ group.name }} - - {{ group.name }} + +
    {% trans 'Name' %} {% trans 'Username' %} {% trans 'Role' %}{% trans 'Usergroup' %}{% trans 'User group' %} {% trans 'Asset num' %} {% trans 'Active' %}
    @@ -34,15 +34,16 @@ {{ user.groups.all|join_queryset_attr:"name" }} {{ user.name }} - {% if user.is_expired %} + {% if user.is_expired and user.is_active %} {% else %} {% endif %} - {% trans 'Edit' %} - {% trans 'Delete' %} + {% trans 'Update' %} + + {% trans 'Delete' %}
    - +
    INTEGER NULL @@ -120,7 +116,7 @@ id
    - +
    INTEGER NULL @@ -130,7 +126,7 @@ VARCHAR NULL - + DATETIME NULL @@ -140,13 +136,13 @@ id
    - +
    INTEGER NULL INTEGER -NULL +NULL INTEGER @@ -156,7 +152,7 @@ id
    - +
    INTEGER NULL @@ -188,7 +184,7 @@ id
    - +
    INTEGER NULL @@ -231,7 +227,7 @@ NULL INTEGER -NULL +NULL INTEGER @@ -242,7 +238,7 @@ NULL INTEGER -NULL +NULL VARCHAR @@ -264,7 +260,7 @@ NULL INTEGER -NULL +NULL VARCHAR @@ -284,14 +280,14 @@ VARCHAR NULL - + DATETIME NULL id
    - +
    INTEGER NULL @@ -305,7 +301,7 @@ id
    - +
    INTEGER NULL @@ -336,14 +332,14 @@ VARCHAR NULL - + DATETIME NULL id
    - +
    INTEGER NULL @@ -361,7 +357,7 @@ id
    - +
    INTEGER NULL @@ -374,20 +370,20 @@ VARCHAR NULL - + DATETIME NULL id
    - +
    INTEGER NULL - + INTEGER -NULL +NULL INTEGER @@ -397,7 +393,7 @@ id
    - +
    INTEGER NULL @@ -419,7 +415,7 @@ INTEGER NULL - + DATETIME NULL @@ -432,7 +428,7 @@ id
    - +
    INTEGER NULL @@ -481,20 +477,20 @@ CHAR NULL - + DATETIME NULL id
    - +
    INTEGER NULL - + INTEGER -NULL +NULL INTEGER @@ -504,7 +500,7 @@ id
    - +
    INTEGER NULL @@ -534,7 +530,7 @@ id
    - +
    INTEGER NULL @@ -567,20 +563,20 @@ VARCHAR NULL - + TIME NULL id
    - +
    INTEGER NULL - + INTEGER -NULL +NULL INTEGER @@ -590,7 +586,7 @@ id
    - +
    INTEGER NULL @@ -606,13 +602,13 @@ id
    - +
    INTEGER NULL - + INTEGER -NULL +NULL INTEGER @@ -638,11 +634,11 @@ id
    - +
    INTEGER NULL - + VARCHAR NULL @@ -667,7 +663,7 @@ id
    - +
    INTEGER NULL @@ -693,7 +689,7 @@ id
    - +
    INTEGER NULL @@ -734,13 +730,13 @@ id
    - +
    INTEGER NULL INTEGER -NULL +NULL DATE @@ -752,7 +748,7 @@ id
    - +
    INTEGER NULL diff --git a/requirements.txt b/requirements.txt index 1b3476a53..ab6ea99b2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,3 +17,5 @@ paramiko==2.0.2 celery==3.1.23 ansible==2.1.1.0 django-simple-captcha==0.5.2 +django-formtools==1.0 +sshpubkeys==2.2.0