diff --git a/apps/static/img/avatar/admin.png b/apps/static/img/avatar/admin.png index 1948d1661..8462a8a18 100644 Binary files a/apps/static/img/avatar/admin.png and b/apps/static/img/avatar/admin.png differ diff --git a/apps/static/img/avatar/user.png b/apps/static/img/avatar/user.png index 1948d1661..8462a8a18 100644 Binary files a/apps/static/img/avatar/user.png and b/apps/static/img/avatar/user.png differ diff --git a/apps/terminal/api/applet/applet.py b/apps/terminal/api/applet/applet.py index c2b361ca6..5bd003a9c 100644 --- a/apps/terminal/api/applet/applet.py +++ b/apps/terminal/api/applet/applet.py @@ -87,6 +87,7 @@ class DownloadUploadMixin: class AppletViewSet(DownloadUploadMixin, JMSBulkModelViewSet): queryset = Applet.objects.all() serializer_class = serializers.AppletSerializer + filterset_fields = ['name', 'version', 'builtin', 'is_active'] search_fields = ['name', 'display_name', 'author'] rbac_perms = { 'upload': 'terminal.add_applet', diff --git a/apps/terminal/applets/navicat/README.md b/apps/terminal/applets/navicat/README.md index b46ffb9e5..602b6e15f 100644 --- a/apps/terminal/applets/navicat/README.md +++ b/apps/terminal/applets/navicat/README.md @@ -1,3 +1,55 @@ +# Lina + +Lina 是 JumpServer 的前端 UI 项目, 主要使用 [Vue](https://cn.vuejs.org/), [Element UI](https://element.eleme.cn/) 完成, +名字来源于 Dota 英雄 [Lina](https://baike.baidu.com/item/%E8%8E%89%E5%A8%9C/16693979) + +## 开发运行 + +``` +0. 前置条件: 部署运行好 JumpServer API 服务器 + +1. 安装依赖 +$ yarn install + +2. 修改 .env.development VUE_APP_CORE_HOST +# ... +VUE_APP_CORE_HOST = 'JUMPSERVER_APIHOST' + +3. 运行 +$ yarn serve + +4. 构建 +$ yarn build:prod +``` + +## 生产中部署 + +下载 RELEASE 文件,放到合适的目录,修改 nginx配置文件如下 + +``` +server { + listen 80; + + location /ui/ { + try_files $uri / /ui/index.html; + alias /opt/lina/; + } + + location / { + rewrite ^/(.*)$ /ui/$1 last; + } +} +``` + +## 致谢 + +- [Vue](https://cn.vuejs.org) 前端框架 +- [Element UI](https://element.eleme.cn/) 饿了么 UI组件库 +- [Vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) 项目脚手架 + +## License & Copyright + +Be consistent with [jumpserver](https://github.com/jumpserver/jumpserver) ## Navicat Premium diff --git a/apps/terminal/models/applet/applet.py b/apps/terminal/models/applet/applet.py index 6d0d0d3bf..1bad257f0 100644 --- a/apps/terminal/models/applet/applet.py +++ b/apps/terminal/models/applet/applet.py @@ -11,6 +11,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework.serializers import ValidationError from common.db.models import JMSBaseModel +from common.utils import lazyproperty __all__ = ['Applet', 'AppletPublication'] @@ -48,6 +49,14 @@ class Applet(JMSBaseModel): else: return default_storage.path('applets/{}'.format(self.name)) + @lazyproperty + def readme(self): + readme_file = os.path.join(self.path, 'README.md') + if os.path.isfile(readme_file): + with open(readme_file, 'r') as f: + return f.read() + return '' + @property def manifest(self): path = os.path.join(self.path, 'manifest.yml') diff --git a/apps/terminal/serializers/applet.py b/apps/terminal/serializers/applet.py index 64ae6eda2..f05f424c2 100644 --- a/apps/terminal/serializers/applet.py +++ b/apps/terminal/serializers/applet.py @@ -31,7 +31,7 @@ class AppletSerializer(serializers.ModelSerializer): model = Applet fields_mini = ['id', 'name', 'display_name', 'is_active'] read_only_fields = [ - 'icon', 'date_created', 'date_updated', + 'icon', 'readme', 'date_created', 'date_updated', ] fields = fields_mini + [ 'version', 'author', 'type', 'protocols',