From d50ad66b78bf9910f63b9f9106ec46a8b786be78 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 13 Nov 2018 15:57:44 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E7=BB=B4=E6=8A=A4=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E7=9A=84migrations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- Dockerfile | 23 ++ .../migrations/0002_auto_20180105_1807.py | 35 +++ .../migrations/0003_auto_20180109_2331.py | 22 ++ .../migrations/0004_auto_20180125_1218.py | 20 ++ .../migrations/0005_auto_20180126_1637.py | 40 ++++ .../migrations/0006_auto_20180130_1502.py | 39 ++++ .../migrations/0007_auto_20180225_1815.py | 60 +++++ .../migrations/0008_auto_20180306_1804.py | 40 ++++ .../migrations/0009_auto_20180307_1212.py | 20 ++ .../migrations/0010_auto_20180307_1749.py | 20 ++ .../migrations/0011_auto_20180326_0957.py | 55 +++++ .../migrations/0012_auto_20180404_1302.py | 21 ++ .../migrations/0013_auto_20180411_1135.py | 25 +++ .../migrations/0014_auto_20180427_1245.py | 31 +++ .../migrations/0015_auto_20180510_1235.py | 31 +++ .../migrations/0016_auto_20180511_1203.py | 20 ++ .../migrations/0017_auto_20180702_1415.py | 58 +++++ .../migrations/0018_auto_20180807_1116.py | 84 +++++++ .../migrations/0019_auto_20180816_1320.py | 22 ++ .../migrations/0020_auto_20180816_1652.py | 48 ++++ .../migrations/0021_auto_20180903_1132.py | 25 +++ .../migrations/0022_auto_20181012_1717.py | 56 +++++ .../migrations/0023_auto_20181016_1650.py | 28 +++ apps/audits/migrations/0001_initial.py | 31 +++ apps/audits/migrations/0002_ftplog_org_id.py | 18 ++ .../migrations/0003_auto_20180816_1652.py | 18 ++ ...eratelog_passwordchangelog_userloginlog.py | 51 +++++ apps/common/migrations/0001_initial.py | 30 +++ .../migrations/0002_auto_20180111_1407.py | 28 +++ .../migrations/0003_setting_category.py | 20 ++ .../migrations/0004_setting_encrypted.py | 18 ++ apps/ops/migrations/0002_celerytask.py | 28 +++ apps/orgs/migrations/0001_initial.py | 29 +++ .../migrations/0002_auto_20180903_1132.py | 17 ++ .../migrations/0002_auto_20171228_0025.py | 28 +++ .../migrations/0003_auto_20180225_1815.py | 41 ++++ .../migrations/0004_auto_20180411_1135.py | 31 +++ .../0005_migrate_data_20180411_1144.py | 49 +++++ .../migrations/0006_auto_20180606_1505.py | 27 +++ .../migrations/0007_auto_20180807_1116.py | 37 ++++ .../migrations/0008_auto_20180816_1652.py | 23 ++ .../migrations/0009_auto_20180903_1132.py | 17 ++ .../migrations/0002_auto_20171228_0025.py | 43 ++++ .../migrations/0003_auto_20171230_0308.py | 30 +++ .../migrations/0004_session_remote_addr.py | 20 ++ .../migrations/0005_auto_20180122_1154.py | 25 +++ .../migrations/0006_auto_20180123_1037.py | 20 ++ .../0007_session_date_last_active.py | 21 ++ .../migrations/0008_auto_20180307_1603.py | 20 ++ .../migrations/0009_auto_20180326_0957.py | 26 +++ .../migrations/0010_auto_20180423_1140.py | 26 +++ .../migrations/0011_auto_20180807_1116.py | 23 ++ .../migrations/0012_auto_20180816_1652.py | 23 ++ .../migrations/0003_auto_20180101_0046.py | 20 ++ .../migrations/0004_auto_20180125_1218.py | 20 ++ .../migrations/0005_auto_20180306_1804.py | 23 ++ .../migrations/0006_auto_20180411_1135.py | 29 +++ .../migrations/0007_auto_20180419_1036.py | 24 ++ .../migrations/0008_auto_20180425_1516.py | 20 ++ .../migrations/0009_auto_20180517_1537.py | 20 ++ .../migrations/0010_auto_20180606_1505.py | 38 ++++ apps/users/migrations/0011_user_source.py | 20 ++ .../migrations/0012_auto_20180710_1641.py | 30 +++ .../migrations/0013_auto_20180807_1116.py | 32 +++ .../migrations/0014_auto_20180816_1652.py | 18 ++ .../migrations/0015_auto_20181105_1112.py | 23 ++ .../migrations/0016_auto_20181109_1505.py | 18 ++ build.sh | 11 + config_docker.py | 205 ++++++++++++++++++ entrypoint.sh | 11 + 71 files changed, 2204 insertions(+), 1 deletion(-) create mode 100644 Dockerfile create mode 100644 apps/assets/migrations/0002_auto_20180105_1807.py create mode 100644 apps/assets/migrations/0003_auto_20180109_2331.py create mode 100644 apps/assets/migrations/0004_auto_20180125_1218.py create mode 100644 apps/assets/migrations/0005_auto_20180126_1637.py create mode 100644 apps/assets/migrations/0006_auto_20180130_1502.py create mode 100644 apps/assets/migrations/0007_auto_20180225_1815.py create mode 100644 apps/assets/migrations/0008_auto_20180306_1804.py create mode 100644 apps/assets/migrations/0009_auto_20180307_1212.py create mode 100644 apps/assets/migrations/0010_auto_20180307_1749.py create mode 100644 apps/assets/migrations/0011_auto_20180326_0957.py create mode 100644 apps/assets/migrations/0012_auto_20180404_1302.py create mode 100644 apps/assets/migrations/0013_auto_20180411_1135.py create mode 100644 apps/assets/migrations/0014_auto_20180427_1245.py create mode 100644 apps/assets/migrations/0015_auto_20180510_1235.py create mode 100644 apps/assets/migrations/0016_auto_20180511_1203.py create mode 100644 apps/assets/migrations/0017_auto_20180702_1415.py create mode 100644 apps/assets/migrations/0018_auto_20180807_1116.py create mode 100644 apps/assets/migrations/0019_auto_20180816_1320.py create mode 100644 apps/assets/migrations/0020_auto_20180816_1652.py create mode 100644 apps/assets/migrations/0021_auto_20180903_1132.py create mode 100644 apps/assets/migrations/0022_auto_20181012_1717.py create mode 100644 apps/assets/migrations/0023_auto_20181016_1650.py create mode 100644 apps/audits/migrations/0001_initial.py create mode 100644 apps/audits/migrations/0002_ftplog_org_id.py create mode 100644 apps/audits/migrations/0003_auto_20180816_1652.py create mode 100644 apps/audits/migrations/0004_operatelog_passwordchangelog_userloginlog.py create mode 100644 apps/common/migrations/0001_initial.py create mode 100644 apps/common/migrations/0002_auto_20180111_1407.py create mode 100644 apps/common/migrations/0003_setting_category.py create mode 100644 apps/common/migrations/0004_setting_encrypted.py create mode 100644 apps/ops/migrations/0002_celerytask.py create mode 100644 apps/orgs/migrations/0001_initial.py create mode 100644 apps/orgs/migrations/0002_auto_20180903_1132.py create mode 100644 apps/perms/migrations/0002_auto_20171228_0025.py create mode 100644 apps/perms/migrations/0003_auto_20180225_1815.py create mode 100644 apps/perms/migrations/0004_auto_20180411_1135.py create mode 100644 apps/perms/migrations/0005_migrate_data_20180411_1144.py create mode 100644 apps/perms/migrations/0006_auto_20180606_1505.py create mode 100644 apps/perms/migrations/0007_auto_20180807_1116.py create mode 100644 apps/perms/migrations/0008_auto_20180816_1652.py create mode 100644 apps/perms/migrations/0009_auto_20180903_1132.py create mode 100644 apps/terminal/migrations/0002_auto_20171228_0025.py create mode 100644 apps/terminal/migrations/0003_auto_20171230_0308.py create mode 100644 apps/terminal/migrations/0004_session_remote_addr.py create mode 100644 apps/terminal/migrations/0005_auto_20180122_1154.py create mode 100644 apps/terminal/migrations/0006_auto_20180123_1037.py create mode 100644 apps/terminal/migrations/0007_session_date_last_active.py create mode 100644 apps/terminal/migrations/0008_auto_20180307_1603.py create mode 100644 apps/terminal/migrations/0009_auto_20180326_0957.py create mode 100644 apps/terminal/migrations/0010_auto_20180423_1140.py create mode 100644 apps/terminal/migrations/0011_auto_20180807_1116.py create mode 100644 apps/terminal/migrations/0012_auto_20180816_1652.py create mode 100644 apps/users/migrations/0003_auto_20180101_0046.py create mode 100644 apps/users/migrations/0004_auto_20180125_1218.py create mode 100644 apps/users/migrations/0005_auto_20180306_1804.py create mode 100644 apps/users/migrations/0006_auto_20180411_1135.py create mode 100644 apps/users/migrations/0007_auto_20180419_1036.py create mode 100644 apps/users/migrations/0008_auto_20180425_1516.py create mode 100644 apps/users/migrations/0009_auto_20180517_1537.py create mode 100644 apps/users/migrations/0010_auto_20180606_1505.py create mode 100644 apps/users/migrations/0011_user_source.py create mode 100644 apps/users/migrations/0012_auto_20180710_1641.py create mode 100644 apps/users/migrations/0013_auto_20180807_1116.py create mode 100644 apps/users/migrations/0014_auto_20180816_1652.py create mode 100644 apps/users/migrations/0015_auto_20181105_1112.py create mode 100644 apps/users/migrations/0016_auto_20181109_1505.py create mode 100644 build.sh create mode 100644 config_docker.py create mode 100755 entrypoint.sh diff --git a/.gitignore b/.gitignore index b75f0c9ff..e341a0d63 100644 --- a/.gitignore +++ b/.gitignore @@ -17,7 +17,6 @@ dump.rdb .idea/ db.sqlite3 config.py -migrations/ *.log host_rsa_key *.bat @@ -33,3 +32,4 @@ celerybeat-schedule.db data/static docs/_build/ xpack +logs/* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..fbf01d8bd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM registry.fit2cloud.com/jumpserver/python:v3 +MAINTAINER Jumpserver Team + +WORKDIR /opt/jumpserver +RUN useradd jumpserver + +COPY ./requirements /tmp/requirements + +RUN yum -y install epel-release && cd /tmp/requirements && \ + yum -y install $(cat rpm_requirements.txt) + +RUN cd /tmp/requirements && pip install -r requirements.txt + +COPY . /opt/jumpserver +COPY config_docker.py /opt/jumpserver/config.py +VOLUME /opt/jumpserver/data +VOLUME /opt/jumpserver/logs + +ENV LANG=zh_CN.UTF-8 +ENV LC_ALL=zh_CN.UTF-8 + +EXPOSE 8080 +ENTRYPOINT ["./entrypoint.sh"] diff --git a/apps/assets/migrations/0002_auto_20180105_1807.py b/apps/assets/migrations/0002_auto_20180105_1807.py new file mode 100644 index 000000000..bf1f022ac --- /dev/null +++ b/apps/assets/migrations/0002_auto_20180105_1807.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-05 10:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='adminuser', + options={'ordering': ['name'], 'verbose_name': 'Admin user'}, + ), + migrations.AlterModelOptions( + name='asset', + options={'verbose_name': 'Asset'}, + ), + migrations.AlterModelOptions( + name='assetgroup', + options={'ordering': ['name'], 'verbose_name': 'Asset group'}, + ), + migrations.AlterModelOptions( + name='cluster', + options={'ordering': ['name'], 'verbose_name': 'Cluster'}, + ), + migrations.AlterModelOptions( + name='systemuser', + options={'ordering': ['name'], 'verbose_name': 'System user'}, + ), + ] diff --git a/apps/assets/migrations/0003_auto_20180109_2331.py b/apps/assets/migrations/0003_auto_20180109_2331.py new file mode 100644 index 000000000..254de6236 --- /dev/null +++ b/apps/assets/migrations/0003_auto_20180109_2331.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-09 15:31 +from __future__ import unicode_literals + +import assets.models.asset +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0002_auto_20180105_1807'), + ] + + operations = [ + migrations.AlterField( + model_name='asset', + name='cluster', + field=models.ForeignKey(default=assets.models.asset.default_cluster, on_delete=django.db.models.deletion.SET_DEFAULT, related_name='assets', to='assets.Cluster', verbose_name='Cluster'), + ), + ] diff --git a/apps/assets/migrations/0004_auto_20180125_1218.py b/apps/assets/migrations/0004_auto_20180125_1218.py new file mode 100644 index 000000000..1886fa499 --- /dev/null +++ b/apps/assets/migrations/0004_auto_20180125_1218.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-25 04:18 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0003_auto_20180109_2331'), + ] + + operations = [ + migrations.AlterField( + model_name='assetgroup', + name='created_by', + field=models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by'), + ), + ] diff --git a/apps/assets/migrations/0005_auto_20180126_1637.py b/apps/assets/migrations/0005_auto_20180126_1637.py new file mode 100644 index 000000000..8db19e482 --- /dev/null +++ b/apps/assets/migrations/0005_auto_20180126_1637.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-26 08:37 +from __future__ import unicode_literals + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0004_auto_20180125_1218'), + ] + + operations = [ + migrations.CreateModel( + name='Label', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=128, verbose_name='Name')), + ('value', models.CharField(max_length=128, verbose_name='Value')), + ('category', models.CharField(choices=[('S', 'System'), ('U', 'User')], default='U', max_length=128, verbose_name='Category')), + ('is_active', models.BooleanField(default=True, verbose_name='Is active')), + ('comment', models.TextField(blank=True, null=True, verbose_name='Comment')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), + ], + options={ + 'db_table': 'assets_label', + }, + ), + migrations.AlterUniqueTogether( + name='label', + unique_together=set([('name', 'value')]), + ), + migrations.AddField( + model_name='asset', + name='labels', + field=models.ManyToManyField(blank=True, related_name='assets', to='assets.Label', verbose_name='Labels'), + ), + ] diff --git a/apps/assets/migrations/0006_auto_20180130_1502.py b/apps/assets/migrations/0006_auto_20180130_1502.py new file mode 100644 index 000000000..b77470d27 --- /dev/null +++ b/apps/assets/migrations/0006_auto_20180130_1502.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-30 07:02 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0005_auto_20180126_1637'), + ] + + operations = [ + migrations.RemoveField( + model_name='asset', + name='cabinet_no', + ), + migrations.RemoveField( + model_name='asset', + name='cabinet_pos', + ), + migrations.RemoveField( + model_name='asset', + name='env', + ), + migrations.RemoveField( + model_name='asset', + name='remote_card_ip', + ), + migrations.RemoveField( + model_name='asset', + name='status', + ), + migrations.RemoveField( + model_name='asset', + name='type', + ), + ] diff --git a/apps/assets/migrations/0007_auto_20180225_1815.py b/apps/assets/migrations/0007_auto_20180225_1815.py new file mode 100644 index 000000000..009381bcb --- /dev/null +++ b/apps/assets/migrations/0007_auto_20180225_1815.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-02-25 10:15 +from __future__ import unicode_literals + +import assets.models.asset +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0006_auto_20180130_1502'), + ] + + operations = [ + migrations.CreateModel( + name='Node', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('key', models.CharField(max_length=64, unique=True, verbose_name='Key')), + ('value', models.CharField(max_length=128, unique=True, verbose_name='Value')), + ('child_mark', models.IntegerField(default=0)), + ('date_create', models.DateTimeField(auto_now_add=True)), + ], + ), + migrations.RemoveField( + model_name='asset', + name='cluster', + ), + migrations.RemoveField( + model_name='asset', + name='groups', + ), + migrations.RemoveField( + model_name='systemuser', + name='cluster', + ), + migrations.AlterField( + model_name='asset', + name='admin_user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='assets.AdminUser', verbose_name='Admin user'), + ), + migrations.AlterField( + model_name='systemuser', + name='protocol', + field=models.CharField(choices=[('ssh', 'ssh'), ('rdp', 'rdp')], default='ssh', max_length=16, verbose_name='Protocol'), + ), + migrations.AddField( + model_name='asset', + name='nodes', + field=models.ManyToManyField(default=assets.models.asset.default_node, related_name='assets', to='assets.Node', verbose_name='Nodes'), + ), + migrations.AddField( + model_name='systemuser', + name='nodes', + field=models.ManyToManyField(blank=True, to='assets.Node', verbose_name='Nodes'), + ), + ] diff --git a/apps/assets/migrations/0008_auto_20180306_1804.py b/apps/assets/migrations/0008_auto_20180306_1804.py new file mode 100644 index 000000000..48d352619 --- /dev/null +++ b/apps/assets/migrations/0008_auto_20180306_1804.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-06 10:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0007_auto_20180225_1815'), + ] + + operations = [ + migrations.AlterField( + model_name='adminuser', + name='created_by', + field=models.CharField(max_length=128, null=True, verbose_name='Created by'), + ), + migrations.AlterField( + model_name='adminuser', + name='username', + field=models.CharField(max_length=128, verbose_name='Username'), + ), + migrations.AlterField( + model_name='asset', + name='platform', + field=models.CharField(choices=[('Linux', 'Linux'), ('Unix', 'Unix'), ('MacOS', 'MacOS'), ('BSD', 'BSD'), ('Windows', 'Windows'), ('Other', 'Other')], default='Linux', max_length=128, verbose_name='Platform'), + ), + migrations.AlterField( + model_name='systemuser', + name='created_by', + field=models.CharField(max_length=128, null=True, verbose_name='Created by'), + ), + migrations.AlterField( + model_name='systemuser', + name='username', + field=models.CharField(max_length=128, verbose_name='Username'), + ), + ] diff --git a/apps/assets/migrations/0009_auto_20180307_1212.py b/apps/assets/migrations/0009_auto_20180307_1212.py new file mode 100644 index 000000000..08d770642 --- /dev/null +++ b/apps/assets/migrations/0009_auto_20180307_1212.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-07 04:12 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0008_auto_20180306_1804'), + ] + + operations = [ + migrations.AlterField( + model_name='node', + name='value', + field=models.CharField(max_length=128, verbose_name='Value'), + ), + ] diff --git a/apps/assets/migrations/0010_auto_20180307_1749.py b/apps/assets/migrations/0010_auto_20180307_1749.py new file mode 100644 index 000000000..5e6be0943 --- /dev/null +++ b/apps/assets/migrations/0010_auto_20180307_1749.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-07 09:49 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0009_auto_20180307_1212'), + ] + + operations = [ + migrations.AlterField( + model_name='node', + name='value', + field=models.CharField(max_length=128, unique=True, verbose_name='Value'), + ), + ] diff --git a/apps/assets/migrations/0011_auto_20180326_0957.py b/apps/assets/migrations/0011_auto_20180326_0957.py new file mode 100644 index 000000000..07b9055dc --- /dev/null +++ b/apps/assets/migrations/0011_auto_20180326_0957.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-26 01:57 +from __future__ import unicode_literals + +import assets.models.utils +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0010_auto_20180307_1749'), + ] + + operations = [ + migrations.CreateModel( + name='Domain', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('comment', models.TextField(blank=True, verbose_name='Comment')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), + ], + ), + migrations.CreateModel( + name='Gateway', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('username', models.CharField(max_length=128, verbose_name='Username')), + ('_password', models.CharField(blank=True, max_length=256, null=True, verbose_name='Password')), + ('_private_key', models.TextField(blank=True, max_length=4096, null=True, validators=[assets.models.utils.private_key_validator], verbose_name='SSH private key')), + ('_public_key', models.TextField(blank=True, max_length=4096, verbose_name='SSH public key')), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('created_by', models.CharField(max_length=128, null=True, verbose_name='Created by')), + ('ip', models.GenericIPAddressField(db_index=True, verbose_name='IP')), + ('port', models.IntegerField(default=22, verbose_name='Port')), + ('protocol', models.CharField(choices=[('ssh', 'ssh'), ('rdp', 'rdp')], default='ssh', max_length=16, verbose_name='Protocol')), + ('comment', models.CharField(blank=True, max_length=128, null=True, verbose_name='Comment')), + ('is_active', models.BooleanField(default=True, verbose_name='Is active')), + ('domain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='assets.Domain', verbose_name='Domain')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='asset', + name='domain', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='assets', to='assets.Domain', verbose_name='Domain'), + ), + ] diff --git a/apps/assets/migrations/0012_auto_20180404_1302.py b/apps/assets/migrations/0012_auto_20180404_1302.py new file mode 100644 index 000000000..0ccb63e27 --- /dev/null +++ b/apps/assets/migrations/0012_auto_20180404_1302.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-04 05:02 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0011_auto_20180326_0957'), + ] + + operations = [ + migrations.AlterField( + model_name='asset', + name='domain', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='assets', to='assets.Domain', verbose_name='Domain'), + ), + ] diff --git a/apps/assets/migrations/0013_auto_20180411_1135.py b/apps/assets/migrations/0013_auto_20180411_1135.py new file mode 100644 index 000000000..baaf789bd --- /dev/null +++ b/apps/assets/migrations/0013_auto_20180411_1135.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-11 03:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0012_auto_20180404_1302'), + ] + + operations = [ + migrations.AddField( + model_name='systemuser', + name='assets', + field=models.ManyToManyField(blank=True, to='assets.Asset', verbose_name='Assets'), + ), + migrations.AlterField( + model_name='systemuser', + name='sudo', + field=models.TextField(default='/bin/whoami', verbose_name='Sudo'), + ), + ] diff --git a/apps/assets/migrations/0014_auto_20180427_1245.py b/apps/assets/migrations/0014_auto_20180427_1245.py new file mode 100644 index 000000000..735a50879 --- /dev/null +++ b/apps/assets/migrations/0014_auto_20180427_1245.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-27 04:45 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0013_auto_20180411_1135'), + ] + + operations = [ + migrations.AlterField( + model_name='adminuser', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_-]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='gateway', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_-]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='systemuser', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_-]*$', 'Special char not allowed')], verbose_name='Username'), + ), + ] diff --git a/apps/assets/migrations/0015_auto_20180510_1235.py b/apps/assets/migrations/0015_auto_20180510_1235.py new file mode 100644 index 000000000..81d12d2e4 --- /dev/null +++ b/apps/assets/migrations/0015_auto_20180510_1235.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-10 04:35 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0014_auto_20180427_1245'), + ] + + operations = [ + migrations.AlterField( + model_name='adminuser', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='gateway', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='systemuser', + name='username', + field=models.CharField(max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + ] diff --git a/apps/assets/migrations/0016_auto_20180511_1203.py b/apps/assets/migrations/0016_auto_20180511_1203.py new file mode 100644 index 000000000..32f79a3c6 --- /dev/null +++ b/apps/assets/migrations/0016_auto_20180511_1203.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-11 04:03 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0015_auto_20180510_1235'), + ] + + operations = [ + migrations.AlterField( + model_name='node', + name='value', + field=models.CharField(max_length=128, verbose_name='Value'), + ), + ] diff --git a/apps/assets/migrations/0017_auto_20180702_1415.py b/apps/assets/migrations/0017_auto_20180702_1415.py new file mode 100644 index 000000000..9950424a6 --- /dev/null +++ b/apps/assets/migrations/0017_auto_20180702_1415.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-07-02 06:15 +from __future__ import unicode_literals + +import django.core.validators +from django.db import migrations, models + + +def migrate_win_to_ssh_protocol(apps, schema_editor): + asset_model = apps.get_model("assets", "Asset") + db_alias = schema_editor.connection.alias + asset_model.objects.using(db_alias).filter(platform__startswith='Win').update(protocol='rdp') + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0016_auto_20180511_1203'), + ] + + operations = [ + migrations.AddField( + model_name='asset', + name='protocol', + field=models.CharField(choices=[('ssh', 'ssh'), ('rdp', 'rdp'), ('telnet', 'telnet (beta)')], default='ssh', max_length=128, verbose_name='Protocol'), + ), + migrations.AddField( + model_name='systemuser', + name='login_mode', + field=models.CharField(choices=[('auto', 'Automatic login'), ('manual', 'Manually login')], default='auto', max_length=10, verbose_name='Login mode'), + ), + migrations.AlterField( + model_name='adminuser', + name='username', + field=models.CharField(blank=True, max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='asset', + name='platform', + field=models.CharField(choices=[('Linux', 'Linux'), ('Unix', 'Unix'), ('MacOS', 'MacOS'), ('BSD', 'BSD'), ('Windows', 'Windows'), ('Windows2016', 'Windows(2016)'), ('Other', 'Other')], default='Linux', max_length=128, verbose_name='Platform'), + ), + migrations.AlterField( + model_name='gateway', + name='username', + field=models.CharField(blank=True, max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.AlterField( + model_name='systemuser', + name='protocol', + field=models.CharField(choices=[('ssh', 'ssh'), ('rdp', 'rdp'), ('telnet', 'telnet (beta)')], default='ssh', max_length=16, verbose_name='Protocol'), + ), + migrations.AlterField( + model_name='systemuser', + name='username', + field=models.CharField(blank=True, max_length=32, validators=[django.core.validators.RegexValidator('^[0-9a-zA-Z_@\\-\\.]*$', 'Special char not allowed')], verbose_name='Username'), + ), + migrations.RunPython(migrate_win_to_ssh_protocol), + ] diff --git a/apps/assets/migrations/0018_auto_20180807_1116.py b/apps/assets/migrations/0018_auto_20180807_1116.py new file mode 100644 index 000000000..c4e848b43 --- /dev/null +++ b/apps/assets/migrations/0018_auto_20180807_1116.py @@ -0,0 +1,84 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0017_auto_20180702_1415'), + ] + + operations = [ + migrations.AddField( + model_name='adminuser', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='asset', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='domain', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='gateway', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='label', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='node', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='systemuser', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AlterField( + model_name='adminuser', + name='name', + field=models.CharField(max_length=128, verbose_name='Name'), + ), + migrations.AlterField( + model_name='asset', + name='hostname', + field=models.CharField(max_length=128, verbose_name='Hostname'), + ), + migrations.AlterField( + model_name='gateway', + name='name', + field=models.CharField(max_length=128, verbose_name='Name'), + ), + migrations.AlterField( + model_name='systemuser', + name='name', + field=models.CharField(max_length=128, verbose_name='Name'), + ), + migrations.AlterUniqueTogether( + name='adminuser', + unique_together={('name', 'org_id')}, + ), + migrations.AlterUniqueTogether( + name='asset', + unique_together={('org_id', 'hostname')}, + ), + migrations.AlterUniqueTogether( + name='gateway', + unique_together={('name', 'org_id')}, + ), + migrations.AlterUniqueTogether( + name='systemuser', + unique_together={('name', 'org_id')}, + ), + ] diff --git a/apps/assets/migrations/0019_auto_20180816_1320.py b/apps/assets/migrations/0019_auto_20180816_1320.py new file mode 100644 index 000000000..0d468e511 --- /dev/null +++ b/apps/assets/migrations/0019_auto_20180816_1320.py @@ -0,0 +1,22 @@ +# Generated by Django 2.0.7 on 2018-08-16 05:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0018_auto_20180807_1116'), + ] + + operations = [ + migrations.AddField( + model_name='asset', + name='cpu_vcpus', + field=models.IntegerField(null=True, verbose_name='CPU vcpus'), + ), + migrations.AlterUniqueTogether( + name='label', + unique_together={('name', 'value', 'org_id')}, + ), + ] diff --git a/apps/assets/migrations/0020_auto_20180816_1652.py b/apps/assets/migrations/0020_auto_20180816_1652.py new file mode 100644 index 000000000..be5835781 --- /dev/null +++ b/apps/assets/migrations/0020_auto_20180816_1652.py @@ -0,0 +1,48 @@ +# Generated by Django 2.0.7 on 2018-08-16 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0019_auto_20180816_1320'), + ] + + operations = [ + migrations.AlterField( + model_name='adminuser', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='asset', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='domain', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='gateway', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='label', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='node', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='systemuser', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + ] diff --git a/apps/assets/migrations/0021_auto_20180903_1132.py b/apps/assets/migrations/0021_auto_20180903_1132.py new file mode 100644 index 000000000..2475bb4de --- /dev/null +++ b/apps/assets/migrations/0021_auto_20180903_1132.py @@ -0,0 +1,25 @@ +# Generated by Django 2.1 on 2018-09-03 03:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0020_auto_20180816_1652'), + ] + + operations = [ + migrations.AlterModelOptions( + name='domain', + options={'verbose_name': 'Domain'}, + ), + migrations.AlterModelOptions( + name='gateway', + options={'verbose_name': 'Gateway'}, + ), + migrations.AlterModelOptions( + name='node', + options={'verbose_name': 'Node'}, + ), + ] diff --git a/apps/assets/migrations/0022_auto_20181012_1717.py b/apps/assets/migrations/0022_auto_20181012_1717.py new file mode 100644 index 000000000..0a7d18380 --- /dev/null +++ b/apps/assets/migrations/0022_auto_20181012_1717.py @@ -0,0 +1,56 @@ +# Generated by Django 2.1.1 on 2018-10-12 09:17 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0021_auto_20180903_1132'), + ] + + operations = [ + migrations.CreateModel( + name='CommandFilter', + fields=[ + ('org_id', models.CharField(blank=True, default='', max_length=36, verbose_name='Organization')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=64, verbose_name='Name')), + ('is_active', models.BooleanField(default=True, verbose_name='Is active')), + ('comment', models.TextField(blank=True, default='', verbose_name='Comment')), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('created_by', models.CharField(blank=True, default='', max_length=128, verbose_name='Created by')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='CommandFilterRule', + fields=[ + ('org_id', models.CharField(blank=True, default='', max_length=36, verbose_name='Organization')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('type', models.CharField(choices=[('regex', 'Regex'), ('command', 'Command')], default='command', max_length=16, verbose_name='Type')), + ('priority', models.IntegerField(default=50, help_text='1-100, the lower will be match first', validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)], verbose_name='Priority')), + ('content', models.TextField(help_text='One line one command', max_length=1024, verbose_name='Content')), + ('action', models.IntegerField(choices=[(0, 'Deny'), (1, 'Allow')], default=0, verbose_name='Action')), + ('comment', models.CharField(blank=True, default='', max_length=64, verbose_name='Comment')), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('created_by', models.CharField(blank=True, default='', max_length=128, verbose_name='Created by')), + ('filter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rules', to='assets.CommandFilter', verbose_name='Filter')), + ], + options={ + 'ordering': ('priority', 'action'), + }, + ), + migrations.AddField( + model_name='systemuser', + name='cmd_filters', + field=models.ManyToManyField(blank=True, related_name='system_users', to='assets.CommandFilter', verbose_name='Command filter'), + ), + ] diff --git a/apps/assets/migrations/0023_auto_20181016_1650.py b/apps/assets/migrations/0023_auto_20181016_1650.py new file mode 100644 index 000000000..f7ecd1b4f --- /dev/null +++ b/apps/assets/migrations/0023_auto_20181016_1650.py @@ -0,0 +1,28 @@ +# Generated by Django 2.1.1 on 2018-10-16 08:50 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0022_auto_20181012_1717'), + ] + + operations = [ + migrations.AlterModelOptions( + name='commandfilterrule', + options={'ordering': ('-priority', 'action')}, + ), + migrations.AlterField( + model_name='commandfilterrule', + name='priority', + field=models.IntegerField(default=50, help_text='1-100, the higher will be match first', validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)], verbose_name='Priority'), + ), + migrations.AlterField( + model_name='systemuser', + name='priority', + field=models.IntegerField(default=20, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)], verbose_name='Priority'), + ), + ] diff --git a/apps/audits/migrations/0001_initial.py b/apps/audits/migrations/0001_initial.py new file mode 100644 index 000000000..0545c51d6 --- /dev/null +++ b/apps/audits/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-06 04:30 +from __future__ import unicode_literals + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='FTPLog', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('user', models.CharField(max_length=128, verbose_name='User')), + ('remote_addr', models.CharField(blank=True, max_length=15, null=True, verbose_name='Remote addr')), + ('asset', models.CharField(max_length=1024, verbose_name='Asset')), + ('system_user', models.CharField(max_length=128, verbose_name='System user')), + ('operate', models.CharField(max_length=16, verbose_name='Operate')), + ('filename', models.CharField(max_length=1024, verbose_name='Filename')), + ('is_success', models.BooleanField(default=True, verbose_name='Success')), + ('date_start', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/apps/audits/migrations/0002_ftplog_org_id.py b/apps/audits/migrations/0002_ftplog_org_id.py new file mode 100644 index 000000000..18f29e2de --- /dev/null +++ b/apps/audits/migrations/0002_ftplog_org_id.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('audits', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='ftplog', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + ] diff --git a/apps/audits/migrations/0003_auto_20180816_1652.py b/apps/audits/migrations/0003_auto_20180816_1652.py new file mode 100644 index 000000000..8c1ab1086 --- /dev/null +++ b/apps/audits/migrations/0003_auto_20180816_1652.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.7 on 2018-08-16 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('audits', '0002_ftplog_org_id'), + ] + + operations = [ + migrations.AlterField( + model_name='ftplog', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + ] diff --git a/apps/audits/migrations/0004_operatelog_passwordchangelog_userloginlog.py b/apps/audits/migrations/0004_operatelog_passwordchangelog_userloginlog.py new file mode 100644 index 000000000..9f4cd7823 --- /dev/null +++ b/apps/audits/migrations/0004_operatelog_passwordchangelog_userloginlog.py @@ -0,0 +1,51 @@ +# Generated by Django 2.1 on 2018-09-03 03:32 + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0014_auto_20180816_1652'), + ('audits', '0003_auto_20180816_1652'), + ] + + operations = [ + migrations.CreateModel( + name='OperateLog', + fields=[ + ('org_id', models.CharField(blank=True, default='', max_length=36, verbose_name='Organization')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('user', models.CharField(max_length=128, verbose_name='User')), + ('action', models.CharField(choices=[('create', 'Create'), ('update', 'Update'), ('delete', 'Delete')], max_length=16, verbose_name='Action')), + ('resource_type', models.CharField(max_length=64, verbose_name='Resource Type')), + ('resource', models.CharField(max_length=128, verbose_name='Resource')), + ('remote_addr', models.CharField(blank=True, max_length=15, null=True, verbose_name='Remote addr')), + ('datetime', models.DateTimeField(auto_now=True)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='PasswordChangeLog', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('user', models.CharField(max_length=128, verbose_name='User')), + ('change_by', models.CharField(max_length=128, verbose_name='Change by')), + ('remote_addr', models.CharField(blank=True, max_length=15, null=True, verbose_name='Remote addr')), + ('datetime', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='UserLoginLog', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + }, + bases=('users.loginlog',), + ), + ] diff --git a/apps/common/migrations/0001_initial.py b/apps/common/migrations/0001_initial.py new file mode 100644 index 000000000..2b612dc1d --- /dev/null +++ b/apps/common/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-11 05:35 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.manager + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Settings', + 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')), + ('value', models.TextField(verbose_name='Value')), + ('enabled', models.BooleanField(default=True, verbose_name='Enabled')), + ('comment', models.TextField(verbose_name='Comment')), + ], + managers=[ + ('configs', django.db.models.manager.Manager()), + ], + ), + ] diff --git a/apps/common/migrations/0002_auto_20180111_1407.py b/apps/common/migrations/0002_auto_20180111_1407.py new file mode 100644 index 000000000..7c74b9d2b --- /dev/null +++ b/apps/common/migrations/0002_auto_20180111_1407.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-11 06:07 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0001_initial'), + ] + + operations = [ + migrations.RenameModel( + old_name='Settings', + new_name='Setting', + ), + migrations.AlterModelManagers( + name='setting', + managers=[ + ], + ), + migrations.AlterModelTable( + name='setting', + table='settings', + ), + ] diff --git a/apps/common/migrations/0003_setting_category.py b/apps/common/migrations/0003_setting_category.py new file mode 100644 index 000000000..234518287 --- /dev/null +++ b/apps/common/migrations/0003_setting_category.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-22 03:54 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0002_auto_20180111_1407'), + ] + + operations = [ + migrations.AddField( + model_name='setting', + name='category', + field=models.CharField(default='default', max_length=128), + ), + ] diff --git a/apps/common/migrations/0004_setting_encrypted.py b/apps/common/migrations/0004_setting_encrypted.py new file mode 100644 index 000000000..d6862643f --- /dev/null +++ b/apps/common/migrations/0004_setting_encrypted.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1 on 2018-09-03 03:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0003_setting_category'), + ] + + operations = [ + migrations.AddField( + model_name='setting', + name='encrypted', + field=models.BooleanField(default=False), + ), + ] diff --git a/apps/ops/migrations/0002_celerytask.py b/apps/ops/migrations/0002_celerytask.py new file mode 100644 index 000000000..7ae3c14dc --- /dev/null +++ b/apps/ops/migrations/0002_celerytask.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-02 09:45 +from __future__ import unicode_literals + +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('ops', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='CeleryTask', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=1024)), + ('status', models.CharField(choices=[('waiting', 'waiting'), ('running', 'running'), ('finished', 'finished')], max_length=128)), + ('log_path', models.CharField(blank=True, max_length=256, null=True)), + ('date_published', models.DateTimeField(auto_now_add=True)), + ('date_start', models.DateTimeField(null=True)), + ('date_finished', models.DateTimeField(null=True)), + ], + ), + ] diff --git a/apps/orgs/migrations/0001_initial.py b/apps/orgs/migrations/0001_initial.py new file mode 100644 index 000000000..7241ce6a2 --- /dev/null +++ b/apps/orgs/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.conf import settings +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Organization', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=128, unique=True, verbose_name='Name')), + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), + ('comment', models.TextField(blank=True, default='', max_length=128, verbose_name='Comment')), + ('admins', models.ManyToManyField(blank=True, related_name='admin_orgs', to=settings.AUTH_USER_MODEL)), + ('users', models.ManyToManyField(blank=True, related_name='orgs', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/apps/orgs/migrations/0002_auto_20180903_1132.py b/apps/orgs/migrations/0002_auto_20180903_1132.py new file mode 100644 index 000000000..c73f2e7fd --- /dev/null +++ b/apps/orgs/migrations/0002_auto_20180903_1132.py @@ -0,0 +1,17 @@ +# Generated by Django 2.1 on 2018-09-03 03:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('orgs', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='organization', + options={'verbose_name': 'Organization'}, + ), + ] diff --git a/apps/perms/migrations/0002_auto_20171228_0025.py b/apps/perms/migrations/0002_auto_20171228_0025.py new file mode 100644 index 000000000..23a5dcf78 --- /dev/null +++ b/apps/perms/migrations/0002_auto_20171228_0025.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-12-27 16:25 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0002_auto_20171225_1157'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('perms', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='assetpermission', + name='user_groups', + field=models.ManyToManyField(blank=True, related_name='asset_permissions', to='users.UserGroup', verbose_name='User group'), + ), + migrations.AddField( + model_name='assetpermission', + name='users', + field=models.ManyToManyField(blank=True, related_name='asset_permissions', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + ] diff --git a/apps/perms/migrations/0003_auto_20180225_1815.py b/apps/perms/migrations/0003_auto_20180225_1815.py new file mode 100644 index 000000000..46d850f1c --- /dev/null +++ b/apps/perms/migrations/0003_auto_20180225_1815.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-02-25 10:15 +from __future__ import unicode_literals + +import common.utils +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0004_auto_20180125_1218'), + ('assets', '0007_auto_20180225_1815'), + ('perms', '0002_auto_20171228_0025'), + ] + + operations = [ + migrations.CreateModel( + name='NodePermission', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('is_active', models.BooleanField(default=True, verbose_name='Active')), + ('date_expired', models.DateTimeField(default=common.utils.date_expired_default, verbose_name='Date expired')), + ('created_by', models.CharField(blank=True, max_length=128, verbose_name='Created by')), + ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), + ('comment', models.TextField(blank=True, verbose_name='Comment')), + ('node', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='assets.Node', verbose_name='Node')), + ('system_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='assets.SystemUser', verbose_name='System user')), + ('user_group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='users.UserGroup', verbose_name='User group')), + ], + options={ + 'verbose_name': 'Asset permission', + }, + ), + migrations.AlterUniqueTogether( + name='nodepermission', + unique_together=set([('node', 'user_group', 'system_user')]), + ), + ] diff --git a/apps/perms/migrations/0004_auto_20180411_1135.py b/apps/perms/migrations/0004_auto_20180411_1135.py new file mode 100644 index 000000000..182ee7917 --- /dev/null +++ b/apps/perms/migrations/0004_auto_20180411_1135.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-11 03:35 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0013_auto_20180411_1135'), + ('perms', '0003_auto_20180225_1815'), + ] + + operations = [ + migrations.RemoveField( + model_name='assetpermission', + name='asset_groups', + ), + migrations.AddField( + model_name='assetpermission', + name='date_start', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Date start'), + ), + migrations.AddField( + model_name='assetpermission', + name='nodes', + field=models.ManyToManyField(blank=True, related_name='granted_by_permissions', to='assets.Node', verbose_name='Nodes'), + ), + ] diff --git a/apps/perms/migrations/0005_migrate_data_20180411_1144.py b/apps/perms/migrations/0005_migrate_data_20180411_1144.py new file mode 100644 index 000000000..0a013467e --- /dev/null +++ b/apps/perms/migrations/0005_migrate_data_20180411_1144.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-11 03:35 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +def migrate_node_permissions(apps, schema_editor): + node_perm_model = apps.get_model("perms", "NodePermission") + asset_perm_model = apps.get_model("perms", "AssetPermission") + db_alias = schema_editor.connection.alias + for old in node_perm_model.objects.using(db_alias).all(): + perm = asset_perm_model.objects.using(db_alias).create( + name="{}-{}-{}".format( + old.node.value, + old.user_group.name, + old.system_user.name + ), + is_active=old.is_active, + date_expired=old.date_expired, + created_by=old.date_expired, + date_created=old.date_created, + comment=old.comment, + ) + perm.user_groups.add(old.user_group) + perm.nodes.add(old.node) + perm.system_users.add(old.system_user) + + +def migrate_system_assets_relation(apps, schema_editor): + system_user_model = apps.get_model("assets", "SystemUser") + db_alias = schema_editor.connection.alias + for s in system_user_model.objects.using(db_alias).all(): + nodes = list(s.nodes.all()) + s.nodes.set([]) + s.nodes.set(nodes) + + +class Migration(migrations.Migration): + + dependencies = [ + ('perms', '0004_auto_20180411_1135'), + ] + + operations = [ + migrations.RunPython(migrate_node_permissions), + migrations.RunPython(migrate_system_assets_relation), + ] diff --git a/apps/perms/migrations/0006_auto_20180606_1505.py b/apps/perms/migrations/0006_auto_20180606_1505.py new file mode 100644 index 000000000..915769ddb --- /dev/null +++ b/apps/perms/migrations/0006_auto_20180606_1505.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-06-06 07:05 +from __future__ import unicode_literals + +import common.utils +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('perms', '0005_migrate_data_20180411_1144'), + ] + + operations = [ + migrations.AlterField( + model_name='assetpermission', + name='date_expired', + field=models.DateTimeField(db_index=True, default=common.utils.date_expired_default, verbose_name='Date expired'), + ), + migrations.AlterField( + model_name='assetpermission', + name='date_start', + field=models.DateTimeField(db_index=True, default=django.utils.timezone.now, verbose_name='Date start'), + ), + ] diff --git a/apps/perms/migrations/0007_auto_20180807_1116.py b/apps/perms/migrations/0007_auto_20180807_1116.py new file mode 100644 index 000000000..e97a5ec6b --- /dev/null +++ b/apps/perms/migrations/0007_auto_20180807_1116.py @@ -0,0 +1,37 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('perms', '0006_auto_20180606_1505'), + ] + + operations = [ + migrations.AddField( + model_name='assetpermission', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='nodepermission', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AlterField( + model_name='assetpermission', + name='name', + field=models.CharField(max_length=128, verbose_name='Name'), + ), + migrations.AlterUniqueTogether( + name='assetpermission', + unique_together={('org_id', 'name')}, + ), + migrations.AlterUniqueTogether( + name='nodepermission', + unique_together=set(), + ), + + ] diff --git a/apps/perms/migrations/0008_auto_20180816_1652.py b/apps/perms/migrations/0008_auto_20180816_1652.py new file mode 100644 index 000000000..b2567ed60 --- /dev/null +++ b/apps/perms/migrations/0008_auto_20180816_1652.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.7 on 2018-08-16 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('perms', '0007_auto_20180807_1116'), + ] + + operations = [ + migrations.AlterField( + model_name='assetpermission', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='nodepermission', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + ] diff --git a/apps/perms/migrations/0009_auto_20180903_1132.py b/apps/perms/migrations/0009_auto_20180903_1132.py new file mode 100644 index 000000000..5c658fda1 --- /dev/null +++ b/apps/perms/migrations/0009_auto_20180903_1132.py @@ -0,0 +1,17 @@ +# Generated by Django 2.1 on 2018-09-03 03:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('perms', '0008_auto_20180816_1652'), + ] + + operations = [ + migrations.AlterModelOptions( + name='assetpermission', + options={'verbose_name': 'Asset permission'}, + ), + ] diff --git a/apps/terminal/migrations/0002_auto_20171228_0025.py b/apps/terminal/migrations/0002_auto_20171228_0025.py new file mode 100644 index 000000000..15ef50195 --- /dev/null +++ b/apps/terminal/migrations/0002_auto_20171228_0025.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-12-27 16:25 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('terminal', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='session', + name='terminal', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='terminal.Terminal'), + ), + migrations.AddField( + model_name='status', + name='terminal', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='terminal.Terminal'), + ), + migrations.AddField( + model_name='task', + name='terminal', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='terminal.Terminal'), + ), + migrations.AddField( + model_name='terminal', + name='user', + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='terminal', to=settings.AUTH_USER_MODEL, verbose_name='Application User'), + ), + migrations.AlterField( + model_name='terminal', + name='name', + field=models.CharField(max_length=32, verbose_name='Name'), + ), + ] diff --git a/apps/terminal/migrations/0003_auto_20171230_0308.py b/apps/terminal/migrations/0003_auto_20171230_0308.py new file mode 100644 index 000000000..35a8b3138 --- /dev/null +++ b/apps/terminal/migrations/0003_auto_20171230_0308.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-12-29 19:08 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0002_auto_20171228_0025'), + ] + + operations = [ + migrations.AlterField( + model_name='command', + name='asset', + field=models.CharField(db_index=True, max_length=128, verbose_name='Asset'), + ), + migrations.AlterField( + model_name='command', + name='system_user', + field=models.CharField(db_index=True, max_length=64, verbose_name='System user'), + ), + migrations.AlterField( + model_name='command', + name='user', + field=models.CharField(db_index=True, max_length=64, verbose_name='User'), + ), + ] diff --git a/apps/terminal/migrations/0004_session_remote_addr.py b/apps/terminal/migrations/0004_session_remote_addr.py new file mode 100644 index 000000000..d5661c1d7 --- /dev/null +++ b/apps/terminal/migrations/0004_session_remote_addr.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-05 10:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0003_auto_20171230_0308'), + ] + + operations = [ + migrations.AddField( + model_name='session', + name='remote_addr', + field=models.CharField(blank=True, max_length=15, null=True, verbose_name='Remote addr'), + ), + ] diff --git a/apps/terminal/migrations/0005_auto_20180122_1154.py b/apps/terminal/migrations/0005_auto_20180122_1154.py new file mode 100644 index 000000000..4a6b18709 --- /dev/null +++ b/apps/terminal/migrations/0005_auto_20180122_1154.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-22 03:54 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0004_session_remote_addr'), + ] + + operations = [ + migrations.AddField( + model_name='terminal', + name='command_storage', + field=models.CharField(choices=[('default', 'default'), ('elk', 'elk')], default='default', max_length=128, verbose_name='Command storage'), + ), + migrations.AddField( + model_name='terminal', + name='replay_storage', + field=models.CharField(default='default', max_length=128, verbose_name='Replay storage'), + ), + ] diff --git a/apps/terminal/migrations/0006_auto_20180123_1037.py b/apps/terminal/migrations/0006_auto_20180123_1037.py new file mode 100644 index 000000000..1090ac3bf --- /dev/null +++ b/apps/terminal/migrations/0006_auto_20180123_1037.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-23 02:37 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0005_auto_20180122_1154'), + ] + + operations = [ + migrations.AlterField( + model_name='terminal', + name='command_storage', + field=models.CharField(default='default', max_length=128, verbose_name='Command storage'), + ), + ] diff --git a/apps/terminal/migrations/0007_session_date_last_active.py b/apps/terminal/migrations/0007_session_date_last_active.py new file mode 100644 index 000000000..3392f2617 --- /dev/null +++ b/apps/terminal/migrations/0007_session_date_last_active.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-02-27 09:13 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0006_auto_20180123_1037'), + ] + + operations = [ + migrations.AddField( + model_name='session', + name='date_last_active', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='Date last active'), + ), + ] diff --git a/apps/terminal/migrations/0008_auto_20180307_1603.py b/apps/terminal/migrations/0008_auto_20180307_1603.py new file mode 100644 index 000000000..9ef64393c --- /dev/null +++ b/apps/terminal/migrations/0008_auto_20180307_1603.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-07 08:03 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0007_session_date_last_active'), + ] + + operations = [ + migrations.AlterField( + model_name='session', + name='date_start', + field=models.DateTimeField(db_index=True, verbose_name='Date start'), + ), + ] diff --git a/apps/terminal/migrations/0009_auto_20180326_0957.py b/apps/terminal/migrations/0009_auto_20180326_0957.py new file mode 100644 index 000000000..301ab00a2 --- /dev/null +++ b/apps/terminal/migrations/0009_auto_20180326_0957.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-26 01:57 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0008_auto_20180307_1603'), + ] + + operations = [ + migrations.AlterField( + model_name='session', + name='terminal', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='terminal.Terminal'), + ), + migrations.AlterField( + model_name='task', + name='terminal', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='terminal.Terminal'), + ), + ] diff --git a/apps/terminal/migrations/0010_auto_20180423_1140.py b/apps/terminal/migrations/0010_auto_20180423_1140.py new file mode 100644 index 000000000..d365d0c49 --- /dev/null +++ b/apps/terminal/migrations/0010_auto_20180423_1140.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-23 03:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0009_auto_20180326_0957'), + ] + + operations = [ + migrations.AddField( + model_name='session', + name='protocol', + field=models.CharField(choices=[('ssh', 'ssh'), ('rdp', 'rdp')], default='ssh', max_length=8), + ), + migrations.AlterField( + model_name='session', + name='date_start', + field=models.DateTimeField(db_index=True, default=django.utils.timezone.now, verbose_name='Date start'), + ), + ] diff --git a/apps/terminal/migrations/0011_auto_20180807_1116.py b/apps/terminal/migrations/0011_auto_20180807_1116.py new file mode 100644 index 000000000..b65ba0a70 --- /dev/null +++ b/apps/terminal/migrations/0011_auto_20180807_1116.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0010_auto_20180423_1140'), + ] + + operations = [ + migrations.AddField( + model_name='command', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AddField( + model_name='session', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + ] diff --git a/apps/terminal/migrations/0012_auto_20180816_1652.py b/apps/terminal/migrations/0012_auto_20180816_1652.py new file mode 100644 index 000000000..a622f854e --- /dev/null +++ b/apps/terminal/migrations/0012_auto_20180816_1652.py @@ -0,0 +1,23 @@ +# Generated by Django 2.0.7 on 2018-08-16 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('terminal', '0011_auto_20180807_1116'), + ] + + operations = [ + migrations.AlterField( + model_name='command', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + migrations.AlterField( + model_name='session', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + ] diff --git a/apps/users/migrations/0003_auto_20180101_0046.py b/apps/users/migrations/0003_auto_20180101_0046.py new file mode 100644 index 000000000..46a85be54 --- /dev/null +++ b/apps/users/migrations/0003_auto_20180101_0046.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2017-12-31 16:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0002_auto_20171225_1157'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='is_first_login', + field=models.BooleanField(default=True), + ), + ] diff --git a/apps/users/migrations/0004_auto_20180125_1218.py b/apps/users/migrations/0004_auto_20180125_1218.py new file mode 100644 index 000000000..b97f8f6c4 --- /dev/null +++ b/apps/users/migrations/0004_auto_20180125_1218.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-01-25 04:18 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0003_auto_20180101_0046'), + ] + + operations = [ + migrations.AlterField( + model_name='usergroup', + name='created_by', + field=models.CharField(blank=True, max_length=100, null=True), + ), + ] diff --git a/apps/users/migrations/0005_auto_20180306_1804.py b/apps/users/migrations/0005_auto_20180306_1804.py new file mode 100644 index 000000000..417d6b021 --- /dev/null +++ b/apps/users/migrations/0005_auto_20180306_1804.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-03-06 10:04 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0004_auto_20180125_1218'), + ] + + operations = [ + migrations.AlterModelOptions( + name='user', + options={'ordering': ['username'], 'verbose_name': 'User'}, + ), + migrations.AlterModelOptions( + name='usergroup', + options={'ordering': ['name'], 'verbose_name': 'User group'}, + ), + ] diff --git a/apps/users/migrations/0006_auto_20180411_1135.py b/apps/users/migrations/0006_auto_20180411_1135.py new file mode 100644 index 000000000..04844f630 --- /dev/null +++ b/apps/users/migrations/0006_auto_20180411_1135.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-11 03:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0005_auto_20180306_1804'), + ] + + operations = [ + migrations.RenameField( + model_name='user', + old_name='secret_key_otp', + new_name='otp_secret_key', + ), + migrations.RemoveField( + model_name='user', + name='enable_otp', + ), + migrations.AddField( + model_name='user', + name='otp_level', + field=models.SmallIntegerField(choices=[(0, 'Disable'), (1, 'Enable'), (2, 'Force enable')], default=0, verbose_name='Enable OTP'), + ), + ] diff --git a/apps/users/migrations/0007_auto_20180419_1036.py b/apps/users/migrations/0007_auto_20180419_1036.py new file mode 100644 index 000000000..3357cc2a5 --- /dev/null +++ b/apps/users/migrations/0007_auto_20180419_1036.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-19 02:36 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0006_auto_20180411_1135'), + ] + + operations = [ + migrations.RemoveField( + model_name='user', + name='otp_secret_key', + ), + migrations.AddField( + model_name='user', + name='_otp_secret_key', + field=models.CharField(blank=True, max_length=128, null=True), + ), + ] diff --git a/apps/users/migrations/0008_auto_20180425_1516.py b/apps/users/migrations/0008_auto_20180425_1516.py new file mode 100644 index 000000000..43bd38c07 --- /dev/null +++ b/apps/users/migrations/0008_auto_20180425_1516.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-04-25 07:16 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0007_auto_20180419_1036'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='otp_level', + field=models.SmallIntegerField(choices=[(0, 'Disable'), (1, 'Enable'), (2, 'Force enable')], default=0, verbose_name='MFA'), + ), + ] diff --git a/apps/users/migrations/0009_auto_20180517_1537.py b/apps/users/migrations/0009_auto_20180517_1537.py new file mode 100644 index 000000000..7938648f5 --- /dev/null +++ b/apps/users/migrations/0009_auto_20180517_1537.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-05-17 07:37 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0008_auto_20180425_1516'), + ] + + operations = [ + migrations.AlterField( + model_name='usergroup', + name='name', + field=models.CharField(max_length=128, unique=True, verbose_name='Name'), + ), + ] diff --git a/apps/users/migrations/0010_auto_20180606_1505.py b/apps/users/migrations/0010_auto_20180606_1505.py new file mode 100644 index 000000000..bf8eea430 --- /dev/null +++ b/apps/users/migrations/0010_auto_20180606_1505.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-06-06 07:05 +from __future__ import unicode_literals + +import common.utils +from django.db import migrations, models + + +def remove_deleted_group(apps, schema_editor): + db_alias = schema_editor.connection.alias + group_model = apps.get_model("users", "UserGroup") + group_model.objects.using(db_alias).filter(is_discard=True).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0009_auto_20180517_1537'), + ] + + operations = [ + migrations.RunPython( + remove_deleted_group + ), + migrations.RemoveField( + model_name='usergroup', + name='discard_time', + ), + migrations.RemoveField( + model_name='usergroup', + name='is_discard', + ), + migrations.AlterField( + model_name='user', + name='date_expired', + field=models.DateTimeField(blank=True, db_index=True, default=common.utils.date_expired_default, null=True, verbose_name='Date expired'), + ), + ] diff --git a/apps/users/migrations/0011_user_source.py b/apps/users/migrations/0011_user_source.py new file mode 100644 index 000000000..584036cfc --- /dev/null +++ b/apps/users/migrations/0011_user_source.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11 on 2018-06-07 04:58 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0010_auto_20180606_1505'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='source', + field=models.CharField(choices=[('local', 'Local'), ('ldap', 'LDAP/AD')], default='local', max_length=30, verbose_name='Source'), + ), + ] diff --git a/apps/users/migrations/0012_auto_20180710_1641.py b/apps/users/migrations/0012_auto_20180710_1641.py new file mode 100644 index 000000000..ad6628941 --- /dev/null +++ b/apps/users/migrations/0012_auto_20180710_1641.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.13 on 2018-07-10 08:41 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0011_user_source'), + ] + + operations = [ + migrations.AddField( + model_name='loginlog', + name='mfa', + field=models.SmallIntegerField(choices=[(0, 'Disabled'), (1, 'Enabled'), (2, '-')], default=2, verbose_name='MFA'), + ), + migrations.AddField( + model_name='loginlog', + name='reason', + field=models.SmallIntegerField(choices=[(0, '-'), (1, 'Username/password check failed'), (2, 'MFA authentication failed')], default=0, verbose_name='Reason'), + ), + migrations.AddField( + model_name='loginlog', + name='status', + field=models.BooleanField(choices=[(True, 'Success'), (False, 'Failed')], default=True, max_length=2, verbose_name='Status'), + ), + ] diff --git a/apps/users/migrations/0013_auto_20180807_1116.py b/apps/users/migrations/0013_auto_20180807_1116.py new file mode 100644 index 000000000..2b56bc42b --- /dev/null +++ b/apps/users/migrations/0013_auto_20180807_1116.py @@ -0,0 +1,32 @@ +# Generated by Django 2.0.7 on 2018-08-07 03:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0012_auto_20180710_1641'), + ] + + operations = [ + migrations.AddField( + model_name='usergroup', + name='org_id', + field=models.CharField(blank=True, default=None, max_length=36, null=True), + ), + migrations.AlterField( + model_name='user', + name='last_name', + field=models.CharField(blank=True, max_length=150, verbose_name='last name'), + ), + migrations.AlterField( + model_name='usergroup', + name='name', + field=models.CharField(max_length=128, verbose_name='Name'), + ), + migrations.AlterUniqueTogether( + name='usergroup', + unique_together={('org_id', 'name')}, + ), + ] diff --git a/apps/users/migrations/0014_auto_20180816_1652.py b/apps/users/migrations/0014_auto_20180816_1652.py new file mode 100644 index 000000000..89a4308fe --- /dev/null +++ b/apps/users/migrations/0014_auto_20180816_1652.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.7 on 2018-08-16 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0013_auto_20180807_1116'), + ] + + operations = [ + migrations.AlterField( + model_name='usergroup', + name='org_id', + field=models.CharField(blank=True, default='', max_length=36, verbose_name='Organization'), + ), + ] diff --git a/apps/users/migrations/0015_auto_20181105_1112.py b/apps/users/migrations/0015_auto_20181105_1112.py new file mode 100644 index 000000000..b84e9fa97 --- /dev/null +++ b/apps/users/migrations/0015_auto_20181105_1112.py @@ -0,0 +1,23 @@ +# Generated by Django 2.1.1 on 2018-11-05 03:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0014_auto_20180816_1652'), + ] + + operations = [ + migrations.AlterField( + model_name='loginlog', + name='reason', + field=models.SmallIntegerField(choices=[(0, '-'), (1, 'Username/password check failed'), (2, 'MFA authentication failed'), (3, 'Username does not exist')], default=0, verbose_name='Reason'), + ), + migrations.AlterField( + model_name='loginlog', + name='username', + field=models.CharField(max_length=128, verbose_name='Username'), + ), + ] diff --git a/apps/users/migrations/0016_auto_20181109_1505.py b/apps/users/migrations/0016_auto_20181109_1505.py new file mode 100644 index 000000000..c1b8c3bf6 --- /dev/null +++ b/apps/users/migrations/0016_auto_20181109_1505.py @@ -0,0 +1,18 @@ +# Generated by Django 2.1.1 on 2018-11-09 07:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0015_auto_20181105_1112'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='source', + field=models.CharField(choices=[('local', 'Local'), ('ldap', 'LDAP/AD'), ('openid', 'OpenID')], default='local', max_length=30, verbose_name='Source'), + ), + ] diff --git a/build.sh b/build.sh new file mode 100644 index 000000000..9350c1616 --- /dev/null +++ b/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# + +version=$1 +if [ -z "$version" ];then + echo "Usage: sh build version" + exit +fi + + +docker build -t jumpserver/jumpserver:$version . diff --git a/config_docker.py b/config_docker.py new file mode 100644 index 000000000..ca322b4b8 --- /dev/null +++ b/config_docker.py @@ -0,0 +1,205 @@ +""" + jumpserver.config + ~~~~~~~~~~~~~~~~~ + + Jumpserver project setting file + + :copyright: (c) 2014-2017 by Jumpserver Team + :license: GPL v2, see LICENSE for more details. +""" +import os +import json + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class Config: + # Use it to encrypt or decrypt data + # SECURITY WARNING: keep the secret key used in production secret! + SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x' + + # How many line display every page if using django pager, default 25 + DISPLAY_PER_PAGE = 25 + + # It's used to identify your site, When we send a create mail to user, we only know login url is /login/ + # But we should know the absolute url like: http://jms.jumpserver.org/login/, so SITE_URL is + # HTTP_PROTOCOL://HOST[:PORT] + SITE_URL = 'http://localhost' + + # Django security setting, if your disable debug model, you should setting that + ALLOWED_HOSTS = ['*'] + + # Development env open this, when error occur display the full process track, Production disable it + DEBUG = True + + # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/ + LOG_LEVEL = 'DEBUG' + LOG_DIR = os.path.join(BASE_DIR, 'logs') + + # Database setting, Support sqlite3, mysql, postgres .... + # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases + + # SQLite setting: + DB_ENGINE = 'sqlite3' + DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3') + + # MySQL or postgres setting like: + # DB_ENGINE = 'mysql' + # DB_HOST = '127.0.0.1' + # DB_PORT = 3306 + # DB_USER = 'root' + # DB_PASSWORD = '' + # DB_NAME = 'jumpserver' + + # When Django start it will bind this host and port + # ./manage.py runserver 127.0.0.1:8080 + HTTP_BIND_HOST = '0.0.0.0' + HTTP_LISTEN_PORT = 8080 + + # Use Redis as broker for celery and web socket + REDIS_HOST = '127.0.0.1' + REDIS_PORT = 6379 + REDIS_PASSWORD = '' + BROKER_URL = 'redis://%(password)s%(host)s:%(port)s/3' % { + 'password': REDIS_PASSWORD, + 'host': REDIS_HOST, + 'port': REDIS_PORT, + } + + # Api token expiration when create, Jumpserver refresh time when request arrive + TOKEN_EXPIRATION = 3600 + + # Session and csrf domain settings + SESSION_COOKIE_AGE = 3600*24 + + # Email SMTP setting, we only support smtp send mail + EMAIL_HOST = 'smtp.163.com' + EMAIL_PORT = 25 + EMAIL_HOST_USER = '' + EMAIL_HOST_PASSWORD = '' # Caution: Some SMTP server using `Authorization Code` except password + EMAIL_USE_SSL = True if EMAIL_PORT == 465 else False + EMAIL_USE_TLS = True if EMAIL_PORT == 587 else False + EMAIL_SUBJECT_PREFIX = '[Jumpserver] ' + + CAPTCHA_TEST_MODE = False + + # You can set jumpserver usage url here, that when user submit wizard redirect to + USER_GUIDE_URL = '' + + # LDAP Auth settings + AUTH_LDAP = False + AUTH_LDAP_SERVER_URI = 'ldap://localhost:389' + AUTH_LDAP_BIND_DN = 'cn=admin,dc=jumpserver,dc=org' + AUTH_LDAP_BIND_PASSWORD = '' + AUTH_LDAP_SEARCH_OU = 'ou=tech,dc=jumpserver,dc=org' + AUTH_LDAP_SEARCH_FILTER = '(cn=%(user)s)' + AUTH_LDAP_USER_ATTR_MAP = { + "username": "cn", + "name": "sn", + "email": "mail" + } + AUTH_LDAP_START_TLS = False + + def __init__(self): + pass + + def __getattr__(self, item): + return None + + +class DockerConfig(Config): + """ + 配置文件默认从环境变量里读取,如果没有会使用后面的默认值 + """ + # 用来加密数据的key, 可以修改,但务必保存好这个字符串,丢失它后加密会无法解开 + # SECRET_KEY = "SOME_KEY_NO_ONE_GUESS" + SECRET_KEY = os.environ.get("SECRET_KEY") or "MD923lkSDi8213kl),3()&^%aM2q1mz;223lkM0o1" + # 访问的域名, 格式 http[s]://域名[:端口号] + # SITE_URL = "http://jumpserver.fit2cloud.com" + SITE_URL = os.environ.get("SITE_URL") or 'http://localhost' + # 是否开启DEBUG模式 + # DEBUG = True, or DEBUG = False, + DEBUG = bool(os.environ.get("DEBUG")) if os.environ.get("DEBUG") else False + # 日志级别, 默认 INFO + # LOG_LEVEL = WARN + LOG_LEVEL = os.environ.get("LOG_LEVEL") or "INFO" + # 使用的数据库类型,支持 SQLite, MySQL, PostgreSQL, Oracle + # 数据库设置, 如果使用外部的mysql请设置,否则不要改动 + + # DB_ENGINE = "oracle" | "postgre" | "mysql" | "sqlite3" + DB_ENGINE = os.environ.get("DB_ENGINE") or 'mysql' + # DB_HOST = "192.168.1.1" + DB_HOST = os.environ.get("DB_HOST") or 'mysql' + # 端口号 + # DB_PORT = 3306 + DB_PORT = os.environ.get("DB_PORT") or 3306 + # 数据库账号 + # DB_USER = "jumpserver" + DB_USER = os.environ.get("DB_USER") or 'root' + # 数据库密码 + # DB_PASSWORD = "db_jumpserver_password" + DB_PASSWORD = os.environ.get("DB_PASSWORD") or '' + # 数据库名称 + # DB_NAME = "jumpserver" + DB_NAME = os.environ.get("DB_NAME") or 'jumpserver' + + # Redis配置,如果不使用外部redis不要改动 + # Redis地址 + # REDIS_HOST = "192.168.1.1" + REDIS_HOST = os.environ.get("REDIS_HOST") or 'redis' + # Redis端口号 + # REDIS_PORT = 6380 + REDIS_PORT = os.environ.get("REDIS_PORT") or 6379 + # Redis密码 + # REDIS_PASSWORD = "redis_password" + REDIS_PASSWORD = os.environ.get("REDIS_PASSWORD") or '' + + # 邮箱SMTP设置, 可以参考各运营商配置文档 + # SMTP服务器地址 + # EMAIL_HOST = 'smtp.qq.com' + EMAIL_HOST = 'smtp.163.com' + # SMTP端口号 + # EMAIL_PORT = 465 + EMAIL_PORT = 25 + # SMTP连接邮箱地址 + # EMAIL_HOST_USER = "noreply@jumpserver.org" + EMAIL_HOST_USER = '' + # SMTP邮箱的密码, 注意 一些运营商通常要求使用授权码来发SMTP邮件 + EMAIL_HOST_PASSWORD = '' + # 是否启用SSL, 如果端口号是 465通常设置为True + # EMAIL_USE_SSL = True + EMAIL_USE_SSL = True if EMAIL_PORT == 465 else False + # 是否启用TLS, 如果端口号是 587通常设置为True + # EMAIL_USE_TLS = True + EMAIL_USE_TLS = True if EMAIL_PORT == 587 else False + # 邮件的主题前缀 + EMAIL_SUBJECT_PREFIX = '[Jumpserver] ' + + # 认证启用LDAP的设置 + # 是否启用LDAP,默认不启用 + # AUTH_LDAP = True + AUTH_LDAP = False + # LDAP的地址 + AUTH_LDAP_SERVER_URI = 'ldap://localhost:389' + # LDAP绑定的查询账户 + AUTH_LDAP_BIND_DN = 'cn=admin,dc=jumpserver,dc=org' + # 密码 + AUTH_LDAP_BIND_PASSWORD = '' + # 用户所在的ou + AUTH_LDAP_SEARCH_OU = 'ou=tech,dc=jumpserver,dc=org' + # 查询时使用的过滤器, 仅可以修改前面的表示符,可能是cn或uid, 也就是登录用户名所在字段 + # AUTH_LDAP_SEARCH_FILTER = '(uid=%(user)s)' + AUTH_LDAP_SEARCH_FILTER = '(cn=%(user)s)' + # LDAP用户信息映射到Jumpserver + AUTH_LDAP_USER_ATTR_MAP = { + "username": "cn", # 将LDAP信息中的 `cn` 字段映射为 `username(用户名)` + "name": "sn", # 将 LDAP信息中的 `sn` 映射为 `name(姓名)` + "email": "mail" # 将 LDAP信息中的 `mail` 映射为 `email(邮箱地址)` + } + # 是否启用TLS加密 + AUTH_LDAP_START_TLS = False + + +# Default using Config settings, you can write if/else for different env +config = DockerConfig() + diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 000000000..d48d83cb1 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,11 @@ +#!/bin/bash +function cleanup() +{ + local pids=`jobs -p` + if [[ "$pids" != "" ]]; then + kill $pids >/dev/null 2>/dev/null + fi +} + +trap cleanup EXIT +python jms start all