From d7a979d23c4ad900e5a70ee9568129e23e84f217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 5 Jul 2016 17:08:14 +0200 Subject: [PATCH] Migrating external apps --- taiga/external_apps/api.py | 10 +++--- taiga/external_apps/serializers.py | 45 +++++++++++-------------- taiga/external_apps/validators.py | 54 ++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 taiga/external_apps/validators.py diff --git a/taiga/external_apps/api.py b/taiga/external_apps/api.py index 931337a8..8ded55d5 100644 --- a/taiga/external_apps/api.py +++ b/taiga/external_apps/api.py @@ -17,6 +17,7 @@ # along with this program. If not, see . from . import serializers +from . import validators from . import models from . import permissions from . import services @@ -27,12 +28,12 @@ from taiga.base.api import ModelCrudViewSet, ModelRetrieveViewSet from taiga.base.api.utils import get_object_or_404 from taiga.base.decorators import list_route, detail_route -from django.db import transaction from django.utils.translation import ugettext_lazy as _ class Application(ModelRetrieveViewSet): serializer_class = serializers.ApplicationSerializer + validator_class = validators.ApplicationValidator permission_classes = (permissions.ApplicationPermission,) model = models.Application @@ -61,6 +62,7 @@ class Application(ModelRetrieveViewSet): class ApplicationToken(ModelCrudViewSet): serializer_class = serializers.ApplicationTokenSerializer + validator_class = validators.ApplicationTokenValidator permission_classes = (permissions.ApplicationTokenPermission,) def get_queryset(self): @@ -87,9 +89,9 @@ class ApplicationToken(ModelCrudViewSet): auth_code = request.DATA.get("auth_code", None) state = request.DATA.get("state", None) application_token = get_object_or_404(models.ApplicationToken, - application__id=application_id, - auth_code=auth_code, - state=state) + application__id=application_id, + auth_code=auth_code, + state=state) application_token.generate_token() application_token.save() diff --git a/taiga/external_apps/serializers.py b/taiga/external_apps/serializers.py index 095465fd..12ed3bab 100644 --- a/taiga/external_apps/serializers.py +++ b/taiga/external_apps/serializers.py @@ -16,9 +16,8 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import json - from taiga.base.api import serializers +from taiga.base.fields import Field from . import models from . import services @@ -26,33 +25,27 @@ from . import services from django.utils.translation import ugettext as _ -class ApplicationSerializer(serializers.ModelSerializer): - class Meta: - model = models.Application - fields = ("id", "name", "web", "description", "icon_url") +class ApplicationSerializer(serializers.LightSerializer): + id = Field() + name = Field() + web = Field() + description = Field() + icon_url = Field() -class ApplicationTokenSerializer(serializers.ModelSerializer): - cyphered_token = serializers.CharField(source="cyphered_token", read_only=True) - next_url = serializers.CharField(source="next_url", read_only=True) - application = ApplicationSerializer(read_only=True) - - class Meta: - model = models.ApplicationToken - fields = ("user", "id", "application", "auth_code", "next_url") +class ApplicationTokenSerializer(serializers.LightSerializer): + id = Field() + user = Field(attr="user_id") + application = ApplicationSerializer() + auth_code = Field() + next_url = Field() -class AuthorizationCodeSerializer(serializers.ModelSerializer): - next_url = serializers.CharField(source="next_url", read_only=True) - class Meta: - model = models.ApplicationToken - fields = ("auth_code", "state", "next_url") +class AuthorizationCodeSerializer(serializers.LightSerializer): + state = Field() + auth_code = Field() + next_url = Field() -class AccessTokenSerializer(serializers.ModelSerializer): - cyphered_token = serializers.CharField(source="cyphered_token", read_only=True) - next_url = serializers.CharField(source="next_url", read_only=True) - - class Meta: - model = models.ApplicationToken - fields = ("cyphered_token", ) +class AccessTokenSerializer(serializers.LightSerializer): + cyphered_token = Field() diff --git a/taiga/external_apps/validators.py b/taiga/external_apps/validators.py new file mode 100644 index 00000000..b2f2354d --- /dev/null +++ b/taiga/external_apps/validators.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino +# Copyright (C) 2014-2016 David Barragán +# Copyright (C) 2014-2016 Alejandro Alonso +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +from taiga.base.api import serializers + +from . import models +from taiga.base.api import validators + + +class ApplicationValidator(validators.ModelValidator): + class Meta: + model = models.Application + fields = ("id", "name", "web", "description", "icon_url") + + +class ApplicationTokenValidator(validators.ModelValidator): + cyphered_token = serializers.CharField(source="cyphered_token", read_only=True) + next_url = serializers.CharField(source="next_url", read_only=True) + application = ApplicationValidator(read_only=True) + + class Meta: + model = models.ApplicationToken + fields = ("user", "id", "application", "auth_code", "next_url") + + +class AuthorizationCodeValidator(validators.ModelValidator): + next_url = serializers.CharField(source="next_url", read_only=True) + class Meta: + model = models.ApplicationToken + fields = ("auth_code", "state", "next_url") + + +class AccessTokenValidator(validators.ModelValidator): + cyphered_token = serializers.CharField(source="cyphered_token", read_only=True) + next_url = serializers.CharField(source="next_url", read_only=True) + + class Meta: + model = models.ApplicationToken + fields = ("cyphered_token", )