diff --git a/README.md b/README.md
index 12dc417f63b..198da33e8c9 100644
--- a/README.md
+++ b/README.md
@@ -2,4 +2,4 @@
-[![pipeline status](https://gitlab.com/entgra/carbon-device-mgt/badges/master/pipeline.svg)](https://gitlab.com/entgra/carbon-device-mgt/commits/master)
\ No newline at end of file
+
\ No newline at end of file
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension.api/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/api/KeyManagerServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension.api/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/api/KeyManagerServiceImpl.java
index 161413b4ffb..4ad127527e3 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension.api/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/api/KeyManagerServiceImpl.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension.api/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/api/KeyManagerServiceImpl.java
@@ -18,6 +18,7 @@
package org.wso2.carbon.apimgt.keymgt.extension.api;
+import com.google.gson.Gson;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.apimgt.keymgt.extension.DCRResponse;
@@ -41,6 +42,8 @@ import java.util.Base64;
public class KeyManagerServiceImpl implements KeyManagerService {
+ Gson gson = new Gson();
+
@Override
@POST
@Produces(MediaType.APPLICATION_JSON)
@@ -51,7 +54,7 @@ public class KeyManagerServiceImpl implements KeyManagerService {
KeyMgtService keyMgtService = new KeyMgtServiceImpl();
DCRResponse resp = keyMgtService.dynamicClientRegistration(dcrRequest.getApplicationName(), dcrRequest.getUsername(),
dcrRequest.getGrantTypes(), dcrRequest.getCallBackUrl(), dcrRequest.getTags(), dcrRequest.getIsSaasApp());
- return Response.status(Response.Status.CREATED).entity(resp).build();
+ return Response.status(Response.Status.CREATED).entity(gson.toJson(resp)).build();
} catch (KeyMgtException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
@@ -80,7 +83,7 @@ public class KeyManagerServiceImpl implements KeyManagerService {
new TokenRequest(encodedClientCredentials.split(":")[0],
encodedClientCredentials.split(":")[1], refreshToken, scope,
grantType, assertion,admin_access_token));
- return Response.status(Response.Status.CREATED).entity(resp).build();
+ return Response.status(Response.Status.CREATED).entity(gson.toJson(resp)).build();
} catch (KeyMgtException e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
} catch (BadRequestException e) {
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/service/KeyMgtServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/service/KeyMgtServiceImpl.java
index a593e04bc63..30412867ca2 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/service/KeyMgtServiceImpl.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.keymgt.extension/src/main/java/org/wso2/carbon/apimgt/keymgt/extension/service/KeyMgtServiceImpl.java
@@ -28,11 +28,9 @@ import okhttp3.RequestBody;
import okhttp3.Response;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpStatus;
import org.json.JSONObject;
import org.wso2.carbon.apimgt.api.APIConsumer;
import org.wso2.carbon.apimgt.api.APIManagementException;
-import org.wso2.carbon.apimgt.api.model.APIKey;
import org.wso2.carbon.apimgt.api.model.Application;
import org.wso2.carbon.apimgt.impl.APIManagerFactory;
import org.wso2.carbon.apimgt.impl.utils.APIUtil;
@@ -42,6 +40,7 @@ import org.wso2.carbon.apimgt.keymgt.extension.KeyMgtConstants;
import org.wso2.carbon.apimgt.keymgt.extension.OAuthApplication;
import org.wso2.carbon.apimgt.keymgt.extension.TokenRequest;
import org.wso2.carbon.apimgt.keymgt.extension.TokenResponse;
+import org.wso2.carbon.apimgt.keymgt.extension.exception.BadRequestException;
import org.wso2.carbon.apimgt.keymgt.extension.exception.KeyMgtException;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
@@ -64,7 +63,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import java.util.Objects;
public class KeyMgtServiceImpl implements KeyMgtService {
@@ -148,9 +147,17 @@ public class KeyMgtServiceImpl implements KeyMgtService {
}
}
- public TokenResponse generateAccessToken(TokenRequest tokenRequest) throws KeyMgtException {
+ public TokenResponse generateAccessToken(TokenRequest tokenRequest) throws KeyMgtException, BadRequestException {
try {
Application application = APIUtil.getApplicationByClientId(tokenRequest.getClientId());
+ if (application == null) {
+ JSONObject errorResponse = new JSONObject();
+ errorResponse.put("error", "invalid_client");
+ errorResponse.put("error_description", "A valid OAuth client could not be found for client_id: "
+ + tokenRequest.getClientId());
+ throw new BadRequestException(errorResponse.toString());
+ }
+
String tenantDomain = MultitenantUtils.getTenantDomain(application.getOwner());
String username, password;
@@ -173,7 +180,6 @@ public class KeyMgtServiceImpl implements KeyMgtService {
}
}
- JSONObject jsonObject = new JSONObject();
RequestBody appTokenPayload;
switch (tokenRequest.getGrantType()) {
case "client_credentials":
@@ -209,7 +215,6 @@ public class KeyMgtServiceImpl implements KeyMgtService {
.add("scope", tokenRequest.getScope()).build();
break;
}
- jsonObject.put("scope", tokenRequest.getScope());
kmConfig = getKeyManagerConfig();
String appTokenEndpoint = kmConfig.getServerUrl() + KeyMgtConstants.OAUTH2_TOKEN_ENDPOINT;
@@ -220,20 +225,25 @@ public class KeyMgtServiceImpl implements KeyMgtService {
.build();
Response response = client.newCall(request).execute();
- jsonObject = new JSONObject(response.body().string());
+ JSONObject responseObj = new JSONObject(Objects.requireNonNull(response.body()).string());
+
+ if (!response.isSuccessful()) {
+ throw new BadRequestException(responseObj.toString());
+ }
+
String accessToken;
if (KeyMgtConstants.SUPER_TENANT.equals(tenantDomain)) {
- accessToken = jsonObject.getString("access_token");
+ accessToken = responseObj.getString("access_token");
} else {
int tenantId = getRealmService()
.getTenantManager().getTenantId(tenantDomain);
- accessToken = tenantId + "_" + jsonObject.getString("access_token");
+ accessToken = tenantId + "_" + responseObj.getString("access_token");
}
return new TokenResponse(accessToken,
- jsonObject.getString("refresh_token"),
- jsonObject.getString("scope"),
- jsonObject.getString("token_type"),
- jsonObject.getInt("expires_in"));
+ responseObj.getString("refresh_token"),
+ responseObj.getString("scope"),
+ responseObj.getString("token_type"),
+ responseObj.getInt("expires_in"));
} catch (APIManagementException e) {
msg = "Error occurred while retrieving application";
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/pom.xml
new file mode 100644
index 00000000000..f2c299d1b5d
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/pom.xml
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+ device-mgt-extensions
+ org.wso2.carbon.devicemgt
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.defaultrole.manager
+ bundle
+ Entgra IoT - Default User Roles Management Module
+ Entgra IoT - Default User Roles Management Module Implementation
+ http://entgra.io
+
+
+
+
+ org.apache.felix
+ maven-scr-plugin
+
+
+ maven-compiler-plugin
+
+
+ 1.8
+
+ 2.3.2
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ 1.4.0
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.device.mgt.version}
+ IoT - User Roles Management Bundle
+ io.entgra.device.mgt.extensions.defaultrole.manager.internal
+
+ org.osgi.framework.*;version="${imp.package.version.osgi.framework}",
+ org.osgi.service.*;version="${imp.package.version.osgi.service}",
+ org.apache.commons.logging,
+ org.apache.axis2.*;version="${axis2.osgi.version.range}",
+ org.wso2.carbon.core,
+ org.wso2.carbon.utils.*,
+ javax.xml.bind;resolution:=optional,
+ javax.xml.bind.annotation,
+ javax.xml.parsers,
+ org.w3c.dom,
+ org.wso2.carbon,
+ org.wso2.carbon.context,
+ org.wso2.carbon.user.api,
+ org.wso2.carbon.user.core.common,
+ org.wso2.carbon.user.core.service,
+ org.wso2.carbon.user.mgt.common
+
+
+ !io.entgra.device.mgt.extensions.defaultrole.manager.internal,
+ io.entgra.device.mgt.extensions.defaultrole.manager.*;version="${project.version}"
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+
+
+
+ jacoco-initialize
+
+ prepare-agent
+
+
+
+ jacoco-site
+ test
+
+ report
+
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+ ${basedir}/target/coverage-reports/site
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ file:src/test/resources/carbon-home/repository/conf/log4j.properties
+
+
+
+ src/test/resources/testng.xml
+
+
+
+
+
+
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi
+
+
+ org.eclipse.osgi
+ org.eclipse.osgi.services
+
+
+ org.wso2.carbon
+ org.wso2.carbon.core
+
+
+ org.wso2.carbon
+ org.wso2.carbon.logging
+
+
+ org.wso2.carbon
+ org.wso2.carbon.utils
+ provided
+
+
+ org.wso2.carbon
+ org.wso2.carbon.user.api
+ provided
+
+
+ org.wso2.carbon
+ org.wso2.carbon.user.core
+ provided
+
+
+ org.wso2.carbon.identity.framework
+ org.wso2.carbon.user.mgt
+ provided
+
+
+ org.mockito
+ mockito-inline
+ test
+
+
+ org.testng
+ testng
+ test
+
+
+ org.wso2.orbit.com.h2database
+ h2
+ test
+
+
+ org.apache.httpcomponents.wso2
+ httpcore
+ test
+
+
+ org.wso2.apache.httpcomponents
+ httpclient
+ test
+
+
+ org.wso2.carbon
+ org.wso2.carbon.securevault
+
+ test
+
+
+ org.wso2.securevault
+ org.wso2.securevault
+ test
+
+
+ xerces.wso2
+ xercesImpl
+ test
+
+
+ org.apache.axis2.wso2
+ axis2
+ test
+
+
+ org.wso2.carbon
+ org.wso2.carbon.queuing
+ test
+
+
+ javax.xml.bind
+ jaxb-api
+ test
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/DefaultRolesConfigManager.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/DefaultRolesConfigManager.java
new file mode 100644
index 00000000000..c6f3640d33f
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/DefaultRolesConfigManager.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager;
+
+import io.entgra.device.mgt.extensions.defaultrole.manager.bean.DefaultRolesConfig;
+import io.entgra.device.mgt.extensions.defaultrole.manager.exception.DefaultRoleManagerException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.w3c.dom.Document;
+import org.wso2.carbon.utils.CarbonUtils;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.File;
+
+public class DefaultRolesConfigManager {
+
+ private static final Log log = LogFactory.getLog(DefaultRolesConfigManager.class);
+ private static final String DEFAULT_ROLES_CONFIG_PATH = CarbonUtils.getCarbonConfigDirPath() +
+ File.separator + "default-roles-config.xml";
+
+ private final DefaultRolesConfig defaultRolesConfig;
+
+ public DefaultRolesConfigManager() throws DefaultRoleManagerException {
+ try {
+ File defaultRolesConfig = new File(DEFAULT_ROLES_CONFIG_PATH);
+ Document doc = convertToDocument(defaultRolesConfig);
+ JAXBContext smsContext = JAXBContext.newInstance(DefaultRolesConfig.class);
+ Unmarshaller unmarshaller = smsContext.createUnmarshaller();
+ this.defaultRolesConfig = (DefaultRolesConfig) unmarshaller.unmarshal(doc);
+ } catch (JAXBException e) {
+ String msg = "Error occurred while initializing Default Roles config '" + DEFAULT_ROLES_CONFIG_PATH + "'";
+ log.error(msg, e);
+ throw new DefaultRoleManagerException(msg, e);
+ }
+ }
+
+ private static Document convertToDocument(File file) throws DefaultRoleManagerException {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+
+ try {
+ factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+ factory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
+ DocumentBuilder docBuilder = factory.newDocumentBuilder();
+ return docBuilder.parse(file);
+ } catch (Exception e) {
+ throw new DefaultRoleManagerException("Error occurred while parsing " + DEFAULT_ROLES_CONFIG_PATH +
+ " file, while converting to a org.w3c.dom.Document", e);
+ }
+ }
+
+ public DefaultRolesConfig getDefaultRolesConfig() {
+ return this.defaultRolesConfig;
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/IoTSStartupHandler.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/IoTSStartupHandler.java
new file mode 100644
index 00000000000..84f5a75dece
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/IoTSStartupHandler.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager;
+
+import io.entgra.device.mgt.extensions.defaultrole.manager.bean.DefaultRolesConfig;
+import io.entgra.device.mgt.extensions.defaultrole.manager.bean.Role;
+import io.entgra.device.mgt.extensions.defaultrole.manager.internal.RoleManagerDataHolder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.CarbonConstants;
+import org.wso2.carbon.core.ServerStartupObserver;
+import org.wso2.carbon.user.api.AuthorizationManager;
+import org.wso2.carbon.user.api.Permission;
+import org.wso2.carbon.user.api.UserStoreException;
+import org.wso2.carbon.user.api.UserStoreManager;
+
+public class IoTSStartupHandler implements ServerStartupObserver {
+ private static final Log log = LogFactory.getLog(IoTSStartupHandler.class);
+
+ @Override
+ public void completingServerStartup() {
+ }
+
+ @Override
+ public void completedServerStartup() {
+ DefaultRolesConfig defaultRolesConfig = RoleManagerDataHolder.getInstance()
+ .getDefaultRolesConfigManager().getDefaultRolesConfig();
+ UserStoreManager userStoreManager;
+ try {
+ userStoreManager = RoleManagerDataHolder.getInstance().getUserStoreManager();
+ } catch (UserStoreException e) {
+ log.error("Unable to retrieve user store manager");
+ return;
+ }
+ for (Role role : defaultRolesConfig.getRoles()) {
+ try {
+ if (userStoreManager.isExistingRole(role.getName())) {
+ updatePermissions(role);
+ } else {
+ try {
+ addRole(role);
+ } catch (UserStoreException e) {
+ log.error("Error occurred when adding new role: " + role.getName(), e);
+ }
+ }
+ } catch (UserStoreException e) {
+ log.error("Error occurred when checking the existence of role: " + role.getName(), e);
+ }
+ }
+ }
+
+ private void updatePermissions(Role role) throws UserStoreException {
+ AuthorizationManager authorizationManager = RoleManagerDataHolder.getInstance().getUserRealm()
+ .getAuthorizationManager();
+ if (log.isDebugEnabled()) {
+ log.debug("Updating the role '" + role.getName() + "'");
+ }
+ if (role.getPermissions() != null && !role.getPermissions().isEmpty()) {
+ authorizationManager.clearRoleAuthorization(role.getName());
+ for (String permission : role.getPermissions()) {
+ authorizationManager.authorizeRole(role.getName(), permission, CarbonConstants.UI_PERMISSION_ACTION);
+ }
+ }
+ }
+
+ private void addRole(Role role) throws UserStoreException {
+ UserStoreManager userStoreManager = RoleManagerDataHolder.getInstance().getUserStoreManager();
+ if (log.isDebugEnabled()) {
+ log.debug("Persisting the role " + role.getName() + " in the underlying user store");
+ }
+ Permission[] permissions = null;
+ if (role.getPermissions() != null) {
+ permissions = new Permission[role.getPermissions().size()];
+ String permission;
+ for (int i = 0; i < permissions.length; i++) {
+ permission = role.getPermissions().get(i);
+ permissions[i] = new Permission(permission, CarbonConstants.UI_PERMISSION_ACTION);
+ }
+ }
+ userStoreManager.addRole(role.getName(), new String[]{"admin"}, permissions);
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/DefaultRolesConfig.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/DefaultRolesConfig.java
new file mode 100644
index 00000000000..5f97c1226b6
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/DefaultRolesConfig.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager.bean;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+@XmlRootElement(
+ name = "DefaultRolesConfig"
+)
+public class DefaultRolesConfig {
+
+ private List roles;
+
+ @XmlElementWrapper(
+ name = "Roles"
+ )
+ @XmlElement(
+ name = "Role"
+ )
+ public List getRoles() {
+ return roles;
+ }
+
+ public void setRoles(List roles) {
+ this.roles = roles;
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/Role.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/Role.java
new file mode 100644
index 00000000000..ced6c5a5fd5
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/bean/Role.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager.bean;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+@XmlRootElement(
+ name = "Role"
+)
+public class Role {
+
+ private String name;
+ private List permissions;
+
+ @XmlAttribute(
+ name = "name"
+ )
+ public String getName() {
+ return this.name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @XmlElementWrapper(
+ name = "Permissions"
+ )
+ @XmlElement(
+ name = "Permission"
+ )
+ public List getPermissions() {
+ return this.permissions;
+ }
+
+ public void setPermissions(List permissions) {
+ this.permissions = permissions;
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/exception/DefaultRoleManagerException.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/exception/DefaultRoleManagerException.java
new file mode 100644
index 00000000000..ec3d33936dd
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/exception/DefaultRoleManagerException.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager.exception;
+
+public class DefaultRoleManagerException extends Exception {
+
+ public DefaultRoleManagerException(String msg, Exception e) {
+ super(msg, e);
+ }
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerDataHolder.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerDataHolder.java
new file mode 100644
index 00000000000..84aa08ba4c1
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerDataHolder.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package io.entgra.device.mgt.extensions.defaultrole.manager.internal;
+
+import io.entgra.device.mgt.extensions.defaultrole.manager.DefaultRolesConfigManager;
+import org.wso2.carbon.context.CarbonContext;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.user.api.UserRealm;
+import org.wso2.carbon.user.api.UserStoreException;
+import org.wso2.carbon.user.api.UserStoreManager;
+import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.utils.ConfigurationContextService;
+
+public class RoleManagerDataHolder {
+
+ private ConfigurationContextService configurationContextService;
+ private RealmService realmService;
+ private DefaultRolesConfigManager defaultRolesConfigManager;
+
+ private static final RoleManagerDataHolder thisInstance = new RoleManagerDataHolder();
+
+ private RoleManagerDataHolder() {}
+
+ public static RoleManagerDataHolder getInstance() {
+ return thisInstance;
+ }
+
+ public ConfigurationContextService getConfigurationContextService() {
+ return configurationContextService;
+ }
+
+ public void setConfigurationContextService(ConfigurationContextService configurationContextService) {
+ this.configurationContextService = configurationContextService;
+ }
+
+ public UserStoreManager getUserStoreManager() throws UserStoreException {
+ if (realmService == null) {
+ String msg = "Realm service has not initialized.";
+ throw new IllegalStateException(msg);
+ }
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
+ return realmService.getTenantUserRealm(tenantId).getUserStoreManager();
+ }
+
+ public UserRealm getUserRealm() throws UserStoreException {
+ UserRealm realm;
+ if (realmService == null) {
+ throw new IllegalStateException("Realm service not initialized");
+ }
+ int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
+ realm = realmService.getTenantUserRealm(tenantId);
+ return realm;
+ }
+
+ public RealmService getRealmService() {
+ return realmService;
+ }
+
+ public void setRealmService(RealmService realmService) {
+ this.realmService = realmService;
+ }
+
+ public DefaultRolesConfigManager getDefaultRolesConfigManager() {
+ return defaultRolesConfigManager;
+ }
+
+ public void setDefaultRolesConfigManager(DefaultRolesConfigManager defaultRolesConfigManager) {
+ this.defaultRolesConfigManager = defaultRolesConfigManager;
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerServiceComponent.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerServiceComponent.java
new file mode 100644
index 00000000000..08ff1d6f9b4
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/main/java/io/entgra/device/mgt/extensions/defaultrole/manager/internal/RoleManagerServiceComponent.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.defaultrole.manager.internal;
+
+import io.entgra.device.mgt.extensions.defaultrole.manager.DefaultRolesConfigManager;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.component.ComponentContext;
+import org.wso2.carbon.core.ServerStartupObserver;
+import io.entgra.device.mgt.extensions.defaultrole.manager.IoTSStartupHandler;
+import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.utils.ConfigurationContextService;
+
+/**
+ * @scr.component name="io.entgra.device.mgt.role.manager.RoleManagerServiceComponent"
+ * immediate="true"
+ * @scr.reference name="user.realmservice.default"
+ * interface="org.wso2.carbon.user.core.service.RealmService"
+ * cardinality="1..1"
+ * policy="dynamic"
+ * bind="setRealmService"
+ * unbind="unsetRealmService"
+ * @scr.reference name="config.context.service"
+ * interface="org.wso2.carbon.utils.ConfigurationContextService"
+ * cardinality="0..1"
+ * policy="dynamic"
+ * bind="setConfigurationContextService"
+ * unbind="unsetConfigurationContextService"
+ */
+public class RoleManagerServiceComponent {
+
+ private static final Log log = LogFactory.getLog(RoleManagerServiceComponent.class);
+
+ protected void activate(ComponentContext ctx) {
+ if (log.isDebugEnabled()) {
+ log.debug("Activating Role Management Service Component");
+ }
+ try {
+ BundleContext bundleContext = ctx.getBundleContext();
+ bundleContext.registerService(ServerStartupObserver.class.getName(), new IoTSStartupHandler(), null);
+ RoleManagerDataHolder.getInstance().setDefaultRolesConfigManager(new DefaultRolesConfigManager());
+ if (log.isDebugEnabled()) {
+ log.debug("Role Management Service Component has been successfully activated");
+ }
+ } catch (Throwable e) {
+ log.error("Error occurred while activating Role Management Service Component", e);
+ }
+ }
+
+ protected void deactivate(ComponentContext ctx) {
+ if (log.isDebugEnabled()) {
+ log.debug("De-activating Role Manager Service Component");
+ }
+ }
+
+ protected void setConfigurationContextService(ConfigurationContextService configurationContextService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Setting ConfigurationContextService");
+ }
+
+ RoleManagerDataHolder.getInstance().setConfigurationContextService(configurationContextService);
+ }
+
+ protected void unsetConfigurationContextService(ConfigurationContextService configurationContextService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Un-setting ConfigurationContextService");
+ }
+ RoleManagerDataHolder.getInstance().setConfigurationContextService(null);
+ }
+
+ /**
+ * Sets Realm Service.
+ *
+ * @param realmService An instance of RealmService
+ */
+ protected void setRealmService(RealmService realmService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Setting Realm Service");
+ }
+ RoleManagerDataHolder.getInstance().setRealmService(realmService);
+ }
+
+ /**
+ * Unsets Realm Service.
+ *
+ * @param realmService An instance of RealmService
+ */
+ protected void unsetRealmService(RealmService realmService) {
+ if (log.isDebugEnabled()) {
+ log.debug("Unsetting Realm Service");
+ }
+ RoleManagerDataHolder.getInstance().setRealmService(null);
+ }
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/BaseTest.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/BaseTest.java
new file mode 100644
index 00000000000..9dd5881b387
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/BaseTest.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package io.entgra.device.mgt.extensions.defaultrole.manager.test;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeSuite;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+
+import java.io.File;
+
+public abstract class BaseTest {
+
+ @BeforeSuite
+ public void setup() throws Exception {
+ this.initializeCarbonContext();
+ }
+
+ private void initServices() {
+
+ }
+
+ @BeforeClass
+ public abstract void init() throws Exception;
+
+ private void initializeCarbonContext() {
+ if (System.getProperty("carbon.home") == null) {
+ File file = new File("src/test/resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ }
+
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants
+ .SUPER_TENANT_DOMAIN_NAME);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/DefaultRoleReadingTest.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/DefaultRoleReadingTest.java
new file mode 100644
index 00000000000..c297dd7fe68
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/java/io/entgra/device/mgt/extensions/defaultrole/manager/test/DefaultRoleReadingTest.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package io.entgra.device.mgt.extensions.defaultrole.manager.test;
+
+import com.google.gson.Gson;
+import io.entgra.device.mgt.extensions.defaultrole.manager.DefaultRolesConfigManager;
+import io.entgra.device.mgt.extensions.defaultrole.manager.bean.DefaultRolesConfig;
+import io.entgra.device.mgt.extensions.defaultrole.manager.internal.RoleManagerDataHolder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class DefaultRoleReadingTest extends BaseTest {
+
+ private static final Log log = LogFactory.getLog(DefaultRoleReadingTest.class);
+
+ @Override
+ @BeforeClass
+ public void init() throws Exception {
+ RoleManagerDataHolder.getInstance().setDefaultRolesConfigManager(new DefaultRolesConfigManager());
+ log.info("Test initialized");
+ }
+
+ @Test
+ public void readDefaultRoles() {
+ DefaultRolesConfig defaultRolesConfig = RoleManagerDataHolder.getInstance()
+ .getDefaultRolesConfigManager().getDefaultRolesConfig();
+ Assert.assertNotNull(defaultRolesConfig);
+ log.info(new Gson().toJson(defaultRolesConfig));
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/dbscripts/h2.sql b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/dbscripts/h2.sql
new file mode 100644
index 00000000000..f6b31c78d91
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/dbscripts/h2.sql
@@ -0,0 +1,429 @@
+CREATE TABLE IF NOT EXISTS REG_CLUSTER_LOCK (
+ REG_LOCK_NAME VARCHAR (20),
+ REG_LOCK_STATUS VARCHAR (20),
+ REG_LOCKED_TIME TIMESTAMP,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_LOCK_NAME)
+);
+
+CREATE TABLE IF NOT EXISTS REG_LOG (
+ REG_LOG_ID INTEGER AUTO_INCREMENT,
+ REG_PATH VARCHAR (2000),
+ REG_USER_ID VARCHAR (31) NOT NULL,
+ REG_LOGGED_TIME TIMESTAMP NOT NULL,
+ REG_ACTION INTEGER NOT NULL,
+ REG_ACTION_DATA VARCHAR (500),
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_LOG_ID, REG_TENANT_ID)
+);
+
+CREATE INDEX IF NOT EXISTS REG_LOG_IND_BY_REG_LOGTIME ON REG_LOG(REG_LOGGED_TIME, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_PATH(
+ REG_PATH_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_PATH_VALUE VARCHAR(2000) NOT NULL,
+ REG_PATH_PARENT_ID INT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_PATH PRIMARY KEY(REG_PATH_ID, REG_TENANT_ID)
+);
+CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_NAME ON REG_PATH(REG_PATH_VALUE, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_PARENT_ID ON REG_PATH(REG_PATH_PARENT_ID, REG_TENANT_ID);
+
+
+CREATE TABLE IF NOT EXISTS REG_CONTENT (
+ REG_CONTENT_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_CONTENT_DATA LONGBLOB,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_CONTENT PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_CONTENT_HISTORY (
+ REG_CONTENT_ID INTEGER NOT NULL,
+ REG_CONTENT_DATA LONGBLOB,
+ REG_DELETED SMALLINT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_CONTENT_HISTORY PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE (
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_NAME VARCHAR(256),
+ REG_VERSION INTEGER NOT NULL AUTO_INCREMENT,
+ REG_MEDIA_TYPE VARCHAR(500),
+ REG_CREATOR VARCHAR(31) NOT NULL,
+ REG_CREATED_TIME TIMESTAMP NOT NULL,
+ REG_LAST_UPDATOR VARCHAR(31),
+ REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
+ REG_DESCRIPTION VARCHAR(1000),
+ REG_CONTENT_ID INTEGER,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ REG_UUID VARCHAR(100) NOT NULL,
+ CONSTRAINT PK_REG_RESOURCE PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT (REG_CONTENT_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_NAME ON REG_RESOURCE(REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_UUID ON REG_RESOURCE(REG_UUID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TENANT ON REG_RESOURCE(REG_TENANT_ID, REG_UUID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TYPE ON REG_RESOURCE(REG_TENANT_ID, REG_MEDIA_TYPE);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_HISTORY (
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_NAME VARCHAR(256),
+ REG_VERSION INTEGER NOT NULL,
+ REG_MEDIA_TYPE VARCHAR(500),
+ REG_CREATOR VARCHAR(31) NOT NULL,
+ REG_CREATED_TIME TIMESTAMP NOT NULL,
+ REG_LAST_UPDATOR VARCHAR(31),
+ REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
+ REG_DESCRIPTION VARCHAR(1000),
+ REG_CONTENT_ID INTEGER,
+ REG_DELETED SMALLINT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ REG_UUID VARCHAR(100) NOT NULL,
+ CONSTRAINT PK_REG_RESOURCE_HISTORY PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_PATHID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT_HISTORY (REG_CONTENT_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_NAME ON REG_RESOURCE_HISTORY(REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_COMMENT (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_COMMENT_TEXT VARCHAR(500) NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_COMMENTED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_COMMENT PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_COMMENT (
+ REG_COMMENT_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_COMMENT_ID FOREIGN KEY (REG_COMMENT_ID, REG_TENANT_ID) REFERENCES REG_COMMENT (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_COMMENT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_VERSION ON REG_RESOURCE_COMMENT(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_RATING (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_RATING INTEGER NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_RATED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_RATING PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_RATING (
+ REG_RATING_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_RATING_ID FOREIGN KEY (REG_RATING_ID, REG_TENANT_ID) REFERENCES REG_RATING (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_RATING(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_VERSION ON REG_RESOURCE_RATING(REG_VERSION, REG_TENANT_ID);
+
+
+CREATE TABLE IF NOT EXISTS REG_TAG (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_TAG_NAME VARCHAR(500) NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_TAGGED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_TAG PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_TAG (
+ REG_TAG_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_TAG_ID FOREIGN KEY (REG_TAG_ID, REG_TENANT_ID) REFERENCES REG_TAG (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_TAG(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_VERSION ON REG_RESOURCE_TAG(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_PROPERTY (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_NAME VARCHAR(100) NOT NULL,
+ REG_VALUE VARCHAR(1000),
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_PROPERTY PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_PROPERTY (
+ REG_PROPERTY_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_TAG_ID FOREIGN KEY (REG_PROPERTY_ID, REG_TENANT_ID) REFERENCES REG_PROPERTY (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_PROPERTY(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_VERSION ON REG_RESOURCE_PROPERTY(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_ASSOCIATION (
+ REG_ASSOCIATION_ID INTEGER AUTO_INCREMENT,
+ REG_SOURCEPATH VARCHAR (2000) NOT NULL,
+ REG_TARGETPATH VARCHAR (2000) NOT NULL,
+ REG_ASSOCIATION_TYPE VARCHAR (2000) NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_ASSOCIATION_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_SNAPSHOT (
+ REG_SNAPSHOT_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_RESOURCE_NAME VARCHAR (256),
+ REG_RESOURCE_VIDS LONGBLOB NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_SNAPSHOT PRIMARY KEY(REG_SNAPSHOT_ID, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_SNAPSHOT ADD CONSTRAINT IF NOT EXISTS REG_SNAPSHOT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_SNAPSHOT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_SNAPSHOT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+
+-- ################################
+-- USER MANAGER TABLES
+-- ################################
+
+CREATE TABLE IF NOT EXISTS UM_TENANT (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DOMAIN_NAME VARCHAR(255) NOT NULL,
+ UM_EMAIL VARCHAR(255),
+ UM_ACTIVE BOOLEAN DEFAULT FALSE,
+ UM_CREATED_DATE TIMESTAMP NOT NULL,
+ UM_USER_CONFIG LONGBLOB NOT NULL,
+ PRIMARY KEY (UM_ID),
+ UNIQUE(UM_DOMAIN_NAME));
+
+CREATE TABLE IF NOT EXISTS UM_DOMAIN(
+ UM_DOMAIN_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DOMAIN_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_DOMAIN_ID, UM_TENANT_ID)
+);
+
+CREATE INDEX IF NOT EXISTS INDEX_UM_TENANT_UM_DOMAIN_NAME ON UM_TENANT (UM_DOMAIN_NAME);
+
+CREATE TABLE IF NOT EXISTS UM_USER (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_USER_PASSWORD VARCHAR(255) NOT NULL,
+ UM_SALT_VALUE VARCHAR(31),
+ UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
+ UM_CHANGED_TIME TIMESTAMP NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_USER_PASSWORD VARCHAR(255) NOT NULL,
+ UM_SALT_VALUE VARCHAR(31),
+ UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
+ UM_CHANGED_TIME TIMESTAMP NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_ATTRIBUTE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ATTR_NAME VARCHAR(255) NOT NULL,
+ UM_ATTR_VALUE VARCHAR(1024),
+ UM_PROFILE_ID VARCHAR(255),
+ UM_USER_ID INTEGER,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID));
+
+CREATE INDEX IF NOT EXISTS UM_USER_ID_INDEX ON UM_USER_ATTRIBUTE(UM_USER_ID);
+
+CREATE TABLE IF NOT EXISTS UM_ROLE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_SHARED_ROLE BOOLEAN DEFAULT FALSE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_ROLE_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_MODULE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_MODULE_NAME VARCHAR(100),
+ UNIQUE(UM_MODULE_NAME),
+ PRIMARY KEY(UM_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_MODULE_ACTIONS(
+ UM_ACTION VARCHAR(255) NOT NULL,
+ UM_MODULE_ID INTEGER NOT NULL,
+ PRIMARY KEY(UM_ACTION, UM_MODULE_ID),
+ FOREIGN KEY (UM_MODULE_ID) REFERENCES UM_MODULE(UM_ID) ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS UM_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_RESOURCE_ID VARCHAR(255) NOT NULL,
+ UM_ACTION VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_MODULE_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_RESOURCE_ID,UM_ACTION, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE INDEX IF NOT EXISTS INDEX_UM_PERMISSION_UM_RESOURCE_ID_UM_ACTION ON UM_PERMISSION (UM_RESOURCE_ID, UM_ACTION, UM_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS UM_ROLE_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_PERMISSION_ID INTEGER NOT NULL,
+ UM_ROLE_NAME VARCHAR(255) NOT NULL,
+ UM_IS_ALLOWED SMALLINT NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_DOMAIN_ID INTEGER,
+ FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_PERMISSION_ID INTEGER NOT NULL,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_IS_ALLOWED SMALLINT NOT NULL,
+ UNIQUE (UM_PERMISSION_ID, UM_USER_NAME, UM_TENANT_ID),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_ROLE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_USER_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE (UM_USER_ID, UM_ROLE_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_ROLE(UM_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+
+CREATE TABLE IF NOT EXISTS UM_SHARED_USER_ROLE(
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_USER_ID INTEGER NOT NULL,
+ UM_USER_TENANT_ID INTEGER NOT NULL,
+ UM_ROLE_TENANT_ID INTEGER NOT NULL,
+ UNIQUE(UM_USER_ID,UM_ROLE_ID,UM_USER_TENANT_ID, UM_ROLE_TENANT_ID),
+ FOREIGN KEY(UM_ROLE_ID,UM_ROLE_TENANT_ID) REFERENCES UM_ROLE(UM_ID,UM_TENANT_ID) ON DELETE CASCADE ,
+ FOREIGN KEY(UM_USER_ID,UM_USER_TENANT_ID) REFERENCES UM_USER(UM_ID,UM_TENANT_ID) ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS UM_ACCOUNT_MAPPING(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER NOT NULL,
+ UM_USER_STORE_DOMAIN VARCHAR(100),
+ UM_ACC_LINK_ID INTEGER NOT NULL,
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID, UM_USER_STORE_DOMAIN, UM_ACC_LINK_ID),
+ FOREIGN KEY (UM_TENANT_ID) REFERENCES UM_TENANT(UM_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_DIALECT(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_URI VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_DIALECT_URI, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_CLAIM(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_ID INTEGER NOT NULL,
+ UM_CLAIM_URI VARCHAR(255) NOT NULL,
+ UM_DISPLAY_TAG VARCHAR(255),
+ UM_DESCRIPTION VARCHAR(255),
+ UM_MAPPED_ATTRIBUTE_DOMAIN VARCHAR(255),
+ UM_MAPPED_ATTRIBUTE VARCHAR(255),
+ UM_REG_EX VARCHAR(255),
+ UM_SUPPORTED SMALLINT,
+ UM_REQUIRED SMALLINT,
+ UM_DISPLAY_ORDER INTEGER,
+ UM_CHECKED_ATTRIBUTE SMALLINT,
+ UM_READ_ONLY SMALLINT,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_DIALECT_ID, UM_CLAIM_URI,UM_MAPPED_ATTRIBUTE_DOMAIN, UM_TENANT_ID),
+ FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_PROFILE_CONFIG(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_ID INTEGER,
+ UM_PROFILE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_USER_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255),
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_DOMAIN_ID INTEGER,
+ UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID,UM_DOMAIN_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_HYBRID_ROLE(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_REMEMBER_ME (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_COOKIE_VALUE VARCHAR(1024),
+ UM_CREATED_TIME TIMESTAMP,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255),
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_SYSTEM_ROLE(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml
new file mode 100644
index 00000000000..013b3537aaa
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2.xml
@@ -0,0 +1,727 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ ${hotdeployment}
+ ${hotupdate}
+ optional
+ true
+ work/mtom
+ 4000
+
+ ${childfirstCL}
+
+
+ true
+
+
+ true
+
+
+
+ false
+
+ inmemory
+
+
+
+
+
+
+ services
+
+
+ axis2services
+
+
+ axis2modules
+
+
+ @product.name@-@product.version@
+
+
+ @product.name@-@product.version@
+
+
+
+
+
+
+ false
+
+
+
+
+
+ false
+
+
+ true
+
+
+ repository/deployment/server/synapse-configs
+
+
+
+ .
+
+
+ .
+
+
+ WSO2 Carbon Server
+
+
+
+
+
+
+ ${jaxwsparam}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 9763
+
+
+
+
+
+
+
+
+
+
+
+ 9443
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTP/1.1
+ chunked
+
+ true
+
+
+ HTTP/1.1
+ chunked
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ multicast
+
+
+
+
+ wso2.carbon.domain
+
+
+
+
+
+ 45564
+
+ 100
+
+ 60
+
+
+
+
+
+ 127.0.0.1
+
+
+
+
+
+ 4000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 127.0.0.1
+ 4000
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml
new file mode 100644
index 00000000000..99cfccd5626
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/axis2_client.xml
@@ -0,0 +1,303 @@
+
+
+
+
+
+
+ true
+ false
+ false
+
+
+ 500
+
+ 15000
+
+
+ false
+
+
+
+ true
+
+
+
+
+
+ false
+
+
+ admin
+ axis2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6071
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTP/1.1
+ chunked
+ 60000
+ 60000
+
+
+ HTTP/1.1
+ chunked
+ 60000
+ 60000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml
new file mode 100644
index 00000000000..22d45c295ff
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/axis2/tenant-axis2.xml
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+ true
+ true
+ optional
+
+
+ true
+
+
+ false
+
+
+
+ true
+
+
+
+
+
+ false
+
+
+ false
+
+
+ axis2services
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/carbon.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/carbon.xml
new file mode 100644
index 00000000000..b52017981d5
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/carbon.xml
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
+
+ ${product.name}
+
+
+ ${product.key}
+
+
+ ${product.version}
+
+
+
+
+
+
+
+
+ local:/${carbon.context}/services/
+
+
+
+
+
+
+ ${default.server.role}
+
+
+
+
+
+
+ org.wso2.carbon
+
+
+ /
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 9999
+
+ 11111
+
+
+
+
+
+ 10389
+
+ 8000
+
+
+
+
+
+ 10500
+
+
+
+
+
+
+ org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory
+
+
+
+
+
+
+
+
+ java
+
+
+
+
+
+
+
+
+
+ false
+
+
+ false
+
+
+ 600
+
+
+
+ false
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+ ${carbon.home}/repository/deployment/server/
+
+
+ 15
+
+
+ ${carbon.home}/repository/conf/axis2/axis2.xml
+
+
+ 30000
+
+
+ ${carbon.home}/repository/deployment/client/
+
+ ${carbon.home}/repository/conf/axis2/axis2_client.xml
+
+ true
+
+
+
+
+
+
+
+
+
+ admin
+ Default Administrator Role
+
+
+ user
+ Default User Role
+
+
+
+
+
+
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/wso2carbon.jks
+
+ JKS
+
+ wso2carbon
+
+ wso2carbon
+
+ wso2carbon
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/client-truststore.jks
+
+ JKS
+
+ wso2carbon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserManager
+
+
+ false
+
+
+
+
+
+
+ ${carbon.home}/tmp/work
+
+
+
+
+
+ true
+
+
+ 10
+
+
+ 30
+
+
+
+
+
+ 100
+
+
+
+ keystore
+ certificate
+ *
+
+ org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor
+
+
+
+
+ jarZip
+
+ org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor
+
+
+
+ dbs
+
+ org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor
+
+
+
+ tools
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor
+
+
+
+ toolsAny
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor
+
+
+
+
+
+
+ - info
+ org.wso2.carbon.core.transports.util.InfoProcessor
+
+
+ - wsdl
+ org.wso2.carbon.core.transports.util.Wsdl11Processor
+
+
+ - wsdl2
+ org.wso2.carbon.core.transports.util.Wsdl20Processor
+
+
+ - xsd
+ org.wso2.carbon.core.transports.util.XsdProcessor
+
+
+
+
+
+ false
+ false
+ true
+ svn
+ http://svnrepo.example.com/repos/
+ username
+ password
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${require.carbon.servlet}
+
+
+
+
+ true
+
+
+
+
+
+
+ default repository
+ ${p2.repo.url}
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ true
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/cdm-config.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/cdm-config.xml
new file mode 100644
index 00000000000..71e06b50a60
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/cdm-config.xml
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+ jdbc/DM_DS
+
+
+
+
+ 1000
+ 60000
+ 60000
+ true
+
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.FCMBasedPushNotificationProvider
+
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.MQTTBasedPushNotificationProvider
+
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.HTTPBasedPushNotificationProvider
+
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.XMPPBasedPushNotificationProvider
+
+
+
+
+ false
+
+
+ https://localhost:9443
+ admin
+ admin
+
+
+ https://localhost:9443
+ admin
+ admin
+
+
+ org.wso2.carbon.policy.mgt
+ true
+ 60000
+ 5
+ 8
+ 20
+
+
+
+ Simple
+ true
+
+
+
+ 20
+ 20
+ 20
+ 20
+ 20
+ 20
+ 20
+
+
+
+ true
+
+
+
+ false
+ 600
+
+ 10000
+
+
+ false
+ 600
+
+ 10000
+
+
+ true
+
+
+ false
+ 86400
+
+
+
+
+ jdbc/DM_ARCHIVAL_DS
+
+
+
+ false
+ org.wso2.carbon.device.mgt.core.task.impl.ArchivalTask
+
+ 0 0 0 1/1 * ? *
+
+ 30
+ 1000
+
+ false
+ org.wso2.carbon.device.mgt.core.task.impl.ArchivedDataDeletionTask
+
+ 0 0 3 1/1 * ? *
+
+ 365
+
+
+
+
+ false
+
+
+ false
+ false
+
+ false
+
+
+
+
+ *
+
+
+
+
+
+ true
+ wss://localhost:9443
+ 2
+ 100
+ 20
+ 15
+ 640
+
+ BYOD,COPE
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml
new file mode 100644
index 00000000000..eba9f83d735
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/datasources/data-source-config.xml
@@ -0,0 +1,26 @@
+
+
+
+
+ jdbc:h2:mem:smart-meter-test-db;DB_CLOSE_ON_EXIT=FALSE;MVCC=true
+ org.h2.Driver
+ wso2carbon
+ wso2carbon
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/default-roles-config.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/default-roles-config.xml
new file mode 100644
index 00000000000..dab9aa551ef
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/default-roles-config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ /permission/admin/device-mgt/device/api/subscribe
+ /permission/admin/device-mgt/devices/any-device/permitted-actions-under-owning-device
+ /permission/admin/device-mgt/devices/owning-device/operations/view
+ /permission/admin/login
+ /permission/admin/logout
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt
new file mode 100644
index 00000000000..ffa7c79264a
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/bundle-config/README.txt
@@ -0,0 +1,12 @@
+This directory supports adding third-pary config files to specific bundles during runtime.
+
+Explanation: Each OSGi bundle has its own classLoader. Some thirdpary libs read configs from classPath. This scenario fails in OSGi runtime, since OSGi runtime does not share a common classPath for individual bundles. Bundling config files during the bundle creation process itself will solve the issue. However it limits the ability to edit the configs during restarts.
+
+Here we are providing a workaround for such scenarios. The given config file will get resolved to a fragment bundle and will get attached to the specified host bundle. The host bundle name(symbolic name) is resolved by looking at the directory structure. Hence host bundle name should be directory name of the config file directory.
+
+
+Example: The bundle with symbolic name, 'org.foo.bar' expects a config file named 'foobar.properties' from its classPath.
+
+create a directory named 'org.foo.bar' inside 'repository/conf/etc/bundle-config' - (this directory) and place the foobar.properties file.
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties
new file mode 100644
index 00000000000..bb85b5a1244
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/carboncontext-osgi-services.properties
@@ -0,0 +1,22 @@
+#
+# Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+#
+# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+#
+# Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://entgra.io/licenses/entgra-commercial/1.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+#osgi.service.1 = org.wso2.carbon.client.configcontext.provider.Axis2ClientConfigContextProvider
+#osgi.service.2 = org.wso2.carbon.user.core.UserManager
+#osgi.service.3 = org.wso2.carbon.user.api.UserRealmService
\ No newline at end of file
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml
new file mode 100644
index 00000000000..3cbb7262d3e
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/config-validation.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+ 800
+ 2047
+ 2047
+ 1024
+ 4096
+ 02:FB:AA:5F:20:64:49:4A:27:29:55:71:83:F7:46:CD
+
+
+ 256
+ 512
+ 256
+
+
+ carbon.home
+ carbon.config.dir.path
+ axis2.home
+
+
+ Linux
+ Unix
+ Mac OS
+ Windows Server 2003
+ Windows XP
+ Windows Vista
+ Windows 7
+ Mac OS X
+ Windows Server 2008
+ Windows Server 2008 R2
+ AIX
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/jmx.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/jmx.xml
new file mode 100644
index 00000000000..4bc2e648b13
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/jmx.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ true
+
+
+ localhost
+
+
+ ${Ports.JMX.RMIRegistryPort}
+
+
+ ${Ports.JMX.RMIServerPort}
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/launch.ini b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/launch.ini
new file mode 100644
index 00000000000..8b9f5ad1905
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/launch.ini
@@ -0,0 +1,258 @@
+# Eclipse Runtime Configuration Overrides
+# These properties are loaded prior to starting the framework and can also be used to override System Properties
+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
+# "*" can be used together with @null to clear System Properties that match a prefix name.
+
+osgi.*=@null
+org.osgi.*=@null
+eclipse.*=@null
+
+osgi.parentClassloader=app
+osgi.contextClassLoaderParent=app
+
+# When osgi.clean is set to "true", any cached data used by the OSGi framework
+# will be wiped clean. This will clean the caches used to store bundle
+# dependency resolution and eclipse extension registry data. Using this
+# option will force OSGi framework to reinitialize these caches.
+# The following setting is put in place to get rid of the problems
+# faced when re-starting the system. Please note that, when this setting is
+# true, if you manually start a bundle, it would not be available when
+# you re-start the system. To avid this, copy the bundle jar to the plugins
+# folder, before you re-start the system.
+osgi.clean=true
+
+# Uncomment the following line to turn on Eclipse Equinox debugging.
+# You may also edit the osgi-debug.options file and fine tune the debugging
+# options to suite your needs.
+#osgi.debug=./repository/conf/osgi-debug.options
+
+# Following system property allows us to control the public JDK packages exported through the system bundle.
+org.osgi.framework.system.packages=javax.accessibility,\
+javax.activity,\
+javax.crypto,\
+javax.crypto.interfaces,\
+javax.crypto.spec,\
+javax.imageio,\
+javax.imageio.event,\
+javax.imageio.metadata,\
+javax.imageio.plugins.bmp,\
+javax.imageio.plugins.jpeg,\
+javax.imageio.spi,\
+javax.imageio.stream,\
+javax.jms,\
+javax.management,\
+javax.management.loading,\
+javax.management.modelmbean,\
+javax.management.monitor,\
+javax.management.openmbean,\
+javax.management.relation,\
+javax.management.remote,\
+javax.management.remote.rmi,\
+javax.management.timer,\
+javax.naming,\
+javax.naming.directory,\
+javax.naming.event,\
+javax.naming.ldap,\
+javax.naming.spi,\
+javax.net,\
+javax.net.ssl,\
+javax.print,\
+javax.print.attribute,\
+javax.print.attribute.standard,\
+javax.print.event,\
+javax.rmi,\
+javax.rmi.CORBA,\
+javax.rmi.ssl,\
+javax.script,\
+javax.security.auth,\
+javax.security.auth.callback,\
+javax.security.auth.kerberos,\
+javax.security.auth.login,\
+javax.security.auth.spi,\
+javax.security.auth.x500,\
+javax.security.cert,\
+javax.security.sasl,\
+javax.sound.midi,\
+javax.sound.midi.spi,\
+javax.sound.sampled,\
+javax.sound.sampled.spi,\
+javax.sql,\
+javax.sql.rowset,\
+javax.sql.rowset.serial,\
+javax.sql.rowset.spi,\
+javax.swing,\
+javax.swing.border,\
+javax.swing.colorchooser,\
+javax.swing.event,\
+javax.swing.filechooser,\
+javax.swing.plaf,\
+javax.swing.plaf.basic,\
+javax.swing.plaf.metal,\
+javax.swing.plaf.multi,\
+javax.swing.plaf.synth,\
+javax.swing.table,\
+javax.swing.text,\
+javax.swing.text.html,\
+javax.swing.text.html.parser,\
+javax.swing.text.rtf,\
+javax.swing.tree,\
+javax.swing.undo,\
+javax.transaction,\
+javax.transaction.xa,\
+javax.xml.namespace,\
+javax.xml.parsers,\
+javax.xml.stream,\
+javax.xml.stream.events,\
+javax.xml.stream.util,\
+javax.xml.transform,\
+javax.xml.transform.stream,\
+javax.xml.transform.dom,\
+javax.xml.transform.sax,\
+javax.xml,\
+javax.xml.validation,\
+javax.xml.datatype,\
+javax.xml.xpath,\
+javax.activation,\
+com.sun.activation.registries,\
+com.sun.activation.viewers,\
+org.ietf.jgss,\
+org.omg.CORBA,\
+org.omg.CORBA_2_3,\
+org.omg.CORBA_2_3.portable,\
+org.omg.CORBA.DynAnyPackage,\
+org.omg.CORBA.ORBPackage,\
+org.omg.CORBA.portable,\
+org.omg.CORBA.TypeCodePackage,\
+org.omg.CosNaming,\
+org.omg.CosNaming.NamingContextExtPackage,\
+org.omg.CosNaming.NamingContextPackage,\
+org.omg.Dynamic,\
+org.omg.DynamicAny,\
+org.omg.DynamicAny.DynAnyFactoryPackage,\
+org.omg.DynamicAny.DynAnyPackage,\
+org.omg.IOP,\
+org.omg.IOP.CodecFactoryPackage,\
+org.omg.IOP.CodecPackage,\
+org.omg.Messaging,\
+org.omg.PortableInterceptor,\
+org.omg.PortableInterceptor.ORBInitInfoPackage,\
+org.omg.PortableServer,\
+org.omg.PortableServer.CurrentPackage,\
+org.omg.PortableServer.POAManagerPackage,\
+org.omg.PortableServer.POAPackage,\
+org.omg.PortableServer.portable,\
+org.omg.PortableServer.ServantLocatorPackage,\
+org.omg.SendingContext,\
+org.omg.stub.java.rmi,\
+org.w3c.dom,\
+org.w3c.dom.bootstrap,\
+org.w3c.dom.css,\
+org.w3c.dom.events,\
+org.w3c.dom.html,\
+org.w3c.dom.ls,\
+org.w3c.dom.ranges,\
+org.w3c.dom.stylesheets,\
+org.w3c.dom.traversal,\
+org.w3c.dom.views ,\
+org.xml.sax,\
+org.xml.sax.ext,\
+org.xml.sax.helpers,\
+org.apache.xerces.xpointer,\
+org.apache.xerces.xni.grammars,\
+org.apache.xerces.impl.xs.util,\
+org.apache.xerces.jaxp.validation,\
+org.apache.xerces.impl.dtd.models,\
+org.apache.xerces.impl.xpath,\
+org.apache.xerces.dom3.as,\
+org.apache.xerces.impl.dv.xs,\
+org.apache.xerces.util,\
+org.apache.xerces.impl.xs.identity,\
+org.apache.xerces.impl.xs.opti,\
+org.apache.xerces.jaxp,\
+org.apache.xerces.impl.dv,\
+org.apache.xerces.xs.datatypes,\
+org.apache.xerces.dom.events,\
+org.apache.xerces.impl.msg,\
+org.apache.xerces.xni,\
+org.apache.xerces.impl.xs,\
+org.apache.xerces.impl,\
+org.apache.xerces.impl.io,\
+org.apache.xerces.xinclude,\
+org.apache.xerces.jaxp.datatype,\
+org.apache.xerces.parsers,\
+org.apache.xerces.impl.dv.util,\
+org.apache.xerces.xni.parser,\
+org.apache.xerces.impl.xs.traversers,\
+org.apache.xerces.impl.dv.dtd,\
+org.apache.xerces.xs,\
+org.apache.xerces.impl.dtd,\
+org.apache.xerces.impl.validation,\
+org.apache.xerces.impl.xs.models,\
+org.apache.xerces.impl.xpath.regex,\
+org.apache.xml.serialize,\
+org.apache.xerces.dom,\
+org.apache.xalan,\
+org.apache.xalan.xslt,\
+org.apache.xalan.templates,\
+org.apache.xalan.xsltc,\
+org.apache.xalan.xsltc.cmdline,\
+org.apache.xalan.xsltc.cmdline.getopt,\
+org.apache.xalan.xsltc.trax,\
+org.apache.xalan.xsltc.dom,\
+org.apache.xalan.xsltc.runtime,\
+org.apache.xalan.xsltc.runtime.output,\
+org.apache.xalan.xsltc.util,\
+org.apache.xalan.xsltc.compiler,\
+org.apache.xalan.xsltc.compiler.util,\
+org.apache.xalan.serialize,\
+org.apache.xalan.client,\
+org.apache.xalan.res,\
+org.apache.xalan.transformer,\
+org.apache.xalan.extensions,\
+org.apache.xalan.lib,\
+org.apache.xalan.lib.sql,\
+org.apache.xalan.processor,\
+org.apache.xalan.trace,\
+org.apache.xml.dtm,\
+org.apache.xml.dtm.ref,\
+org.apache.xml.dtm.ref.sax2dtm,\
+org.apache.xml.dtm.ref.dom2dtm,\
+org.apache.xml.utils,\
+org.apache.xml.utils.res,\
+org.apache.xml.res,\
+org.apache.xml.serializer,\
+org.apache.xml.serializer.utils,\
+org.apache.xpath,\
+org.apache.xpath.domapi,\
+org.apache.xpath.objects,\
+org.apache.xpath.patterns,\
+org.apache.xpath.jaxp,\
+org.apache.xpath.res,\
+org.apache.xpath.operations,\
+org.apache.xpath.functions,\
+org.apache.xpath.axes,\
+org.apache.xpath.compiler,\
+org.apache.xml.resolver,\
+org.apache.xml.resolver.tools,\
+org.apache.xml.resolver.helpers,\
+org.apache.xml.resolver.readers,\
+org.apache.xml.resolver.etc,\
+org.apache.xml.resolver.apps,\
+javax.xml.ws,\
+javax.xml.ws.handler,\
+javax.xml.ws.handler.soap,\
+javax.xml.ws.http,\
+javax.xml.ws.soap,\
+javax.xml.ws.spi,\
+javax.xml.ws.spi.http,\
+javax.xml.ws.wsaddressing,\
+javax.xml.bind,\
+javax.xml.bind.annotation,\
+javax.xml.bind.annotation.adapters,\
+javax.annotation,\
+javax.jws,\
+javax.jws.soap,\
+com.sun.xml.internal.messaging.saaj.soap.ver1_1,\
+com.sun.xml.internal.messaging.saaj.soap,\
+com.sun.tools.internal.ws.spi,\
+org.wso2.carbon.bootstrap
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties
new file mode 100644
index 00000000000..602bc167050
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/logging-bridge.properties
@@ -0,0 +1,73 @@
+#
+# Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+#
+# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+#
+# Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://entgra.io/licenses/entgra-commercial/1.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+############################################################
+# Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+############################################################
+# Global properties
+# NOTE: this configuration file use to get the handler list,
+# Properties(except level property) define for each handler
+# may be not available because LogRecords handover to log4j
+# appenders in runtime.
+############################################################
+# "handlers" specifies a comma separated list of log Handler
+# classes. These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+#handlers= java.util.logging.ConsoleHandler
+# To also add the FileHandler, use the following line instead.
+#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+# Add org.wso2.carbon.bootstrap.logging.handlers.LogEventHandler to handlers if you need to push java logs to LOGEVENT appender
+handlers=org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler, org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers. For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+.level=INFO
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+#
+############################################################
+# This FileHandler pushed LogRecords to a log4j FileAppander in runtime
+org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler.level=INFO
+#org.wso2.carbon.bootstrap.logging.handlers.LoggingFileHandler.formatter = java.util.logging.SimpleFormatter
+# This ConsoleHandler pushed LogRecords to q log4j ConsoleAppander in runtime
+org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler.level=INFO
+#org.wso2.carbon.bootstrap.logging.handlers.LoggingConsoleHandler.formatter = java.util.logging.SimpleFormatter
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+#com.xyz.foo.level = SEVERE
+org.apache.coyote.level=SEVERE
+org.apache.catalina.level=SEVERE
+com.hazelcast.level=SEVERE
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.mappings b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.mappings
new file mode 100644
index 00000000000..97a5c5a5fc0
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.mappings
@@ -0,0 +1,27 @@
+#
+# Copyright 2005-2011 WSO2, Inc. (http://wso2.com)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# This file is to define the human readable media type for a mime type.
+# Eg:-
+# text/plain txt text
+application/wsdl+xml WSDL
+application/x-xsd+xml Schema
+application/policy+xml Policy
+application/vnd.wso2-service+xml Service
+application/vnd.wso2-hyperlink Hyperlink
+application/vnd.wso2.endpoint Endpoint
+application/vnd.wso2-api+xml API
+application/vnd.wso2-uri+xml URI
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.types b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.types
new file mode 100644
index 00000000000..21c386da005
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/mime.types
@@ -0,0 +1,734 @@
+#
+# Copyright 2005-2009 WSO2, Inc. (http://wso2.com)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Media type for wsdl files. This is not defined in the original mime.types file.
+chemical/x-alchemy alc
+application/andrew-inset ez
+application/wsdl+xml wsdl
+application/vnd.sun.wadl+xml wadl
+application/activemessage
+application/applefile
+application/atomicmail
+application/batch-SMTP
+application/beep+xml
+application/cals-1840
+application/commonground
+application/cu-seeme cu
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/docbook+xml
+application/dsptype tsp
+application/dvcs
+application/edi-consent
+application/edi-x12
+application/edifact
+application/eshop
+application/font-tdpfr
+application/futuresplash spl
+application/ghostview
+application/hta hta
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/java-archive jar
+application/java-serialized-object ser
+application/java-vm class
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/macwriteii
+application/marc
+application/mathematica nb
+application/mathematica-old
+application/msaccess mdb
+application/msword doc dot
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream bin
+application/oda oda
+application/ogg ogg
+application/parityfec
+application/pdf pdf
+application/pgp-encrypted
+application/pgp-keys key
+application/pgp-signature pgp
+application/pics-rules prf
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/policy+xml
+application/postscript ps ai eps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/qsig
+application/rar rar
+application/rdf+xml rdf
+application/remote-printing
+application/riscos
+application/rss+xml rss
+application/rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil smi smil
+application/timestamp-query
+application/timestamp-reply
+application/vemmi
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect wpd
+application/wordperfect5.1 wp5
+application/x400-bp
+application/xhtml+xml xhtml xht
+application/xml xml xsl xslt jrxml
+application/xml-dtd
+application/xml-external-parsed-entity
+application/zip zip
+application/vnd.3M.Post-it-Notes
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.aether.imp
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.bmi
+application/vnd.businessobjects
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.cinderella cdy
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.comsocaller
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.ctc-posml
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.cybank
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.flographit
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hhe.lesson-player
+application/vnd.hp-HPGL
+application/vnd.hp-PCL
+application/vnd.hp-PCLXL
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.MiniPay
+application/vnd.ibm.afplinedata
+application/vnd.ibm.modcap
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.koan
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml xul
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel xls xlb xlt
+application/vnd.ms-lrm
+application/vnd.ms-pki.seccat cat
+application/vnd.ms-pki.stl stl
+application/vnd.ms-powerpoint ppt pps
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.EDM
+application/vnd.novadigm.EDX
+application/vnd.novadigm.EXT
+application/vnd.oasis.opendocument.chart odc
+application/vnd.oasis.opendocument.database odb
+application/vnd.oasis.opendocument.formula odf
+application/vnd.oasis.opendocument.graphics odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image odi
+application/vnd.oasis.opendocument.presentation odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text odt
+application/vnd.oasis.opendocument.text-master odm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web oth
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-xhtml-print+xml
+application/vnd.rapid
+application/vnd.rim.cod cod
+application/vnd.s3sms
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.smaf mmf
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.stardivision.calc sdc
+application/vnd.stardivision.draw sda
+application/vnd.stardivision.impress sdd sdp
+application/vnd.stardivision.math smf
+application/vnd.stardivision.writer sdw vor
+application/vnd.stardivision.writer-global sgl
+application/vnd.street-stream
+application/vnd.sun.xml.calc sxc
+application/vnd.sun.xml.calc.template stc
+application/vnd.sun.xml.draw sxd
+application/vnd.sun.xml.draw.template std
+application/vnd.sun.xml.impress sxi
+application/vnd.sun.xml.impress.template sti
+application/vnd.sun.xml.math sxm
+application/vnd.sun.xml.writer sxw
+application/vnd.sun.xml.writer.global sxg
+application/vnd.sun.xml.writer.template stw
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.symbian.install sis
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.tve-trigger
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio vsd
+application/vnd.vividence.scriptfile
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wso2.bpel+xml bpel
+application/vnd.wso2.bpmn+xml bpmn
+application/vnd.wso2.endpoint
+application/vnd.wso2.governance-archive gar
+application/vnd.wso2-hyperlink
+application/vnd.wso2.registry-ext-type+xml rxt
+application/vnd.wso2-service+xml
+application/vnd.wso2.xpdl+xml xpdl
+application/vnd.wt.stf
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yellowriver-custom-menu
+application/x-123 wk
+application/x-abiword abw
+application/x-apple-diskimage dmg
+application/x-bcpio bcpio
+application/x-bittorrent torrent
+application/x-cdf cdf
+application/x-cdlink vcd
+application/x-chess-pgn pgn
+application/x-core
+application/x-cpio cpio
+application/x-csh csh
+application/x-debian-package deb udeb
+application/x-director dcr dir dxr
+application/x-dms dms
+application/x-doom wad
+application/x-dvi dvi
+application/x-executable
+application/x-flac flac
+application/x-font pfa pfb gsf pcf pcf.Z
+application/x-freemind mm
+application/x-futuresplash spl
+application/x-gnumeric gnumeric
+application/x-go-sgf sgf
+application/x-graphing-calculator gcf
+application/x-gtar gtar tgz taz
+application/x-hdf hdf
+application/x-httpd-php phtml pht php
+application/x-httpd-php-source phps
+application/x-httpd-php3 php3
+application/x-httpd-php3-preprocessed php3p
+application/x-httpd-php4 php4
+application/x-httpd-eruby rhtml
+application/x-ica ica
+application/x-internet-signup ins isp
+application/x-iphone iii
+application/x-iso9660-image iso
+application/x-java-applet
+application/x-java-bean
+application/x-java-jnlp-file jnlp
+application/x-javascript js
+application/x-jmol jmz
+application/x-kchart chrt
+application/x-kdelnk
+application/x-killustrator kil
+application/x-koan skp skd skt skm
+application/x-kpresenter kpr kpt
+application/x-kspread ksp
+application/x-kword kwd kwt
+application/x-latex latex
+application/x-lha lha
+application/x-lzh lzh
+application/x-lzx lzx
+application/x-maker frm maker frame fm fb book fbdoc
+application/x-mif mif
+application/x-ms-wmd wmd
+application/x-ms-wmz wmz
+application/x-msdos-program com exe bat dll
+application/x-msi msi
+application/x-netcdf nc
+application/x-ns-proxy-autoconfig pac
+application/x-nwc nwc
+application/x-object o
+application/x-oz-application oza
+application/x-pkcs7-certreqresp p7r
+application/x-pkcs7-crl crl
+application/x-python-code pyc pyo
+application/x-quicktimeplayer qtl
+application/x-redhat-package-manager rpm
+application/x-rx
+application/x-sh sh
+application/x-shar shar
+application/x-shellscript
+application/x-shockwave-flash swf swfl
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex-gf gf
+application/x-tex-pk pk
+application/x-texinfo texinfo texi
+application/x-trash ~ % bak old sik
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-videolan
+application/x-wais-source src
+application/x-wingz wz
+application/x-x509-ca-cert crt
+application/x-xcf xcf
+application/x-xfig fig
+application/x-xpinstall xpi
+application/x-xsd+xml xsd
+
+audio/32kadpcm
+audio/basic au snd
+audio/g.722.1
+audio/l16
+audio/midi mid midi kar
+audio/mp4a-latm
+audio/mpa-robust
+audio/mpeg mpga mpega mp2 mp3 m4a
+audio/mpegurl m3u
+audio/parityfec
+audio/prs.sid sid
+audio/telephone-event
+audio/tone
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff aif aiff aifc
+audio/x-gsm gsm
+audio/x-mpegurl m3u
+audio/x-ms-wma wma
+audio/x-ms-wax wax
+audio/x-pn-realaudio-plugin
+audio/x-pn-realaudio ra rm ram
+audio/x-realaudio ra
+audio/x-scpls pls
+audio/x-sd2 sd2
+audio/x-wav wav
+
+chemical/x-alchemy alc
+chemical/x-cache cac cache
+chemical/x-cache-csf csf
+chemical/x-cactvs-binary cbin cascii ctab
+chemical/x-cdx cdx
+chemical/x-cerius cer
+chemical/x-chem3d c3d
+chemical/x-chemdraw chm
+chemical/x-cif cif
+chemical/x-cmdf cmdf
+chemical/x-cml cml
+chemical/x-compass cpa
+chemical/x-crossfire bsd
+chemical/x-csml csml csm
+chemical/x-ctx ctx
+chemical/x-cxf cxf cef
+#chemical/x-daylight-smiles smi
+chemical/x-embl-dl-nucleotide emb embl
+chemical/x-galactic-spc spc
+chemical/x-gamess-input inp gam gamin
+chemical/x-gaussian-checkpoint fch fchk
+chemical/x-gaussian-cube cub
+chemical/x-gaussian-input gau gjc gjf
+chemical/x-gaussian-log gal
+chemical/x-gcg8-sequence gcg
+chemical/x-genbank gen
+chemical/x-hin hin
+chemical/x-isostar istr ist
+chemical/x-jcamp-dx jdx dx
+chemical/x-kinemage kin
+chemical/x-macmolecule mcm
+chemical/x-macromodel-input mmd mmod
+chemical/x-mdl-molfile mol
+chemical/x-mdl-rdfile rd
+chemical/x-mdl-rxnfile rxn
+chemical/x-mdl-sdfile sd sdf
+chemical/x-mdl-tgf tgf
+#chemical/x-mif mif
+chemical/x-mmcif mcif
+chemical/x-mol2 mol2
+chemical/x-molconn-Z b
+chemical/x-mopac-graph gpt
+chemical/x-mopac-input mop mopcrt mpc dat zmt
+chemical/x-mopac-out moo
+chemical/x-mopac-vib mvb
+chemical/x-ncbi-asn1 asn
+chemical/x-ncbi-asn1-ascii prt ent
+chemical/x-ncbi-asn1-binary val aso
+chemical/x-ncbi-asn1-spec asn
+chemical/x-pdb pdb ent
+chemical/x-rosdal ros
+chemical/x-swissprot sw
+chemical/x-vamas-iso14976 vms
+chemical/x-vmd vmd
+chemical/x-xtel xtel
+chemical/x-xyz xyz
+
+image/cgm
+image/g3fax
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/naplps
+image/pcx pcx
+image/png png
+image/prs.btif
+image/prs.pti
+image/svg+xml svg svgz
+image/tiff tiff tif
+image/vnd.cns.inf2
+image/vnd.djvu djvu djv
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.mix
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp wbmp
+image/vnd.xiff
+image/x-cmu-raster ras
+image/x-coreldraw cdr
+image/x-coreldrawpattern pat
+image/x-coreldrawtemplate cdt
+image/x-corelphotopaint cpt
+image/x-icon ico
+image/x-jg art
+image/x-jng jng
+image/x-ms-bmp bmp
+image/x-photoshop psd
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+
+inode/chardevice
+inode/blockdevice
+inode/directory-locked
+inode/directory
+inode/fifo
+inode/socket
+
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/s-http
+message/news
+message/partial
+message/rfc822
+
+model/iges igs iges
+model/mesh msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.vtu
+model/vrml wrl vrml
+
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+
+text/calendar ics icz
+text/comma-separated-values csv
+text/css css
+text/directory
+text/english
+text/enriched
+text/h323 323
+text/html html htm shtml
+text/iuls uls
+text/mathml mml
+text/parityfec
+text/plain asc txt text diff pot sql
+text/prs.lines.tag
+text/rfc822-headers
+text/richtext rtx
+text/rtf rtf
+text/scriptlet sct wsc
+text/t140
+text/texmacs tm ts
+text/tab-separated-values tsv
+text/uri-list
+text/vnd.abc
+text/vnd.curl
+text/vnd.DMClientScript
+text/vnd.flatland.3dml
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.IPTC.NewsML
+text/vnd.IPTC.NITF
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.sun.j2me.app-descriptor jad
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/x-bibtex bib
+text/x-boo boo
+text/x-c++hdr h++ hpp hxx hh
+text/x-c++src c++ cpp cxx cc
+text/x-chdr h
+text/x-component htc
+text/x-crontab
+text/x-csh csh
+text/x-csrc c
+text/x-dsrc d
+text/x-haskell hs
+text/x-java java
+text/x-literate-haskell lhs
+text/x-makefile
+text/x-moc moc
+text/x-pascal p pas
+text/x-pcs-gcd gcd
+text/x-perl pl pm
+text/x-python py
+text/x-server-parsed-html
+text/x-setext etx
+text/x-sh sh
+text/x-tcl tcl tk
+text/x-tex tex ltx sty cls
+text/x-vcalendar vcs
+text/x-vcard vcf
+
+video/dl dl
+video/dv dif dv
+video/fli fli
+video/gl gl
+video/mpeg mpeg mpg mpe
+video/mp4 mp4
+video/quicktime qt mov
+video/mp4v-es
+video/parityfec
+video/pointer
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl mxu
+video/vnd.mts
+video/vnd.nokia.interleaved-multimedia
+video/vnd.vivo
+video/x-la-asf lsf lsx
+video/x-mng mng
+video/x-ms-asf asf asx
+video/x-ms-wm wm
+video/x-ms-wmv wmv
+video/x-ms-wmx wmx
+video/x-ms-wvx wvx
+video/x-msvideo avi
+video/x-sgi-movie movie
+
+x-conference/x-cooltalk ice
+
+x-world/x-vrml vrm vrml wrl
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options
new file mode 100644
index 00000000000..32ffd873937
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/osgi-debug.options
@@ -0,0 +1,95 @@
+#### Debugging options for org.eclipse.osgi
+
+# Turn on general debugging for org.eclipse.osgi
+org.eclipse.osgi/debug=true
+# Prints out class loading debug information
+org.eclipse.osgi/debug/loader=false
+# Prints out event (FrameworkEvent/BundleEvent/ServiceEvent) and listener debug information
+org.eclipse.osgi/debug/events=false
+# Prints out OSGi service debug information (registration/getting/ungetting etc.)
+org.eclipse.osgi/debug/services=false
+# Prints out bundle manifest parsing debug information
+org.eclipse.osgi/debug/manifest=false
+# Prints out LDAP filter debug information
+org.eclipse.osgi/debug/filter=false
+# Prints out security (PermissionAdmin service) debug information
+org.eclipse.osgi/debug/security=false
+# Prints out start level service debug information
+org.eclipse.osgi/debug/startlevel=true
+# Prints out package admin service debug information
+org.eclipse.osgi/debug/packageadmin=false
+# Prints out timing information for bundle activation
+org.eclipse.osgi/debug/bundleTime=false
+# Debug the loading of message bundles
+org.eclipse.osgi/debug/messageBundles=false
+
+# Eclipse adaptor options
+org.eclipse.osgi/eclipseadaptor/debug = false
+org.eclipse.osgi/eclipseadaptor/debug/location = false
+org.eclipse.osgi/eclipseadaptor/debug/platformadmin=false
+org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver=false
+org.eclipse.osgi/eclipseadaptor/converter/debug = false
+
+### OSGi resolver options
+# Turns on debugging for the resolver
+org.eclipse.osgi/resolver/debug = false
+# Prints out wiring information after the resolver has completed the resolve process
+org.eclipse.osgi/resolver/wiring = false
+# Prints out Import-Package information
+org.eclipse.osgi/resolver/imports = false
+# Prints out Require-Bundle information
+org.eclipse.osgi/resolver/requires = false
+# Prints out package grouping information form the "uses" clause
+org.eclipse.osgi/resolver/grouping = false
+# Prints out cycle information
+org.eclipse.osgi/resolver/cycles = false
+# Prints out Eclipse-GenericRequire information
+org.eclipse.osgi/resolver/generics = false
+
+#### Profile settings
+org.eclipse.osgi/profile/startup = false
+org.eclipse.osgi/profile/benchmark = false
+org.eclipse.osgi/profile/debug = true
+
+# Override the default implemenation
+org.eclipse.osgi/profile/impl = org.eclipse.osgi.internal.profile.DefaultProfileLogger
+
+# Append all profile messages to the filename specified
+org.eclipse.osgi/defaultprofile/logfilename =
+
+# Output all profile log messages synchronously to the jvm console.
+# By default, all log messages are cached until the log buffer is
+# requested.
+org.eclipse.osgi/defaultprofile/logsynchronously = false
+
+# Specify the size of the default profile implementation log buffer.
+org.eclipse.osgi/defaultprofile/buffersize = 256
+
+#### Monitoring settings
+# monitor class loading
+org.eclipse.osgi/monitor/classes=false
+
+# monitor bundle activation
+org.eclipse.osgi/monitor/activation=false
+
+# monitor resource bundle (*.properties) loading
+org.eclipse.osgi/monitor/resources=false
+
+
+#### Trace settings
+# trace class loading - snapshot the execution stack when a class is loaded
+org.eclipse.osgi/trace/classLoading=false
+
+# trace location - file in which execution traces are written
+org.eclipse.osgi/trace/filename=runtime.traces
+
+# trace filters - Java properties file defining which classes should
+# be traced (if trace/classLoading is true)
+# File format:
+# plugins=
+# packages=
+# Note that there may be many 'plugins' and 'packages' lines in one file.
+org.eclipse.osgi/trace/filters=trace.properties
+
+# trace bundle activation - snapshot the execution stack when a bundle is activated
+org.eclipse.osgi/trace/activation=false
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml
new file mode 100644
index 00000000000..172b00f06be
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+ STANDALONE
+
+
+ 2
+
+
+
+ org.wso2.carbon.ntask.core.impl.RoundRobinTaskLocationResolver
+
+
+
+
+
+
+ https://localhost:9448
+
+
+ https://localhost:9443
+
+
+ admin
+
+
+ admin
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/log4j.properties b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/log4j.properties
new file mode 100644
index 00000000000..72bd9b6260b
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/log4j.properties
@@ -0,0 +1,33 @@
+#
+# Copyright (C) 2018 - 2022 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+#
+# Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+#
+# Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://entgra.io/licenses/entgra-commercial/1.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+log4j.rootLogger=DEBUG, console, Default
+#Automation file appender
+log4j.appender.Default=org.apache.log4j.RollingFileAppender
+log4j.appender.Default.File=target/logs/automation.log
+log4j.appender.Default.Append=true
+log4j.appender.Default.MaxFileSize=10MB
+log4j.appender.Default.MaxBackupIndex=10
+log4j.appender.Default.layout=org.apache.log4j.PatternLayout
+log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] [%t] - %m%n
+#Automation console appender
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.Target=System.out
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%d{ISO8601} %-5p [%c] [%t] - %m%n
+log4j.logger.io.entgra=TRACE
\ No newline at end of file
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/registry.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/registry.xml
new file mode 100644
index 00000000000..6f298fdaaff
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/registry.xml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+ wso2registry
+ false
+ true
+ /
+
+
+ jdbc:h2:./target/databasetest/CARBON_TEST
+
+ org.h2.Driver
+ 80
+ 60000
+ 5
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+ true
+ true
+ true
+ true
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/security/authenticators.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/security/authenticators.xml
new file mode 100644
index 00000000000..f2e715e2e7d
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/security/authenticators.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+ 5
+
+
+
+
+ 10
+
+ /carbon/admin/login.jsp
+ carbonServer
+ https://localhost:9443/samlsso
+ urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml
new file mode 100644
index 00000000000..4b373cbcbde
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/META-INF/context.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+ WEB-INF/web.xml
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml
new file mode 100644
index 00000000000..f74a56d330d
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/carbon/WEB-INF/web.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ bridgeservlet
+ Carbon Bridge Servlet
+ Carbon Bridge Servlet
+ org.wso2.carbon.tomcat.ext.servlet.DelegationServlet
+
+ 1
+
+
+ bridgeservlet
+ /*
+
+
+
+ bridgeservlet
+ *.jsp
+
+
+
+
+ CharsetFilter
+ org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter
+
+ requestEncoding
+ UTF-8
+
+
+
+
+ CharsetFilter
+ /*
+
+
+
+ 15
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml
new file mode 100644
index 00000000000..a9d35b0a76d
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/catalina-server.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml
new file mode 100644
index 00000000000..2e5916f3c76
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/tomcat-users.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/web.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/web.xml
new file mode 100644
index 00000000000..718686094b2
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/tomcat/web.xml
@@ -0,0 +1,1223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ default
+ org.apache.catalina.servlets.DefaultServlet
+
+ debug
+ 0
+
+
+ sendfileSize
+ -1
+
+
+ listings
+ false
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jsp
+ org.apache.jasper.servlet.JspServlet
+
+ fork
+ false
+
+
+ xpoweredBy
+ false
+
+ 3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jsp
+ *.jsp
+
+
+
+ jsp
+ *.jspx
+
+
+
+ default
+ /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+
+
+
+
+ abs
+ audio/x-mpeg
+
+
+ ai
+ application/postscript
+
+
+ aif
+ audio/x-aiff
+
+
+ aifc
+ audio/x-aiff
+
+
+ aiff
+ audio/x-aiff
+
+
+ aim
+ application/x-aim
+
+
+ art
+ image/x-jg
+
+
+ asf
+ video/x-ms-asf
+
+
+ asx
+ video/x-ms-asf
+
+
+ au
+ audio/basic
+
+
+ avi
+ video/x-msvideo
+
+
+ avx
+ video/x-rad-screenplay
+
+
+ bcpio
+ application/x-bcpio
+
+
+ bin
+ application/octet-stream
+
+
+ bmp
+ image/bmp
+
+
+ body
+ text/html
+
+
+ cdf
+ application/x-cdf
+
+
+ cer
+ application/x-x509-ca-cert
+
+
+ class
+ application/java
+
+
+ cpio
+ application/x-cpio
+
+
+ csh
+ application/x-csh
+
+
+ css
+ text/css
+
+
+ dib
+ image/bmp
+
+
+ doc
+ application/msword
+
+
+ dtd
+ application/xml-dtd
+
+
+ dv
+ video/x-dv
+
+
+ dvi
+ application/x-dvi
+
+
+ eps
+ application/postscript
+
+
+ etx
+ text/x-setext
+
+
+ exe
+ application/octet-stream
+
+
+ gif
+ image/gif
+
+
+ gtar
+ application/x-gtar
+
+
+ gz
+ application/x-gzip
+
+
+ hdf
+ application/x-hdf
+
+
+ hqx
+ application/mac-binhex40
+
+
+ htc
+ text/x-component
+
+
+ htm
+ text/html
+
+
+ html
+ text/html
+
+
+ ief
+ image/ief
+
+
+ jad
+ text/vnd.sun.j2me.app-descriptor
+
+
+ jar
+ application/java-archive
+
+
+ java
+ text/plain
+
+
+ jnlp
+ application/x-java-jnlp-file
+
+
+ jpe
+ image/jpeg
+
+
+ jpeg
+ image/jpeg
+
+
+ jpg
+ image/jpeg
+
+
+ js
+ application/javascript
+
+
+ jsf
+ text/plain
+
+
+ jspf
+ text/plain
+
+
+ kar
+ audio/x-midi
+
+
+ latex
+ application/x-latex
+
+
+ m3u
+ audio/x-mpegurl
+
+
+ mac
+ image/x-macpaint
+
+
+ man
+ application/x-troff-man
+
+
+ mathml
+ application/mathml+xml
+
+
+ me
+ application/x-troff-me
+
+
+ mid
+ audio/x-midi
+
+
+ midi
+ audio/x-midi
+
+
+ mif
+ application/x-mif
+
+
+ mov
+ video/quicktime
+
+
+ movie
+ video/x-sgi-movie
+
+
+ mp1
+ audio/x-mpeg
+
+
+ mp2
+ audio/x-mpeg
+
+
+ mp3
+ audio/x-mpeg
+
+
+ mp4
+ video/mp4
+
+
+ mpa
+ audio/x-mpeg
+
+
+ mpe
+ video/mpeg
+
+
+ mpeg
+ video/mpeg
+
+
+ mpega
+ audio/x-mpeg
+
+
+ mpg
+ video/mpeg
+
+
+ mpv2
+ video/mpeg2
+
+
+ ms
+ application/x-wais-source
+
+
+ nc
+ application/x-netcdf
+
+
+ oda
+ application/oda
+
+
+
+ odb
+ application/vnd.oasis.opendocument.database
+
+
+
+ odc
+ application/vnd.oasis.opendocument.chart
+
+
+
+ odf
+ application/vnd.oasis.opendocument.formula
+
+
+
+ odg
+ application/vnd.oasis.opendocument.graphics
+
+
+
+ odi
+ application/vnd.oasis.opendocument.image
+
+
+
+ odm
+ application/vnd.oasis.opendocument.text-master
+
+
+
+ odp
+ application/vnd.oasis.opendocument.presentation
+
+
+
+ ods
+ application/vnd.oasis.opendocument.spreadsheet
+
+
+
+ odt
+ application/vnd.oasis.opendocument.text
+
+
+
+ otg
+ application/vnd.oasis.opendocument.graphics-template
+
+
+
+ oth
+ application/vnd.oasis.opendocument.text-web
+
+
+
+ otp
+ application/vnd.oasis.opendocument.presentation-template
+
+
+
+ ots
+ application/vnd.oasis.opendocument.spreadsheet-template
+
+
+
+ ott
+ application/vnd.oasis.opendocument.text-template
+
+
+
+ ogx
+ application/ogg
+
+
+ ogv
+ video/ogg
+
+
+ oga
+ audio/ogg
+
+
+ ogg
+ audio/ogg
+
+
+ spx
+ audio/ogg
+
+
+ flac
+ audio/flac
+
+
+ anx
+ application/annodex
+
+
+ axa
+ audio/annodex
+
+
+ axv
+ video/annodex
+
+
+ xspf
+ application/xspf+xml
+
+
+ pbm
+ image/x-portable-bitmap
+
+
+ pct
+ image/pict
+
+
+ pdf
+ application/pdf
+
+
+ pgm
+ image/x-portable-graymap
+
+
+ pic
+ image/pict
+
+
+ pict
+ image/pict
+
+
+ pls
+ audio/x-scpls
+
+
+ png
+ image/png
+
+
+ pnm
+ image/x-portable-anymap
+
+
+ pnt
+ image/x-macpaint
+
+
+ ppm
+ image/x-portable-pixmap
+
+
+ ppt
+ application/vnd.ms-powerpoint
+
+
+ pps
+ application/vnd.ms-powerpoint
+
+
+ ps
+ application/postscript
+
+
+ psd
+ image/x-photoshop
+
+
+ qt
+ video/quicktime
+
+
+ qti
+ image/x-quicktime
+
+
+ qtif
+ image/x-quicktime
+
+
+ ras
+ image/x-cmu-raster
+
+
+ rdf
+ application/rdf+xml
+
+
+ rgb
+ image/x-rgb
+
+
+ rm
+ application/vnd.rn-realmedia
+
+
+ roff
+ application/x-troff
+
+
+ rtf
+ application/rtf
+
+
+ rtx
+ text/richtext
+
+
+ sh
+ application/x-sh
+
+
+ shar
+ application/x-shar
+
+
+
+ smf
+ audio/x-midi
+
+
+ sit
+ application/x-stuffit
+
+
+ snd
+ audio/basic
+
+
+ src
+ application/x-wais-source
+
+
+ sv4cpio
+ application/x-sv4cpio
+
+
+ sv4crc
+ application/x-sv4crc
+
+
+ svg
+ image/svg+xml
+
+
+ svgz
+ image/svg+xml
+
+
+ swf
+ application/x-shockwave-flash
+
+
+ t
+ application/x-troff
+
+
+ tar
+ application/x-tar
+
+
+ tcl
+ application/x-tcl
+
+
+ tex
+ application/x-tex
+
+
+ texi
+ application/x-texinfo
+
+
+ texinfo
+ application/x-texinfo
+
+
+ tif
+ image/tiff
+
+
+ tiff
+ image/tiff
+
+
+ tr
+ application/x-troff
+
+
+ tsv
+ text/tab-separated-values
+
+
+ txt
+ text/plain
+
+
+ ulw
+ audio/basic
+
+
+ ustar
+ application/x-ustar
+
+
+ vxml
+ application/voicexml+xml
+
+
+ xbm
+ image/x-xbitmap
+
+
+ xht
+ application/xhtml+xml
+
+
+ xhtml
+ application/xhtml+xml
+
+
+ xls
+ application/vnd.ms-excel
+
+
+ xml
+ application/xml
+
+
+ xpm
+ image/x-xpixmap
+
+
+ xsl
+ application/xml
+
+
+ xslt
+ application/xslt+xml
+
+
+ xul
+ application/vnd.mozilla.xul+xml
+
+
+ xwd
+ image/x-xwindowdump
+
+
+ vsd
+ application/x-visio
+
+
+ wav
+ audio/x-wav
+
+
+
+ wbmp
+ image/vnd.wap.wbmp
+
+
+
+ wml
+ text/vnd.wap.wml
+
+
+
+ wmlc
+ application/vnd.wap.wmlc
+
+
+
+ wmls
+ text/vnd.wap.wmlscript
+
+
+
+ wmlscriptc
+ application/vnd.wap.wmlscriptc
+
+
+ wmv
+ video/x-ms-wmv
+
+
+ wrl
+ x-world/x-vrml
+
+
+ wspolicy
+ application/wspolicy+xml
+
+
+ Z
+ application/x-compress
+
+
+ z
+ application/x-compress
+
+
+ zip
+ application/zip
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ index.html
+ index.htm
+ index.jsp
+
+
+
\ No newline at end of file
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/user-mgt.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/user-mgt.xml
new file mode 100644
index 00000000000..c8e32694479
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/carbon-home/repository/conf/user-mgt.xml
@@ -0,0 +1,383 @@
+
+
+
+
+
+ true
+ admin
+
+ admin
+ admin
+
+ everyone
+ jdbc/WSO2CarbonDB
+
+
+
+
+
+
+ org.wso2.carbon.user.core.tenant.JDBCTenantManager
+ false
+ 100
+ false
+ default
+ SHA-256
+ true
+ true
+ true
+ false
+ ^[\S]{5,30}$
+ Password length should be between 5 to 30 characters
+
+ ^[\S]{5,30}$
+ [a-zA-Z0-9._-|//]{3,30}$
+ ^[\S]{3,30}$
+ ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$
+ ^[\S]{3,30}$
+ true
+ 100
+ 100
+ false
+ false
+ true
+ ,
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /permission
+ true
+ true
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/testng.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/testng.xml
new file mode 100644
index 00000000000..47820d719fc
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager/src/test/resources/testng.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/pom.xml
new file mode 100644
index 00000000000..c42d31176d8
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/pom.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+ device-mgt-extensions
+ org.wso2.carbon.devicemgt
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.logger
+ bundle
+ Entgra IoT - Logger Impl
+ Entgra IoT - Entgra Logger Implementation
+ http://entgra.io
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.device.mgt.version}
+ Entgra Logger Bundle
+
+ io.entgra.device.mgt.extensions.logger,
+ org.apache.commons.logging;version="[1.2,2)
+
+
+ io.entgra.device.mgt.extensions.logger.*
+
+
+
+
+
+
+
+
+
+ org.wso2.carbon
+ org.wso2.carbon.logging
+ provided
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/LogContext.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/LogContext.java
new file mode 100644
index 00000000000..6c88396b9f8
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/LogContext.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2018 - 2021 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.logger;
+
+public class LogContext {
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java
new file mode 100644
index 00000000000..ba34e1552fe
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.logger/src/main/java/io/entgra/device/mgt/extensions/logger/spi/EntgraLogger.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2018 - 2021 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.logger.spi;
+
+import io.entgra.device.mgt.extensions.logger.LogContext;
+import org.apache.commons.logging.Log;
+
+public interface EntgraLogger extends Log {
+
+ void info(String message);
+
+ void info(String message, Throwable t);
+
+ void info(String message, LogContext logContext);
+
+ void debug(String message);
+
+ void debug(String message, Throwable t);
+
+ void debug(String message, LogContext logContext);
+
+ void error(String message);
+
+ void error(String message, Throwable t);
+
+ void error(String message, LogContext logContext);
+
+ void error(String message, Throwable t, LogContext logContext);
+
+ void warn(String message);
+
+ void warn(String message, Throwable t);
+
+ void warn(String message, LogContext logContext);
+
+ void warn(String message, Throwable t, LogContext logContext);
+
+ void trace(String message);
+
+ void trace(String message, Throwable t);
+
+ void trace(String message, LogContext logContext);
+
+ void fatal(String message);
+
+ void fatal(String message, Throwable t);
+
+ void fatal(String message, LogContext logContext);
+
+ boolean isDebugEnabled();
+
+ boolean isErrorEnabled();
+
+ boolean isFatalEnabled();
+
+ boolean isInfoEnabled();
+
+ boolean isTraceEnabled();
+
+ boolean isWarnEnabled();
+
+ void clearLogContext();
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/pom.xml b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/pom.xml
new file mode 100644
index 00000000000..4fdbefbbfa4
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/pom.xml
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+ device-mgt-extensions
+ org.wso2.carbon.devicemgt
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.stateengine
+ bundle
+ Entgra IoT - State Engine
+ Entgra IoT - State Engine Components
+ http://entgra.io
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.apache.felix
+ maven-scr-plugin
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+ ${project.artifactId}
+ ${project.artifactId}
+ ${carbon.device.mgt.version}
+ IoT Device Management State Engine Bundle
+
+ org.wso2.carbon.context,
+ org.wso2.carbon.logging,
+ org.apache.commons.lang,
+ org.wso2.carbon.user.api,
+ org.apache.commons.logging,
+ org.wso2.carbon.user.core.service,
+ org.wso2.carbon.device.mgt.common.*
+
+
+ io.entgra.device.mgt.extensions.stateengine.*,
+ org.wso2.carbon.logging
+
+
+
+
+
+ org.jacoco
+ jacoco-maven-plugin
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+
+
+
+ jacoco-initialize
+
+ prepare-agent
+
+
+
+ jacoco-site
+ test
+
+ report
+
+
+ ${basedir}/target/coverage-reports/jacoco-unit.exec
+ ${basedir}/target/coverage-reports/site
+
+
+
+
+
+
+
+
+
+ org.wso2.carbon
+ org.wso2.carbon.logging
+
+
+ com.google.code.gson
+ gson
+
+
+ org.wso2.carbon
+ org.wso2.carbon.user.core
+ provided
+
+
+ org.wso2.carbon
+ org.wso2.carbon.user.api
+ provided
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.device.mgt.common
+ provided
+
+
+ org.wso2.carbon.identity.inbound.auth.oauth2
+ org.wso2.carbon.identity.oauth.stub
+
+
+ org.apache.axis2.wso2
+ axis2-client
+
+
+ org.apache.geronimo.specs.wso2
+ geronimo-stax-api_1.0_spec
+
+
+ org.apache.ws.commons.axiom.wso2
+ axiom
+
+
+ org.codehaus.woodstox
+ woodstox-core-asl
+
+
+ org.codehaus.woodstox
+ wstx-asl
+
+
+ org.wso2.carbon.devicemgt
+ org.wso2.carbon.device.mgt.analytics.data.publisher
+
+
+ org.wso2.carbon.analytics
+ org.wso2.carbon.analytics.api
+
+
+
+
+
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/dto/StateUpdateResult.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/dto/StateUpdateResult.java
new file mode 100644
index 00000000000..a3166cda649
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/dto/StateUpdateResult.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2018 - 2021 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.stateengine.dto;
+
+import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
+
+public class StateUpdateResult {
+
+ private EnrolmentInfo.Status oldStatus;
+ private EnrolmentInfo.Status newStatus;
+ private Response response;
+ private String message;
+ private Exception exception;
+
+ public EnrolmentInfo.Status getOldStatus() {
+ return oldStatus;
+ }
+
+ public void setOldStatus(EnrolmentInfo.Status oldStatus) {
+ this.oldStatus = oldStatus;
+ }
+
+ public EnrolmentInfo.Status getNewStatus() {
+ return newStatus;
+ }
+
+ public void setNewStatus(EnrolmentInfo.Status newStatus) {
+ this.newStatus = newStatus;
+ }
+
+ public Response getResponse() {
+ return response;
+ }
+
+ public void setResponse(Response response) {
+ this.response = response;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public Exception getException() {
+ return exception;
+ }
+
+ public void setException(Exception exception) {
+ this.exception = exception;
+ }
+
+ public enum Response {
+ OK, ILLEGAL, UNAUTHORIZED, REQUIRED_DATA_MISSING, EXCEPTION, NOT_FOUND
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/exception/StateValidationException.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/exception/StateValidationException.java
new file mode 100644
index 00000000000..fc5ae05e863
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/exception/StateValidationException.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 - 2020 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.stateengine.exception;
+
+public class StateValidationException extends Exception {
+
+ private static final long serialVersionUID = -8160602149151474914L;
+ private String errorMessage;
+
+ public StateValidationException() {
+ super();
+ }
+
+ public StateValidationException(Throwable cause) {
+ super(cause);
+ }
+
+ public StateValidationException(String msg, Exception nestedEx) {
+ super(msg, nestedEx);
+ setErrorMessage(msg);
+ }
+
+ public StateValidationException(String message, Throwable cause) {
+ super(message, cause);
+ setErrorMessage(message);
+ }
+
+ public StateValidationException(String msg) {
+ super(msg);
+ setErrorMessage(msg);
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/spi/DeviceStateMachine.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/spi/DeviceStateMachine.java
new file mode 100644
index 00000000000..28a62504aaf
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/spi/DeviceStateMachine.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2018 - 2021 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.stateengine.spi;
+
+import io.entgra.device.mgt.extensions.stateengine.dto.StateUpdateResult;
+import io.entgra.device.mgt.extensions.stateengine.exception.StateValidationException;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
+
+public interface DeviceStateMachine {
+
+ StateUpdateResult updateState(EnrolmentInfo.Status oldStatus,
+ EnrolmentInfo.Status newStatus, Device oldDevice, Device updatedDevice)
+ throws StateValidationException;
+
+ StateUpdateResult revertState(EnrolmentInfo.Status oldStatus,
+ EnrolmentInfo.Status newStatus, Device oldDevice, Device updatedDevice)
+ throws StateValidationException;
+
+}
diff --git a/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/util/StateEngineUtil.java b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/util/StateEngineUtil.java
new file mode 100644
index 00000000000..012b90d7b06
--- /dev/null
+++ b/components/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine/src/main/java/io/entgra/device/mgt/extensions/stateengine/util/StateEngineUtil.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2018 - 2021 Entgra (Pvt) Ltd, Inc - All Rights Reserved.
+ *
+ * Unauthorised copying/redistribution of this file, via any medium is strictly prohibited.
+ *
+ * Licensed under the Entgra Commercial License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://entgra.io/licenses/entgra-commercial/1.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package io.entgra.device.mgt.extensions.stateengine.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.CarbonConstants;
+import org.wso2.carbon.context.CarbonContext;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.user.api.UserRealm;
+import org.wso2.carbon.user.api.UserStoreException;
+import org.wso2.carbon.user.core.service.RealmService;
+
+public class StateEngineUtil {
+
+ public static final String ADMIN_PERMISSION_REGISTRY_PATH = "/permission/admin";
+ private static final String CDM_ADMIN_PERMISSION = "/device-mgt/devices/any-device/permitted-actions-under-owning-device";
+ private static final Log log = LogFactory.getLog(StateEngineUtil.class);
+ private static RealmService realmService;
+
+ public static boolean isAdminUser() throws UserStoreException {
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
+ String userName = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
+ UserRealm userRealm = getRealmService().getTenantUserRealm(tenantId);
+ if (userRealm != null && userRealm.getAuthorizationManager() != null) {
+ return userRealm.getAuthorizationManager()
+ .isUserAuthorized(removeTenantDomain(userName),
+ getAbsolutePermissionPath(CDM_ADMIN_PERMISSION),
+ CarbonConstants.UI_PERMISSION_ACTION);
+ }
+ return false;
+ }
+
+ public static String getAbsolutePermissionPath(String permissionPath) {
+ return ADMIN_PERMISSION_REGISTRY_PATH + permissionPath;
+ }
+
+ private static String removeTenantDomain(String username) {
+ String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
+ if (username.endsWith(tenantDomain)) {
+ return username.substring(0, username.lastIndexOf("@"));
+ }
+ return username;
+ }
+
+ private static RealmService getRealmService() {
+ if (realmService == null) {
+ PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
+ realmService = (RealmService) ctx.getOSGiService(RealmService.class, null);
+ if (realmService == null) {
+ String msg = "Realm service has not initialized.";
+ log.error(msg);
+ throw new IllegalStateException(msg);
+ }
+ }
+ return realmService;
+ }
+
+}
diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml
index 8a1b06f8f66..6815324eb66 100644
--- a/components/device-mgt-extensions/pom.xml
+++ b/components/device-mgt-extensions/pom.xml
@@ -40,6 +40,9 @@
org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp
org.wso2.carbon.device.mgt.extensions.device.type.deployer
org.wso2.carbon.device.mgt.extensions.pull.notification
+ io.entgra.device.mgt.extensions.logger
+ io.entgra.device.mgt.extensions.defaultrole.manager
+ io.entgra.device.mgt.extensions.stateengine
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/pom.xml
new file mode 100644
index 00000000000..cbce317b147
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/pom.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt
+ device-mgt-extensions-feature
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.defaultrole.manager.feature
+ pom
+ Entgra IoT - Default Role Manager Feature Impl
+ http://entgra.io
+
+ This feature contains the core bundles required for Default Role Manager functionality
+
+
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.defaultrole.manager
+
+
+
+
+
+
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ generate-resources
+
+ copy-resources
+
+
+ src/main/resources
+
+
+ resources
+
+ build.properties
+ p2.inf
+
+
+
+
+
+
+
+
+ org.wso2.maven
+ carbon-p2-plugin
+ ${carbon.p2.plugin.version}
+
+
+ p2-feature-generation
+ package
+
+ p2-feature-gen
+
+
+ io.entgra.device.mgt.extensions.defaultrole.manager
+ ../../etc/feature.properties
+
+
+ org.wso2.carbon.p2.category.type:server
+
+ org.eclipse.equinox.p2.type.group:true
+
+
+
+
+
+ org.wso2.carbon.devicemgt:io.entgra.device.mgt.extensions.defaultrole.manager:${carbon.device.mgt.version}
+
+
+
+
+
+
+
+
+
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/build.properties b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/build.properties
new file mode 100644
index 00000000000..9c86577d768
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/build.properties
@@ -0,0 +1 @@
+custom = true
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/conf/default-roles-config.xml b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/conf/default-roles-config.xml
new file mode 100644
index 00000000000..dab9aa551ef
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/conf/default-roles-config.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+ /permission/admin/device-mgt/device/api/subscribe
+ /permission/admin/device-mgt/devices/any-device/permitted-actions-under-owning-device
+ /permission/admin/device-mgt/devices/owning-device/operations/view
+ /permission/admin/login
+ /permission/admin/logout
+
+
+
+
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/p2.inf b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/p2.inf
new file mode 100644
index 00000000000..e5a5f28b871
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.defaultrole.manager.feature/src/main/resources/p2.inf
@@ -0,0 +1,2 @@
+instructions.configure = \
+org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/io.entgra.device.mgt.extensions.defaultrole.manager_${feature.version}/conf/default-roles-config.xml,target:${installFolder}/../../../repository/conf/default-roles-config.xml,overwrite:true);\
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/pom.xml
new file mode 100644
index 00000000000..c1da9f8d17e
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/pom.xml
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt
+ device-mgt-extensions-feature
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.logger.feature
+ pom
+ Entgra IoT - Logger Plugin Feature Impl
+ http://entgra.io
+
+ This feature contains the core bundles required for logging functionality
+
+
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.logger
+
+
+
+
+
+
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ generate-resources
+
+ copy-resources
+
+
+ src/main/resources
+
+
+ resources
+
+ build.properties
+ p2.inf
+
+
+
+
+
+
+
+
+ org.wso2.maven
+ carbon-p2-plugin
+ ${carbon.p2.plugin.version}
+
+
+ p2-feature-generation
+ package
+
+ p2-feature-gen
+
+
+ io.entgra.device.mgt.extensions.logger
+ ../../etc/feature.properties
+
+
+ org.wso2.carbon.p2.category.type:server
+
+ org.eclipse.equinox.p2.type.group:true
+
+
+
+
+
+ org.wso2.carbon.devicemgt:io.entgra.device.mgt.extensions.logger:${carbon.device.mgt.version}
+
+
+
+
+
+
+
+
+
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/build.properties b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/build.properties
new file mode 100644
index 00000000000..9c86577d768
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/build.properties
@@ -0,0 +1 @@
+custom = true
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/p2.inf b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/p2.inf
new file mode 100644
index 00000000000..7ab37b9d7d7
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.logger.feature/src/main/resources/p2.inf
@@ -0,0 +1 @@
+instructions.configure = \
\ No newline at end of file
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/pom.xml b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/pom.xml
new file mode 100644
index 00000000000..89395f41316
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/pom.xml
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ org.wso2.carbon.devicemgt
+ device-mgt-extensions-feature
+ 5.0.14-SNAPSHOT
+ ../pom.xml
+
+
+ 4.0.0
+ io.entgra.device.mgt.extensions.stateengine.feature
+ pom
+ Entgra IoT - State engine Plugin Feature Impl
+ http://entgra.io
+
+ This feature contains the core bundles required for state engine functionality
+
+
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.stateengine
+
+
+
+
+
+
+ maven-resources-plugin
+ 2.6
+
+
+ copy-resources
+ generate-resources
+
+ copy-resources
+
+
+ src/main/resources
+
+
+ resources
+
+ build.properties
+ p2.inf
+
+
+
+
+
+
+
+
+
+ org.wso2.maven
+ carbon-p2-plugin
+ ${carbon.p2.plugin.version}
+
+
+ p2-feature-generation
+ package
+
+ p2-feature-gen
+
+
+ io.entgra.device.mgt.extensions.stateengine
+ ../../etc/feature.properties
+
+
+ org.wso2.carbon.p2.category.type:server
+
+ org.eclipse.equinox.p2.type.group:true
+
+
+
+
+
+ org.wso2.carbon.devicemgt:io.entgra.device.mgt.extensions.stateengine:${carbon.device.mgt.version}
+
+
+
+
+
+
+
+
+
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/build.properties b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/build.properties
new file mode 100644
index 00000000000..9c86577d768
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/build.properties
@@ -0,0 +1 @@
+custom = true
diff --git a/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/p2.inf b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/p2.inf
new file mode 100644
index 00000000000..7ab37b9d7d7
--- /dev/null
+++ b/features/device-mgt-extensions/io.entgra.device.mgt.extensions.stateengine.feature/src/main/resources/p2.inf
@@ -0,0 +1 @@
+instructions.configure = \
\ No newline at end of file
diff --git a/features/device-mgt-extensions/pom.xml b/features/device-mgt-extensions/pom.xml
index 67d02c0b14c..8c928f9b397 100644
--- a/features/device-mgt-extensions/pom.xml
+++ b/features/device-mgt-extensions/pom.xml
@@ -38,6 +38,9 @@
org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature
org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature
org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature
+ io.entgra.device.mgt.extensions.defaultrole.manager.feature
+ io.entgra.device.mgt.extensions.logger.feature
+ io.entgra.device.mgt.extensions.stateengine.feature
diff --git a/pom.xml b/pom.xml
index 69f91264084..9524abce2b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -802,6 +802,44 @@
${orbit.version.h2.engine}
+
+ org.wso2.orbit.com.h2database
+ h2
+ ${orbit.h2.version}
+
+
+
+ org.wso2.apache.httpcomponents
+ httpclient
+ ${org.wso2.apache.httpcomponents.httpclient.version}
+
+
+
+ org.wso2.securevault
+ org.wso2.securevault
+ ${securevault.version}
+
+
+
+ xerces.wso2
+ xercesImpl
+ ${xerces.version}
+
+
+
+ org.wso2.carbon
+ org.wso2.carbon.queuing
+ ${carbon.kernel.version}
+ test
+
+
+
+ javax.xml.bind
+ jaxb-api
+ ${jaxb.api.version}
+ test
+
+
org.apache.axis2.transport
axis2-transport-mail
@@ -1531,6 +1569,21 @@
org.wso2.carbon.event.stream.persistence.stub
${carbon.analytics.common.version}
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.defaultrole.manager
+ ${carbon.device.mgt.version}
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.logger
+ ${carbon.device.mgt.version}
+
+
+ org.wso2.carbon.devicemgt
+ io.entgra.device.mgt.extensions.stateengine
+ ${carbon.device.mgt.version}
+
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.extensions.device.type.deployer
@@ -1757,6 +1810,11 @@
cxf-bundle-jaxrs
${cxf-bundle-package.version}
+
+ org.mockito
+ mockito-inline
+ ${mokito.version}
+
@@ -2142,6 +2200,13 @@
[1.6.0, 2.0.0)
[1.2.0,1.3.0)
+
+ 4.2.0
+ 2.3.1
+ 2.8.1.wso2v2
+ 4.3.1.wso2v1
+ 1.4.199.wso2v1
+ 1.1.3