fixed server prefix handling
This commit is contained in:
@@ -135,13 +135,13 @@ class ServerHandler(private val serverPrefix: Path) :
|
|||||||
setRequestMetadata(msg)
|
setRequestMetadata(msg)
|
||||||
val method = msg.method()
|
val method = msg.method()
|
||||||
if (method === HttpMethod.GET) {
|
if (method === HttpMethod.GET) {
|
||||||
val path = Path.of(msg.uri())
|
val path = Path.of(msg.uri()).normalize()
|
||||||
val prefix = path.parent
|
if (path.startsWith(serverPrefix)) {
|
||||||
if (serverPrefix == prefix) {
|
val relativePath = serverPrefix.relativize(path)
|
||||||
|
val key = relativePath.toString()
|
||||||
ctx.pipeline().addAfter(NAME, CacheContentHandler.NAME, CacheContentHandler)
|
ctx.pipeline().addAfter(NAME, CacheContentHandler.NAME, CacheContentHandler)
|
||||||
path.fileName?.toString()
|
key.let(::CacheGetRequest)
|
||||||
?.let(::CacheGetRequest)
|
.let(ctx::fireChannelRead)
|
||||||
?.let(ctx::fireChannelRead)
|
|
||||||
?: ctx.channel().write(CacheValueNotFoundResponse())
|
?: ctx.channel().write(CacheValueNotFoundResponse())
|
||||||
} else {
|
} else {
|
||||||
log.warn(ctx) {
|
log.warn(ctx) {
|
||||||
@@ -152,11 +152,10 @@ class ServerHandler(private val serverPrefix: Path) :
|
|||||||
ctx.writeAndFlush(response)
|
ctx.writeAndFlush(response)
|
||||||
}
|
}
|
||||||
} else if (method === HttpMethod.PUT) {
|
} else if (method === HttpMethod.PUT) {
|
||||||
val path = Path.of(msg.uri())
|
val path = Path.of(msg.uri()).normalize()
|
||||||
val prefix = path.parent
|
if (path.startsWith(serverPrefix)) {
|
||||||
val key = path.fileName.toString()
|
val relativePath = serverPrefix.relativize(path)
|
||||||
|
val key = relativePath.toString()
|
||||||
if (serverPrefix == prefix) {
|
|
||||||
log.debug(ctx) {
|
log.debug(ctx) {
|
||||||
"Added value for key '$key' to build cache"
|
"Added value for key '$key' to build cache"
|
||||||
}
|
}
|
||||||
|
@@ -118,6 +118,56 @@ class NoAuthServerTest : AbstractServerTest() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Order(4)
|
@Order(4)
|
||||||
|
fun getUnhandledPath() {
|
||||||
|
val client: HttpClient = HttpClient.newHttpClient()
|
||||||
|
val (key, _) = newEntry(random)
|
||||||
|
val requestBuilder = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("http://${cfg.host}:${cfg.port}/some/other/path/$key"))
|
||||||
|
val response: HttpResponse<ByteArray> =
|
||||||
|
client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray())
|
||||||
|
Assertions.assertEquals(HttpResponseStatus.BAD_REQUEST.code(), response.statusCode())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(5)
|
||||||
|
fun putUnhandledPath() {
|
||||||
|
val client: HttpClient = HttpClient.newHttpClient()
|
||||||
|
val (key, value) = newEntry(random)
|
||||||
|
val requestBuilder = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("http://${cfg.host}:${cfg.port}/some/other/path/$key"))
|
||||||
|
.PUT(HttpRequest.BodyPublishers.ofByteArray(value))
|
||||||
|
val response: HttpResponse<ByteArray> =
|
||||||
|
client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray())
|
||||||
|
Assertions.assertEquals(HttpResponseStatus.BAD_REQUEST.code(), response.statusCode())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(6)
|
||||||
|
fun getRelativeUnhandledPath() {
|
||||||
|
val client: HttpClient = HttpClient.newHttpClient()
|
||||||
|
val (key, _) = newEntry(random)
|
||||||
|
val requestBuilder = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("http://${cfg.host}:${cfg.port}/some/nested/path/../../../some/other/path/$key"))
|
||||||
|
val response: HttpResponse<ByteArray> =
|
||||||
|
client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray())
|
||||||
|
Assertions.assertEquals(HttpResponseStatus.BAD_REQUEST.code(), response.statusCode())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(7)
|
||||||
|
fun getRelativePath() {
|
||||||
|
val client: HttpClient = HttpClient.newHttpClient()
|
||||||
|
val (key, value) = keyValuePair
|
||||||
|
val requestBuilder = HttpRequest.newBuilder()
|
||||||
|
.uri(URI.create("http://${cfg.host}:${cfg.port}/some/other/path/../../nested/path/$key"))
|
||||||
|
val response: HttpResponse<ByteArray> =
|
||||||
|
client.send(requestBuilder.build(), HttpResponse.BodyHandlers.ofByteArray())
|
||||||
|
Assertions.assertEquals(HttpResponseStatus.OK.code(), response.statusCode())
|
||||||
|
Assertions.assertArrayEquals(value, response.body())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Order(10)
|
||||||
fun traceTest() {
|
fun traceTest() {
|
||||||
val client: HttpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build()
|
val client: HttpClient = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build()
|
||||||
val requestBuilder = newRequestBuilder("").method(
|
val requestBuilder = newRequestBuilder("").method(
|
||||||
|
Reference in New Issue
Block a user