From 76ca6d587ddca32978b3d736b0547d0978dee043 Mon Sep 17 00:00:00 2001
From: Bai <bugatti_it@163.com>
Date: Tue, 27 Oct 2020 17:45:57 +0800
Subject: [PATCH] =?UTF-8?q?perf(application):=20=E4=BF=AE=E6=94=B9?=
 =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BF=9C=E7=A8=8B=E5=BA=94=E7=94=A8=E8=BF=9E?=
 =?UTF-8?q?=E6=8E=A5=E5=8F=82=E6=95=B0=E7=9A=84API?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 apps/applications/api/remote_app.py         |  4 +--
 apps/applications/serializers/remote_app.py | 32 +++++++++++++++++----
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/apps/applications/api/remote_app.py b/apps/applications/api/remote_app.py
index 4bd9109fb..25b912398 100644
--- a/apps/applications/api/remote_app.py
+++ b/apps/applications/api/remote_app.py
@@ -4,7 +4,7 @@
 from orgs.mixins.api import OrgBulkModelViewSet
 from orgs.mixins import generics
 from ..hands import IsOrgAdmin, IsAppUser
-from ..models import RemoteApp
+from ..models import RemoteApp, Application
 from ..serializers import RemoteAppSerializer, RemoteAppConnectionInfoSerializer
 
 
@@ -22,6 +22,6 @@ class RemoteAppViewSet(OrgBulkModelViewSet):
 
 
 class RemoteAppConnectionInfoApi(generics.RetrieveAPIView):
-    model = RemoteApp
+    model = Application
     permission_classes = (IsAppUser, )
     serializer_class = RemoteAppConnectionInfoSerializer
diff --git a/apps/applications/serializers/remote_app.py b/apps/applications/serializers/remote_app.py
index 20eb3402a..81f36b3d3 100644
--- a/apps/applications/serializers/remote_app.py
+++ b/apps/applications/serializers/remote_app.py
@@ -11,7 +11,7 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer
 from assets.models import Asset
 
 from .. import const
-from ..models import RemoteApp
+from ..models import RemoteApp, Category, Application
 
 
 class RemmoteAppCategorySerializer(serializers.Serializer):
@@ -108,17 +108,39 @@ class RemoteAppConnectionInfoSerializer(serializers.ModelSerializer):
     parameter_remote_app = serializers.SerializerMethodField()
 
     class Meta:
-        model = RemoteApp
+        model = Application
         fields = [
-            'id', 'name', 'asset', 'parameter_remote_app',
+            'id', 'name', 'parameter_remote_app',
         ]
         read_only_fields = ['parameter_remote_app']
 
     @staticmethod
-    def get_parameter_remote_app(obj):
+    def get_parameters(obj):
+        """
+        返回Guacamole需要的RemoteApp配置参数信息中的parameters参数
+        """
+        serializer_cls = Category.get_type_serializer_cls(obj.type)
+        fields = serializer_cls().get_fields()
+        fields.pop('asset', None)
+        fields_name = list(fields.keys())
+        attrs = obj.attrs
+        _parameters = list()
+        _parameters.append(obj.type)
+        for field_name in list(fields_name):
+            value = attrs.get(field_name, None)
+            if not value:
+                continue
+            if field_name == 'path':
+                value = '\"%s\"' % value
+            _parameters.append(str(value))
+        _parameters = ' '.join(_parameters)
+        return _parameters
+
+    def get_parameter_remote_app(self, obj):
+        parameters = self.get_parameters(obj)
         parameter = {
             'program': const.REMOTE_APP_BOOT_PROGRAM_NAME,
             'working_directory': '',
-            'parameters': obj.parameters,
+            'parameters': parameters,
         }
         return parameter