mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge pull request #701 from amalhub/master
Merging Cloud updates to master
This commit is contained in:
commit
0dc15324ad
@ -24,14 +24,12 @@ package org.wso2.carbon.apimgt.handlers.beans;
|
|||||||
*/
|
*/
|
||||||
public class DCR {
|
public class DCR {
|
||||||
|
|
||||||
// Owner of the application
|
private String callbackUrl;
|
||||||
private String owner;
|
private String owner;
|
||||||
// Client name
|
|
||||||
private String clientName;
|
private String clientName;
|
||||||
// Oauth Grant type
|
|
||||||
private String grantType;
|
private String grantType;
|
||||||
// Scope of the token
|
|
||||||
private String tokenScope;
|
private String tokenScope;
|
||||||
|
private boolean isSaasApp;
|
||||||
|
|
||||||
public String getOwner() {
|
public String getOwner() {
|
||||||
return owner;
|
return owner;
|
||||||
@ -64,5 +62,27 @@ public class DCR {
|
|||||||
public void setTokenScope(String tokenScope) {
|
public void setTokenScope(String tokenScope) {
|
||||||
this.tokenScope = tokenScope;
|
this.tokenScope = tokenScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getIsSaasApp() {
|
||||||
|
return isSaasApp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsSaasApp(boolean isSaasApp) {
|
||||||
|
this.isSaasApp = isSaasApp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCallbackUrl() {
|
||||||
|
return callbackUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallbackUrl(String callbackUrl) {
|
||||||
|
this.callbackUrl = callbackUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSON() {
|
||||||
|
return "{\"callbackUrl\": \"" + callbackUrl + "\",\"clientName\": \"" + clientName + "\", \"tokenScope\": " +
|
||||||
|
"\"" + tokenScope + "\", \"owner\": \"" + owner + "\"," + "\"grantType\": \"" + grantType +
|
||||||
|
"\", \"saasApp\" :" + isSaasApp + " }\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,4 +36,14 @@ public class AuthConstants {
|
|||||||
public static final String MDM_SIGNATURE = "mdm-signature";
|
public static final String MDM_SIGNATURE = "mdm-signature";
|
||||||
public static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header";
|
public static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header";
|
||||||
public static final String ENCODED_PEM = "encoded-pem";
|
public static final String ENCODED_PEM = "encoded-pem";
|
||||||
|
public static final String CALLBACK_URL = "";
|
||||||
|
public static final String CLIENT_NAME = "IOT-API-MANAGER";
|
||||||
|
public static final String GRANT_TYPE = "refresh_token password client_credentials";
|
||||||
|
public static final String TOKEN_SCOPE = "default";
|
||||||
|
public static final String CONTENT_TYPE_HEADER = "Content-Type";
|
||||||
|
public static final String CONTENT_TYPE = "application/json";
|
||||||
|
public static final String AUTHORIZATION_HEADER = "Authorization";
|
||||||
|
public static final String BASIC_AUTH_PREFIX = "Basic ";
|
||||||
|
public static final String CLIENT_ID = "clientId";
|
||||||
|
public static final String CLIENT_SECRET = "clientSecret";
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.apimgt.handlers.utils;
|
package org.wso2.carbon.apimgt.handlers.utils;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.ws.security.util.Base64;
|
import org.apache.ws.security.util.Base64;
|
||||||
@ -118,8 +117,7 @@ public class Utils {
|
|||||||
tokenHeaders.put("Content-Type", "application/x-www-form-urlencoded");
|
tokenHeaders.put("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
|
||||||
RESTInvoker restInvoker = new RESTInvoker();
|
RESTInvoker restInvoker = new RESTInvoker();
|
||||||
RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, null,
|
RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, null, null, tokenContent);
|
||||||
null, tokenContent);
|
|
||||||
if(log.isDebugEnabled()) {
|
if(log.isDebugEnabled()) {
|
||||||
log.debug("Token response:" + response.getContent());
|
log.debug("Token response:" + response.getContent());
|
||||||
}
|
}
|
||||||
@ -144,31 +142,32 @@ public class Utils {
|
|||||||
private static void getClientSecretes(IOTServerConfiguration iotServerConfiguration)
|
private static void getClientSecretes(IOTServerConfiguration iotServerConfiguration)
|
||||||
throws APIMCertificateMGTException {
|
throws APIMCertificateMGTException {
|
||||||
try {
|
try {
|
||||||
|
String username = iotServerConfiguration.getUsername();
|
||||||
|
String password = iotServerConfiguration.getPassword();
|
||||||
DCR dcr = new DCR();
|
DCR dcr = new DCR();
|
||||||
dcr.setOwner(iotServerConfiguration.getUsername());
|
dcr.setOwner(iotServerConfiguration.getUsername());
|
||||||
dcr.setClientName("IOT-API-MANAGER");
|
dcr.setClientName(AuthConstants.CLIENT_NAME);
|
||||||
dcr.setGrantType("refresh_token password client_credentials");
|
dcr.setGrantType(AuthConstants.GRANT_TYPE);
|
||||||
dcr.setTokenScope("default");
|
dcr.setTokenScope(AuthConstants.TOKEN_SCOPE);
|
||||||
Gson gson = new Gson();
|
dcr.setCallbackUrl(AuthConstants.CALLBACK_URL);
|
||||||
String dcrContent = gson.toJson(dcr);
|
dcr.setIsSaasApp(true);
|
||||||
Map<String, String> drcHeaders = new HashMap<String, String>();
|
String dcrContent = dcr.toJSON();
|
||||||
drcHeaders.put("Content-Type", "application/json");
|
Map<String, String> dcrHeaders = new HashMap<String, String>();
|
||||||
|
String basicAuth = Base64.encode((username + ":" + password).getBytes());
|
||||||
|
dcrHeaders.put(AuthConstants.CONTENT_TYPE_HEADER, AuthConstants.CONTENT_TYPE);
|
||||||
|
dcrHeaders.put(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BASIC_AUTH_PREFIX + basicAuth);
|
||||||
URI dcrUrl = new URI(iotServerConfiguration.getDynamicClientRegistrationEndpoint());
|
URI dcrUrl = new URI(iotServerConfiguration.getDynamicClientRegistrationEndpoint());
|
||||||
RESTInvoker restInvoker = new RESTInvoker();
|
RESTInvoker restInvoker = new RESTInvoker();
|
||||||
RESTResponse response = restInvoker.invokePOST(dcrUrl, drcHeaders, null,
|
RESTResponse response = restInvoker.invokePOST(dcrUrl, dcrHeaders, null, null, dcrContent);
|
||||||
null, dcrContent);
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("DCR response :" + response.getContent());
|
log.debug("DCR response :" + response.getContent());
|
||||||
}
|
}
|
||||||
JSONObject jsonResponse = new JSONObject(response.getContent());
|
JSONObject jsonResponse = new JSONObject(response.getContent());
|
||||||
clientId = jsonResponse.getString("client_id");
|
clientId = jsonResponse.getString(AuthConstants.CLIENT_ID);
|
||||||
clientSecret = jsonResponse.getString("client_secret");
|
clientSecret = jsonResponse.getString(AuthConstants.CLIENT_SECRET);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
throw new APIMCertificateMGTException("Error occurred while converting the json to object", e);
|
throw new APIMCertificateMGTException("Error occurred while converting the json to object", e);
|
||||||
} catch (IOException e) {
|
} catch (IOException | URISyntaxException e) {
|
||||||
throw new APIMCertificateMGTException("Error occurred while trying to call DCR endpoint", e);
|
|
||||||
} catch (URISyntaxException e) {
|
|
||||||
throw new APIMCertificateMGTException("Error occurred while trying to call DCR endpoint", e);
|
throw new APIMCertificateMGTException("Error occurred while trying to call DCR endpoint", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -280,6 +280,16 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.ws.rs</groupId>
|
<groupId>javax.ws.rs</groupId>
|
||||||
<artifactId>javax.ws.rs-api</artifactId>
|
<artifactId>javax.ws.rs-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.receiver.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.stream.stub</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.wso2.carbon.commons</groupId>
|
<groupId>org.wso2.carbon.commons</groupId>
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.impl.admin;
|
package org.wso2.carbon.device.mgt.jaxrs.service.impl.admin;
|
||||||
|
|
||||||
|
import org.apache.axis2.AxisFault;
|
||||||
import org.apache.axis2.client.Options;
|
import org.apache.axis2.client.Options;
|
||||||
import org.apache.axis2.java.security.SSLProtocolSocketFactory;
|
import org.apache.axis2.java.security.SSLProtocolSocketFactory;
|
||||||
import org.apache.axis2.transport.http.HTTPConstants;
|
import org.apache.axis2.transport.http.HTTPConstants;
|
||||||
@ -27,6 +28,9 @@ import org.apache.commons.httpclient.protocol.Protocol;
|
|||||||
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
|
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
import org.wso2.carbon.application.mgt.stub.upload.CarbonAppUploaderStub;
|
import org.wso2.carbon.application.mgt.stub.upload.CarbonAppUploaderStub;
|
||||||
import org.wso2.carbon.application.mgt.stub.upload.types.carbon.UploadedFileItem;
|
import org.wso2.carbon.application.mgt.stub.upload.types.carbon.UploadedFileItem;
|
||||||
import org.wso2.carbon.base.ServerConfiguration;
|
import org.wso2.carbon.base.ServerConfiguration;
|
||||||
@ -35,11 +39,16 @@ import org.wso2.carbon.core.util.Utils;
|
|||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.admin.DeviceTypePublisherAdminService;
|
import org.wso2.carbon.device.mgt.jaxrs.service.api.admin.DeviceTypePublisherAdminService;
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
||||||
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
|
import org.wso2.carbon.identity.jwt.client.extension.JWTClient;
|
||||||
|
import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
|
||||||
import org.wso2.carbon.registry.core.Registry;
|
import org.wso2.carbon.registry.core.Registry;
|
||||||
import org.wso2.carbon.registry.core.Resource;
|
import org.wso2.carbon.registry.core.Resource;
|
||||||
import org.wso2.carbon.registry.core.ResourceImpl;
|
import org.wso2.carbon.registry.core.ResourceImpl;
|
||||||
import org.wso2.carbon.registry.core.exceptions.RegistryException;
|
import org.wso2.carbon.registry.core.exceptions.RegistryException;
|
||||||
|
import org.wso2.carbon.user.api.UserStoreException;
|
||||||
import org.wso2.carbon.utils.CarbonUtils;
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
import org.wso2.carbon.event.receiver.stub.EventReceiverAdminServiceStub;
|
||||||
|
import org.wso2.carbon.event.stream.stub.EventStreamAdminServiceStub;
|
||||||
|
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||||
|
|
||||||
import javax.activation.DataHandler;
|
import javax.activation.DataHandler;
|
||||||
import javax.net.ssl.KeyManagerFactory;
|
import javax.net.ssl.KeyManagerFactory;
|
||||||
@ -51,6 +60,8 @@ import javax.ws.rs.Path;
|
|||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.rmi.RemoteException;
|
||||||
import java.security.KeyManagementException;
|
import java.security.KeyManagementException;
|
||||||
import java.security.KeyStore;
|
import java.security.KeyStore;
|
||||||
import java.security.KeyStoreException;
|
import java.security.KeyStoreException;
|
||||||
@ -89,11 +100,15 @@ public class DeviceTypePublisherAdminServiceImpl implements DeviceTypePublisherA
|
|||||||
|
|
||||||
private static final String SSLV3 = "SSLv3";
|
private static final String SSLV3 = "SSLv3";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private KeyStore keyStore;
|
private KeyStore keyStore;
|
||||||
private KeyStore trustStore;
|
private KeyStore trustStore;
|
||||||
private char[] keyStorePassword;
|
private char[] keyStorePassword;
|
||||||
private SSLContext sslContext;
|
private SSLContext sslContext;
|
||||||
|
|
||||||
|
private String tenantDomain;
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(DeviceTypePublisherAdminServiceImpl.class);
|
private static final Log log = LogFactory.getLog(DeviceTypePublisherAdminServiceImpl.class);
|
||||||
private static final String DEFAULT_RESOURCE_LOCATION = "/resources/devicetypes";
|
private static final String DEFAULT_RESOURCE_LOCATION = "/resources/devicetypes";
|
||||||
private static final String CAR_FILE_LOCATION = CarbonUtils.getCarbonHome() + File.separator + "repository" +
|
private static final String CAR_FILE_LOCATION = CarbonUtils.getCarbonHome() + File.separator + "repository" +
|
||||||
@ -105,10 +120,15 @@ public class DeviceTypePublisherAdminServiceImpl implements DeviceTypePublisherA
|
|||||||
private static final String IOT_MGT_HOST_NAME = "${iot.manager.host}";
|
private static final String IOT_MGT_HOST_NAME = "${iot.manager.host}";
|
||||||
private static final String DAS_URL = DEFAULT_HTTP_PROTOCOL + "://" + DAS_HOST_NAME
|
private static final String DAS_URL = DEFAULT_HTTP_PROTOCOL + "://" + DAS_HOST_NAME
|
||||||
+ ":" + DAS_PORT + "/services/CarbonAppUploader" + "/";
|
+ ":" + DAS_PORT + "/services/CarbonAppUploader" + "/";
|
||||||
|
private static final String DAS_EVENT_RECEIVER_EP = DEFAULT_HTTP_PROTOCOL + "://" + DAS_HOST_NAME
|
||||||
|
+ ":" + DAS_PORT + "/services/EventReceiverAdminService" + "/";
|
||||||
|
|
||||||
private static final String IOT_MGT_URL = DEFAULT_HTTP_PROTOCOL + "://" + IOT_MGT_HOST_NAME
|
private static final String IOT_MGT_URL = DEFAULT_HTTP_PROTOCOL + "://" + IOT_MGT_HOST_NAME
|
||||||
+ ":" + IOT_MGT_PORT + "/services/CarbonAppUploader" + "/";
|
+ ":" + IOT_MGT_PORT + "/services/CarbonAppUploader" + "/";
|
||||||
private static final String MEDIA_TYPE_XML = "application/xml";
|
private static final String MEDIA_TYPE_XML = "application/xml";
|
||||||
private static final String DEVICE_MANAGEMENT_TYPE = "device_management";
|
private static final String DEVICE_MANAGEMENT_TYPE = "device_management";
|
||||||
|
private static final String TENANT_DOMAIN_PROPERTY = "\\$\\{tenant-domain\\}";
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@POST
|
@POST
|
||||||
@ -117,7 +137,7 @@ public class DeviceTypePublisherAdminServiceImpl implements DeviceTypePublisherA
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
//Getting the tenant Domain
|
//Getting the tenant Domain
|
||||||
String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
||||||
String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
String username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||||
String tenantAdminUser = username + "@" + tenantDomain;
|
String tenantAdminUser = username + "@" + tenantDomain;
|
||||||
|
|
||||||
@ -187,6 +207,14 @@ public class DeviceTypePublisherAdminServiceImpl implements DeviceTypePublisherA
|
|||||||
registry.put(DEFAULT_RESOURCE_LOCATION + type + ".exist", resource);
|
registry.put(DEFAULT_RESOURCE_LOCATION + type + ".exist", resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
|
||||||
|
publishDynamicEventReceivers(type, tenantDomain);
|
||||||
|
}
|
||||||
|
publishDynamicEventReceivers(type,MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
|
||||||
|
publishDynamicEventStream(type,MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return Response.status(Response.Status.BAD_REQUEST)
|
return Response.status(Response.Status.BAD_REQUEST)
|
||||||
.entity("\"Error, Artifact does not exist.\"").build();
|
.entity("\"Error, Artifact does not exist.\"").build();
|
||||||
@ -222,6 +250,179 @@ public class DeviceTypePublisherAdminServiceImpl implements DeviceTypePublisherA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void publishDynamicEventReceivers(String deviceType, String tenantDomain){
|
||||||
|
|
||||||
|
PrivilegedCarbonContext.getThreadLocalCarbonContext().startTenantFlow();
|
||||||
|
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
EventReceiverAdminServiceStub receiverAdminServiceStub = new EventReceiverAdminServiceStub(Utils.replaceSystemProperty(DAS_EVENT_RECEIVER_EP));
|
||||||
|
Options eventReciverOptions = receiverAdminServiceStub._getServiceClient().getOptions();
|
||||||
|
if (eventReciverOptions == null) {
|
||||||
|
eventReciverOptions = new Options();
|
||||||
|
}
|
||||||
|
String username=null;
|
||||||
|
if(!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
|
||||||
|
username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUserRealm()
|
||||||
|
.getRealmConfiguration().getAdminUserName()+"@"+tenantDomain;
|
||||||
|
}else {
|
||||||
|
username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUserRealm()
|
||||||
|
.getRealmConfiguration().getAdminUserName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JWTClient jwtClient = DeviceMgtAPIUtils.getJWTClientManagerService().getJWTClient();
|
||||||
|
|
||||||
|
String authValue = AUTHORIZATION_HEADER_VALUE + " " + new String(Base64.encodeBase64(
|
||||||
|
jwtClient.getJwtToken(username).getBytes()));
|
||||||
|
|
||||||
|
List<Header> list = new ArrayList<Header>();
|
||||||
|
Header httpHeader = new Header();
|
||||||
|
httpHeader.setName(AUTHORIZATION_HEADER);
|
||||||
|
httpHeader.setValue(authValue);
|
||||||
|
list.add(httpHeader);//"https"
|
||||||
|
|
||||||
|
eventReciverOptions.setProperty(HTTPConstants.HTTP_HEADERS, list);
|
||||||
|
eventReciverOptions.setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER
|
||||||
|
, new Protocol(DEFAULT_HTTP_PROTOCOL
|
||||||
|
, (ProtocolSocketFactory) new SSLProtocolSocketFactory(sslContext)
|
||||||
|
, Integer.parseInt(Utils.replaceSystemProperty(DAS_PORT))));
|
||||||
|
|
||||||
|
receiverAdminServiceStub._getServiceClient().setOptions(eventReciverOptions);
|
||||||
|
|
||||||
|
List<String> receiversList = getReceiversList(deviceType);
|
||||||
|
for (String receiverContent:receiversList) {
|
||||||
|
receiverAdminServiceStub.deployEventReceiverConfiguration(receiverContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (AxisFault e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (JWTClientException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
PrivilegedCarbonContext.endTenantFlow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void publishDynamicEventStream(String deviceType, String tenantDomain){
|
||||||
|
|
||||||
|
PrivilegedCarbonContext.getThreadLocalCarbonContext().startTenantFlow();
|
||||||
|
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain, true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
EventStreamAdminServiceStub eventStreamAdminServiceStub = new EventStreamAdminServiceStub(Utils.replaceSystemProperty(DAS_EVENT_RECEIVER_EP));
|
||||||
|
Options eventReciverOptions = eventStreamAdminServiceStub._getServiceClient().getOptions();
|
||||||
|
if (eventReciverOptions == null) {
|
||||||
|
eventReciverOptions = new Options();
|
||||||
|
}
|
||||||
|
String username;
|
||||||
|
if(!tenantDomain.equals(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME)) {
|
||||||
|
username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUserRealm()
|
||||||
|
.getRealmConfiguration().getAdminUserName()+"@"+tenantDomain;
|
||||||
|
}else {
|
||||||
|
username = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUserRealm()
|
||||||
|
.getRealmConfiguration().getAdminUserName();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
JWTClient jwtClient = DeviceMgtAPIUtils.getJWTClientManagerService().getJWTClient();
|
||||||
|
|
||||||
|
String authValue = AUTHORIZATION_HEADER_VALUE + " " + new String(Base64.encodeBase64(
|
||||||
|
jwtClient.getJwtToken(username).getBytes()));
|
||||||
|
|
||||||
|
List<Header> list = new ArrayList<Header>();
|
||||||
|
Header httpHeader = new Header();
|
||||||
|
httpHeader.setName(AUTHORIZATION_HEADER);
|
||||||
|
httpHeader.setValue(authValue);
|
||||||
|
list.add(httpHeader);//"https"
|
||||||
|
|
||||||
|
eventReciverOptions.setProperty(HTTPConstants.HTTP_HEADERS, list);
|
||||||
|
eventReciverOptions.setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER
|
||||||
|
, new Protocol(DEFAULT_HTTP_PROTOCOL
|
||||||
|
, (ProtocolSocketFactory) new SSLProtocolSocketFactory(sslContext)
|
||||||
|
, Integer.parseInt(Utils.replaceSystemProperty(DAS_PORT))));
|
||||||
|
|
||||||
|
eventStreamAdminServiceStub._getServiceClient().setOptions(eventReciverOptions);
|
||||||
|
|
||||||
|
List<String> streamList = getStreamsList(deviceType);
|
||||||
|
for (String streamContent:streamList) {
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
JSONObject steamJson = (JSONObject)jsonParser.parse(streamContent);
|
||||||
|
String name = (String) steamJson.get("name");
|
||||||
|
String version = (String) steamJson.get("version");
|
||||||
|
String streamId = name +":"+version;
|
||||||
|
if(eventStreamAdminServiceStub.getStreamDefinitionAsString(streamId)==null) {
|
||||||
|
|
||||||
|
eventStreamAdminServiceStub.addEventStreamDefinitionAsString(streamContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (AxisFault e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (JWTClientException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (UserStoreException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
log.error("publishing dynamic event receiver is failed due to " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
PrivilegedCarbonContext.endTenantFlow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<String> getReceiversList(String deviceType) throws IOException {
|
||||||
|
|
||||||
|
File directory = new File(CAR_FILE_LOCATION + File.separator + deviceType+File.separator+"receiver");
|
||||||
|
File[] receiverFiles = directory.listFiles(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
return name.toLowerCase().endsWith(".xml");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
List<String> receiverList = new ArrayList<>();
|
||||||
|
for (File receiverFile:receiverFiles) {
|
||||||
|
String receiverContent =new String(Files.readAllBytes(receiverFile.toPath()));
|
||||||
|
receiverContent.replaceAll(TENANT_DOMAIN_PROPERTY,tenantDomain.toLowerCase());
|
||||||
|
receiverList.add(receiverContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return receiverList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> getStreamsList(String deviceType) throws IOException {
|
||||||
|
|
||||||
|
File directory = new File(CAR_FILE_LOCATION + File.separator + deviceType+File.separator+"streams");
|
||||||
|
File[] receiverFiles = directory.listFiles(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
return name.toLowerCase().endsWith(".json");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
List<String> streamList = new ArrayList<>();
|
||||||
|
for (File StreamFile:receiverFiles) {
|
||||||
|
String receiverContent =new String(Files.readAllBytes(StreamFile.toPath()));
|
||||||
|
receiverContent.replaceAll(TENANT_DOMAIN_PROPERTY,tenantDomain.toLowerCase());
|
||||||
|
streamList.add(receiverContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
return streamList;
|
||||||
|
}
|
||||||
|
|
||||||
private UploadedFileItem[] loadCappFromFileSystem(String deviceType) throws IOException {
|
private UploadedFileItem[] loadCappFromFileSystem(String deviceType) throws IOException {
|
||||||
|
|
||||||
File directory = new File(CAR_FILE_LOCATION + File.separator + deviceType);
|
File directory = new File(CAR_FILE_LOCATION + File.separator + deviceType);
|
||||||
|
|||||||
@ -17,5 +17,9 @@
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
{{#zone "title"}}
|
{{#zone "title"}}
|
||||||
{{@unit.params.pageTitle}} | {{@app.conf.appName}}
|
{{#if isCloud}}
|
||||||
|
{{@unit.params.pageTitle}} | WSO2 Device Cloud
|
||||||
|
{{else}}
|
||||||
|
{{@unit.params.pageTitle}} | {{@app.conf.appName}}
|
||||||
|
{{/if}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
function onRequest(context) {
|
||||||
|
|
||||||
|
var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"];
|
||||||
|
var viewModel = {};
|
||||||
|
viewModel.isCloud = deviceMgtProps.isCloud;
|
||||||
|
return viewModel;
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,5 +16,9 @@
|
|||||||
under the License.
|
under the License.
|
||||||
}}
|
}}
|
||||||
{{#zone "favicon"}}
|
{{#zone "favicon"}}
|
||||||
<link rel="shortcut icon" href="{{@unit.publicUri}}/img/favicon.png" />
|
{{#if isCloud}}
|
||||||
|
<link rel="shortcut icon" href="{{@unit.publicUri}}/img/cloud-favicon.png" />
|
||||||
|
{{else}}
|
||||||
|
<link rel="shortcut icon" href="{{@unit.publicUri}}/img/favicon.png" />
|
||||||
|
{{/if}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
function onRequest(context) {
|
||||||
|
|
||||||
|
var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"];
|
||||||
|
var viewModel = {};
|
||||||
|
viewModel.isCloud = deviceMgtProps.isCloud;
|
||||||
|
return viewModel;
|
||||||
|
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 882 B |
@ -144,33 +144,35 @@ public class PolicyAdministratorPointImpl implements PolicyAdministratorPoint {
|
|||||||
//Check whether the TaskType is already registered. If not we'll register it here.
|
//Check whether the TaskType is already registered. If not we'll register it here.
|
||||||
if (!registeredTaskTypes.contains(PolicyManagementConstants.DELEGATION_TASK_TYPE)) {
|
if (!registeredTaskTypes.contains(PolicyManagementConstants.DELEGATION_TASK_TYPE)) {
|
||||||
taskService.registerTaskType(PolicyManagementConstants.DELEGATION_TASK_TYPE);
|
taskService.registerTaskType(PolicyManagementConstants.DELEGATION_TASK_TYPE);
|
||||||
TaskInfo registeredTaskInfo = null;
|
}
|
||||||
// getTask method will throw a TaskException if the task is not registered. Hence we'll handle the
|
|
||||||
// exception and register the task.
|
TaskInfo registeredTaskInfo = null;
|
||||||
try {
|
// getTask method will throw a TaskException if the task is not registered. Hence we'll handle the
|
||||||
registeredTaskInfo = taskManager.getTask(taskName);
|
// exception and register the task.
|
||||||
} catch (TaskException e) {
|
try {
|
||||||
|
registeredTaskInfo = taskManager.getTask(taskName);
|
||||||
|
} catch (TaskException e) {
|
||||||
// No need of any specific logic to handle this exception as it is thrown if the task is not registered.
|
// No need of any specific logic to handle this exception as it is thrown if the task is not registered.
|
||||||
} finally {
|
} finally {
|
||||||
// If registeredTaskInfo is null that means there's no registered delegation-task.
|
// If registeredTaskInfo is null that means there's no registered delegation-task.
|
||||||
if (registeredTaskInfo == null) {
|
if (registeredTaskInfo == null) {
|
||||||
TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ,
|
|
||||||
properties, triggerInfo);
|
|
||||||
taskManager.registerTask(taskInfo);
|
|
||||||
taskManager.scheduleTask(taskInfo.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!taskManager.isTaskScheduled(taskName)) {
|
|
||||||
TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ,
|
TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ,
|
||||||
properties, triggerInfo);
|
properties, triggerInfo);
|
||||||
|
taskManager.registerTask(taskInfo);
|
||||||
taskManager.scheduleTask(taskInfo.getName());
|
taskManager.scheduleTask(taskInfo.getName());
|
||||||
} else {
|
} else {
|
||||||
throw new PolicyManagementException("There is a task already running for policy changes. Please try " +
|
if (!taskManager.isTaskScheduled(taskName)) {
|
||||||
"to apply " +
|
TaskInfo taskInfo = new TaskInfo(taskName, PolicyManagementConstants.DELEGATION_TASK_CLAZZ,
|
||||||
"changes after few minutes.");
|
properties, triggerInfo);
|
||||||
|
taskManager.scheduleTask(taskInfo.getName());
|
||||||
|
} else {
|
||||||
|
throw new PolicyManagementException("There is a task already running for policy changes. Please try " +
|
||||||
|
"to apply " +
|
||||||
|
"changes after few minutes.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (TaskException e) {
|
} catch (TaskException e) {
|
||||||
String msg = "Error occurred while creating the policy delegation task for tenant " +
|
String msg = "Error occurred while creating the policy delegation task for tenant " +
|
||||||
PrivilegedCarbonContext.
|
PrivilegedCarbonContext.
|
||||||
|
|||||||
@ -61,6 +61,10 @@
|
|||||||
<groupId>org.wso2.carbon.registry</groupId>
|
<groupId>org.wso2.carbon.registry</groupId>
|
||||||
<artifactId>org.wso2.carbon.registry.indexing</artifactId>
|
<artifactId>org.wso2.carbon.registry.indexing</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.receiver.stub</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@ -134,6 +138,9 @@
|
|||||||
<bundleDef>
|
<bundleDef>
|
||||||
org.wso2.orbit.com.fasterxml.jackson.core:jackson-annotations:${jackson-annotations.version}
|
org.wso2.orbit.com.fasterxml.jackson.core:jackson-annotations:${jackson-annotations.version}
|
||||||
</bundleDef>
|
</bundleDef>
|
||||||
|
<bundleDef>
|
||||||
|
org.wso2.carbon.analytics-common:org.wso2.carbon.event.receiver.stub:${carbon.analytics.common.version}
|
||||||
|
</bundleDef>
|
||||||
<!-- Below should be bundled with the email verification -->
|
<!-- Below should be bundled with the email verification -->
|
||||||
</bundles>
|
</bundles>
|
||||||
<importBundles>
|
<importBundles>
|
||||||
|
|||||||
@ -92,7 +92,7 @@
|
|||||||
<adviceFile>
|
<adviceFile>
|
||||||
<properties>
|
<properties>
|
||||||
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
|
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
|
||||||
<propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
|
<propertyDef>org.eclipse.equinox.p2.type.group:true</propertyDef>
|
||||||
</properties>
|
</properties>
|
||||||
</adviceFile>
|
</adviceFile>
|
||||||
<bundles>
|
<bundles>
|
||||||
|
|||||||
11
pom.xml
11
pom.xml
@ -1513,6 +1513,16 @@
|
|||||||
<artifactId>javassist</artifactId>
|
<artifactId>javassist</artifactId>
|
||||||
<version>${javassist.version}</version>
|
<version>${javassist.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.receiver.stub</artifactId>
|
||||||
|
<version>${carbon.analytics.common.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.analytics-common</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.event.stream.stub</artifactId>
|
||||||
|
<version>${carbon.analytics.common.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
@ -1821,6 +1831,7 @@
|
|||||||
<carbon.analytics.common.version>5.1.3</carbon.analytics.common.version>
|
<carbon.analytics.common.version>5.1.3</carbon.analytics.common.version>
|
||||||
<carbon.analytics.common.version.range>[5.1.3,6.0.0)</carbon.analytics.common.version.range>
|
<carbon.analytics.common.version.range>[5.1.3,6.0.0)</carbon.analytics.common.version.range>
|
||||||
|
|
||||||
|
|
||||||
<!-- Carbon Registry -->
|
<!-- Carbon Registry -->
|
||||||
<carbon.registry.version>4.6.0</carbon.registry.version>
|
<carbon.registry.version>4.6.0</carbon.registry.version>
|
||||||
<carbon.registry.imp.pkg.version.range>[4.4.8, 5.0.0)</carbon.registry.imp.pkg.version.range>
|
<carbon.registry.imp.pkg.version.range>[4.4.8, 5.0.0)</carbon.registry.imp.pkg.version.range>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user