diff --git a/hub/servicebroker/__init__.py b/hub/servicebroker/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hub/servicebroker/admin.py b/hub/servicebroker/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/hub/servicebroker/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/hub/servicebroker/apps.py b/hub/servicebroker/apps.py deleted file mode 100644 index 475685e..0000000 --- a/hub/servicebroker/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class ServicebrokerConfig(AppConfig): - default_auto_field = "django.db.models.BigAutoField" - name = "hub.servicebroker" diff --git a/hub/servicebroker/authentication.py b/hub/servicebroker/authentication.py deleted file mode 100644 index ed67608..0000000 --- a/hub/servicebroker/authentication.py +++ /dev/null @@ -1,34 +0,0 @@ -from django.conf import settings -from django.contrib.auth.models import User -from rest_framework import authentication -from rest_framework import exceptions - - -class ServiceBrokerAuthentication(authentication.BaseAuthentication): - def authenticate(self, request): - auth = request.META.get("HTTP_AUTHORIZATION") - if not auth: - return None - - try: - import base64 - - auth_type, auth_string = auth.split(" ") - if auth_type.lower() != "basic": - return None - - decoded = base64.b64decode(auth_string).decode("utf-8") - username, password = decoded.split(":") - - if ( - username == settings.BROKER_USERNAME - and password == settings.BROKER_PASSWORD - ): - # Use a dummy user for authentication - user = User(username=username, is_staff=True) - return (user, None) - - except Exception as e: - raise exceptions.AuthenticationFailed("Invalid credentials") - - raise exceptions.AuthenticationFailed("Invalid credentials") diff --git a/hub/servicebroker/migrations/__init__.py b/hub/servicebroker/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/hub/servicebroker/models.py b/hub/servicebroker/models.py deleted file mode 100644 index 71a8362..0000000 --- a/hub/servicebroker/models.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.db import models - -# Create your models here. diff --git a/hub/servicebroker/serializers.py b/hub/servicebroker/serializers.py deleted file mode 100644 index a4e3082..0000000 --- a/hub/servicebroker/serializers.py +++ /dev/null @@ -1,51 +0,0 @@ -from rest_framework import serializers -from hub.services.models import Service, CloudProvider - - -class ServicePlanSerializer(serializers.Serializer): - id = serializers.CharField() - name = serializers.CharField() - description = serializers.CharField() - metadata = serializers.DictField() - free = serializers.BooleanField(default=False) - - -class ServiceSerializer(serializers.Serializer): - id = serializers.CharField() - name = serializers.CharField() - description = serializers.CharField() - bindable = serializers.BooleanField(default=True) - plans = ServicePlanSerializer(many=True) - metadata = serializers.DictField() - tags = serializers.ListField(child=serializers.CharField()) - - -class CatalogSerializer(serializers.Serializer): - services = ServiceSerializer(many=True) - - -class ProvisionRequestSerializer(serializers.Serializer): - service_id = serializers.CharField() - plan_id = serializers.CharField() - organization_guid = serializers.CharField(required=False) - space_guid = serializers.CharField(required=False) - parameters = serializers.DictField(required=False) - - -class ProvisionResponseSerializer(serializers.Serializer): - dashboard_url = serializers.URLField(required=False) - operation = serializers.CharField(required=False, allow_null=True) - - -class BindingRequestSerializer(serializers.Serializer): - service_id = serializers.CharField() - plan_id = serializers.CharField() - bind_resource = serializers.DictField(required=False) - parameters = serializers.DictField(required=False) - - -class BindingResponseSerializer(serializers.Serializer): - credentials = serializers.DictField() - syslog_drain_url = serializers.URLField(required=False, allow_null=True) - route_service_url = serializers.URLField(required=False, allow_null=True) - volume_mounts = serializers.ListField(required=False) diff --git a/hub/servicebroker/tests.py b/hub/servicebroker/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/hub/servicebroker/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/hub/servicebroker/urls.py b/hub/servicebroker/urls.py deleted file mode 100644 index 0d11c28..0000000 --- a/hub/servicebroker/urls.py +++ /dev/null @@ -1,18 +0,0 @@ -from django.urls import path -from . import views - -app_name = "servicebroker" - -urlpatterns = [ - path("v2/catalog", views.CatalogView.as_view(), name="catalog"), - path( - "v2/service_instances/", - views.ProvisioningView.as_view(), - name="provisioning", - ), - path( - "v2/service_instances//service_bindings/", - views.BindingView.as_view(), - name="binding", - ), -] diff --git a/hub/servicebroker/views.py b/hub/servicebroker/views.py deleted file mode 100644 index f73e588..0000000 --- a/hub/servicebroker/views.py +++ /dev/null @@ -1,99 +0,0 @@ -from rest_framework.views import APIView -from rest_framework.response import Response -from rest_framework import status -from django.conf import settings -from .authentication import ServiceBrokerAuthentication -from .serializers import ( - CatalogSerializer, - ProvisionRequestSerializer, - ProvisionResponseSerializer, - BindingRequestSerializer, - BindingResponseSerializer, -) -from hub.services.models import Service - - -class ServiceBrokerView(APIView): - authentication_classes = [ServiceBrokerAuthentication] - - def get_broker_version(self, request): - return request.META.get("HTTP_X_BROKER_API_VERSION", "2.14") - - -class CatalogView(ServiceBrokerView): - def get(self, request): - services = [] - marketplace_services = Service.objects.all().prefetch_related( - "cloud_provider", "categories" - ) - - for service in marketplace_services: - plans = [] - - service_data = { - "id": f"service-{service.id}", - "name": service.name, - "description": service.description, - "bindable": True, - "plans": plans, - "metadata": { - "displayName": service.name, - "provider": service.cloud_provider.name, - "imageUrl": service.logo.url if service.logo else None, - "categories": [cat.name for cat in service.categories.all()], - }, - "tags": [cat.name for cat in service.categories.all()], - } - services.append(service_data) - - catalog = {"services": services} - serializer = CatalogSerializer(data=catalog) - serializer.is_valid(raise_exception=True) - return Response(serializer.data) - - -class ProvisioningView(ServiceBrokerView): - def put(self, request, instance_id): - serializer = ProvisionRequestSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - - service_id = serializer.validated_data["service_id"] - marketplace_service_id = service_id.replace("service-", "") - service = Service.objects.get(id=marketplace_service_id) - - response_data = { - "dashboard_url": f"{settings.BASE_URL}/service/{service.slug}/", - "operation": None, - } - - response_serializer = ProvisionResponseSerializer(data=response_data) - response_serializer.is_valid(raise_exception=True) - return Response(response_serializer.data, status=status.HTTP_201_CREATED) - - def delete(self, request, instance_id): - return Response(status=status.HTTP_200_OK) - - -class BindingView(ServiceBrokerView): - def put(self, request, instance_id, binding_id): - serializer = BindingRequestSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - - service_id = serializer.validated_data["service_id"] - marketplace_service_id = service_id.replace("service-", "") - service = Service.objects.get(id=marketplace_service_id) - - credentials = { - "service_name": service.name, - "provider": service.cloud_provider.name, - "service_url": f"{settings.BASE_URL}/service/{service.slug}/", - } - - response_data = {"credentials": credentials} - - response_serializer = BindingResponseSerializer(data=response_data) - response_serializer.is_valid(raise_exception=True) - return Response(response_serializer.data, status=status.HTTP_201_CREATED) - - def delete(self, request, instance_id, binding_id): - return Response(status=status.HTTP_200_OK) diff --git a/hub/settings.py b/hub/settings.py index ad1592c..9e73b30 100644 --- a/hub/settings.py +++ b/hub/settings.py @@ -60,7 +60,6 @@ INSTALLED_APPS = [ "schema_viewer", # local "hub.services", - "hub.servicebroker", ] if DEBUG: INSTALLED_APPS += ["django_browser_reload"] @@ -184,13 +183,6 @@ BROKER_USERNAME = env.str("BROKER_USERNAME", default="broker") BROKER_PASSWORD = env.str("BROKER_PASSWORD", default="secret") BASE_URL = "https://your-domain.com" -REST_FRAMEWORK = { - "DEFAULT_AUTHENTICATION_CLASSES": [ - "hub.servicebroker.authentication.ServiceBrokerAuthentication", - ], - "UNAUTHENTICATED_USER": None, -} - SCHEMA_VIEWER = { "apps": [ "services", diff --git a/hub/urls.py b/hub/urls.py index ff3cef1..37dced0 100644 --- a/hub/urls.py +++ b/hub/urls.py @@ -6,7 +6,6 @@ from django.urls import path, include urlpatterns = [ path("admin/", admin.site.urls), path("", include("hub.services.urls")), - path("broker/", include("hub.servicebroker.urls")), ] if settings.DEBUG: urlpatterns += [