+ {% endif %}
{% trans 'Test assets connective' %}: |
diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo
index 2861b0128..7a5757460 100644
Binary files a/apps/i18n/zh/LC_MESSAGES/django.mo and b/apps/i18n/zh/LC_MESSAGES/django.mo differ
diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po
index 2a98c8c0c..ff95b3eab 100644
--- a/apps/i18n/zh/LC_MESSAGES/django.po
+++ b/apps/i18n/zh/LC_MESSAGES/django.po
@@ -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 \n"
"Language-Team: Jumpserver team\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 "添加到节点"
diff --git a/apps/templates/_header_bar.html b/apps/templates/_header_bar.html
index 4615674a8..ae552fbb6 100644
--- a/apps/templates/_header_bar.html
+++ b/apps/templates/_header_bar.html
@@ -19,7 +19,7 @@
-
+
{% trans 'Docs' %}
diff --git a/apps/templates/index.html b/apps/templates/index.html
index 800b1d46f..a297adedd 100644
--- a/apps/templates/index.html
+++ b/apps/templates/index.html
@@ -168,9 +168,9 @@
{% ifequal login.is_finished 0 %}
- {{ login.date_start|timesince }} ago
+ {{ login.date_start|timesince }} 前
{% else %}
- {{ login.date_start|timesince }} ago
+ {{ login.date_start|timesince }} 前
{% endifequal %}
{{ login.user }} 登录了{{ login.asset }}
{{ login.date_start }}
diff --git a/apps/terminal/api.py b/apps/terminal/api.py
index 88f8fc926..da0e88820 100644
--- a/apps/terminal/api.py
+++ b/apps/terminal/api.py
@@ -4,12 +4,15 @@ from collections import OrderedDict
import logging
import os
import uuid
+import boto3 # AWS S3 sdk
from django.core.cache import cache
from django.shortcuts import get_object_or_404, redirect
from django.utils import timezone
from django.core.files.storage import default_storage
from django.http import HttpResponseNotFound
+from django.conf import settings
+
from rest_framework import viewsets, serializers
from rest_framework.views import APIView, Response
from rest_framework.permissions import AllowAny
@@ -23,7 +26,6 @@ from .hands import IsSuperUserOrAppUser, IsAppUser, \
IsSuperUserOrAppUserOrUserReadonly
from .backends import get_command_store, get_multi_command_store, \
SessionCommandSerializer
-import boto3 # AWS S3 sdk
logger = logging.getLogger(__file__)
@@ -280,11 +282,11 @@ class SessionReplayViewSet(viewsets.ViewSet):
url = default_storage.url(path)
return redirect(url)
else:
- config = self.app.config.get("REPLAY_STORAGE", None)
+ config = settings.TERMINAL_REPLAY_STORAGE.items()
if config:
- for name in config.keys():
- if config[name].get("TYPE", '') == "s3":
- client, bucket = self.s3Client(config[name])
+ for name, value in config:
+ if value.get("TYPE", '') == "s3":
+ client, bucket = self.s3Client(value)
try:
client.head_object(Bucket=bucket, Key=path)
client.download_file(bucket, path, default_storage.base_location + '/' + path)
@@ -298,7 +300,7 @@ class SessionReplayViewSet(viewsets.ViewSet):
REGION = config.get("REGION", None)
ACCESS_KEY = config.get("ACCESS_KEY", None)
SECRET_KEY = config.get("SECRET_KEY", None)
- if self.ACCESS_KEY and REGION and SECRET_KEY:
+ if ACCESS_KEY and REGION and SECRET_KEY:
s3 = boto3.client('s3',
region_name=REGION,
aws_access_key_id=ACCESS_KEY,
diff --git a/apps/terminal/models.py b/apps/terminal/models.py
index 91ac8e052..5829fa2e1 100644
--- a/apps/terminal/models.py
+++ b/apps/terminal/models.py
@@ -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)
diff --git a/apps/terminal/tasks.py b/apps/terminal/tasks.py
index 89f9cc5cc..e267b30b7 100644
--- a/apps/terminal/tasks.py
+++ b/apps/terminal/tasks.py
@@ -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()
diff --git a/apps/users/migrations/0002_auto_20171225_1157.py b/apps/users/migrations/0002_auto_20171225_1157.py
deleted file mode 100644
index 6b5bae73c..000000000
--- a/apps/users/migrations/0002_auto_20171225_1157.py
+++ /dev/null
@@ -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'),
- ),
- ]
diff --git a/docs/_static/img/admin_asset.png b/docs/_static/img/admin_asset.png
new file mode 100644
index 000000000..a4d33d475
Binary files /dev/null and b/docs/_static/img/admin_asset.png differ
diff --git a/docs/_static/img/admin_user.png b/docs/_static/img/admin_user.png
new file mode 100644
index 000000000..de844ad21
Binary files /dev/null and b/docs/_static/img/admin_user.png differ
diff --git a/docs/_static/img/dash_board.png b/docs/_static/img/dash_board.png
new file mode 100644
index 000000000..ffb940668
Binary files /dev/null and b/docs/_static/img/dash_board.png differ
diff --git a/docs/_static/img/linux_terminal.png b/docs/_static/img/linux_terminal.png
new file mode 100644
index 000000000..c745a826e
Binary files /dev/null and b/docs/_static/img/linux_terminal.png differ
diff --git a/docs/_static/img/logo-text.png b/docs/_static/img/logo-text.png
old mode 100644
new mode 100755
index cb76b555a..f4912a08f
Binary files a/docs/_static/img/logo-text.png and b/docs/_static/img/logo-text.png differ
diff --git a/docs/_static/img/windows_terminal.png b/docs/_static/img/windows_terminal.png
new file mode 100644
index 000000000..14f56e57b
Binary files /dev/null and b/docs/_static/img/windows_terminal.png differ
diff --git a/docs/admin_asset.rst b/docs/admin_asset.rst
index 758db8912..03aec1675 100644
--- a/docs/admin_asset.rst
+++ b/docs/admin_asset.rst
@@ -1,2 +1,12 @@
资产管理模块
-=============
\ No newline at end of file
+=============
+
+这里介绍资产管理模块功能。
+
+.. toctree::
+ :maxdepth: 1
+
+ asset_list
+ asset_admin_user
+ asset_system_user
+ asset_label
\ No newline at end of file
diff --git a/docs/admin_guide.rst b/docs/admin_guide.rst
index df59969cc..fd770c17c 100644
--- a/docs/admin_guide.rst
+++ b/docs/admin_guide.rst
@@ -6,5 +6,10 @@
.. toctree::
:maxdepth: 1
+ admin_instruction
admin_user
admin_asset
+ admin_permission
+ admin_work_center
+ admin_session
+ admin_system_settings
diff --git a/docs/admin_instruction.rst b/docs/admin_instruction.rst
new file mode 100644
index 000000000..3e513b92d
--- /dev/null
+++ b/docs/admin_instruction.rst
@@ -0,0 +1,44 @@
+架构说明
+=================
+
+.. image:: _static/img/structure.png
+ :alt: 组件架构图
+
+
+组件说明
+=================
+
+Jumpserver
+```````````
+现指Jumpserver管理后台,是核心组件(Core), 使用 Django Class Based View 风格开发,支持Restful API。
+
+`Github `_
+
+
+Coco
+````````
+实现了SSH Server 和 Web Terminal Server的组件,提供ssh和websocket接口, 使用 Paramiko 和 Flask 开发。
+
+
+`Github `__
+
+
+Luna
+````````
+现在是Web Terminal前端,计划前端页面都由该项目提供,Jumpserver只提供API,不再负责后台渲染html等。
+
+`Github `__
+
+
+Guacamole
+```````````
+Apache 跳板机项目,Jumpserver使用其组件实现RDP功能,Jumpserver并没有修改其代码而是添加了额外的插件,支持Jumpserver调用
+
+
+Jumpserver-python-sdk
+```````````````````````
+Jumpserver API Python SDK,Coco目前使用该SDK与Jumpserver API交互
+
+`Github `__
+
+
diff --git a/docs/admin_permission.rst b/docs/admin_permission.rst
new file mode 100644
index 000000000..0bd5c3bde
--- /dev/null
+++ b/docs/admin_permission.rst
@@ -0,0 +1,9 @@
+权限管理模块
+=============
+
+这里介绍权限管理功能。
+
+.. toctree::
+ :maxdepth: 1
+
+ permission_asset_authorized
diff --git a/docs/admin_session.rst b/docs/admin_session.rst
new file mode 100644
index 000000000..90b38e4e8
--- /dev/null
+++ b/docs/admin_session.rst
@@ -0,0 +1,13 @@
+会话管理模块
+==============
+
+这里介绍会话管理功能。
+
+.. toctree::
+ :maxdepth: 1
+
+ session_history
+ session_online
+ session_command
+ session_web_terminal
+ session_terminal
\ No newline at end of file
diff --git a/docs/admin_system_settings.rst b/docs/admin_system_settings.rst
new file mode 100644
index 000000000..eca804a62
--- /dev/null
+++ b/docs/admin_system_settings.rst
@@ -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 ,进入终端设置页面,编辑终端信息,点击“提交”按钮,终端设置完成。
\ No newline at end of file
diff --git a/docs/admin_user.rst b/docs/admin_user.rst
index cdce938e1..0d74b38b3 100644
--- a/docs/admin_user.rst
+++ b/docs/admin_user.rst
@@ -1,51 +1,11 @@
-用户管理
-========
+用户管理模块
+=============
-这里介绍用户管理模块的功能。
+这里介绍用户管理功能。
-点击页面左侧“用户列表”菜单下的“用户列表,进入用户列表页面。
+.. toctree::
+ :maxdepth: 1
-.. contents:: Topics
-
-.. _create_user:
-
-创建用户
-````````
-
-点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
-
-
-.. _update_user:
-
-更新用户
-````````
-
-点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
-
-.. _delete_user:
-
-删除用户
-````````
-
-点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
-
-.. _export_user:
-
-导出用户
-````````
-
-选中用户,点击右上角的“导出”按钮,导出用户完成。
-
-.. _inport_user:
-
-导入用户
-````````
-
-点击右上角的“导入”按钮,弹出导入对话框,选择要导入的CSV格式文件,点击“确认”按钮,导入用户完成。
-
-.. _batch_operation:
-
-批量操作
-````````
-
-选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。
\ No newline at end of file
+ user
+ user_group
+ login_log
\ No newline at end of file
diff --git a/docs/admin_work_center.rst b/docs/admin_work_center.rst
new file mode 100644
index 000000000..a15e2095c
--- /dev/null
+++ b/docs/admin_work_center.rst
@@ -0,0 +1,9 @@
+作业中心模块
+==============
+
+这里介绍作业中心功能。
+
+.. toctree::
+ :maxdepth: 1
+
+ work_center_list
\ No newline at end of file
diff --git a/docs/asset_admin_user.rst b/docs/asset_admin_user.rst
new file mode 100644
index 000000000..4ebebe8b5
--- /dev/null
+++ b/docs/asset_admin_user.rst
@@ -0,0 +1,35 @@
+管理用户
+==========
+
+这里介绍管理用户的功能。
+
+.. contents:: Topics
+
+.. _view_admin_user_list:
+
+查看管理用户列表
+````````````````
+
+点击页面左侧“资产管理“菜单下的“管理用户”按钮,进入管理用户列表页面,查看管理用户的名称、资产数等信息。
+
+
+.. _create_admin_user:
+
+创建管理用户
+````````````
+
+点击页面左上角的“创建管理用户“按钮,进入创建管理用户界面,填写名称、用户名、密码、ssh私钥等信息,点击“提交”按钮,完成管理用户创建。
+
+.. _update_admin_user:
+
+更新管理用户
+````````````
+
+点击页面右边动作栏的“更新”按钮,进入更新管理用户页面,编辑管理用户的信息,点击“提交”按钮,完成管理用户更新。
+
+.. _delete_admin_user:
+
+删除管理用户
+````````````
+
+点击页面右边动作栏的“删除”按钮,弹出删除确认框,点击"确认"按钮,管理用户删除完成。
\ No newline at end of file
diff --git a/docs/asset_label.rst b/docs/asset_label.rst
new file mode 100644
index 000000000..abc723df3
--- /dev/null
+++ b/docs/asset_label.rst
@@ -0,0 +1,34 @@
+标签管理
+============
+
+这里介绍标签管理的功能。
+
+.. contents:: Topics
+
+.. _view_label_list:
+
+查看标签列表
+````````````````
+
+点击页面左边“资产管理”菜单下的“标签管理”按钮,进入标签列表页面,产看标签的名称、值、资产数等信息。
+
+.. _create_label:
+
+创建标签
+````````````
+
+点击页面左上角“创建标签”按钮,进入创建标签页面,填写标签的名称、值等信息,选择资产,点击“提交”按钮,标签创建完成。
+
+.. _update_label:
+
+更新标签
+````````````
+
+点击页面右边动作栏的“更新”按钮,进入更新标签页面,编辑标签信息,点击“提交”按钮,标签更新完成。
+
+.. _delete_label:
+
+删除标签
+`````````
+
+点击页面右边动作栏的“删除”按钮,弹出删除确认框,点击“确认”按钮,完成标签删除。
\ No newline at end of file
diff --git a/docs/asset_list.rst b/docs/asset_list.rst
new file mode 100644
index 000000000..3d1f75adc
--- /dev/null
+++ b/docs/asset_list.rst
@@ -0,0 +1,41 @@
+资产列表
+===========
+
+这里介绍资产列表的功能。
+
+.. contents:: Topics
+
+.. _view_asset_list:
+
+查看资产列表
+`````````````
+
+点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
+
+.. _create_asset:
+
+创建资产
+````````````
+
+点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息,点击“提交”按钮,完成资产创建。
+
+.. _update_asset:
+
+更新资产
+````````````
+
+点击页面右边的“更新”按钮,进入编辑资产页面,更新资产信息,点击“提交”按钮,完成资产更新。
+
+.. _delete_asset:
+
+删除资产
+`````````
+
+点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,完成资产删除。
+
+.. _batch_operation:
+
+批量操作
+````````````
+
+选中资产,选择页面左下角批量操作选项,点击“提交”按钮,完成批量操作。
\ No newline at end of file
diff --git a/docs/asset_system_user.rst b/docs/asset_system_user.rst
new file mode 100644
index 000000000..de695eeb8
--- /dev/null
+++ b/docs/asset_system_user.rst
@@ -0,0 +1,34 @@
+系统用户
+===========
+
+这里介绍系统用户功能。
+
+.. contents:: Topics
+
+.. _view_admin_system_user:
+
+查看系统用户
+````````````
+
+点击页面左侧“资产管理“菜单下的”系统用户“按钮,进入系统用户列表页面,查看系统用户的名称,资产数和连接数等信息。
+
+.. _create_admin_system_user:
+
+创建系统用户
+````````````
+
+点击页面左上角的“创建系统用户“按钮,进入创建系统用户页面,填写系统用户的基本信息、认证信息和其它信息,点击“提交“按钮,完成系统用户创建。
+
+.. _update_admin_system_user:
+
+更新系统用户
+`````````````
+
+点击页面动作栏的“更新”按钮,进入更新系统用户页面,编辑系统用户信息,点击“提交”按钮,系统用户更新完成。
+
+.. _delete_admin_system_user:
+
+删除系统用户
+`````````````
+
+点击页面动作栏的“删除”按钮,弹出删除确认框,点击“删除”按钮,完成删除系统用户。
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
index 068048c0f..2012ac65e 100644
--- a/docs/conf.py
+++ b/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'),
]
diff --git a/docs/contact.rst b/docs/contact.rst
index 767554517..789207779 100644
--- a/docs/contact.rst
+++ b/docs/contact.rst
@@ -1,6 +1,11 @@
联系方式
+++++++++++++++++++++++++
+商业支持
+~~~~~~~~~~~
+
+https://market.aliyun.com/products/53690006/cmgj026011.html
+
QQ群
~~~~~~~~
@@ -11,7 +16,7 @@ QQ群
Github
~~~~~~~~
-
+
https://github.com/jumpserver/jumpserver.git
diff --git a/docs/contributor.rst b/docs/contributor.rst
index 05c2604f1..4c351291f 100644
--- a/docs/contributor.rst
+++ b/docs/contributor.rst
@@ -1,13 +1,17 @@
贡献者
-++++++++++++++++++++++++
+=============
感谢一下朋友为Jumpserver做出的贡献,世界因你们而不同,排名不分先后
-- **小彧 <李磊>** Django资深开发者,为用户模块贡献了很多代码
-- **sofia <周小侠>** 资深前端工程师, 前端代码贡献者
-- **liuz <刘正> 全栈工程师** 编写了Web terminal大部分代码
+- **小彧 <李磊>** Django 资深开发者,为用户模块贡献了很多代码
+- **sofia <周小侠>** 资深前端工程师, 前端代码贡献者
+- **liuz <刘正> 全栈工程师** 编写了 Web Terminal 大部分代码
- **jiaxiangkong <陈尚委>** Jumpserver测试运营
- **halcyon <王墉>** DevOps 资深开发者, 0.3.2 核心开发者之一
-- **yumaojun03 <喻茂峻>** DevOps 资深开发者,擅长Python, Go以及PAAS平台开发
-- **kelianchun <柯连春>** DevOps 资产开发者,fix了很多bug
\ No newline at end of file
+- **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 版本测试,给资产树设计贡献了很多建议
\ No newline at end of file
diff --git a/docs/index.rst b/docs/index.rst
index 787f05564..41a9ffcb0 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -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
diff --git a/docs/introduce.rst b/docs/introduce.rst
new file mode 100644
index 000000000..eff6f16ca
--- /dev/null
+++ b/docs/introduce.rst
@@ -0,0 +1,12 @@
+总体介绍
+==================
+
+欢迎来到 Jumpserver 文档。
+
+Jumpserver是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合 4A 的专业运维审计系统。
+
+Jumpserver使用Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
+
+Jumpserver采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发访问限制。
+
+改变世界,从一点点开始。
\ No newline at end of file
diff --git a/docs/login_log.rst b/docs/login_log.rst
new file mode 100644
index 000000000..73debfa8a
--- /dev/null
+++ b/docs/login_log.rst
@@ -0,0 +1,6 @@
+登录日志
+==========
+
+这里介绍登录日志的功能。
+
+点击页面左侧“用户管理”菜单下的“登录日志”按钮,进入登录日志页面。
\ No newline at end of file
diff --git a/docs/old/README.md b/docs/old/README.md
deleted file mode 100644
index a3698f4c9..000000000
--- a/docs/old/README.md
+++ /dev/null
@@ -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)
\ No newline at end of file
diff --git a/docs/old/api_style_guide.md b/docs/old/api_style_guide.md
deleted file mode 100644
index 928b02a98..000000000
--- a/docs/old/api_style_guide.md
+++ /dev/null
@@ -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中的可变部分(比如上面提到的)
-一般用来传递该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
-
diff --git a/docs/old/django_class_base_view_inheritance.py b/docs/old/django_class_base_view_inheritance.py
deleted file mode 100644
index 434c28af6..000000000
--- a/docs/old/django_class_base_view_inheritance.py
+++ /dev/null
@@ -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
diff --git a/docs/old/install.md b/docs/old/install.md
deleted file mode 100644
index 1a6892f53..000000000
--- a/docs/old/install.md
+++ /dev/null
@@ -1 +0,0 @@
-More see [安装文档](https://github.com/jumpserver/jumpserver/wiki/v0.5.0-%E5%9F%BA%E4%BA%8E-CentOS7)
diff --git a/docs/old/project_structure.md b/docs/old/project_structure.md
deleted file mode 100644
index 3cc9b8f94..000000000
--- a/docs/old/project_structure.md
+++ /dev/null
@@ -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 // 项目模板目录
-```
diff --git a/docs/old/python_style_guide.md b/docs/old/python_style_guide.md
deleted file mode 100644
index 22de0dfa4..000000000
--- a/docs/old/python_style_guide.md
+++ /dev/null
@@ -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)
-```
-
diff --git a/docs/old/table_design.xml b/docs/old/table_design.xml
deleted file mode 100644
index acc1fe395..000000000
--- a/docs/old/table_design.xml
+++ /dev/null
@@ -1,795 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR(20)
-'NULL'
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR(30)
-
-
-BINARY
-NULL
-
-VARCHAR(20)
-NULL
-
-VARBINARY
-NULL
-
-INTEGER
-0
-
-INTEGER
-0
-
-INTEGER
-0
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-CHAR
-NULL
-
-DATETIME
-'now()'
-
-DATETIME
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-DATETIME
-NULL
-
-VARCHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-CHAR
-NULL
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARBINARY
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-DATETIME
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-DATETIME
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-INTEGER
-NULL
-
-DATETIME
-NULL
-
-DATE
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-TIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-id
-
-
-
-
-INTEGER
-NULL
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-DATE
-NULL
-
-DATE
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-DATETIME
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-VARCHAR
-NULL
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-CHAR
-NULL
-
-INTEGER
-NULL
-
-DATETIME
-NULL
-
-DATETIME
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-DATE
-NULL
-
-DATE
-NULL
-
-id
-
-
-
-
-INTEGER
-NULL
-
-INTEGER
-NULL
-
-
-INTEGER
-NULL
-
-
-CHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-VARCHAR
-NULL
-
-INTEGER
-NULL
-
-DATETIME
-NULL
-
-TIME
-NULL
-
-id
-
-
-
-
diff --git a/docs/permission_asset_authorized.rst b/docs/permission_asset_authorized.rst
new file mode 100644
index 000000000..70e109b26
--- /dev/null
+++ b/docs/permission_asset_authorized.rst
@@ -0,0 +1,34 @@
+资产授权
+=========
+
+这里介绍资产授权的相关的功能。
+
+.. contents:: Topics
+
+.. _view_asset_authorized:
+
+查看资产授权规则列表
+````````````````````
+
+资产授权页面默认展示资产授权列表。点击左侧资产节点树下的节点,右侧展示此节点下的资产授权规则。
+
+.. _create_asset_authorized:
+
+创建授权规则
+````````````
+在左侧资产节点树下选择要创建授权规则的节点,点击页面右侧创建授权规则进入创建授权规则页面,填写授权规则信息,点击提交,完成创建授权规则。
+
+.. _update_asset_authorized:
+
+更新授权规则
+````````````
+
+在左侧资产节点树下选择要更新授权规则的节点,在右侧授权规则列表中找到要更新的授权规则,点击“动作”标题下的“更新”按钮进入授权规则更新页面,填写授权规则信息,点击提交,完成创建授权规则。
+
+.. _delete_asset_authorized:
+
+删除授权规则
+````````````
+
+在左侧资产节点树下选择要删除授权规则的节点,在右侧授权规则列表中找到要删除的授权规则,点击“动作”标题下的“删除”按钮,弹出确认删除页面,点击确认,完成删除授权规则。
+
diff --git a/docs/python_style_guide.rst b/docs/python_style_guide.rst
index de7bae56f..976e627ed 100644
--- a/docs/python_style_guide.rst
+++ b/docs/python_style_guide.rst
@@ -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空格可以显著降低视觉上的负担。
最大行长度
diff --git a/docs/quickstart.rst b/docs/quickstart.rst
index 7892999fe..7e391b11f 100644
--- a/docs/quickstart.rst
+++ b/docs/quickstart.rst
@@ -13,7 +13,7 @@ Docker 安装见: `Docker官方安装文档 `_
```````````````
使用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
仓库地址
diff --git a/docs/session_command.rst b/docs/session_command.rst
new file mode 100644
index 000000000..a1296f86f
--- /dev/null
+++ b/docs/session_command.rst
@@ -0,0 +1,30 @@
+命令记录
+=========
+
+这里介绍命令记录功能。
+
+点击页面左侧“会话管理”菜单下的“命令记录”,进入命令记录列表页面。
+
+.. contents:: Topics
+
+.. _view_command_session:
+
+查看命令记录
+`````````````
+
+命令记录页面默认展示一周内命令记录,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
+
+.. _detial_command_invoke:
+
+查看命令执行详情
+````````````````
+
+点击命令记录列表中需要查看命令执行详情的行,即可显示命令执行详情。
+
+.. _detial_command_session:
+
+转到会话详情
+`````````````
+
+在命令记录列表中找到需要转到会话详情的记录,点击“会话”标题下的“转到”按钮,完成转到会话详情。
+
diff --git a/docs/session_history.rst b/docs/session_history.rst
new file mode 100644
index 000000000..c4b63231f
--- /dev/null
+++ b/docs/session_history.rst
@@ -0,0 +1,22 @@
+历史会话
+=========
+
+这里介绍历史会话功能。
+
+点击页面左侧“会话管理”菜单下的“历史会话”,进入历史会话列表页面。
+
+.. contents:: Topics
+
+.. _view_history_session:
+
+查看历史会话
+`````````````
+
+历史会话页面默认展示一周内历史会话,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
+
+.. _playback_history_session:
+
+历史会话回放
+`````````````
+
+在在线会话列表中找到要回放的历史会话,点击动作标签下的“回放”按钮,弹出回放页面,完成回放历史会话。
\ No newline at end of file
diff --git a/docs/session_online.rst b/docs/session_online.rst
new file mode 100644
index 000000000..741725c1f
--- /dev/null
+++ b/docs/session_online.rst
@@ -0,0 +1,25 @@
+在线会话
+=========
+
+这里介绍在线会话功能。
+
+点击页面左侧“会话管理”菜单下的“在线会话”,进入在线会话列表页面。
+
+.. contents:: Topics
+
+.. _view_online_session:
+
+查看在线会话
+`````````````
+
+在线会话页面默认展示一周内在线会话,页面左上角提供起止时间、用户、资产、系统用户等搜索过滤条件。
+
+.. _stop_online_session:
+
+终断在线会话
+`````````````
+
+在在线会话列表中找到要终止的在线会话,点击动作标签下的“终断”按钮,完成终断在线会话。
+
+
+
diff --git a/docs/session_terminal.rst b/docs/session_terminal.rst
new file mode 100644
index 000000000..3f749af5c
--- /dev/null
+++ b/docs/session_terminal.rst
@@ -0,0 +1,29 @@
+终端管理
+=========
+
+这里介绍终端管理功能。
+
+点击页面左侧“会话管理”菜单下的“终端管理”,进入终端列表页面。
+
+.. contents:: Topics
+
+.. _view_terminal_session:
+
+查看终端列表
+`````````````
+
+终端列表页面默认展示全部终端列表。
+
+.. _upate_terminal_session:
+
+更新终端
+`````````````
+
+在在线会话列表中找到要更新的终端,点击动作标签下的“更新”按钮,在更新终端页面填写相关信息,点击提交,完成更新终端。
+
+.. _delete_terminal_session:
+
+删除终端
+`````````````
+
+在在线会话列表中找到要删除的终端,点击动作标签下的“删除”按钮,在弹出确认删除页面点击确认,完成删除终端。
diff --git a/docs/session_web_terminal.rst b/docs/session_web_terminal.rst
new file mode 100644
index 000000000..c388e44c4
--- /dev/null
+++ b/docs/session_web_terminal.rst
@@ -0,0 +1,23 @@
+Web终端
+=========
+
+这里介绍Web终端功能。
+
+点击页面左侧“会话管理”菜单下的“Web终端”,进入Web终端页面。
+
+.. contents:: Topics
+
+.. _login:
+
+主机登录
+`````````````
+
+点解页面左侧的”Web终端”,进入主机登录页,然后点击页面右侧的主机IP地址,连接主机,页面右侧会展示当前连接的终端信息。
+
+.. _logout:
+
+主机登出
+`````````````
+
+在主机登录页面,选择左上角的“服务器”按钮,出现两个选项,一个“断开链接“按钮,断开当前连接的主机;另一个”断开所有链接“,断开当前所有连接的主机。
+
diff --git a/docs/snapshot.rst b/docs/snapshot.rst
new file mode 100644
index 000000000..7266495c3
--- /dev/null
+++ b/docs/snapshot.rst
@@ -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
diff --git a/docs/step_by_step.rst b/docs/step_by_step.rst
index db4b08608..403395fea 100644
--- a/docs/step_by_step.rst
+++ b/docs/step_by_step.rst
@@ -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://: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://: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 / {
diff --git a/docs/user.rst b/docs/user.rst
new file mode 100644
index 000000000..c3bb1f61f
--- /dev/null
+++ b/docs/user.rst
@@ -0,0 +1,51 @@
+用户列表
+========
+
+这里介绍用户列表的功能。
+
+点击页面左侧“用户列表”菜单下的“用户列表“,进入用户列表页面。
+
+.. contents:: Topics
+
+.. _create_user:
+
+创建用户
+````````
+
+点击页面左上角“创建用户”按钮,进入创建用户页面,填写账户,角色安全,个人等信息,点击“提交”按钮,用户创建完成。
+
+
+.. _update_user:
+
+更新用户
+````````
+
+点击页面右边的“更新”按钮,进入编辑用户页面,编辑用户信息,点击“提交”按钮,更新用户完成。
+
+.. _delete_user:
+
+删除用户
+````````
+
+点击页面右边的“删除”按钮,弹出是否删除确认框,点击“确定”按钮,删除用户完成。
+
+.. _export_user:
+
+导出用户
+````````
+
+选中用户,点击右上角的“导出”按钮,导出用户完成。
+
+.. _import_user:
+
+导入用户
+````````
+
+点击右上角的“导入”按钮,弹出导入对话框,选择要导入的CSV格式文件,点击“确认”按钮,导入用户完成。
+
+.. _batch_user_operation:
+
+批量操作
+````````
+
+选中用户,选择页面左下角的批量操作选项,点击”提交“按钮,批量操作完成。
\ No newline at end of file
diff --git a/docs/user_group.rst b/docs/user_group.rst
new file mode 100644
index 000000000..90aca6c05
--- /dev/null
+++ b/docs/user_group.rst
@@ -0,0 +1,29 @@
+用户组列表
+============
+
+这里介绍用户组列表的功能。
+
+点击页面左侧“用户管理”菜单下的”用户组“,进入用户组列表页面。
+
+.. contents:: Topics
+
+.. _create_user_group:
+
+创建用户组
+``````````
+
+点击页面左上角“创建用户组”按钮,进入创建用户组页面,填写用户组信息,点击“提交”按钮,创建用户完成。
+
+.. _update_user_group:
+
+更新用户组
+``````````
+
+点击页面右边的“更新”按钮,进入编辑用户组页面,编辑用户组信息,点击“确认”按钮,更新用户组完成。
+
+.. _delete_user_group:
+
+删除用户组
+````````````
+
+点击页面右边的“删除”按钮,弹出删除确认框,点击“确认”按钮,删除用户组完成。
\ No newline at end of file
diff --git a/docs/work_center_list.rst b/docs/work_center_list.rst
new file mode 100644
index 000000000..2ba982676
--- /dev/null
+++ b/docs/work_center_list.rst
@@ -0,0 +1,35 @@
+任务列表
+=========
+
+这里介绍任务列表的相关的功能。
+
+.. contents:: Topics
+
+.. _view_asset_works:
+
+查看任务列表
+````````````
+
+任务列表页面默认展示一周内所有任务。点击标题可根据当前字段进行排序。
+
+.. _invoke_asset_work:
+
+手动执行任务
+````````````
+
+在任务列表中找到要手动执行的任务,点击“动作”标题下的“执行”按钮,完成手动执行当前任务。
+
+.. _delete_asset_work:
+
+删除任务
+`````````
+
+在任务列表中找到要删除的任务,点击“动作”标题下的“删除”按钮,完成删除当前任务。
+
+.. _detial_asset_work:
+
+查看任务详情
+`````````````
+
+在任务列表中找到要查看的任务,点击要查看的任务名称,即可进入任务详情页面。
+
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index 42f3bc36a..200d23480 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -1,13 +1,15 @@
amqp==2.1.4
-six==1.11.0
ansible==2.4.2.0
asn1crypto==0.24.0
bcrypt==3.1.4
billiard==3.5.0.3
+boto3==1.6.4
+botocore==1.9.4
celery==4.1.0
certifi==2017.11.5
cffi==1.11.2
chardet==3.0.4
+configparser==3.5.0
coreapi==2.3.3
coreschema==0.0.4
cryptography==2.1.4
@@ -15,6 +17,7 @@ decorator==4.1.2
Django==1.11
django-auth-ldap==1.3.0
django-bootstrap3==9.1.0
+django-celery-beat==1.1.1
django-filter==1.1.0
django-formtools==2.1
django-ranged-response==0.2.0
@@ -23,15 +26,21 @@ django-rest-swagger==2.1.2
django-simple-captcha==0.5.6
djangorestframework==3.7.3
djangorestframework-bulk==0.2.1
+docutils==0.14
ecdsa==0.13
+elasticsearch==6.1.1
enum-compat==0.0.2
+ephem==3.7.6.0
eventlet==0.21.0
ForgeryPy==0.1
greenlet==0.4.12
+gunicorn==19.7.1
idna==2.6
itsdangerous==0.24
itypes==1.1.0
Jinja2==2.10
+jmespath==0.9.3
+jms-es-sdk
kombu==4.0.2
ldap3==2.4
MarkupSafe==1.0
@@ -46,18 +55,16 @@ pycparser==2.18
pycrypto==2.6.1
pyldap==2.4.45
PyNaCl==1.2.1
+python-dateutil==2.6.1
+python-gssapi==0.6.4
pytz==2017.3
PyYAML==3.12
redis==2.10.6
requests==2.18.4
+s3transfer==0.1.13
simplejson==3.13.2
+six==1.11.0
sshpubkeys==2.2.0
uritemplate==3.0.0
urllib3==1.22
vine==1.1.4
-gunicorn==19.7.1
-#https://github.com/celery/django-celery-beat/zipball/master#egg=django-celery-beat
-django_celery_beat==1.1.1
-ephem==3.7.6.0
-python-gssapi==0.6.4
-jms-es-sdk
diff --git a/tmp/.gitkeep b/tmp/.gitkeep
index a43b1b292..e69de29bb 100644
--- a/tmp/.gitkeep
+++ b/tmp/.gitkeep
@@ -1 +0,0 @@
-Because ansible connect remote host using key file path except key string, so I create this dir for keep them.
\ No newline at end of file
|