Merge branch 'dev' of bitbucket.org:jumpserver/core into dev
|
@ -30,4 +30,4 @@ celerybeat.pid
|
|||
django.db
|
||||
celerybeat-schedule.db
|
||||
data/static
|
||||
_build/
|
||||
docs/_build/
|
||||
|
|
97
README.md
|
@ -18,102 +18,31 @@ Jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点
|
|||
|
||||
----
|
||||
|
||||
### Feature 功能
|
||||
- Auth 统一认证
|
||||
- CMDB 资产管理
|
||||
- Perm 统一授权
|
||||
- Audit 审计
|
||||
- LDAP AUTH 支持LDAP认证
|
||||
### 功能
|
||||
- 统一认证
|
||||
- 资产管理
|
||||
- 统一授权
|
||||
- 审计
|
||||
- 支持LDAP认证
|
||||
- Web terminal
|
||||
- SSH Server
|
||||
- 支持Windows RDP
|
||||
|
||||
### 文档
|
||||
[访问](http://docs.jumpserver.org)
|
||||
|
||||
|
||||
### Environment 环境
|
||||
* Python 3.6
|
||||
* Django 1.11
|
||||
|
||||
### 快速启动
|
||||
|
||||
```
|
||||
$ docker run -p 8080:80 -p 2222:2222 jumpserver/jumpserver:0.5.0-beta2
|
||||
```
|
||||
更多见 [Dockerfile](https://github.com/jumpserver/Dockerfile.git)
|
||||
|
||||
### 详细安装步骤
|
||||
|
||||
[文档](https://github.com/jumpserver/jumpserver/wiki/v0.5.0-%E5%9F%BA%E4%BA%8E-CentOS7)
|
||||
|
||||
|
||||
### Usage 使用
|
||||
1. Visit http://$HOST:8080 (访问 http://你的主机IP:8080 来访问 Jumpserver)
|
||||
|
||||
2. Click left navigation visit Applications-Terminal and accept coco and luna register
|
||||
(点击左侧 应用程序接受 Coco注册)
|
||||
|
||||
3. Click Assets-Admin user, Create admin user
|
||||
(添加 管理用户)
|
||||
|
||||
4. Click Assets-System user, Create system user
|
||||
(添加 系统用户)
|
||||
|
||||
5. Click Assets-Asset, Add a asset
|
||||
(添加 资产)
|
||||
|
||||
6. Click Perms-Asset permission, Add a perm rule
|
||||
(添加授权规则,授权给admin)
|
||||
|
||||
7. Connect ssh server coco (连接 ssh server coco)
|
||||
|
||||
ssh -p2222 $USER@$Host
|
||||
|
||||
|
||||
|
||||
### Snapshot 截图
|
||||
|
||||
https://github.com/jumpserver/jumpserver/issues/438
|
||||
|
||||
### 截图
|
||||
[访问](http://docs.jumpserver.org/zh/latest/snapshot.html)
|
||||
|
||||
### Demo
|
||||
|
||||
demo使用了开发者模式,并发只能为1
|
||||
|
||||
- Jumpserver: [访问](http://demo.jumpserver.org:8080) 账号: admin 密码: admin
|
||||
|
||||
- Coco: ssh -p 2222 admin@demo.jumpserver.org 密码: admin
|
||||
|
||||
### ROADMAP
|
||||
|
||||
参见 https://github.com/jumpserver/jumpserver/milestone/2
|
||||
[访问](http://demo.jumpserver.org)
|
||||
|
||||
### SDK
|
||||
|
||||
- python: https://github.com/jumpserver/jumpserver-python-sdk
|
||||
- java: https://github.com/KaiJunYan/jumpserver-java-sdk.git
|
||||
|
||||
### Docs 开发者文档
|
||||
|
||||
|
||||
* [Project structure 项目结构描述](https://github.com/jumpserver/jumpserver/blob/dev/docs/project_structure.md)
|
||||
* [Code style Python代码规范](https://github.com/jumpserver/jumpserver/blob/dev/docs/python_style_guide.md)
|
||||
* [Api style API设计规范](https://github.com/jumpserver/jumpserver/blob/dev/docs/api_style_guide.md)
|
||||
|
||||
### Contributor 贡献者
|
||||
#### 0.4.0
|
||||
- ibuler <广宏伟>
|
||||
- 小彧 <李磊> Django资深开发者,为users模块贡献了很多代码
|
||||
- sofia <周小侠> 资深前端工程师, luna前端代码贡献者和现在维护者
|
||||
- liuz <刘正> 全栈工程师, 编写了luna大部分代码
|
||||
- jiaxiangkong <陈尚委> Jumpserver测试运营
|
||||
|
||||
#### 0.3.2
|
||||
- halcyon <王墉> DevOps 资深开发者, 0.3.2 核心开发者之一
|
||||
- yumaojun03 <喻茂峻> DevOps 资深开发者,jperm开发者,擅长Python, Go以及PAAS平台开发
|
||||
- kelianchun <柯连春> DevOps 资产开发者,fix了很多connect.py bug
|
||||
|
||||
### 开发者群
|
||||
如果你为Jumpserver贡献过代码,请加一下群 (需要验证一下你的github id)
|
||||
|
||||
群号: 489385245
|
||||
|
||||
### License & Copyright
|
||||
Copyright (c) 2014-2017 Beijing Duizhan Tech, Inc., All rights reserved.
|
||||
|
|
|
@ -34,8 +34,10 @@ class AssetCreateForm(forms.ModelForm):
|
|||
'hostname': '* required',
|
||||
'ip': '* required',
|
||||
'port': '* required',
|
||||
'admin_user': _('Admin user is a privilege user exist on this asset,'
|
||||
'admin_user': _(
|
||||
'Admin user is a privilege user exist on this asset,'
|
||||
'Example: root or other NOPASSWD sudo privilege user'
|
||||
'If asset not support ansible, set any one'
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -67,6 +69,7 @@ class AssetUpdateForm(forms.ModelForm):
|
|||
'admin_user': _(
|
||||
'Admin user is a privilege user exist on this asset,'
|
||||
'Example: root or other NOPASSWD sudo privilege user'
|
||||
'If asset not support ansible, set any one'
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -343,7 +343,11 @@ def push_system_user_util(system_users, assets, task_name):
|
|||
from ops.utils import update_or_create_ansible_task
|
||||
tasks = []
|
||||
for system_user in system_users:
|
||||
if system_user.is_need_push():
|
||||
if not system_user.is_need_push():
|
||||
msg = "push system user `{}` passed, may be not auto push or ssh " \
|
||||
"protocol is not ssh".format(system_user.name)
|
||||
logger.info(msg)
|
||||
continue
|
||||
tasks.extend(get_push_system_user_tasks(system_user))
|
||||
|
||||
if not tasks:
|
||||
|
@ -376,6 +380,12 @@ def push_system_user_to_node(system_user, node):
|
|||
|
||||
@shared_task
|
||||
def push_system_user_related_nodes(system_user):
|
||||
if not system_user.is_need_push():
|
||||
msg = "push system user `{}` passed, may be not auto push or ssh " \
|
||||
"protocol is not ssh".format(system_user.name)
|
||||
logger.info(msg)
|
||||
return
|
||||
|
||||
nodes = system_user.nodes.all()
|
||||
for node in nodes:
|
||||
push_system_user_to_node(system_user, node)
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
<table class="table">
|
||||
<tbody>
|
||||
<tr class="no-borders-tr">
|
||||
<td width="50%">{% trans 'Push system user manually' %}:</td>
|
||||
<td width="50%">{% trans 'Push system user now' %}:</td>
|
||||
<td>
|
||||
<span style="float: right">
|
||||
<button type="button" class="btn btn-primary btn-xs btn-push" style="width: 54px">{% trans 'Push' %}</button>
|
||||
|
|
|
@ -131,7 +131,8 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr class="no-borders-tr">
|
||||
<td width="50%">{% trans 'Push system user manually' %}:</td>
|
||||
{% if system_user.auto_push %}
|
||||
<td width="50%">{% trans 'Push system user now' %}:</td>
|
||||
<td>
|
||||
<span style="float: right">
|
||||
<button type="button" class="btn btn-primary btn-xs btn-push" style="width: 54px">{% trans 'Push' %}</button>
|
||||
|
@ -139,6 +140,7 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
{% endif %}
|
||||
<td width="50%">{% trans 'Test assets connective' %}:</td>
|
||||
<td>
|
||||
<span style="float: right">
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Jumpserver 0.3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-07 11:54+0800\n"
|
||||
"POT-Creation-Date: 2018-03-07 21:18+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
|
||||
|
@ -21,40 +21,42 @@ msgstr ""
|
|||
msgid "New node {}"
|
||||
msgstr "新节点 {}"
|
||||
|
||||
#: assets/forms/asset.py:23 assets/forms/asset.py:52 assets/forms/user.py:125
|
||||
#: assets/forms/asset.py:23 assets/forms/asset.py:54 assets/forms/user.py:125
|
||||
#: assets/models/asset.py:53 assets/models/user.py:218
|
||||
#: assets/templates/assets/asset_detail.html:181
|
||||
#: assets/templates/assets/asset_detail.html:189
|
||||
#: assets/templates/assets/system_user_detail.html:164
|
||||
#: assets/templates/assets/system_user_detail.html:166
|
||||
msgid "Nodes"
|
||||
msgstr "节点管理"
|
||||
|
||||
#: assets/forms/asset.py:26 assets/forms/asset.py:55 assets/forms/asset.py:90
|
||||
#: assets/forms/asset.py:94 assets/models/asset.py:57
|
||||
#: assets/forms/asset.py:26 assets/forms/asset.py:57 assets/forms/asset.py:93
|
||||
#: assets/forms/asset.py:97 assets/models/asset.py:57
|
||||
#: assets/models/cluster.py:19 assets/models/user.py:187
|
||||
#: assets/templates/assets/asset_detail.html:73 templates/_nav.html:24
|
||||
msgid "Admin user"
|
||||
msgstr "管理用户"
|
||||
|
||||
#: assets/forms/asset.py:29 assets/forms/asset.py:58 assets/models/asset.py:81
|
||||
#: assets/forms/asset.py:29 assets/forms/asset.py:60 assets/models/asset.py:81
|
||||
#: assets/templates/assets/asset_create.html:32
|
||||
#: assets/templates/assets/asset_detail.html:218
|
||||
#: assets/templates/assets/asset_update.html:37 templates/_nav.html:26
|
||||
msgid "Labels"
|
||||
msgstr "标签管理"
|
||||
|
||||
#: assets/forms/asset.py:37 assets/forms/asset.py:68
|
||||
#: assets/forms/asset.py:38 assets/forms/asset.py:70
|
||||
msgid ""
|
||||
"Admin user is a privilege user exist on this asset,Example: root or other "
|
||||
"NOPASSWD sudo privilege user"
|
||||
msgstr "管理用户是资产上已经存在的特权用户,如 root或者其它有NOPASSWD的用户"
|
||||
"NOPASSWD sudo privilege userIf asset not support ansible, set any one"
|
||||
msgstr ""
|
||||
"管理用户是资产上已经存在的特权用户,如 root或者其它有NOPASSWD的用户, 如果资产"
|
||||
"不支持ansible, 任意设置一个即可"
|
||||
|
||||
#: assets/forms/asset.py:77 assets/forms/asset.py:81 assets/forms/label.py:15
|
||||
#: assets/forms/asset.py:80 assets/forms/asset.py:84 assets/forms/label.py:15
|
||||
#: perms/templates/perms/asset_permission_asset.html:88 users/forms.py:242
|
||||
msgid "Select assets"
|
||||
msgstr "选择资产"
|
||||
|
||||
#: assets/forms/asset.py:86 assets/models/asset.py:52
|
||||
#: assets/forms/asset.py:89 assets/models/asset.py:52
|
||||
#: assets/templates/assets/admin_user_assets.html:53
|
||||
#: assets/templates/assets/asset_detail.html:69
|
||||
#: assets/templates/assets/system_user_asset.html:51
|
||||
|
@ -62,11 +64,11 @@ msgstr "选择资产"
|
|||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: assets/forms/asset.py:106 assets/templates/assets/asset_create.html:36
|
||||
#: assets/forms/asset.py:109 assets/templates/assets/asset_create.html:36
|
||||
msgid "Select labels"
|
||||
msgstr "选择标签"
|
||||
|
||||
#: assets/forms/asset.py:109 assets/templates/assets/admin_user_detail.html:91
|
||||
#: assets/forms/asset.py:112 assets/templates/assets/admin_user_detail.html:91
|
||||
msgid "Select nodes"
|
||||
msgstr "选择节点"
|
||||
|
||||
|
@ -454,11 +456,11 @@ msgstr "测试系统用户可连接性: {}"
|
|||
msgid "test system user connectability period: {}"
|
||||
msgstr "测试系统用户可连接性: {}"
|
||||
|
||||
#: assets/tasks.py:365
|
||||
#: assets/tasks.py:369
|
||||
msgid "Push system user to node: {} => {}"
|
||||
msgstr "推送系统用户到节点: {}->{}"
|
||||
|
||||
#: assets/tasks.py:397
|
||||
#: assets/tasks.py:407
|
||||
msgid "Push system users to node: {}"
|
||||
msgstr "推送系统用户到节点: {}"
|
||||
|
||||
|
@ -748,7 +750,7 @@ msgstr "测试可连接性"
|
|||
#: assets/templates/assets/admin_user_assets.html:75
|
||||
#: assets/templates/assets/asset_detail.html:170
|
||||
#: assets/templates/assets/system_user_asset.html:81
|
||||
#: assets/templates/assets/system_user_detail.html:145
|
||||
#: assets/templates/assets/system_user_detail.html:147
|
||||
msgid "Test"
|
||||
msgstr "测试"
|
||||
|
||||
|
@ -763,7 +765,7 @@ msgstr "替换资产的管理员"
|
|||
#: assets/templates/assets/admin_user_detail.html:100
|
||||
#: assets/templates/assets/asset_detail.html:198
|
||||
#: assets/templates/assets/asset_list.html:541
|
||||
#: assets/templates/assets/system_user_detail.html:181
|
||||
#: assets/templates/assets/system_user_detail.html:183
|
||||
#: assets/templates/assets/system_user_list.html:135 templates/_modal.html:16
|
||||
#: terminal/templates/terminal/session_detail.html:108
|
||||
#: users/templates/users/user_detail.html:339
|
||||
|
@ -936,27 +938,27 @@ msgid "Assets of "
|
|||
msgstr "资产"
|
||||
|
||||
#: assets/templates/assets/system_user_asset.html:70
|
||||
#: assets/templates/assets/system_user_detail.html:134
|
||||
msgid "Push system user manually"
|
||||
msgstr "手动推送系统"
|
||||
#: assets/templates/assets/system_user_detail.html:135
|
||||
msgid "Push system user now"
|
||||
msgstr "立刻推送系统"
|
||||
|
||||
#: assets/templates/assets/system_user_asset.html:73
|
||||
#: assets/templates/assets/system_user_detail.html:137
|
||||
#: assets/templates/assets/system_user_detail.html:138
|
||||
msgid "Push"
|
||||
msgstr "推送"
|
||||
|
||||
#: assets/templates/assets/system_user_asset.html:78
|
||||
#: assets/templates/assets/system_user_detail.html:142
|
||||
#: assets/templates/assets/system_user_detail.html:144
|
||||
msgid "Test assets connective"
|
||||
msgstr "测试资产可连接性"
|
||||
|
||||
#: assets/templates/assets/system_user_asset.html:147
|
||||
#: assets/templates/assets/system_user_detail.html:301
|
||||
#: assets/templates/assets/system_user_detail.html:303
|
||||
msgid "Task has been send, Go to ops task list seen result"
|
||||
msgstr "任务已下发,查看ops任务列表"
|
||||
|
||||
#: assets/templates/assets/system_user_asset.html:159
|
||||
#: assets/templates/assets/system_user_detail.html:313
|
||||
#: assets/templates/assets/system_user_detail.html:315
|
||||
msgid "Task has been send, seen left assets status"
|
||||
msgstr "任务已下发,查看左侧资产状态"
|
||||
|
||||
|
@ -968,7 +970,7 @@ msgstr "家目录"
|
|||
msgid "Uid"
|
||||
msgstr "Uid"
|
||||
|
||||
#: assets/templates/assets/system_user_detail.html:172
|
||||
#: assets/templates/assets/system_user_detail.html:174
|
||||
msgid "Add to node"
|
||||
msgstr "添加到节点"
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
</a>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a class="count-info" href="http://jumpserver.readthedocs.io/" target="_blank">
|
||||
<a class="count-info" href="http://docs.jumpserver.org/" target="_blank">
|
||||
<span class="m-r-sm text-muted welcome-message">{% trans 'Docs' %}</span>
|
||||
</a>
|
||||
</li>
|
||||
|
|
|
@ -127,7 +127,7 @@ class Session(models.Model):
|
|||
is_finished = models.BooleanField(default=False)
|
||||
has_replay = models.BooleanField(default=False, verbose_name=_("Replay"))
|
||||
has_command = models.BooleanField(default=False, verbose_name=_("Command"))
|
||||
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE)
|
||||
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.SET_NULL)
|
||||
date_last_active = models.DateTimeField(verbose_name=_("Date last active"), default=timezone.now)
|
||||
date_start = models.DateTimeField(verbose_name=_("Date start"), db_index=True)
|
||||
date_end = models.DateTimeField(verbose_name=_("Date end"), null=True)
|
||||
|
@ -148,7 +148,7 @@ class Task(models.Model):
|
|||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||
name = models.CharField(max_length=128, choices=NAME_CHOICES, verbose_name=_("Name"))
|
||||
args = models.CharField(max_length=1024, verbose_name=_("Args"))
|
||||
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.CASCADE)
|
||||
terminal = models.ForeignKey(Terminal, null=True, on_delete=models.SET_NULL)
|
||||
is_finished = models.BooleanField(default=False)
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
date_finished = models.DateTimeField(null=True)
|
||||
|
|
|
@ -31,6 +31,6 @@ def delete_terminal_status_period():
|
|||
def clean_orphan_session():
|
||||
active_sessions = Session.objects.filter(is_finished=False)
|
||||
for session in active_sessions:
|
||||
if not session.terminal.is_active:
|
||||
if not session.terminal or not session.terminal.is_active:
|
||||
session.is_finished = True
|
||||
session.save()
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11 on 2017-12-25 03:57
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='email',
|
||||
field=models.EmailField(max_length=128, unique=True, verbose_name='Email'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='name',
|
||||
field=models.CharField(max_length=128, verbose_name='Name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='username',
|
||||
field=models.CharField(max_length=128, unique=True, verbose_name='Username'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='wechat',
|
||||
field=models.CharField(blank=True, max_length=128, verbose_name='Wechat'),
|
||||
),
|
||||
]
|
After Width: | Height: | Size: 335 KiB |
After Width: | Height: | Size: 416 KiB |
After Width: | Height: | Size: 410 KiB |
After Width: | Height: | Size: 441 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 215 KiB |
|
@ -1,2 +1,12 @@
|
|||
资产管理模块
|
||||
=============
|
||||
|
||||
这里介绍资产管理模块功能。
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
asset_list
|
||||
asset_admin_user
|
||||
asset_system_user
|
||||
asset_label
|
|
@ -6,5 +6,10 @@
|
|||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
admin_instruction
|
||||
admin_user
|
||||
admin_asset
|
||||
admin_permission
|
||||
admin_work_center
|
||||
admin_session
|
||||
admin_system_settings
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
简介
|
||||
============
|
||||
架构说明
|
||||
=================
|
||||
|
||||
Jumpserver是混合云下更好用的堡垒机, 分布式架构设计无限扩展,轻松对接混合云资产,支持使用云存储(AWS S3, ES等)存储录像、命令
|
||||
|
||||
Jumpserver颠覆传统堡垒机, 无主机和并发数量限制,支持水平扩容,FIT2CLOUD提供完备的商业服务支持,用户无后顾之忧
|
||||
|
||||
Jumpserver拥有极致的用户体验, 极致UI体验,容器化的部署方式,部署过程方便快捷,可持续升级
|
||||
.. image:: _static/img/structure.png
|
||||
:alt: 组件架构图
|
||||
|
||||
|
||||
组件说明
|
||||
++++++++++++++++++++++++
|
||||
=================
|
||||
|
||||
Jumpserver
|
||||
```````````
|
||||
|
@ -45,7 +42,3 @@ Jumpserver API Python SDK,Coco目前使用该SDK与Jumpserver API交互
|
|||
`Github <https://github.com/jumpserver/jumpserver-python-sdk.git>`__
|
||||
|
||||
|
||||
组件架构图
|
||||
++++++++++++++++++++++++
|
||||
.. image:: _static/img/structure.png
|
||||
:alt: 组件架构图
|
|
@ -0,0 +1,9 @@
|
|||
权限管理模块
|
||||
=============
|
||||
|
||||
这里介绍权限管理功能。
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
permission_asset_authorized
|
|
@ -0,0 +1,13 @@
|
|||
会话管理模块
|
||||
==============
|
||||
|
||||
这里介绍会话管理功能。
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
session_history
|
||||
session_online
|
||||
session_command
|
||||
session_web_terminal
|
||||
session_terminal
|
|
@ -0,0 +1,41 @@
|
|||
系统设置
|
||||
=============
|
||||
|
||||
这里介绍系统设置的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_system_settings:
|
||||
|
||||
查看系统设置
|
||||
`````````````
|
||||
|
||||
点击页面左侧“系统设置”按钮,进入系统设置页面,产看基本设置、邮件设置、LDAP 设置和终端设置等内容。
|
||||
|
||||
.. _basic_settings:
|
||||
|
||||
基本设置
|
||||
`````````
|
||||
|
||||
点击页面上边的“基本设置“ TAB ,进入基本设置页面,编辑当前站点 URL、用户想到 URL、Email 主题前缀等信息,点击“提交”按钮,基本设置完成。
|
||||
|
||||
.. _email_settings:
|
||||
|
||||
邮件设置
|
||||
`````````
|
||||
|
||||
点击页面上边的“邮件设置” TAB ,进入邮件设置页面,编辑 SMTP 主机、SMTP 端口、SMTP 账号、SMTP 密码和使用 SSL 或者 TSL 等信息,点击“测试连接”按钮,测试是否正确设置,点击“提交”按钮,邮件设置完成。
|
||||
|
||||
.. _ladp_settings:
|
||||
|
||||
LDAP 设置
|
||||
````````````
|
||||
|
||||
点击页面上边的“ LDAP 设置” TAB ,进入 LDAP 设置页面,编辑 LDAP 地址、DN、用户 OU、用户过滤器、LDAP 属性映射和是否使用 SSL、是否启用 LDAP 认证等信息,点击“测试连接”按钮,测试是否正确设置,点击“提交”按钮,完成 LDAP 设置。
|
||||
|
||||
.. _terminal_settings:
|
||||
|
||||
终端设置
|
||||
````````````
|
||||
|
||||
点击页面上边的“终端设置” TAB ,进入终端设置页面,编辑终端信息,点击“提交”按钮,终端设置完成。
|
|
@ -1,51 +1,11 @@
|
|||
用户管理
|
||||
========
|
||||
用户管理模块
|
||||
=============
|
||||
|
||||
这里介绍用户管理模块的功能。
|
||||
这里介绍用户管理功能。
|
||||
|
||||
点击页面左侧“用户列表”菜单下的“用户列表,进入用户列表页面。
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _create_user:
|
||||
|
||||
创建用户
|
||||
````````
|
||||
|
||||
点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
|
||||
|
||||
|
||||
.. _update_user:
|
||||
|
||||
更新用户
|
||||
````````
|
||||
|
||||
点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
|
||||
|
||||
.. _delete_user:
|
||||
|
||||
删除用户
|
||||
````````
|
||||
|
||||
点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
|
||||
|
||||
.. _export_user:
|
||||
|
||||
导出用户
|
||||
````````
|
||||
|
||||
选中用户,点击右上角的“导出”按钮,导出用户完成。
|
||||
|
||||
.. _inport_user:
|
||||
|
||||
导入用户
|
||||
````````
|
||||
|
||||
点击右上角的“导入”按钮,弹出导入对话框,选择要导入的CSV格式文件,点击“确认”按钮,导入用户完成。
|
||||
|
||||
.. _batch_operation:
|
||||
|
||||
批量操作
|
||||
````````
|
||||
|
||||
选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。
|
||||
user
|
||||
user_group
|
||||
login_log
|
|
@ -0,0 +1,9 @@
|
|||
作业中心模块
|
||||
==============
|
||||
|
||||
这里介绍作业中心功能。
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
work_center_list
|
|
@ -0,0 +1,35 @@
|
|||
管理用户
|
||||
==========
|
||||
|
||||
这里介绍管理用户的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_admin_user_list:
|
||||
|
||||
查看管理用户列表
|
||||
````````````````
|
||||
|
||||
点击页面左侧“资产管理“菜单下的“管理用户”按钮,进入管理用户列表页面,查看管理用户的名称、资产数等信息。
|
||||
|
||||
|
||||
.. _create_admin_user:
|
||||
|
||||
创建管理用户
|
||||
````````````
|
||||
|
||||
点击页面左上角的“创建管理用户“按钮,进入创建管理用户界面,填写名称、用户名、密码、ssh私钥等信息,点击“提交”按钮,完成管理用户创建。
|
||||
|
||||
.. _update_admin_user:
|
||||
|
||||
更新管理用户
|
||||
````````````
|
||||
|
||||
点击页面右边动作栏的“更新”按钮,进入更新管理用户页面,编辑管理用户的信息,点击“提交”按钮,完成管理用户更新。
|
||||
|
||||
.. _delete_admin_user:
|
||||
|
||||
删除管理用户
|
||||
````````````
|
||||
|
||||
点击页面右边动作栏的“删除”按钮,弹出删除确认框,点击"确认"按钮,管理用户删除完成。
|
|
@ -0,0 +1,34 @@
|
|||
标签管理
|
||||
============
|
||||
|
||||
这里介绍标签管理的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_label_list:
|
||||
|
||||
查看标签列表
|
||||
````````````````
|
||||
|
||||
点击页面左边“资产管理”菜单下的“标签管理”按钮,进入标签列表页面,产看标签的名称、值、资产数等信息。
|
||||
|
||||
.. _create_label:
|
||||
|
||||
创建标签
|
||||
````````````
|
||||
|
||||
点击页面左上角“创建标签”按钮,进入创建标签页面,填写标签的名称、值等信息,选择资产,点击“提交”按钮,标签创建完成。
|
||||
|
||||
.. _update_label:
|
||||
|
||||
更新标签
|
||||
````````````
|
||||
|
||||
点击页面右边动作栏的“更新”按钮,进入更新标签页面,编辑标签信息,点击“提交”按钮,标签更新完成。
|
||||
|
||||
.. _delete_label:
|
||||
|
||||
删除标签
|
||||
`````````
|
||||
|
||||
点击页面右边动作栏的“删除”按钮,弹出删除确认框,点击“确认”按钮,完成标签删除。
|
|
@ -0,0 +1,41 @@
|
|||
资产列表
|
||||
===========
|
||||
|
||||
这里介绍资产列表的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_asset_list:
|
||||
|
||||
查看资产列表
|
||||
`````````````
|
||||
|
||||
点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
|
||||
|
||||
.. _create_asset:
|
||||
|
||||
创建资产
|
||||
````````````
|
||||
|
||||
点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息,点击“提交”按钮,完成资产创建。
|
||||
|
||||
.. _update_asset:
|
||||
|
||||
更新资产
|
||||
````````````
|
||||
|
||||
点击页面右边的“更新”按钮,进入编辑资产页面,更新资产信息,点击“提交”按钮,完成资产更新。
|
||||
|
||||
.. _delete_asset:
|
||||
|
||||
删除资产
|
||||
`````````
|
||||
|
||||
点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,完成资产删除。
|
||||
|
||||
.. _batch_operation:
|
||||
|
||||
批量操作
|
||||
````````````
|
||||
|
||||
选中资产,选择页面左下角批量操作选项,点击“提交”按钮,完成批量操作。
|
|
@ -0,0 +1,34 @@
|
|||
系统用户
|
||||
===========
|
||||
|
||||
这里介绍系统用户功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_admin_system_user:
|
||||
|
||||
查看系统用户
|
||||
````````````
|
||||
|
||||
点击页面左侧“资产管理“菜单下的”系统用户“按钮,进入系统用户列表页面,查看系统用户的名称,资产数和连接数等信息。
|
||||
|
||||
.. _create_admin_system_user:
|
||||
|
||||
创建系统用户
|
||||
````````````
|
||||
|
||||
点击页面左上角的“创建系统用户“按钮,进入创建系统用户页面,填写系统用户的基本信息、认证信息和其它信息,点击“提交“按钮,完成系统用户创建。
|
||||
|
||||
.. _update_admin_system_user:
|
||||
|
||||
更新系统用户
|
||||
`````````````
|
||||
|
||||
点击页面动作栏的“更新”按钮,进入更新系统用户页面,编辑系统用户信息,点击“提交”按钮,系统用户更新完成。
|
||||
|
||||
.. _delete_admin_system_user:
|
||||
|
||||
删除系统用户
|
||||
`````````````
|
||||
|
||||
点击页面动作栏的“删除”按钮,弹出删除确认框,点击“删除”按钮,完成删除系统用户。
|
12
docs/conf.py
|
@ -20,7 +20,7 @@ import sphinx_rtd_theme
|
|||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = 'jumpserver'
|
||||
project = 'Jumpserver'
|
||||
copyright = '北京堆栈科技有限公司 © 2014-2018'
|
||||
author = 'Jumpserver team'
|
||||
|
||||
|
@ -88,7 +88,7 @@ html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
|||
#
|
||||
html_theme_options = {
|
||||
'logo_only': True,
|
||||
'display_version': False
|
||||
'display_version': True
|
||||
}
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
|
@ -137,7 +137,7 @@ latex_elements = {
|
|||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'jumpserver.tex', 'jumpserver Documentation',
|
||||
(master_doc, 'Jumpserver.tex', 'Jumpserver Documentation',
|
||||
'Jumpserver team', 'manual'),
|
||||
]
|
||||
|
||||
|
@ -147,7 +147,7 @@ latex_documents = [
|
|||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'jumpserver', 'jumpserver Documentation',
|
||||
(master_doc, 'Jumpserver', 'Jumpserver Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
|
@ -158,8 +158,8 @@ man_pages = [
|
|||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'jumpserver', 'jumpserver Documentation',
|
||||
author, 'jumpserver', 'One line description of project.',
|
||||
(master_doc, 'Jumpserver', 'Jumpserver 文档',
|
||||
author, 'Jumpserver', ' Jumpserver是全球首款完全开源的堡垒机,是符合 4A 的专业运维审计系统',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
联系方式
|
||||
+++++++++++++++++++++++++
|
||||
|
||||
商业支持
|
||||
~~~~~~~~~~~
|
||||
|
||||
https://market.aliyun.com/products/53690006/cmgj026011.html
|
||||
|
||||
QQ群
|
||||
~~~~~~~~
|
||||
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
贡献者
|
||||
++++++++++++++++++++++++
|
||||
=============
|
||||
|
||||
感谢一下朋友为Jumpserver做出的贡献,世界因你们而不同,排名不分先后
|
||||
|
||||
|
||||
- **小彧 <李磊>** Django 资深开发者,为用户模块贡献了很多代码
|
||||
- **sofia <周小侠>** 资深前端工程师, 前端代码贡献者
|
||||
- **liuz <刘正> 全栈工程师** 编写了Web terminal大部分代码
|
||||
- **liuz <刘正> 全栈工程师** 编写了 Web Terminal 大部分代码
|
||||
- **jiaxiangkong <陈尚委>** Jumpserver测试运营
|
||||
- **halcyon <王墉>** DevOps 资深开发者, 0.3.2 核心开发者之一
|
||||
- **yumaojun03 <喻茂峻>** DevOps 资深开发者,擅长Python, Go以及PAAS平台开发
|
||||
- **yumaojun03 <喻茂峻>** DevOps 资深开发者,擅长Python, Go以及 PaaS 平台开发
|
||||
- **kelianchun <柯连春>** DevOps 资产开发者,fix了很多bug
|
||||
- **q4speed <莫鹍>** 架构师,贡献了 0.5.0 Windows 远程桌面登录大部分代码
|
||||
- **ZhangFengyi <张峰毅>** 贡献了 0.5.0 新版文档
|
||||
- **Aaron3S <沈晨阳>** 贡献了 0.5.0 新版文档
|
||||
- **liqiang-fit2cloud <张立强>** 0.5.0 版本测试,给资产树设计贡献了很多建议
|
|
@ -1,2 +0,0 @@
|
|||
FAQ
|
||||
+++++++++++++++++++++
|
|
@ -6,24 +6,16 @@
|
|||
Jumpserver 文档
|
||||
======================================
|
||||
|
||||
目录:
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
:caption: 文档:
|
||||
|
||||
intro
|
||||
introduce
|
||||
installation
|
||||
admin_guide
|
||||
user_guide
|
||||
development
|
||||
contributor
|
||||
contact
|
||||
faq
|
||||
|
||||
|
||||
|
||||
索引
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
snapshot
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
总体介绍
|
||||
==================
|
||||
|
||||
欢迎来到 Jumpserver 文档。
|
||||
|
||||
Jumpserver是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计系统。
|
||||
|
||||
Jumpserver使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
|
||||
|
||||
Jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发访问限制。
|
||||
|
||||
改变世界,从一点点开始。
|
|
@ -0,0 +1,6 @@
|
|||
登录日志
|
||||
==========
|
||||
|
||||
这里介绍登录日志的功能。
|
||||
|
||||
点击页面左侧“用户管理”菜单下的“登录日志”按钮,进入登录日志页面。
|
|
@ -1,4 +0,0 @@
|
|||
#### [项目结构描述](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/project_structure.md)
|
||||
#### [Python代码规范](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/python_style_guide.md)
|
||||
#### [API设计规范](https://code.simcu.com/jumpserver/jumpserver/blob/master/docs/api_style_guide.md)
|
||||
#### [表结构](https://code.simcu.com/jumpserver/jumpserver/wikis/table_structure_image)
|
|
@ -1,148 +0,0 @@
|
|||
## REST API规范约定
|
||||
|
||||
这里仅考虑REST API的基本情况。参考
|
||||
|
||||
[RESTful API 设计指南](http://www.ruanyifeng.com/blog/2014/05/restful_api.html)
|
||||
|
||||
[github api文档](https://developer.github.com/v3/)
|
||||
|
||||
### 协议
|
||||
|
||||
API与用户的通信协议,总是使用HTTPs协议。
|
||||
|
||||
|
||||
### 域名
|
||||
|
||||
这版api相对简单, 没有前后端分离, 没有独立app, 所以放在主域名下
|
||||
|
||||
```
|
||||
https://example.org/api/
|
||||
```
|
||||
|
||||
### 版本
|
||||
|
||||
将API的版本号放入URL中, 由于一个项目多个app所以Jumpserver使用以下风格,
|
||||
将版本号放到app后面
|
||||
|
||||
```
|
||||
https://example.com/api/:app:/:version:/:resource:
|
||||
https://example.com/api/assets/v1.0/assets [GET, POST]
|
||||
https://example.com/api/assets/v1.0/assets/1 [GET, PUT, DELETE]
|
||||
```
|
||||
|
||||
|
||||
### 路径
|
||||
|
||||
路径又称"终点"(endpoint),表示API的具体网址。
|
||||
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。
|
||||
举例来说 cmdb中的assets列表, idc列表
|
||||
|
||||
```
|
||||
https://example.com/api/:app:/:version:/:resource:
|
||||
|
||||
https://example.com/api/assets/v1.0/assets [GET, POST]
|
||||
https://example.com/api/assets/v1.0/assets/1 [GET, PUT, DELETE]
|
||||
https://example.com/api/assets/v1.0/idcs [GET, POST]
|
||||
```
|
||||
|
||||
一般性的增删查改(CRUD)API,完全使用HTTP method加上url提供的语义,url中的可变部分(比如上面提到的<role_id>)
|
||||
一般用来传递该API操作的核心实体对象的唯一ID,如果有更多的参数需要提供,GET方法请使用url parameter
|
||||
(例如:"?client_id=xxxxx&app_id=xxxxxx"),PUT/POST/DELETE方法请使用请求体传递参数。
|
||||
|
||||
|
||||
### HTTP Method
|
||||
|
||||
对于资源的具体操作类型,由HTTP动词表示。
|
||||
|
||||
常用的HTTP动词有下面五个(括号里是对应的SQL命令)。
|
||||
|
||||
- GET(SELECT):从服务器取出资源(一项或多项)。
|
||||
- POST(CREATE):在服务器新建一个资源。
|
||||
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源, 幂等
|
||||
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
|
||||
- DELETE(DELETE):从服务器删除资源。
|
||||
|
||||
|
||||
### 过滤信息
|
||||
|
||||
常见参数约定
|
||||
|
||||
```
|
||||
?keyword=localhost 模糊搜索
|
||||
?limit=10:指定返回记录的数量
|
||||
?offset=10:指定返回记录的开始位置。
|
||||
?page=2&per_page=100:指定第几页,以及每页的记录数。
|
||||
?sort=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
|
||||
?asset_id=1:指定筛选条件
|
||||
```
|
||||
|
||||
|
||||
### 状态码
|
||||
|
||||
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。
|
||||
|
||||
- 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
|
||||
- 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
|
||||
- 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
|
||||
- 204 NO CONTENT - [DELETE]:用户删除数据成功。
|
||||
- 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
|
||||
- 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
|
||||
- 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
|
||||
- 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
|
||||
- 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
|
||||
- 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
|
||||
- 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
|
||||
- 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
|
||||
|
||||
|
||||
### 错误处理
|
||||
|
||||
如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。
|
||||
|
||||
```
|
||||
{
|
||||
error: "Invalid API key"
|
||||
}
|
||||
```
|
||||
|
||||
### 返回结果
|
||||
|
||||
针对不同操作,服务器向用户返回的结果应该符合以下规范。
|
||||
|
||||
```
|
||||
GET /collection:返回资源对象的列表(数组)
|
||||
GET /collection/resource:返回单个资源对象
|
||||
POST /collection:返回新生成的资源对象
|
||||
PUT /collection/resource:返回完整的资源对象
|
||||
PATCH /collection/resource:返回完整的资源对象
|
||||
DELETE /collection/resource:返回一个空文档
|
||||
```
|
||||
|
||||
### Hypermedia API
|
||||
|
||||
RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
|
||||
比如,当用户向api.example.com的根目录发出请求,会得到这样一个文档。
|
||||
|
||||
```
|
||||
{"link": {
|
||||
"rel": "collection https://www.example.com/zoos",
|
||||
"href": "https://api.example.com/zoos",
|
||||
"title": "List of zoos",
|
||||
"type": "application/vnd.yourformat+json"
|
||||
}}
|
||||
```
|
||||
|
||||
上面代码表示,文档中有一个link属性,用户读取这个属性就知道下一步该调用什么API了。
|
||||
|
||||
rel表示这个API与当前网址的关系(collection关系,并给出该collection的网址),
|
||||
|
||||
href表示API的路径,title表示API的标题,type表示返回类型。
|
||||
Hypermedia API的设计被称为HATEOAS。
|
||||
Github的API就是这种设计.
|
||||
|
||||
|
||||
### 其它
|
||||
|
||||
(1)API的身份认证应该使用OAuth 2.0框架。
|
||||
(2)服务器返回的数据格式,应该尽量使用JSON
|
||||
|
|
@ -1,295 +0,0 @@
|
|||
#!/usr/bin/env python
|
||||
# ~*~ coding: utf-8 ~*~
|
||||
#
|
||||
|
||||
from django.core.paginator import InvalidPage, Paginator
|
||||
|
||||
|
||||
class View(object):
|
||||
|
||||
http_method_names = []
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def as_view(cls, **initkwargs):
|
||||
pass
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def http_method_not_allowed(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def options(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def _allowed_method(self):
|
||||
pass
|
||||
|
||||
|
||||
class TemplateResponseMixin(object):
|
||||
template_name = None
|
||||
template_engine = None
|
||||
response_class = None
|
||||
content_type = None
|
||||
|
||||
def render_to_response(self, context, **response_kwargs):
|
||||
pass
|
||||
|
||||
def get_template_name(self):
|
||||
pass
|
||||
|
||||
|
||||
class ContextMixin(object):
|
||||
def get_context_data(self, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class RedirectView(View):
|
||||
permanent = False
|
||||
url = None
|
||||
pattern_name = None
|
||||
query_string = False
|
||||
|
||||
def get_redirect_url(self, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def head(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def options(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def put(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def patch(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class TemplateView(TemplateResponseMixin, ContextMixin, View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class SingleObjectMixin(ContextMixin):
|
||||
model = None
|
||||
queryset = None
|
||||
slug_field = 'slug'
|
||||
context_object_name = None
|
||||
slug_url_kwarg = 'slug'
|
||||
pk_url_kwarg = 'pk'
|
||||
query_pk_and_slug = False
|
||||
|
||||
def get_object(self):
|
||||
pass
|
||||
|
||||
def get_queryset(self):
|
||||
pass
|
||||
|
||||
def get_slug_field(self):
|
||||
pass
|
||||
|
||||
def get_context_object_name(self, obj):
|
||||
pass
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class BaseDetailView(SingleObjectMixin, View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class SingleObjectTemplateResponseMixin(TemplateResponseMixin):
|
||||
template_name_field = None
|
||||
template_name_suffix = '_detail'
|
||||
|
||||
def get_template_name(self):
|
||||
pass
|
||||
|
||||
|
||||
class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView):
|
||||
pass
|
||||
|
||||
|
||||
class FormMixin(ContextMixin):
|
||||
initial = {}
|
||||
form_class = None
|
||||
success_url = None
|
||||
prefix = None
|
||||
|
||||
def get_initial(self):
|
||||
pass
|
||||
|
||||
def get_prefix(self):
|
||||
pass
|
||||
|
||||
def get_form_class(self):
|
||||
pass
|
||||
|
||||
def get_form(self, form_class):
|
||||
pass
|
||||
|
||||
def get_form_kwargs(self):
|
||||
pass
|
||||
|
||||
def get_success_url(self):
|
||||
pass
|
||||
|
||||
def form_valid(self, form):
|
||||
pass
|
||||
|
||||
def form_invalid(self, form):
|
||||
pass
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class ModelFormMixin(FormMixin, SingleObjectMixin):
|
||||
fields = None
|
||||
|
||||
def get_form_class(self):
|
||||
pass
|
||||
|
||||
def get_form_kwargs(self):
|
||||
pass
|
||||
|
||||
def get_success_url(self):
|
||||
pass
|
||||
|
||||
def form_valid(self, form):
|
||||
pass
|
||||
|
||||
|
||||
class ProcessFormView(View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def put(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class BaseFormView(FormMixin, ProcessFormView):
|
||||
pass
|
||||
|
||||
|
||||
class FormView(TemplateResponseMixin, BaseFormView):
|
||||
pass
|
||||
|
||||
|
||||
class BaseCreateView(ModelFormMixin, ProcessFormView):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class CreateView(SingleObjectTemplateResponseMixin, BaseCreateView):
|
||||
template_name_suffix = '_form'
|
||||
|
||||
|
||||
class BaseUpdateView(ModelFormMixin, ProcessFormView):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class UpdateView(SingleObjectTemplateResponseMixin, BaseUpdateView):
|
||||
template_name_suffix = '_form'
|
||||
|
||||
|
||||
class DeletionMixin(object):
|
||||
success_url = None
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def get_success_url(self):
|
||||
pass
|
||||
|
||||
|
||||
class BaseDeleteView(DeletionMixin, BaseDetailView):
|
||||
pass
|
||||
|
||||
|
||||
class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView):
|
||||
pass
|
||||
|
||||
|
||||
class MultipleObjectMixin(ContextMixin):
|
||||
allow_empty = True
|
||||
queryset = None
|
||||
model = None
|
||||
paginate_by = None
|
||||
paginate_orphans = 0
|
||||
context_object_name = None
|
||||
paginator_class = Paginator
|
||||
page_kwarg = 'page'
|
||||
ordering = None
|
||||
|
||||
def get_queryset(self):
|
||||
pass
|
||||
|
||||
def get_ordering(self):
|
||||
pass
|
||||
|
||||
def paginate_queryset(self, queryset, page_size):
|
||||
pass
|
||||
|
||||
def get_paginate_by(self, queryset):
|
||||
pass
|
||||
|
||||
def get_paginator(self, queryset, per_page, orphans=0,
|
||||
allow_empty_first_page=True, **kwargs):
|
||||
pass
|
||||
|
||||
def get_paginate_orphans(self):
|
||||
pass
|
||||
|
||||
def get_allow_empty(self):
|
||||
pass
|
||||
|
||||
def get_context_object_name(self, object_list):
|
||||
pass
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class BaseListView(MultipleObjectMixin, View):
|
||||
def get(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class MultipleObjectTemplateResponseMixin(TemplateResponseMixin):
|
||||
template_name_suffix = '_list'
|
||||
|
||||
def get_template_name(self):
|
||||
pass
|
||||
|
||||
|
||||
class ListView(MultipleObjectTemplateResponseMixin, BaseListView):
|
||||
pass
|
|
@ -1 +0,0 @@
|
|||
More see [安装文档](https://github.com/jumpserver/jumpserver/wiki/v0.5.0-%E5%9F%BA%E4%BA%8E-CentOS7)
|
|
@ -1,50 +0,0 @@
|
|||
## 项目骨架
|
||||
|
||||
说明如下:
|
||||
|
||||
```
|
||||
.
|
||||
├── config-example.py // 配置文件样例
|
||||
├── docs // 所有doc文件放到该目录
|
||||
│ └── README.md
|
||||
├── LICENSE
|
||||
├── README.md
|
||||
├── install // 安装说明
|
||||
├── logs // 日志目录
|
||||
├── apps // 管理后台目录,也是各app所在目录
|
||||
│ └── assets // app目录
|
||||
│ │ ├── admin.py
|
||||
│ │ ├── apps.py // 新版本django app设置文件
|
||||
│ │ ├── api.py // api文件
|
||||
│ │ ├── __init__.py // 对外暴露的接口,放到该文件中,方便别的app引用
|
||||
│ │ ├── migrations // models Migrations版本控制目录
|
||||
│ │ │ └── __init__.py
|
||||
│ │ ├── models.py // 数据模型目录
|
||||
│ │ ├── static // app下静态资源目录,如果需要
|
||||
│ │ │ └── assets // 多一层目录,防止资源重名
|
||||
│ │ │ └── some_image.png
|
||||
│ │ ├── templates // app下模板目录
|
||||
│ │ │ └── assets // 多一层目录,防止资源重名
|
||||
│ │ │ └── asset_list.html
|
||||
│ │ ├── templatetags // 模板标签目录
|
||||
│ │ ├── tests.py // 测试用例文件
|
||||
│ │ ├── urls.py // urlconf文件
|
||||
│ │ ├── utils.py // 将views和api可复用的代码放在这里, api和views只是请求和返回不同
|
||||
│ │ └── views.py // views文件
|
||||
│ ├── common
|
||||
│ │ ├── templatetags // 通用template tag
|
||||
│ │ ├── utils.py // 通用的函数方法
|
||||
│ │ └── views.py
|
||||
│ ├── fixtures // 初始化数据目录
|
||||
│ │ ├── init.json // 初始化项目数据库
|
||||
│ │ └── fake.json // 生成大量测试数据
|
||||
│ ├── jumpserver // 项目设置目录
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── settings.py // 项目设置文件
|
||||
│ │ ├── urls.py // 项目入口urlconf
|
||||
│ │ └── wsgi.py
|
||||
│ ├── manage.py
|
||||
│ ├── static // 项目静态资源目录
|
||||
│ ├── i18n // 项目多语言目录
|
||||
│ └── templates // 项目模板目录
|
||||
```
|
|
@ -1,194 +0,0 @@
|
|||
# Jumpserver 项目规范(Draft)
|
||||
|
||||
## 语言框架
|
||||
1. Python 3.6.1 (当前最新)
|
||||
2. Django 1.11 (当前最新)
|
||||
3. Flask 0.12 Luna (当前最新)
|
||||
4. Paramiko 2.12 Coco (当前最新)
|
||||
|
||||
## Django规范
|
||||
1. 尽量使用Class Base View编程,更少代码
|
||||
2. 使用Django Form
|
||||
3. 每个url独立命名,不要硬编码,同理static也是
|
||||
4. 数据库表名手动指定,不要使用默认
|
||||
5. 代码优雅简洁
|
||||
6. 注释明确优美
|
||||
7. 测试案例尽可能完整
|
||||
8. 尽可能利用Django造好的轮子
|
||||
|
||||
|
||||
## 代码风格
|
||||
|
||||
Python方面大致的风格,我们采用pocoo的[Style Guidance](http://www.pocoo.org/internal/styleguide/),但是有些细节部分会尽量放开
|
||||
参考国内翻译
|
||||
|
||||
### 基本的代码布局
|
||||
|
||||
#### 缩进
|
||||
|
||||
1. Python严格采用4个空格的缩进,任何python代码都都必须遵守此规定。
|
||||
2. web部分代码(HTML, CSS, JavaScript),Node.js采用2空格缩进,同样不使用tab (\t)。
|
||||
之所以与Python不同,是因为js中有大量回调式的写法,2空格可以显著降低视觉上的负担。
|
||||
|
||||
#### 最大行长度
|
||||
|
||||
按PEP8规范,Python一般限制最大79个字符, 但是Django的命名,url等通常比较长,
|
||||
而且21世纪都是宽屏了,所以我们限制最大120字符
|
||||
|
||||
**补充说明:HTML代码不受此规范约束。**
|
||||
|
||||
#### 长语句缩进
|
||||
|
||||
编写长语句时,可以使用换行符(\)换行。在这种情况下,下一行应该与上一行的最后
|
||||
一个“.”句点或“=”对齐,或者是缩进4个空格符
|
||||
|
||||
```
|
||||
this_is_a_very_long(function_call, 'with many parameters') \
|
||||
.that_returns_an_object_with_an_attribute
|
||||
|
||||
MyModel.query.filter(MyModel.scalar > 120) \
|
||||
.order_by(MyModel.name.desc()) \
|
||||
.limit(10)
|
||||
```
|
||||
|
||||
如果你使用括号“()”或花括号“{}”为长语句换行,那么下一行应与括号或花括号对齐:
|
||||
```
|
||||
this_is_a_very_long(function_call, 'with many parameters',
|
||||
23, 42, 'and even more')
|
||||
```
|
||||
|
||||
对于元素众多的列表或元组,在第一个“[”或“(”之后马上换行:
|
||||
|
||||
```
|
||||
items = [
|
||||
'this is the first', 'set of items', 'with more items',
|
||||
'to come in this line', 'like this'
|
||||
]
|
||||
```
|
||||
|
||||
#### 空行
|
||||
|
||||
顶层函数与类之间空两行,此外都只空一行。不要在代码中使用太多的空行来区分不同的逻辑模块。
|
||||
|
||||
```
|
||||
def hello(name):
|
||||
print 'Hello %s!' % name
|
||||
|
||||
|
||||
def goodbye(name):
|
||||
print 'See you %s.' % name
|
||||
|
||||
|
||||
class MyClass(object):
|
||||
"""This is a simple docstring."""
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def get_annoying_name(self):
|
||||
return self.name.upper() + '!!!!111'
|
||||
```
|
||||
|
||||
|
||||
### 语句和表达式
|
||||
|
||||
#### 一般空格规则
|
||||
|
||||
1. 单目运算符与运算对象之间不空格(例如,-,~等),即使单目运算符位于括号内部也一样。
|
||||
2. 双目运算符与运算对象之间要空格。
|
||||
|
||||
```
|
||||
exp = -1.05
|
||||
value = (item_value / item_count) * offset / exp
|
||||
value = my_list[index]
|
||||
value = my_dict['key']
|
||||
```
|
||||
|
||||
#### 比较
|
||||
|
||||
1. 任意类型之间的比较,使用“==”和“!=”。
|
||||
2. 与单例(singletons)进行比较时,使用is和is not。
|
||||
3. 永远不要与True或False进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)。
|
||||
|
||||
#### 否定成员关系检查
|
||||
|
||||
使用foo not in bar,而不是not foo in bar。
|
||||
|
||||
|
||||
### 命名约定
|
||||
|
||||
1. 类名称:采用骆驼拼写法(CamelCase),首字母缩略词保持大写不变(HTTPWriter,而不是HttpWriter)。
|
||||
2. 变量名:小写_以及_下划线(lowercase_with_underscores)。
|
||||
3. 方法与函数名:小写_以及_下划线(lowercase_with_underscores)。
|
||||
4. 常量:大写_以及_下划线(UPPERCASE_WITH_UNDERSCORES)。
|
||||
5. 预编译的正则表达式:name_re。
|
||||
6. 受保护的元素以一个下划线为前缀。双下划线前缀只有定义混入类(mixin classes)时才使用。
|
||||
7. 如果使用关键词(keywords)作为类名称,应在名称后添加后置下划线(trailing underscore)。
|
||||
允许与内建变量重名,不要在变量名后添加下划线进行区分。如果函数需要访问重名的内建变量,请将内建变量重新绑定为其他名称。
|
||||
8. 命名要有寓意, 不使用拼音,不使用无意义简单字母命名 (循环中计数例外 for i in)
|
||||
9. 命名缩写要谨慎, 尽量是大家认可的缩写
|
||||
|
||||
|
||||
#### 函数和方法的参数:
|
||||
|
||||
1. 类方法:cls为第一个参数。
|
||||
2. 实例方法:self为第一个参数。
|
||||
3. property函数中使用匿名函数(lambdas)时,匿名函数的第一个参数可以用x替代,
|
||||
例如:display_name = property(lambda x: x.real_name or x.username)。
|
||||
|
||||
|
||||
|
||||
### 文档注释(Docstring,即各方法,类的说明文档注释)
|
||||
|
||||
所有文档字符串均以reStructuredText格式编写,方便Sphinx处理。文档字符串的行数不同,布局也不一样。
|
||||
如果只有一行,代表字符串结束的三个引号与代表字符串开始的三个引号在同一行。
|
||||
如果为多行,文档字符串中的文本紧接着代表字符串开始的三个引号编写,代表字符串结束的三个引号则自己独立成一行。
|
||||
(有能力尽可能用英文, 否则请中文优雅注释)
|
||||
|
||||
|
||||
```
|
||||
def foo():
|
||||
"""This is a simple docstring."""
|
||||
|
||||
|
||||
def bar():
|
||||
"""This is a longer docstring with so much information in there
|
||||
that it spans three lines. In this case, the closing triple quote
|
||||
is on its own line.
|
||||
"""
|
||||
```
|
||||
|
||||
文档字符串应分成简短摘要(尽量一行)和详细介绍。如果必要的话,摘要与详细介绍之间空一行。
|
||||
|
||||
### 模块头部
|
||||
|
||||
模块文件的头部包含有utf-8编码声明(如果模块中使用了非ASCII编码的字符,建议进行声明),以及标准的文档字符串。
|
||||
|
||||
```
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
package.module
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
A brief description goes here.
|
||||
|
||||
:copyright: (c) YEAR by AUTHOR.
|
||||
:license: LICENSE_NAME, see LICENSE_FILE for more details.
|
||||
"""
|
||||
```
|
||||
|
||||
|
||||
### 注释(comment)
|
||||
|
||||
注释的规范与文档字符串编写规范类似。二者均以reStructuredText格式编写。
|
||||
如果使用注释来编写类属性的文档,请在#符号后添加一个冒号":"。
|
||||
(有能力尽可能用英文, 否则请中文优雅注释)
|
||||
|
||||
```
|
||||
class User(object):
|
||||
#: the name of the user as unicode string
|
||||
name = Column(String)
|
||||
#: the sha1 hash of the password + inline salt
|
||||
pw_hash = Column(String)
|
||||
```
|
||||
|
|
@ -1,795 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- SQL XML created by WWW SQL Designer, https://github.com/ondras/wwwsqldesigner/ -->
|
||||
<!-- Active URL: http://ondras.zarovi.cz/sql/demo/?keyword=default -->
|
||||
<sql>
|
||||
<datatypes db="mysql">
|
||||
<group color="rgb(238,238,170)" label="Numeric">
|
||||
<type label="Integer" quote="" sql="INTEGER" length="0"/>
|
||||
<type label="TINYINT" quote="" sql="TINYINT" length="0"/>
|
||||
<type label="SMALLINT" quote="" sql="SMALLINT" length="0"/>
|
||||
<type label="MEDIUMINT" quote="" sql="MEDIUMINT" length="0"/>
|
||||
<type label="INT" quote="" sql="INT" length="0"/>
|
||||
<type label="BIGINT" quote="" sql="BIGINT" length="0"/>
|
||||
<type label="Decimal" quote="" sql="DECIMAL" length="1" re="DEC"/>
|
||||
<type label="Single precision" quote="" sql="FLOAT" length="0"/>
|
||||
<type label="Double precision" quote="" sql="DOUBLE" length="0" re="DOUBLE"/>
|
||||
</group>
|
||||
|
||||
<group color="rgb(255,200,200)" label="Character">
|
||||
<type label="Char" quote="'" sql="CHAR" length="1"/>
|
||||
<type label="Varchar" quote="'" sql="VARCHAR" length="1"/>
|
||||
<type label="Text" quote="'" sql="MEDIUMTEXT" length="0" re="TEXT"/>
|
||||
<type label="Binary" quote="'" sql="BINARY" length="1"/>
|
||||
<type label="Varbinary" quote="'" sql="VARBINARY" length="1"/>
|
||||
<type label="BLOB" quote="'" sql="BLOB" length="0" re="BLOB"/>
|
||||
</group>
|
||||
|
||||
<group color="rgb(200,255,200)" label="Date & Time">
|
||||
<type label="Date" quote="'" sql="DATE" length="0"/>
|
||||
<type label="Time" quote="'" sql="TIME" length="0"/>
|
||||
<type label="Datetime" quote="'" sql="DATETIME" length="0"/>
|
||||
<type label="Year" quote="" sql="YEAR" length="0"/>
|
||||
<type label="Timestamp" quote="'" sql="TIMESTAMP" length="0"/>
|
||||
</group>
|
||||
|
||||
<group color="rgb(200,200,255)" label="Miscellaneous">
|
||||
<type label="ENUM" quote="" sql="ENUM" length="1"/>
|
||||
<type label="SET" quote="" sql="SET" length="1"/>
|
||||
<type label="Bit" quote="" sql="bit" length="0"/>
|
||||
</group>
|
||||
</datatypes><table x="399" y="254" name="user">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="0" autoincrement="0">
|
||||
<datatype>VARCHAR(20)</datatype>
|
||||
<default>'NULL'</default></row>
|
||||
<row name="first_name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="last_name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="password" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="email" null="0" autoincrement="0">
|
||||
<datatype>VARCHAR(30)</datatype>
|
||||
</row>
|
||||
<row name="avatar" null="1" autoincrement="0">
|
||||
<datatype>BINARY</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="wechat" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR(20)</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="phone" null="1" autoincrement="0">
|
||||
<datatype>VARBINARY</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_staff" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>0</default></row>
|
||||
<row name="is_active" null="0" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>0</default></row>
|
||||
<row name="enable_otp" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>0</default></row>
|
||||
<row name="role" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="private_key" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="public_key" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_joined" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>'now()'</default></row>
|
||||
<row name="date_expaired" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="last_login" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="205" y="363" name="role">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="399" y="102" name="user_group">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="165" y="151" name="user_user_group">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="usergroup_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user_group" row="id" />
|
||||
</row>
|
||||
<row name="user_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="201" y="486" name="permission">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="codename" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="content_type" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="cententtype" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="28" y="582" name="cententtype">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="app_label" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="model" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="3" y="364" name="role_permission">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="role_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="role" row="id" />
|
||||
</row>
|
||||
<row name="permmision_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="permission" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1081" y="268" name="asset">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="hostname" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="ip" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="port" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="other_ip" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="mac_addr" null="1" autoincrement="0">
|
||||
<datatype>VARBINARY</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="password" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="admin_user" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="admin_user" row="id" />
|
||||
</row>
|
||||
<row name="idc" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="idc" row="id" />
|
||||
</row>
|
||||
<row name="remote_card_ip" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="type" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset_extend" row="id" />
|
||||
</row>
|
||||
<row name="brand" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="os" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="sn" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="number" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="cabinet_no" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="cabinet_pos" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="env" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset_extend" row="id" />
|
||||
</row>
|
||||
<row name="cpu" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="memory" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="disk" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_active" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1301" y="687" name="asset_extend">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="key" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="value" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1294" y="379" name="idc">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="address" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="operator" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="contact" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="phone" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="network" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="brandwidth" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1269" y="220" name="asset_label">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="asset_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset" row="id" />
|
||||
</row>
|
||||
<row name="key" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="value" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1080" y="102" name="asset_group">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1261" y="101" name="asset_asset_group">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="asset_group_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset_group" row="id" />
|
||||
</row>
|
||||
<row name="asset_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1289" y="806" name="admin_user">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="password" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="private_key" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_default" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="auto_update" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="create_by" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="720" y="571" name="system_user">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="protocol" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="password" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="private_key" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="public_key" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_default" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="auto_push" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="auto_update" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="sudo" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="shell" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="home" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="uid" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="873" y="572" name="asset_system_user">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="system_user_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="system_user" row="id" />
|
||||
</row>
|
||||
<row name="asset_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="878" y="743" name="task_history">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="task_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="task" row="id" />
|
||||
</row>
|
||||
<row name="asset_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_finished" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_failed" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="message" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_finished" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="1079" y="918" name="task">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_finished" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_finished" null="1" autoincrement="0">
|
||||
<datatype>DATE</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="744" y="322" name="perm">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_expired" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="comment" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="created_by" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_created" null="1" autoincrement="0">
|
||||
<datatype>TIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="560" y="184" name="user_group_perm">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="user_group_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user_group" row="id" />
|
||||
</row>
|
||||
<row name="perm_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="perm" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="560" y="361" name="user_perm">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="user_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user" row="id" />
|
||||
</row>
|
||||
<row name="perm_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="perm" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="868" y="184" name="asset_group_perm">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="asset_group_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset_group" row="id" />
|
||||
</row>
|
||||
<row name="perm_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="perm" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="872" y="411" name="asset_perm">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="asset_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="asset" row="id" />
|
||||
</row>
|
||||
<row name="perm_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="perm" row="id" />
|
||||
</row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="268" y="776" name="login_log">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="login_type" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="login_ip" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="login_city" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="user_agent" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_login" null="1" autoincrement="0">
|
||||
<datatype>DATE</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_logout" null="1" autoincrement="0">
|
||||
<datatype>DATE</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="108" y="775" name="admin_log">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="resource" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="action" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="detail" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="description" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="418" y="775" name="proxy_log">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="name" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="username" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="hostname" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="ip" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="sysuser" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="login_type" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="log_file" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_finished" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_finished" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="567" y="575" name="commandlog">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="proxy_log" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="proxy_log" row="id" />
|
||||
</row>
|
||||
<row name="command" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="output" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATE</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_finished" null="1" autoincrement="0">
|
||||
<datatype>DATE</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
<table x="585" y="786" name="notice">
|
||||
<row name="id" null="1" autoincrement="1">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="to_user_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user" row="id" />
|
||||
</row>
|
||||
<row name="from_user_id" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default><relation table="user" row="id" />
|
||||
</row>
|
||||
<row name="notice_method" null="1" autoincrement="0">
|
||||
<datatype>CHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="type" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="title" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="detail" null="1" autoincrement="0">
|
||||
<datatype>VARCHAR</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="is_read" null="1" autoincrement="0">
|
||||
<datatype>INTEGER</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_start" null="1" autoincrement="0">
|
||||
<datatype>DATETIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<row name="date_read" null="1" autoincrement="0">
|
||||
<datatype>TIME</datatype>
|
||||
<default>NULL</default></row>
|
||||
<key type="PRIMARY" name="">
|
||||
<part>id</part>
|
||||
</key>
|
||||
</table>
|
||||
</sql>
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
资产授权
|
||||
=========
|
||||
|
||||
这里介绍资产授权的相关的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_asset_authorized:
|
||||
|
||||
查看资产授权规则列表
|
||||
````````````````````
|
||||
|
||||
资产授权页面默认展示资产授权列表。点击左侧资产节点树下的节点,右侧展示此节点下的资产授权规则。
|
||||
|
||||
.. _create_asset_authorized:
|
||||
|
||||
创建授权规则
|
||||
````````````
|
||||
在左侧资产节点树下选择要创建授权规则的节点,点击页面右侧创建授权规则进入创建授权规则页面,填写授权规则信息,点击提交,完成创建授权规则。
|
||||
|
||||
.. _update_asset_authorized:
|
||||
|
||||
更新授权规则
|
||||
````````````
|
||||
|
||||
在左侧资产节点树下选择要更新授权规则的节点,在右侧授权规则列表中找到要更新的授权规则,点击“动作”标题下的“更新”按钮进入授权规则更新页面,填写授权规则信息,点击提交,完成创建授权规则。
|
||||
|
||||
.. _delete_asset_authorized:
|
||||
|
||||
删除授权规则
|
||||
````````````
|
||||
|
||||
在左侧资产节点树下选择要删除授权规则的节点,在右侧授权规则列表中找到要删除的授权规则,点击“动作”标题下的“删除”按钮,弹出确认删除页面,点击确认,完成删除授权规则。
|
||||
|
|
@ -34,8 +34,7 @@ Guidance`_\ ,但是有些细节部分会尽量放开 参考国内翻译
|
|||
^^^^
|
||||
|
||||
1. Python严格采用4个空格的缩进,任何python代码都都必须遵守此规定。
|
||||
2. web部分代码(HTML, CSS,
|
||||
JavaScript),Node.js采用2空格缩进,同样不使用tab (:raw-latex:`\t`)。
|
||||
2. web部分代码(HTML, CSS,JavaScript),Node.js采用2空格缩进,同样不使用tab。
|
||||
之所以与Python不同,是因为js中有大量回调式的写法,2空格可以显著降低视觉上的负担。
|
||||
|
||||
最大行长度
|
||||
|
|
|
@ -13,7 +13,7 @@ Docker 安装见: `Docker官方安装文档 <https://docs.docker.com/install/>`_
|
|||
```````````````
|
||||
使用root命令行输入::
|
||||
|
||||
$ docker run -p 8080:80 -p 2222:2222 jumpserver/jumpserver:0.5.0-beta2
|
||||
$ docker run -d -p 8080:80 -p 2222:2222 registry.jumpserver.org/public/jumpserver:latest
|
||||
|
||||
访问
|
||||
```````````````
|
||||
|
@ -39,7 +39,7 @@ ssh访问: ssh -p 2222 localhost
|
|||
|
||||
::
|
||||
|
||||
docker run -p 8080:80 -p 2222:2222 -e DB_ENGINE=mysql -e DB_HOST=192.168.1.1 -e DB_PORT=3306 -e DB_USER=root -e DB_PASSWORD=xxx -e DB_NAME=jumpserver jumpserver/jumpserver:0.5.0-beta2
|
||||
docker run -d -p 8080:80 -p 2222:2222 -e DB_ENGINE=mysql -e DB_HOST=192.168.1.1 -e DB_PORT=3306 -e DB_USER=root -e DB_PASSWORD=xxx -e DB_NAME=jumpserver registry.jumpserver.org/public/jumpserver:latest
|
||||
|
||||
|
||||
仓库地址
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
命令记录
|
||||
=========
|
||||
|
||||
这里介绍命令记录功能。
|
||||
|
||||
点击页面左侧“会话管理”菜单下的“命令记录”,进入命令记录列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_command_session:
|
||||
|
||||
查看命令记录
|
||||
`````````````
|
||||
|
||||
命令记录页面默认展示一周内命令记录,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
|
||||
|
||||
.. _detial_command_invoke:
|
||||
|
||||
查看命令执行详情
|
||||
````````````````
|
||||
|
||||
点击命令记录列表中需要查看命令执行详情的行,即可显示命令执行详情。
|
||||
|
||||
.. _detial_command_session:
|
||||
|
||||
转到会话详情
|
||||
`````````````
|
||||
|
||||
在命令记录列表中找到需要转到会话详情的记录,点击“会话”标题下的“转到”按钮,完成转到会话详情。
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
历史会话
|
||||
=========
|
||||
|
||||
这里介绍历史会话功能。
|
||||
|
||||
点击页面左侧“会话管理”菜单下的“历史会话”,进入历史会话列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_history_session:
|
||||
|
||||
查看历史会话
|
||||
`````````````
|
||||
|
||||
历史会话页面默认展示一周内历史会话,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
|
||||
|
||||
.. _playback_history_session:
|
||||
|
||||
历史会话回放
|
||||
`````````````
|
||||
|
||||
在在线会话列表中找到要回放的历史会话,点击动作标签下的“回放”按钮,弹出回放页面,完成回放历史会话。
|
|
@ -0,0 +1,25 @@
|
|||
在线会话
|
||||
=========
|
||||
|
||||
这里介绍在线会话功能。
|
||||
|
||||
点击页面左侧“会话管理”菜单下的“在线会话”,进入在线会话列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_online_session:
|
||||
|
||||
查看在线会话
|
||||
`````````````
|
||||
|
||||
在线会话页面默认展示一周内在线会话,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
|
||||
|
||||
.. _stop_online_session:
|
||||
|
||||
终断在线会话
|
||||
`````````````
|
||||
|
||||
在在线会话列表中找到要终止的在线会话,点击动作标签下的“终断”按钮,完成终断在线会话。
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
终端管理
|
||||
=========
|
||||
|
||||
这里介绍终端管理功能。
|
||||
|
||||
点击页面左侧“会话管理”菜单下的“终端管理”,进入终端列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_terminal_session:
|
||||
|
||||
查看终端列表
|
||||
`````````````
|
||||
|
||||
终端列表页面默认展示全部终端列表。
|
||||
|
||||
.. _upate_terminal_session:
|
||||
|
||||
更新终端
|
||||
`````````````
|
||||
|
||||
在在线会话列表中找到要更新的终端,点击动作标签下的“更新”按钮,在更新终端页面填写相关信息,点击提交,完成更新终端。
|
||||
|
||||
.. _delete_terminal_session:
|
||||
|
||||
删除终端
|
||||
`````````````
|
||||
|
||||
在在线会话列表中找到要删除的终端,点击动作标签下的“删除”按钮,在弹出确认删除页面点击确认,完成删除终端。
|
|
@ -0,0 +1,23 @@
|
|||
Web终端
|
||||
=========
|
||||
|
||||
这里介绍Web终端功能。
|
||||
|
||||
点击页面左侧“会话管理”菜单下的“Web终端”,进入Web终端页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _login:
|
||||
|
||||
主机登录
|
||||
`````````````
|
||||
|
||||
点解页面左侧的”Web终端”,进入主机登录页,然后点击页面右侧的主机IP地址,连接主机,页面右侧会展示当前连接的终端信息。
|
||||
|
||||
.. _logout:
|
||||
|
||||
主机登出
|
||||
`````````````
|
||||
|
||||
在主机登录页面,选择左上角的“服务器”按钮,出现两个选项,一个“断开链接“按钮,断开当前连接的主机;另一个”断开所有链接“,断开当前所有连接的主机。
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
Snapshot 截图
|
||||
+++++++++++++++++
|
||||
|
||||
仪表盘
|
||||
~~~~~~~~
|
||||
|
||||
.. image:: _static/img/dash_board.png
|
||||
|
||||
用户管理
|
||||
~~~~~~~~~~
|
||||
|
||||
.. image:: _static/img/admin_user.png
|
||||
|
||||
资产管理
|
||||
~~~~~~~~~~
|
||||
|
||||
.. image:: _static/img/admin_asset.png
|
||||
|
||||
Linux 终端
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
.. image:: _static/img/linux_terminal.png
|
||||
|
||||
Windows 终端
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
.. image:: _static/img/windows_terminal.png
|
|
@ -61,7 +61,7 @@ zip包,我的网速好,我直接clone了
|
|||
::
|
||||
|
||||
$ cd /opt/
|
||||
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout dev
|
||||
$ git clone --depth=1 https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
|
||||
|
||||
**2.2 安装依赖rpm包**
|
||||
|
||||
|
@ -161,7 +161,7 @@ zip包,我的网速好,我直接clone了
|
|||
::
|
||||
|
||||
$ cd /opt
|
||||
$ git clone https://github.com/jumpserver/coco.git && cd coco && git checkout dev
|
||||
$ git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
|
||||
|
||||
**3.2 安装依赖**
|
||||
|
||||
|
@ -187,7 +187,7 @@ zip包,我的网速好,我直接clone了
|
|||
$ python run_server.py
|
||||
|
||||
这时需要去
|
||||
jumpserver管理后台-终端-终端(http://192.168.244.144:8080/terminal/terminal/)接受coco的注册
|
||||
jumpserver管理后台-会话管理-终端管理(http://192.168.244.144:8080/terminal/terminal/)接受coco的注册
|
||||
|
||||
::
|
||||
|
||||
|
@ -230,16 +230,18 @@ Luna已改为纯前端,需要nginx来运行访问
|
|||
五. 安装Windows支持组件
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
使用docker启动 guacamole
|
||||
因为手动安装 guacamole 组件比较复杂,这里提供打包好的docker使用, 启动 guacamole
|
||||
|
||||
.. code:: shell
|
||||
|
||||
docker run \
|
||||
-p 8080:8080 \
|
||||
-e JUMPSERVER_SERVER=http://<jumpserver>:8080 \
|
||||
|
||||
|
||||
docker run -d \
|
||||
-p 8081:8080 \
|
||||
-e JUMPSERVER_SERVER=http://<填写本机的IP地址>:8080 \
|
||||
jumpserver/guacamole
|
||||
|
||||
这里所需要注意的是guacamole暴露出来的端口是8080,若与jumpserver部署在同一主机上自定义一下。
|
||||
这里所需要注意的是guacamole暴露出来的端口是8081,若与主机上其他端口冲突请自定义一下。
|
||||
|
||||
修改JUMPSERVER_SERVER的配置,填上jumpserver的内网地址
|
||||
|
||||
|
@ -275,13 +277,20 @@ Luna已改为纯前端,需要nginx来运行访问
|
|||
|
||||
location /socket.io/ {
|
||||
proxy_pass http://localhost:5000/socket.io/;
|
||||
proxy_buffering off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
}
|
||||
|
||||
location /guacamole/ {
|
||||
proxy_pass http://<guacamole>:8080/;
|
||||
proxy_pass http://localhost:8081/;
|
||||
proxy_buffering off;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $http_connection;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location / {
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
用户列表
|
||||
========
|
||||
|
||||
这里介绍用户列表的功能。
|
||||
|
||||
点击页面左侧“用户列表”菜单下的“用户列表“,进入用户列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _create_user:
|
||||
|
||||
创建用户
|
||||
````````
|
||||
|
||||
点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
|
||||
|
||||
|
||||
.. _update_user:
|
||||
|
||||
更新用户
|
||||
````````
|
||||
|
||||
点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
|
||||
|
||||
.. _delete_user:
|
||||
|
||||
删除用户
|
||||
````````
|
||||
|
||||
点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
|
||||
|
||||
.. _export_user:
|
||||
|
||||
导出用户
|
||||
````````
|
||||
|
||||
选中用户,点击右上角的“导出”按钮,导出用户完成。
|
||||
|
||||
.. _import_user:
|
||||
|
||||
导入用户
|
||||
````````
|
||||
|
||||
点击右上角的“导入”按钮,弹出导入对话框,选择要导入的CSV格式文件,点击“确认”按钮,导入用户完成。
|
||||
|
||||
.. _batch_user_operation:
|
||||
|
||||
批量操作
|
||||
````````
|
||||
|
||||
选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。
|
|
@ -0,0 +1,29 @@
|
|||
用户组列表
|
||||
============
|
||||
|
||||
这里介绍用户组列表的功能。
|
||||
|
||||
点击页面左侧“用户管理”菜单下的”用户组“,进入用户组列表页面。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _create_user_group:
|
||||
|
||||
创建用户组
|
||||
``````````
|
||||
|
||||
点击页面左上角“创建用户组”按钮,进入创建用户组页面,填写用户组信息,点击“提交”按钮,创建用户完成。
|
||||
|
||||
.. _update_user_group:
|
||||
|
||||
更新用户组
|
||||
``````````
|
||||
|
||||
点击页面右边的“更新”按钮,进入编辑用户组页面,编辑用户组信息,点击“确认”按钮,更新用户组完成。
|
||||
|
||||
.. _delete_user_group:
|
||||
|
||||
删除用户组
|
||||
````````````
|
||||
|
||||
点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,删除用户组完成。
|
|
@ -0,0 +1,35 @@
|
|||
任务列表
|
||||
=========
|
||||
|
||||
这里介绍任务列表的相关的功能。
|
||||
|
||||
.. contents:: Topics
|
||||
|
||||
.. _view_asset_works:
|
||||
|
||||
查看任务列表
|
||||
````````````
|
||||
|
||||
任务列表页面默认展示一周内所有任务。点击标题可根据当前字段进行排序。
|
||||
|
||||
.. _invoke_asset_work:
|
||||
|
||||
手动执行任务
|
||||
````````````
|
||||
|
||||
在任务列表中找到要手动执行的任务,点击“动作”标题下的“执行”按钮,完成手动执行当前任务。
|
||||
|
||||
.. _delete_asset_work:
|
||||
|
||||
删除任务
|
||||
`````````
|
||||
|
||||
在任务列表中找到要删除的任务,点击“动作”标题下的“删除”按钮,完成删除当前任务。
|
||||
|
||||
.. _detial_asset_work:
|
||||
|
||||
查看任务详情
|
||||
`````````````
|
||||
|
||||
在任务列表中找到要查看的任务,点击要查看的任务名称,即可进入任务详情页面。
|
||||
|
|
@ -1 +0,0 @@
|
|||
Because ansible connect remote host using key file path except key string, so I create this dir for keep them.
|