blob: 879b11d281bc0f51bd1f0c6fe569274fd932a12c [file]
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.jetbrains.builtInHelp
import com.intellij.openapi.util.text.StringUtil
import com.jetbrains.builtInHelp.mapping.HelpMap
import com.jetbrains.builtInHelp.mapping.HelpMapId
import io.netty.channel.ChannelFutureListener
import io.netty.channel.ChannelHandlerContext
import io.netty.handler.codec.http.*
import org.jetbrains.builtInWebServer.BuiltInServerOptions
import org.jetbrains.io.addCommonHeaders
import org.jetbrains.io.send
import javax.xml.bind.JAXBContext
@Suppress("unused")
class HelpContentRequestHandler : HelpRequestHandlerBase() {
override fun process(urlDecoder: QueryStringDecoder, request: FullHttpRequest, context: ChannelHandlerContext): Boolean {
if (request.uri().contains("config.json")) {
val config = HelpRequestHandlerBase::class.java.getResource("/topics/config.json")
.openStream().bufferedReader().use { it.readText() }.replace("https://data.services.jetbrains.com",
"http://127.0.0.1:${BuiltInServerOptions.getInstance().effectiveBuiltInServerPort}").replace(
"true", "false")
sendData(config.toByteArray(Charsets.UTF_8), "config.json", request, context.channel(), request.headers())
return true
}
if (!urlDecoder.parameters().isEmpty()) {
for (name: String in urlDecoder.parameters().keys) {
val param = urlDecoder.parameters()[name]
if (param != null && (param.isEmpty() || StringUtil.isEmpty(param[0]))) {
val map: HelpMap? = JAXBContext.newInstance(
HelpMap::class.java, HelpMapId::class.java).createUnmarshaller().unmarshal(
HelpRequestHandlerBase::class.java.getResource("/topics/Map.jhm")) as HelpMap
if (map != null) {
val response = DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.FOUND)
response.addCommonHeaders()
response.headers().add("Location", MY_PREFIX + map.getUrlForId(name))
context.channel().writeAndFlush(response).addListener(ChannelFutureListener.CLOSE)
return true
}
}
}
}
val resName: String = urlDecoder.path().substring(request.uri().lastIndexOf("/") + 1)
if (StringUtil.isNotEmpty(resName)) {
try {
sendResource(resName, request, context.channel(), request.headers())
return true
}
catch (e: Exception) {
HttpResponseStatus.NOT_FOUND.send(context.channel(), request)
}
}
return false
}
}