diff --git a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java index 65bc9741..d69739fa 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java +++ b/openvidu-server/src/main/java/io/openvidu/server/config/OpenviduConfig.java @@ -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()); } } diff --git a/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java b/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java index 54c97265..d89ae7ea 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java +++ b/openvidu-server/src/main/java/io/openvidu/server/webhook/HttpWebhookSender.java @@ -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
headers; + private List
customHeaders; private List events; public HttpWebhookSender(String httpEndpoint, List
headers, List 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);