mirror of https://github.com/OpenVidu/openvidu.git
openvidu-server: webhook HTTP headers improvements
parent
86540ab3a8
commit
843fdb7b30
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue