Created the HttpResponseController
This commit is contained in:
parent
8d2722e7bb
commit
28fb627491
@ -0,0 +1,95 @@
|
|||||||
|
package de.gnmyt.autoresponder.http.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.HttpExchange;
|
||||||
|
import de.gnmyt.autoresponder.http.Response;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public class HttpResponseController {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(HttpResponseController.class);
|
||||||
|
|
||||||
|
private final Response response = new Response();
|
||||||
|
private final HttpExchange exchange;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor of the {@link HttpResponseController}
|
||||||
|
*
|
||||||
|
* @param exchange The {@link HttpExchange} from the {@link de.gnmyt.autoresponder.http.contexts.ResponderContext}
|
||||||
|
*/
|
||||||
|
public HttpResponseController(HttpExchange exchange) {
|
||||||
|
this.exchange = exchange;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds some text to the output
|
||||||
|
*
|
||||||
|
* @param output The output you want to add
|
||||||
|
* @return the current {@link HttpResponseController} instance
|
||||||
|
*/
|
||||||
|
public HttpResponseController writeToOutput(String output) {
|
||||||
|
response.addOutput(output);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new header to the response
|
||||||
|
*
|
||||||
|
* @param name The name of the header you want to add
|
||||||
|
* @param value The value the header should have
|
||||||
|
* @return the current {@link HttpResponseController} instance
|
||||||
|
*/
|
||||||
|
public HttpResponseController header(String name, String value) {
|
||||||
|
response.addHeader(name, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends some text to the response
|
||||||
|
*
|
||||||
|
* @param text The text you want to send
|
||||||
|
*/
|
||||||
|
public void text(String text) {
|
||||||
|
writeToOutput(text);
|
||||||
|
send();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the response to the AutoResponder
|
||||||
|
*/
|
||||||
|
public void send() {
|
||||||
|
OutputStream os = exchange.getResponseBody();
|
||||||
|
|
||||||
|
response
|
||||||
|
.addHeader("Server", "ResponderIntegration")
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.addHeader("Allow-Control-Allow-Origin", "*");
|
||||||
|
|
||||||
|
if (exchange.getRequestMethod().equalsIgnoreCase("OPTIONS"))
|
||||||
|
response.addHeader("Access-Control-Allow-Methods", "GET, OPTIONS, POST")
|
||||||
|
.addHeader("Access-Control-Allow-Headers", "*");
|
||||||
|
|
||||||
|
response.getHeaders().forEach((key, value) -> exchange.getResponseHeaders().put(key, Collections.singletonList(value)));
|
||||||
|
|
||||||
|
byte[] bs = response.getOutput().getBytes(StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (exchange.getRequestMethod().equalsIgnoreCase("OPTIONS")) {
|
||||||
|
exchange.sendResponseHeaders(204, -1L);
|
||||||
|
} else {
|
||||||
|
exchange.sendResponseHeaders(response.getCode(), bs.length);
|
||||||
|
os.write(bs);
|
||||||
|
}
|
||||||
|
os.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOG.error("Could not process response: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user