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_permission.rst b/docs/admin_permission.rst new file mode 100644 index 000000000..a506aa8d3 --- /dev/null +++ b/docs/admin_permission.rst @@ -0,0 +1,9 @@ +权限管理 +========= + +这里介绍权限管理功能。 + +.. toctree:: + :maxdepth: 1 + + permission_asset_authorized \ 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..7fc0f828a --- /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..43ecf59e3 --- /dev/null +++ b/docs/asset_label.rst @@ -0,0 +1,2 @@ +标签管理 +============ \ 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..ff50705e6 --- /dev/null +++ b/docs/asset_system_user.rst @@ -0,0 +1,4 @@ +系统用户 +=========== + +这里介绍系统用户功能。 \ 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/faq.rst b/docs/faq.rst deleted file mode 100644 index d02cca126..000000000 --- a/docs/faq.rst +++ /dev/null @@ -1,2 +0,0 @@ -FAQ -+++++++++++++++++++++ \ 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..a9503e473 --- /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/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/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: + +查看任务详情 +````````````` + +在任务列表中找到要查看的任务,点击要查看的任务名称,即可进入任务详情页面。 +