diff --git a/apps/applications/api/remote_app.py b/apps/applications/api/remote_app.py index 25b912398..45e5c097c 100644 --- a/apps/applications/api/remote_app.py +++ b/apps/applications/api/remote_app.py @@ -3,8 +3,9 @@ from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins import generics +from common.exceptions import JMSException from ..hands import IsOrgAdmin, IsAppUser -from ..models import RemoteApp, Application +from .. import models from ..serializers import RemoteAppSerializer, RemoteAppConnectionInfoSerializer @@ -14,7 +15,7 @@ __all__ = [ class RemoteAppViewSet(OrgBulkModelViewSet): - model = RemoteApp + model = models.RemoteApp filter_fields = ('name', 'type', 'comment') search_fields = filter_fields permission_classes = (IsOrgAdmin,) @@ -22,6 +23,12 @@ class RemoteAppViewSet(OrgBulkModelViewSet): class RemoteAppConnectionInfoApi(generics.RetrieveAPIView): - model = Application + model = models.Application permission_classes = (IsAppUser, ) serializer_class = RemoteAppConnectionInfoSerializer + + def get_object(self): + obj = super().get_object() + if not models.Category.is_remote_app(obj.category): + raise JMSException('The request instance is not of category `remote_app`') + return obj diff --git a/apps/applications/models/application.py b/apps/applications/models/application.py index 3a21942f2..35f6171c5 100644 --- a/apps/applications/models/application.py +++ b/apps/applications/models/application.py @@ -112,6 +112,10 @@ class Category(ChoiceSet): mapper = cls.get_category_serializer_mapper() return mapper.get(cg, None) + @classmethod + def is_remote_app(cls, cg): + return cg == cls.remote_app + class Application(CommonModelMixin, OrgModelMixin): name = models.CharField(max_length=128, verbose_name=_('Name')) diff --git a/apps/applications/serializers/remote_app.py b/apps/applications/serializers/remote_app.py index 81f36b3d3..d0db0ce90 100644 --- a/apps/applications/serializers/remote_app.py +++ b/apps/applications/serializers/remote_app.py @@ -106,11 +106,12 @@ class RemoteAppSerializer(BulkOrgResourceModelSerializer): class RemoteAppConnectionInfoSerializer(serializers.ModelSerializer): parameter_remote_app = serializers.SerializerMethodField() + asset = serializers.SerializerMethodField() class Meta: model = Application fields = [ - 'id', 'name', 'parameter_remote_app', + 'id', 'name', 'asset', 'parameter_remote_app', ] read_only_fields = ['parameter_remote_app'] @@ -144,3 +145,7 @@ class RemoteAppConnectionInfoSerializer(serializers.ModelSerializer): 'parameters': parameters, } return parameter + + @staticmethod + def get_asset(obj): + return obj.attrs.get('asset')