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 { public void initiateOpenViduWebhookHeaders(String headers) throws Exception {
if (webhookHeadersList == null) { JsonParser parser = new JsonParser();
JsonParser parser = new JsonParser(); JsonElement elem = parser.parse(headers);
JsonElement elem = parser.parse(headers); JsonArray headersJsonArray = elem.getAsJsonArray();
JsonArray headersJsonArray = elem.getAsJsonArray(); this.webhookHeadersList = new ArrayList<>();
this.webhookHeadersList = new ArrayList<>();
for (JsonElement jsonElement : headersJsonArray) { for (JsonElement jsonElement : headersJsonArray) {
String headerString = jsonElement.getAsString(); String headerString = jsonElement.getAsString();
String[] headerSplit = headerString.split(": ", 2); String[] headerSplit = headerString.split(": ", 2);
if (headerSplit.length != 2) { if (headerSplit.length != 2) {
throw new Exception("HTTP header '" + headerString throw new Exception("HTTP header '" + headerString
+ "' syntax is not correct. Must be 'HEADER_NAME: HEADER_VALUE'. For example: 'Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l'"); + "' 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));
} }
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 { public void initiateOpenViduWebhookEvents(String events) throws Exception {
if (webhookEventsList == null) { JsonParser parser = new JsonParser();
JsonParser parser = new JsonParser(); JsonElement elem = parser.parse(events);
JsonElement elem = parser.parse(events); JsonArray eventsJsonArray = elem.getAsJsonArray();
JsonArray eventsJsonArray = elem.getAsJsonArray(); this.webhookEventsList = new ArrayList<>();
this.webhookEventsList = new ArrayList<>();
for (JsonElement jsonElement : eventsJsonArray) { for (JsonElement jsonElement : eventsJsonArray) {
String eventString = jsonElement.getAsString(); String eventString = jsonElement.getAsString();
try { try {
CDREventName.valueOf(eventString); CDREventName.valueOf(eventString);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
throw new Exception("Event name '" + eventString + "' does not exist"); throw new Exception("Event name '" + eventString + "' does not exist");
}
this.webhookEventsList.add(CDREventName.valueOf(eventString));
} }
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.NoSuchAlgorithmException;
import java.security.cert.CertificateException; import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -57,27 +58,26 @@ public class HttpWebhookSender {
private HttpClient httpClient; private HttpClient httpClient;
private String httpEndpoint; private String httpEndpoint;
private List<Header> headers; private List<Header> customHeaders;
private List<CDREventName> events; private List<CDREventName> events;
public HttpWebhookSender(String httpEndpoint, List<Header> headers, List<CDREventName> events) { public HttpWebhookSender(String httpEndpoint, List<Header> headers, List<CDREventName> events) {
this.httpEndpoint = httpEndpoint; this.httpEndpoint = httpEndpoint;
this.headers = headers; this.events = events;
this.customHeaders = new ArrayList<>();
boolean contentTypeHeaderAdded = false; boolean contentTypeHeaderAdded = false;
for (Header header : this.headers) { for (Header header : headers) {
if (HttpHeaders.CONTENT_TYPE.equals(header.getName()) && "application/json".equals(header.getValue())) { this.customHeaders.add(header);
if (!contentTypeHeaderAdded && HttpHeaders.CONTENT_TYPE.equals(header.getName())
&& "application/json".equals(header.getValue())) {
contentTypeHeaderAdded = true; contentTypeHeaderAdded = true;
break;
} }
} }
if (!contentTypeHeaderAdded) { 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() { TrustStrategy trustStrategy = new TrustStrategy() {
@Override @Override
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { 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"); 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.setHeader(header);
} }
request.setEntity(params); request.setEntity(params);