openvidu-server: webhook HTTP headers improvements

pull/375/head
pabloFuente 2019-07-01 09:33:38 +02:00
parent 86540ab3a8
commit 843fdb7b30
2 changed files with 44 additions and 40 deletions

View File

@ -352,45 +352,49 @@ public class OpenviduConfig {
}
public void initiateOpenViduWebhookHeaders(String headers) throws Exception {
if (webhookHeadersList == null) {
JsonParser parser = new JsonParser();
JsonElement elem = parser.parse(headers);
JsonArray headersJsonArray = elem.getAsJsonArray();
this.webhookHeadersList = new ArrayList<>();
JsonParser parser = new JsonParser();
JsonElement elem = parser.parse(headers);
JsonArray headersJsonArray = elem.getAsJsonArray();
this.webhookHeadersList = new ArrayList<>();
for (JsonElement jsonElement : headersJsonArray) {
String headerString = jsonElement.getAsString();
String[] headerSplit = headerString.split(": ", 2);
if (headerSplit.length != 2) {
throw new Exception("HTTP header '" + headerString
+ "' syntax is not correct. Must be 'HEADER_NAME: HEADER_VALUE'. For example: 'Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l'");
}
String headerName = headerSplit[0];
String headerValue = headerSplit[1];
this.webhookHeadersList.add(new BasicHeader(headerName, headerValue));
for (JsonElement jsonElement : headersJsonArray) {
String headerString = jsonElement.getAsString();
String[] headerSplit = headerString.split(": ", 2);
if (headerSplit.length != 2) {
throw new Exception("HTTP header '" + headerString
+ "' syntax is not correct. Must be 'HEADER_NAME: HEADER_VALUE'. For example: 'Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l'");
}
log.info("OpenVidu Webhook headers: {}", this.getOpenViduWebhookHeaders().toString());
String headerName = headerSplit[0];
String headerValue = headerSplit[1];
if (headerName.isEmpty()) {
throw new Exception(
"HTTP header '" + headerString + "' syntax is not correct. Header name cannot be empty");
}
if (headerValue.isEmpty()) {
throw new Exception(
"HTTP header '" + headerString + "' syntax is not correct. Header value cannot be empty");
}
this.webhookHeadersList.add(new BasicHeader(headerName, headerValue));
}
log.info("OpenVidu Webhook headers: {}", this.getOpenViduWebhookHeaders().toString());
}
public void initiateOpenViduWebhookEvents(String events) throws Exception {
if (webhookEventsList == null) {
JsonParser parser = new JsonParser();
JsonElement elem = parser.parse(events);
JsonArray eventsJsonArray = elem.getAsJsonArray();
this.webhookEventsList = new ArrayList<>();
JsonParser parser = new JsonParser();
JsonElement elem = parser.parse(events);
JsonArray eventsJsonArray = elem.getAsJsonArray();
this.webhookEventsList = new ArrayList<>();
for (JsonElement jsonElement : eventsJsonArray) {
String eventString = jsonElement.getAsString();
try {
CDREventName.valueOf(eventString);
} catch (IllegalArgumentException e) {
throw new Exception("Event name '" + eventString + "' does not exist");
}
this.webhookEventsList.add(CDREventName.valueOf(eventString));
for (JsonElement jsonElement : eventsJsonArray) {
String eventString = jsonElement.getAsString();
try {
CDREventName.valueOf(eventString);
} catch (IllegalArgumentException e) {
throw new Exception("Event name '" + eventString + "' does not exist");
}
log.info("OpenVidu Webhook events: {}", this.getOpenViduWebhookEvents().toString());
this.webhookEventsList.add(CDREventName.valueOf(eventString));
}
log.info("OpenVidu Webhook events: {}", this.getOpenViduWebhookEvents().toString());
}
}

View File

@ -24,6 +24,7 @@ import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@ -57,27 +58,26 @@ public class HttpWebhookSender {
private HttpClient httpClient;
private String httpEndpoint;
private List<Header> headers;
private List<Header> customHeaders;
private List<CDREventName> events;
public HttpWebhookSender(String httpEndpoint, List<Header> headers, List<CDREventName> events) {
this.httpEndpoint = httpEndpoint;
this.headers = headers;
this.events = events;
this.customHeaders = new ArrayList<>();
boolean contentTypeHeaderAdded = false;
for (Header header : this.headers) {
if (HttpHeaders.CONTENT_TYPE.equals(header.getName()) && "application/json".equals(header.getValue())) {
for (Header header : headers) {
this.customHeaders.add(header);
if (!contentTypeHeaderAdded && HttpHeaders.CONTENT_TYPE.equals(header.getName())
&& "application/json".equals(header.getValue())) {
contentTypeHeaderAdded = true;
break;
}
}
if (!contentTypeHeaderAdded) {
headers.add(new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"));
this.customHeaders.add(new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"));
}
this.events = events;
TrustStrategy trustStrategy = new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
@ -124,7 +124,7 @@ public class HttpWebhookSender {
log.error("Cannot create StringEntity from JSON CDREvent. Default HTTP charset is not supported");
}
for (Header header : this.headers) {
for (Header header : this.customHeaders) {
request.setHeader(header);
}
request.setEntity(params);