package jetbrains.mps.ide.httpsupport.manager.plugin;
/*Generated by MPS */
import io.netty.handler.codec.http.QueryStringDecoder;
import io.netty.channel.Channel;
import java.util.List;
import org.jetbrains.annotations.NotNull;
import java.net.URISyntaxException;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.buffer.ByteBuf;
import io.netty.handler.codec.http.FullHttpResponse;
import org.jetbrains.io.Responses;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;
import com.intellij.util.ExceptionUtil;
import jetbrains.mps.internal.collections.runtime.Sequence;
import com.intellij.util.io.NettyKt;
import com.intellij.openapi.util.text.StringUtil;
import java.net.URI;
public class HttpRequest {
private final io.netty.handler.codec.http.HttpRequest request;
private final QueryStringDecoder decoder;
private final Channel channel;
private final List<String> segments;
private final String referrerHost;
public HttpRequest(@NotNull io.netty.handler.codec.http.HttpRequest request, @NotNull QueryStringDecoder decoder, @NotNull Channel channel) throws URISyntaxException {
this.request = request;
this.decoder = decoder;
this.channel = channel;
this.segments = getSegmentsFor(getPath());
this.referrerHost = getReferrerHost(request);
}
public List<String> getParameterValue(String key) {
return decoder.parameters().get(key);
}
public String getPath() {
return decoder.path();
}
public List<String> getSegments() {
return segments;
}
public String getReferrerHost() {
return referrerHost;
}
public void sendResponse(HttpResponseStatus status, String contentType, ByteBuf buffer) {
FullHttpResponse response = Responses.response(contentType, buffer);
response.setStatus(status);
Responses.send(response, channel, request);
}
public void sendText(HttpResponseStatus status, String message) {
this.sendResponse(status, "text/plain", Unpooled.copiedBuffer(message, CharsetUtil.UTF_8));
}
public void sendErrorResponse(HttpResponseStatus status, String message, Throwable error) {
this.sendText(status, message + "\n\n" + ExceptionUtil.getThrowableText(error));
}
public static List<String> getSegmentsFor(String path) {
if (path.startsWith("/")) {
path = path.substring(1);
}
return Sequence.fromIterable(Sequence.fromArray(path.split("/"))).toListSequence();
}
private static String getReferrerHost(io.netty.handler.codec.http.HttpRequest request) throws URISyntaxException {
String refferer = NettyKt.getOrigin(request);
if (refferer == null) {
refferer = NettyKt.getReferrer(request);
}
return StringUtil.nullize((refferer == null ? null : new URI(refferer).getHost()));
}
}