mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
Add improvments to oauth-http publisher to work with url templates
This commit is contained in:
parent
69b1102ee2
commit
5f4bada92a
@ -19,24 +19,24 @@
|
|||||||
|
|
||||||
<eventPublisher name="WSO2IoT-DeviceOperation-Publisher" xmlns="http://wso2.org/carbon/eventpublisher">
|
<eventPublisher name="WSO2IoT-DeviceOperation-Publisher" xmlns="http://wso2.org/carbon/eventpublisher">
|
||||||
<from streamName="org.wso2.iot.operation" version="1.0.0"/>
|
<from streamName="org.wso2.iot.operation" version="1.0.0"/>
|
||||||
<mapping customMapping="enable" type="json">
|
<mapping customMapping="enable" type="text">
|
||||||
<inline>
|
<inline>
|
||||||
{
|
{
|
||||||
"deviceIdentifiers": [
|
"deviceIdentifiers": {{meta_deviceIdentifiers}},
|
||||||
{{meta_deviceIdentifier}}
|
"deviceType": "{{meta_deviceType}}",
|
||||||
],
|
|
||||||
"operation": {
|
"operation": {
|
||||||
"code": {{code}},
|
"code": "{{code}}",
|
||||||
"type": {{type}},
|
"type": "{{type}}",
|
||||||
"status": "PENDING",
|
"status": "PENDING",
|
||||||
"isEnabled": {{isEnabled}},
|
"isEnabled": "{{isEnabled}}",
|
||||||
"payLoad": {{payLoad}}
|
"payLoad": "{{payLoad}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</inline>
|
</inline>
|
||||||
</mapping>
|
</mapping>
|
||||||
<to eventAdapterType="oauth-http">
|
<to eventAdapterType="oauth-http">
|
||||||
<property name="http.client.method">HttpPost</property>
|
<property name="http.client.method">HttpPost</property>
|
||||||
<property name="http.url">https://localhost:9443/api/device-mgt/v1.0/devices/android/operations</property>
|
<property name="http.url">https://localhost:9443/api/device-mgt/v1.0/devices/{deviceType}/operations</property>
|
||||||
|
<property name="http.url.templated">true</property>
|
||||||
</to>
|
</to>
|
||||||
</eventPublisher>
|
</eventPublisher>
|
||||||
|
|||||||
@ -1,11 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "org.wso2.iot.operation",
|
"name": "org.wso2.iot.operation",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"nickName": "",
|
"nickName": "Operation Stream",
|
||||||
"description": "Operation stream for WSO2 IoT Devices",
|
"description": "Operation stream for WSO2 IoT Devices",
|
||||||
"metaData": [
|
"metaData": [
|
||||||
{
|
{
|
||||||
"name": "deviceIdentifier",
|
"name": "deviceIdentifiers",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceType",
|
||||||
"type": "STRING"
|
"type": "STRING"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@ -59,13 +59,17 @@ import java.net.UnknownHostException;
|
|||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.KeyStoreException;
|
import java.security.KeyStoreException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.RejectedExecutionException;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class HTTPEventAdapter implements OutputEventAdapter {
|
public class HTTPEventAdapter implements OutputEventAdapter {
|
||||||
|
|
||||||
@ -181,6 +185,32 @@ public class HTTPEventAdapter implements OutputEventAdapter {
|
|||||||
.extractHeaders(dynamicProperties.get(HTTPEventAdapterConstants.ADAPTER_HEADERS));
|
.extractHeaders(dynamicProperties.get(HTTPEventAdapterConstants.ADAPTER_HEADERS));
|
||||||
String payload = message.toString();
|
String payload = message.toString();
|
||||||
|
|
||||||
|
if ("true".equals(dynamicProperties.get(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_TEMPLATED))) {
|
||||||
|
try {
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
JSONObject jsonPayload = (JSONObject) jsonParser.parse(payload);
|
||||||
|
|
||||||
|
List<String> matchList = new ArrayList<>();
|
||||||
|
Pattern regex = Pattern.compile("\\{(.*?)\\}");
|
||||||
|
Matcher regexMatcher = regex.matcher(url);
|
||||||
|
|
||||||
|
while (regexMatcher.find()) {//Finds Matching Pattern in String
|
||||||
|
matchList.add(regexMatcher.group(1));//Fetching Group from String
|
||||||
|
}
|
||||||
|
|
||||||
|
for(String str:matchList) {
|
||||||
|
if (jsonPayload.containsKey(str)) {
|
||||||
|
url = url.replace("{" + str + "}", jsonPayload.get(str).toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Modified url: " + url);
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
log.error("Unable to parse request body to Json.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
executorService.submit(new HTTPSender(url, payload, headers, httpClient));
|
executorService.submit(new HTTPSender(url, payload, headers, httpClient));
|
||||||
} catch (RejectedExecutionException e) {
|
} catch (RejectedExecutionException e) {
|
||||||
|
|||||||
@ -76,6 +76,12 @@ public class HTTPEventAdapterFactory extends OutputEventAdapterFactory {
|
|||||||
urlProp.setHint(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_HINT));
|
urlProp.setHint(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_HINT));
|
||||||
urlProp.setRequired(true);
|
urlProp.setRequired(true);
|
||||||
|
|
||||||
|
Property urlTemplateProp = new Property(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_TEMPLATED);
|
||||||
|
urlTemplateProp.setDisplayName(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_TEMPLATED));
|
||||||
|
urlTemplateProp.setHint(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_MESSAGE_URL_TEMPLATED_HINT));
|
||||||
|
urlTemplateProp.setRequired(true);
|
||||||
|
urlTemplateProp.setOptions(new String[]{"true", "false"});
|
||||||
|
|
||||||
Property usernameProp = new Property(HTTPEventAdapterConstants.ADAPTER_USERNAME);
|
Property usernameProp = new Property(HTTPEventAdapterConstants.ADAPTER_USERNAME);
|
||||||
usernameProp.setDisplayName(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_USERNAME));
|
usernameProp.setDisplayName(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_USERNAME));
|
||||||
usernameProp.setHint(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_USERNAME_HINT));
|
usernameProp.setHint(resourceBundle.getString(HTTPEventAdapterConstants.ADAPTER_USERNAME_HINT));
|
||||||
@ -94,6 +100,7 @@ public class HTTPEventAdapterFactory extends OutputEventAdapterFactory {
|
|||||||
headersProp.setRequired(false);
|
headersProp.setRequired(false);
|
||||||
|
|
||||||
dynamicPropertyList.add(urlProp);
|
dynamicPropertyList.add(urlProp);
|
||||||
|
dynamicPropertyList.add(urlTemplateProp);
|
||||||
dynamicPropertyList.add(usernameProp);
|
dynamicPropertyList.add(usernameProp);
|
||||||
dynamicPropertyList.add(passwordProp);
|
dynamicPropertyList.add(passwordProp);
|
||||||
dynamicPropertyList.add(headersProp);
|
dynamicPropertyList.add(headersProp);
|
||||||
|
|||||||
@ -21,6 +21,8 @@ public class HTTPEventAdapterConstants {
|
|||||||
|
|
||||||
public static final String ADAPTER_TYPE_HTTP = "oauth-http";
|
public static final String ADAPTER_TYPE_HTTP = "oauth-http";
|
||||||
public static final String ADAPTER_MESSAGE_URL = "http.url";
|
public static final String ADAPTER_MESSAGE_URL = "http.url";
|
||||||
|
public static final String ADAPTER_MESSAGE_URL_TEMPLATED = "http.url.templated";
|
||||||
|
public static final String ADAPTER_MESSAGE_URL_TEMPLATED_HINT = "http.url.templated.hint";
|
||||||
public static final String ADAPTER_MESSAGE_URL_HINT = "http.url.hint";
|
public static final String ADAPTER_MESSAGE_URL_HINT = "http.url.hint";
|
||||||
public static final String ADAPTER_CONF_DCR_URL = "dcrUrl";
|
public static final String ADAPTER_CONF_DCR_URL = "dcrUrl";
|
||||||
public static final String ADAPTER_CONF_TOKEN_URL = "tokenUrl";
|
public static final String ADAPTER_CONF_TOKEN_URL = "tokenUrl";
|
||||||
|
|||||||
@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
http.url=URL
|
http.url=URL
|
||||||
http.url.hint=The target HTTP/HTTPS URL, e.g. "http://yourhost:8080/service (URL will auto format for tenants)"
|
http.url.hint=The target HTTP/HTTPS URL, e.g. "http://yourhost:8080/service (URL will auto format for tenants)"
|
||||||
|
http.url.templated=URL Templated
|
||||||
|
http.url.templated.hint=The target HTTP/HTTPS URL has template value(s) to fill from event. e.g. "http://yourhost:8080/service/{variable1}/{variable2}" variable1 & variable2 should be available in the event and event should be in json format
|
||||||
username=Username
|
username=Username
|
||||||
http.username.hint=Username to obtain oauth token. Leave empty to use default.
|
http.username.hint=Username to obtain oauth token. Leave empty to use default.
|
||||||
password=Password
|
password=Password
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user