feat: add client subscription startup policy
This commit is contained in:
+19
-7
@@ -1,5 +1,6 @@
|
||||
import logging
|
||||
|
||||
from config.client_subscription_policy import get_client_subscription_policy
|
||||
from django.http import HttpResponse
|
||||
from django.utils import timezone
|
||||
from django.utils.decorators import method_decorator
|
||||
@@ -651,11 +652,12 @@ class MigrationRequestDetailView(ExternalApiView):
|
||||
)
|
||||
|
||||
|
||||
def _release_unpublished_response(platform: str) -> dict:
|
||||
def _release_unpublished_response(platform: str, client_policy: dict) -> dict:
|
||||
return {
|
||||
"platform": platform,
|
||||
"release": None,
|
||||
"message": "暂未发布",
|
||||
"client_policy": client_policy,
|
||||
}
|
||||
|
||||
|
||||
@@ -673,15 +675,18 @@ class ClientLatestReleaseView(APIView):
|
||||
permission_classes = (AllowAny,)
|
||||
|
||||
def get(self, request):
|
||||
client_policy = get_client_subscription_policy()
|
||||
platform = (
|
||||
request.query_params.get("platform")
|
||||
or DownloadRelease.Platform.WINDOWS
|
||||
).strip().lower()
|
||||
if platform not in DownloadRelease.Platform.values:
|
||||
return Response(
|
||||
response = Response(
|
||||
api_error("bad_request", "参数错误"),
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
response["Cache-Control"] = "no-store"
|
||||
return response
|
||||
|
||||
release = (
|
||||
DownloadRelease.objects.filter(platform=platform, is_current=True)
|
||||
@@ -689,19 +694,23 @@ class ClientLatestReleaseView(APIView):
|
||||
.first()
|
||||
)
|
||||
if release is None:
|
||||
return Response(
|
||||
_release_unpublished_response(platform),
|
||||
response = Response(
|
||||
_release_unpublished_response(platform, client_policy),
|
||||
status=status.HTTP_200_OK,
|
||||
)
|
||||
response["Cache-Control"] = "no-store"
|
||||
return response
|
||||
|
||||
download_url = _absolute_download_url(request, release)
|
||||
if not download_url:
|
||||
return Response(
|
||||
_release_unpublished_response(platform),
|
||||
response = Response(
|
||||
_release_unpublished_response(platform, client_policy),
|
||||
status=status.HTTP_200_OK,
|
||||
)
|
||||
response["Cache-Control"] = "no-store"
|
||||
return response
|
||||
|
||||
return Response(
|
||||
response = Response(
|
||||
{
|
||||
"platform": platform,
|
||||
"release": {
|
||||
@@ -713,9 +722,12 @@ class ClientLatestReleaseView(APIView):
|
||||
"size_bytes": release.size_bytes,
|
||||
"published_at": timezone.localtime(release.updated_at).isoformat(),
|
||||
},
|
||||
"client_policy": client_policy,
|
||||
},
|
||||
status=status.HTTP_200_OK,
|
||||
)
|
||||
response["Cache-Control"] = "no-store"
|
||||
return response
|
||||
|
||||
|
||||
class PortalSessionApiView(APIView):
|
||||
|
||||
Reference in New Issue
Block a user