sources/oauth: add API to get provider types

Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
Jens Langhammer 2021-04-02 13:26:42 +02:00
parent 07702afe68
commit 7eb7fc2e12
1 changed files with 28 additions and 1 deletions

View File

@ -1,10 +1,16 @@
"""OAuth Source Serializer""" """OAuth Source Serializer"""
from django.urls.base import reverse_lazy from django.urls.base import reverse_lazy
from rest_framework.fields import SerializerMethodField from drf_yasg.utils import swagger_auto_schema
from rest_framework.decorators import action
from rest_framework.fields import CharField, SerializerMethodField
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from authentik.core.api.sources import SourceSerializer from authentik.core.api.sources import SourceSerializer
from authentik.core.api.utils import PassiveSerializer
from authentik.sources.oauth.models import OAuthSource from authentik.sources.oauth.models import OAuthSource
from authentik.sources.oauth.types.manager import MANAGER
class OAuthSourceSerializer(SourceSerializer): class OAuthSourceSerializer(SourceSerializer):
@ -37,9 +43,30 @@ class OAuthSourceSerializer(SourceSerializer):
extra_kwargs = {"consumer_secret": {"write_only": True}} extra_kwargs = {"consumer_secret": {"write_only": True}}
class OAuthSourceProviderType(PassiveSerializer):
"""OAuth Provider"""
name = CharField(read_only=True)
value = CharField(read_only=True)
class OAuthSourceViewSet(ModelViewSet): class OAuthSourceViewSet(ModelViewSet):
"""Source Viewset""" """Source Viewset"""
queryset = OAuthSource.objects.all() queryset = OAuthSource.objects.all()
serializer_class = OAuthSourceSerializer serializer_class = OAuthSourceSerializer
lookup_field = "slug" lookup_field = "slug"
@swagger_auto_schema(responses={200: OAuthSourceProviderType(many=True)})
@action(detail=False, pagination_class=None, filter_backends=[])
def provider_types(self, request: Request) -> Response:
"""Get all creatable source types"""
data = []
for key, value in MANAGER.get_name_tuple():
data.append(
{
"name": value,
"value": key,
}
)
return Response(OAuthSourceProviderType(data, many=True).data)