From 38e6047fa7a11c84fa4b1701feb6b77ce180d135 Mon Sep 17 00:00:00 2001
From: John Oliver <1615532+johnoliver@users.noreply.github.com>
Date: Wed, 1 Apr 2020 11:41:35 +0000
Subject: [PATCH] Add v1 reject frontend
---
.../main/kotlin/net/adoptopenjdk/api/v3/V3.kt | 5 ++-
.../api/v3/routes/AssetsResource.kt | 2 +-
.../api/v3/routes/BinaryResource.kt | 2 +-
.../net/adoptopenjdk/api/v3/routes/V1Route.kt | 36 +++++++++++++++++++
.../api/v3/routes/VersionResource.kt | 2 +-
.../routes/info/AvailableReleasesResource.kt | 2 +-
.../api/v3/routes/info/PlatformsResource.kt | 2 +-
.../api/v3/routes/info/ReleaseListResource.kt | 2 +-
.../api/v3/routes/info/VariantsResource.kt | 2 +-
.../v3/routes/stats/DownloadStatsResource.kt | 2 +-
.../net/adoptopenjdk/api/V1RouteTest.kt | 25 +++++++++++++
11 files changed, 73 insertions(+), 9 deletions(-)
create mode 100644 adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/V1Route.kt
create mode 100644 adoptopenjdk-api-v3-frontend/src/test/kotlin/net/adoptopenjdk/api/V1RouteTest.kt
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/V3.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/V3.kt
index 082460c2..da616382 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/V3.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/V3.kt
@@ -3,6 +3,7 @@ package net.adoptopenjdk.api.v3
import net.adoptopenjdk.api.v3.dataSources.APIDataStore
import net.adoptopenjdk.api.v3.routes.AssetsResource
import net.adoptopenjdk.api.v3.routes.BinaryResource
+import net.adoptopenjdk.api.v3.routes.V1Route
import net.adoptopenjdk.api.v3.routes.VersionResource
import net.adoptopenjdk.api.v3.routes.info.AvailableReleasesResource
import net.adoptopenjdk.api.v3.routes.info.PlatformsResource
@@ -30,7 +31,7 @@ const val DESCRIPTION = "
NOTICE: AdoptOpenJDK API v1 Has no
Server(url = "https://staging-api.adoptopenjdk.net")
],
info = Info(title = "v3", version = "3.0.0", description = DESCRIPTION))
-@ApplicationPath("/v3")
+@ApplicationPath("/")
class V3 : Application() {
private val resourceClasses: Set>
@@ -47,6 +48,7 @@ class V3 : Application() {
APIDataStore.getAdoptRepos()
resourceClasses = setOf(
+ V1Route::class.java,
AssetsResource::class.java,
BinaryResource::class.java,
AvailableReleasesResource::class.java,
@@ -65,3 +67,4 @@ class V3 : Application() {
return resourceClasses
}
}
+
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/AssetsResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/AssetsResource.kt
index b46965ca..0d179557 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/AssetsResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/AssetsResource.kt
@@ -36,7 +36,7 @@ import kotlin.math.min
@Tag(name = "Assets")
-@Path("/assets/")
+@Path("/v3/assets/")
@Produces(MediaType.APPLICATION_JSON)
class AssetsResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/BinaryResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/BinaryResource.kt
index defe5e11..9b1b3925 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/BinaryResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/BinaryResource.kt
@@ -34,7 +34,7 @@ import javax.ws.rs.core.Response
@Tag(name = "Binary")
-@Path("/binary/")
+@Path("/v3/binary/")
@Produces(MediaType.APPLICATION_JSON)
class BinaryResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/V1Route.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/V1Route.kt
new file mode 100644
index 00000000..d6604c92
--- /dev/null
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/V1Route.kt
@@ -0,0 +1,36 @@
+package net.adoptopenjdk.api.v3.routes
+
+import org.eclipse.microprofile.openapi.annotations.Operation
+import org.eclipse.microprofile.openapi.annotations.media.Schema
+import javax.ws.rs.GET
+import javax.ws.rs.Path
+import javax.ws.rs.Produces
+import javax.ws.rs.core.MediaType
+import javax.ws.rs.core.Response
+
+@Path("/v1/")
+@Schema(hidden = true)
+@Produces(MediaType.TEXT_PLAIN)
+class V1Route {
+
+ //Cant find a way to match nothing and something in the same request, so need 2
+ @GET
+ @Schema(hidden = true)
+ @Path("/{ignore: .*}")
+ @Operation(hidden = true)
+ fun get(): Response = reject()
+
+ @GET
+ @Schema(hidden = true)
+ @Path("/")
+ @Operation(hidden = true)
+ fun getRoot(): Response = reject()
+
+
+ private fun reject(): Response {
+ return Response
+ .status(Response.Status.GONE)
+ .entity("REMOVED: V1 has now been removed, please see https://api.adoptopenjdk.net for the latest version")
+ .build()
+ }
+}
\ No newline at end of file
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/VersionResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/VersionResource.kt
index d0cc4c09..0f909b8f 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/VersionResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/VersionResource.kt
@@ -16,7 +16,7 @@ import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Tag(name = "Version")
-@Path("/version/")
+@Path("/v3/version/")
@Produces(MediaType.APPLICATION_JSON)
class VersionResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/AvailableReleasesResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/AvailableReleasesResource.kt
index dede345a..aa3c5a5f 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/AvailableReleasesResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/AvailableReleasesResource.kt
@@ -10,7 +10,7 @@ import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Tag(name = "Release Info")
-@Path("/info/")
+@Path("/v3/info/")
@Produces(MediaType.APPLICATION_JSON)
class AvailableReleasesResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/PlatformsResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/PlatformsResource.kt
index aafe4859..df3a4135 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/PlatformsResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/PlatformsResource.kt
@@ -10,7 +10,7 @@ import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Tag(name = "Release Info")
-@Path("/info/")
+@Path("/v3/info/")
@Produces(MediaType.APPLICATION_JSON)
class PlatformsResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/ReleaseListResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/ReleaseListResource.kt
index 87f28dfd..5b5244e4 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/ReleaseListResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/ReleaseListResource.kt
@@ -22,7 +22,7 @@ import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Tag(name = "Release Info")
-@Path("/info")
+@Path("/v3/info")
@Produces(MediaType.APPLICATION_JSON)
class ReleaseListResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/VariantsResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/VariantsResource.kt
index bd81a738..dd4c6009 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/VariantsResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/info/VariantsResource.kt
@@ -10,7 +10,7 @@ import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Tag(name = "Release Info")
-@Path("/info")
+@Path("/v3/info")
@Produces(MediaType.APPLICATION_JSON)
class VariantsResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/stats/DownloadStatsResource.kt b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/stats/DownloadStatsResource.kt
index 4e7fedd4..217d3da9 100644
--- a/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/stats/DownloadStatsResource.kt
+++ b/adoptopenjdk-api-v3-frontend/src/main/kotlin/net/adoptopenjdk/api/v3/routes/stats/DownloadStatsResource.kt
@@ -26,7 +26,7 @@ import javax.ws.rs.core.MediaType
import javax.ws.rs.core.Response
-@Path("/stats/downloads")
+@Path("/v3/stats/downloads")
@Produces(MediaType.APPLICATION_JSON)
@Schema(hidden = true)
class DownloadStatsResource {
diff --git a/adoptopenjdk-api-v3-frontend/src/test/kotlin/net/adoptopenjdk/api/V1RouteTest.kt b/adoptopenjdk-api-v3-frontend/src/test/kotlin/net/adoptopenjdk/api/V1RouteTest.kt
new file mode 100644
index 00000000..2f04db82
--- /dev/null
+++ b/adoptopenjdk-api-v3-frontend/src/test/kotlin/net/adoptopenjdk/api/V1RouteTest.kt
@@ -0,0 +1,25 @@
+package net.adoptopenjdk.api
+
+import io.quarkus.test.junit.QuarkusTest
+import io.restassured.RestAssured
+import org.junit.jupiter.api.Test
+import javax.ws.rs.core.Response
+
+@QuarkusTest
+class V1RouteTest : BaseTest() {
+ @Test
+ fun v1ReturnsGone() {
+ listOf("/v1",
+ "/v1/",
+ "/v1/foo",
+ "/v1/foo/bar")
+ .forEach({ route ->
+ RestAssured.given()
+ .`when`()
+ .get(route)
+ .then()
+ .statusCode(Response.Status.GONE.statusCode)
+ })
+ }
+
+}
\ No newline at end of file