diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml index a1423e285e..25dd56e5ee 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml @@ -22,13 +22,13 @@ apimgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.annotations - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - API Management Annotations WSO2 Carbon - API Management Custom Annotation Module diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml index 3c320381bb..be9f3e24ff 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml @@ -21,12 +21,12 @@ apimgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT org.wso2.carbon.apimgt.application.extension.api war WSO2 Carbon - API Application Management API diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml index 405ffaf903..9d7464de56 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml @@ -22,12 +22,12 @@ apimgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT org.wso2.carbon.apimgt.application.extension bundle WSO2 Carbon - API Application Management diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml index e8f4b4173a..96e1570cdb 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml @@ -21,13 +21,13 @@ apimgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.handlers - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - API Security Handler Component WSO2 Carbon - API Management Security Handler Module diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml index 3c9db88b63..570776ab20 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml @@ -22,13 +22,13 @@ apimgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.webapp.publisher - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - API Management Webapp Publisher WSO2 Carbon - API Management Webapp Publisher diff --git a/components/apimgt-extensions/pom.xml b/components/apimgt-extensions/pom.xml index c13a83faea..467f14aae8 100644 --- a/components/apimgt-extensions/pom.xml +++ b/components/apimgt-extensions/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 apimgt-extensions - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - API Management Extensions Component http://wso2.org diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml index 227be0c61e..c91b714430 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml @@ -22,7 +22,7 @@ certificate-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml index 3c2e4bd255..aed7787a27 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml @@ -22,7 +22,7 @@ certificate-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml index 33947cc973..e9ecadb44b 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml @@ -21,13 +21,13 @@ org.wso2.carbon.devicemgt certificate-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.certificate.mgt.core - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Certificate Management Core WSO2 Carbon - Certificate Management Core diff --git a/components/certificate-mgt/pom.xml b/components/certificate-mgt/pom.xml index 520b63f674..6a5e3a4d1d 100644 --- a/components/certificate-mgt/pom.xml +++ b/components/certificate-mgt/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt certificate-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Certificate Management Component http://wso2.org diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml index 545377a929..b9bebfed03 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml @@ -22,7 +22,7 @@ device-mgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/pom.xml index 8fc1785bce..d7ee06a319 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/pom.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/pom.xml @@ -22,7 +22,7 @@ device-mgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml index 35e32e2219..4090ceb837 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml @@ -22,7 +22,7 @@ device-mgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml index f4e3a2d21f..9cc250c652 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml @@ -22,7 +22,7 @@ device-mgt-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml index c944f3716f..871f5a3935 100644 --- a/components/device-mgt-extensions/pom.xml +++ b/components/device-mgt-extensions/pom.xml @@ -22,7 +22,7 @@ carbon-devicemgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml index 8f3729bc54..358e1f0ebe 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml @@ -3,7 +3,7 @@ org.wso2.carbon.devicemgt device-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml @@ -62,6 +62,7 @@ org.wso2.carbon.device.mgt.analytics.dashboard, + org.wso2.carbon.device.mgt.analytics.dashboard.util, org.wso2.carbon.device.mgt.analytics.dashboard.exception, org.wso2.carbon.device.mgt.analytics.dashboard.bean diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java index c2b1b55a75..5a251fc9c2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java @@ -47,7 +47,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet) + DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException; /** @@ -64,7 +64,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet) + DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException; /** @@ -74,7 +74,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - DeviceCountByGroup getTotalDeviceCount() throws DataAccessLayerException; + DeviceCountByGroup getTotalDeviceCount(String userName) throws DataAccessLayerException; /** * This method is used to get device counts classified by connectivity statuses. @@ -83,7 +83,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - List getDeviceCountsByConnectivityStatuses() throws DataAccessLayerException; + List getDeviceCountsByConnectivityStatuses(String userName) throws DataAccessLayerException; /** * This method is used to get device counts classified by potential vulnerabilities. @@ -92,7 +92,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - List getDeviceCountsByPotentialVulnerabilities() throws DataAccessLayerException; + List getDeviceCountsByPotentialVulnerabilities(String userName) throws DataAccessLayerException; /** * This method is used to get non-compliant device counts classified by individual features. @@ -105,7 +105,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) throws + PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, DataAccessLayerException; /** @@ -122,7 +122,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet) + List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException; /** @@ -139,7 +139,7 @@ public interface GadgetDataService { */ @SuppressWarnings("unused") List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException; /** @@ -156,7 +156,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet) + List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException; /** @@ -174,7 +174,7 @@ public interface GadgetDataService { */ @SuppressWarnings("unused") List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException; /** @@ -196,7 +196,7 @@ public interface GadgetDataService { * @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5). */ @SuppressWarnings("unused") - PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException, InvalidStartIndexValueException, InvalidResultCountValueException; @@ -220,7 +220,7 @@ public interface GadgetDataService { */ @SuppressWarnings("unused") PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet, - int startIndex, int resultCount) throws InvalidFeatureCodeValueException, + int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException, InvalidStartIndexValueException, InvalidResultCountValueException; @@ -238,7 +238,7 @@ public interface GadgetDataService { * executing SQL query and retrieving data. */ @SuppressWarnings("unused") - List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet) + List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException; /** @@ -255,7 +255,7 @@ public interface GadgetDataService { */ @SuppressWarnings("unused") List getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java index 9781512064..4cad3f2201 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java @@ -18,13 +18,16 @@ package org.wso2.carbon.device.mgt.analytics.dashboard.dao; -import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet; import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidFeatureCodeValueException; import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidPotentialVulnerabilityValueException; +import org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; import java.sql.Connection; @@ -36,40 +39,39 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUser; +import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUserTenantDomainId; + public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceDAO { + private static final Log log = LogFactory.getLog(AbstractGadgetDataServiceDAO.class); @Override - public DeviceCountByGroup getTotalDeviceCount() throws SQLException { + public DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException { int totalDeviceCount; try { - totalDeviceCount = this.getFilteredDeviceCount(null); + totalDeviceCount = this.getFilteredDeviceCount(null, userName); } catch (InvalidPotentialVulnerabilityValueException e) { throw new AssertionError(e); } - DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup(); deviceCountByGroup.setGroup("total"); deviceCountByGroup.setDisplayNameForGroup("Total"); deviceCountByGroup.setDeviceCount(totalDeviceCount); - return deviceCountByGroup; } @Override - public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet) + public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException { - - int filteredDeviceCount = this.getFilteredDeviceCount(extendedFilterSet); - + int filteredDeviceCount = this.getFilteredDeviceCount(extendedFilterSet, userName); DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup(); deviceCountByGroup.setGroup("filtered"); deviceCountByGroup.setDisplayNameForGroup("Filtered"); deviceCountByGroup.setDeviceCount(filteredDeviceCount); - return deviceCountByGroup; } - private int getFilteredDeviceCount(ExtendedFilterSet extendedFilterSet) + private int getFilteredDeviceCount(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException { Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet); @@ -77,24 +79,37 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); int filteredDeviceCount = 0; try { + String sql; con = this.getConnection(); - String sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?"; + if (APIUtil.isDeviceAdminUser()) { + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?"; + } else { + sql = "SELECT COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN" + + " DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " + + " POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? "; + } // appending filters to support advanced filtering options // [1] appending filter columns if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - sql = sql + " AND " + column + " = ?"; + sql = sql + " AND POLICY__INFO." + column + " = ? "; } } - stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist + stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); + int index = 2; + if (!APIUtil.isDeviceAdminUser()) { + stmt.setString(2, userName); + index = 3; + } if (filters != null && filters.values().size() > 0) { - int i = 2; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -110,6 +125,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD while (rs.next()) { filteredDeviceCount = rs.getInt("DEVICE_COUNT"); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -118,7 +136,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException { + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty."); @@ -129,25 +147,39 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); int filteredDeviceCount = 0; try { + String sql; con = this.getConnection(); - String sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + if (APIUtil.isDeviceAdminUser()) { + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID =" + + " ? AND FEATURE_CODE = ?"; + } else { + sql = "SELECT COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND " + + "FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? "; + } // appending filters to support advanced filtering options // [1] appending filter columns if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - sql = sql + " AND " + column + " = ?"; + sql = sql + " AND FEATURE_INFO." + column + " = ?"; } } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); stmt.setString(2, featureCode); + int index = 3; + if (!APIUtil.isDeviceAdminUser()) { + stmt.setString(3, userName); + index = 4; + } if (filters != null && filters.values().size() > 0) { - int i = 3; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -163,6 +195,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD while (rs.next()) { filteredDeviceCount = rs.getInt("DEVICE_COUNT"); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -176,20 +211,32 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } @Override - public List getDeviceCountsByConnectivityStatuses() throws SQLException { + public List getDeviceCountsByConnectivityStatuses(String userName) throws SQLException { Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List deviceCountsByConnectivityStatuses = new ArrayList<>(); try { + String sql; con = this.getConnection(); - String sql = "SELECT CONNECTIVITY_STATUS, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + - " WHERE TENANT_ID = ? GROUP BY CONNECTIVITY_STATUS"; + if (APIUtil.isDeviceAdminUser()) { + sql = "SELECT CONNECTIVITY_STATUS, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + + " WHERE TENANT_ID = ? GROUP BY CONNECTIVITY_STATUS"; + } else { + sql = "SELECT POLICY__INFO.CONNECTIVITY_STATUS AS CONNECTIVITY_STATUS, " + + "COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO " + + "INNER JOIN DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID " + + " AND POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? GROUP BY POLICY__INFO.CONNECTIVITY_STATUS"; + } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + } // executing query rs = stmt.executeQuery(); // fetching query results @@ -201,6 +248,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD deviceCountByConnectivityStatus.setDeviceCount(rs.getInt("DEVICE_COUNT")); deviceCountsByConnectivityStatuses.add(deviceCountByConnectivityStatus); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -208,7 +258,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } @Override - public List getDeviceCountsByPotentialVulnerabilities() throws SQLException { + public List getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException { // getting non-compliant device count DeviceCountByGroup nonCompliantDeviceCount = new DeviceCountByGroup(); nonCompliantDeviceCount.setGroup(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT); @@ -230,10 +280,10 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD private int getNonCompliantDeviceCount() throws SQLException { ExtendedFilterSet extendedFilterSet = new ExtendedFilterSet(); - extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants. - PotentialVulnerability.NON_COMPLIANT); + extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT); try { - return this.getFilteredDeviceCount(extendedFilterSet); + String userName = getAuthenticatedUser(); + return this.getFilteredDeviceCount(extendedFilterSet, userName); } catch (InvalidPotentialVulnerabilityValueException e) { throw new AssertionError(e); } @@ -244,14 +294,15 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants. PotentialVulnerability.UNMONITORED); try { - return this.getFilteredDeviceCount(extendedFilterSet); + String userName = getAuthenticatedUser(); + return this.getFilteredDeviceCount(extendedFilterSet, userName); } catch (InvalidPotentialVulnerabilityValueException e) { throw new AssertionError(e); } } @Override - public List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet) + public List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException { Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet); @@ -259,7 +310,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDeviceCountsByPlatforms = new ArrayList<>(); try { con = this.getConnection(); @@ -268,16 +319,30 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? "; } } - sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? " + advancedSqlFiltering + "GROUP BY PLATFORM"; + if (APIUtil.isDeviceAdminUser()) { + sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " + advancedSqlFiltering + + " GROUP BY PLATFORM"; + } else { + sql = "SELECT POLICY__INFO.PLATFORM, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " + + "POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY " + + "POLICY__INFO.PLATFORM"; + } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); + int index = 2; + if (!APIUtil.isDeviceAdminUser()) { + stmt.setString(2, userName); + index = 3; + } if (filters != null && filters.values().size() > 0) { - int i = 2; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -298,6 +363,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT")); filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -307,7 +375,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException { + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty."); @@ -318,7 +386,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDeviceCountsByPlatforms = new ArrayList<>(); try { con = this.getConnection(); @@ -327,18 +395,32 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? "; } } - sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + - advancedSqlFiltering + "GROUP BY PLATFORM"; + if (APIUtil.isDeviceAdminUser()) { + sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + + advancedSqlFiltering + " GROUP BY PLATFORM"; + } else { + sql = "SELECT FEATURE_INFO.PLATFORM, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " + + " AND FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " + + advancedSqlFiltering + " GROUP BY FEATURE_INFO.PLATFORM"; + } + stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); stmt.setString(2, featureCode); + int index = 3; + if (!APIUtil.isDeviceAdminUser()) { + stmt.setString(3, userName); + index = 4; + } if (filters != null && filters.values().size() > 0) { - int i = 3; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -359,6 +441,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT")); filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -366,7 +451,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } @Override - public List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet) + public List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException { Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet); @@ -374,7 +459,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDeviceCountsByOwnershipTypes = new ArrayList<>(); try { con = this.getConnection(); @@ -383,17 +468,29 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? "; } } - sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? " + - advancedSqlFiltering + "GROUP BY OWNERSHIP"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " + + advancedSqlFiltering + "GROUP BY OWNERSHIP"; + }else{ + sql = "SELECT POLICY__INFO.OWNERSHIP, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND POLICY__INFO.TENANT_ID" + + " = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY POLICY__INFO.OWNERSHIP"; + } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); + int index = 2; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + index = 3; + } if (filters != null && filters.values().size() > 0) { - int i = 2; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -414,6 +511,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT")); filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -423,7 +523,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException { + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty."); @@ -434,7 +534,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDeviceCountsByOwnershipTypes = new ArrayList<>(); try { con = this.getConnection(); @@ -443,18 +543,31 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? "; } } - sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + - advancedSqlFiltering + "GROUP BY OWNERSHIP"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + + advancedSqlFiltering + "GROUP BY OWNERSHIP"; + }else{ + sql = "SELECT FEATURE_INFO.OWNERSHIP, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID " + + "= ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + + " GROUP BY FEATURE_INFO.OWNERSHIP"; + } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); stmt.setString(2, featureCode); + int index = 3; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(3, userName); + index = 4; + } if (filters != null && filters.values().size() > 0) { - int i = 3; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -475,6 +588,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT")); filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -482,7 +598,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } @Override - public List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet) + public List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException { Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet); @@ -490,25 +606,38 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDevicesWithDetails = new ArrayList<>(); try { con = this.getConnection(); String sql; - sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?"; + }else{ + sql = "SELECT POLICY__INFO.DEVICE_ID, POLICY__INFO.DEVICE_IDENTIFICATION, POLICY__INFO.PLATFORM," + + " POLICY__INFO.OWNERSHIP, POLICY__INFO.CONNECTIVITY_STATUS FROM "+ + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1+" POLICY__INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " + + "POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ?"; + } // appending filters to support advanced filtering options // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - sql = sql + " AND " + column + " = ?"; + sql = sql + " AND POLICY__INFO." + column + " = ?"; } } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); + int index = 2; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + index = 3; + } if (filters != null && filters.values().size() > 0) { - int i = 2; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -531,6 +660,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); filteredDevicesWithDetails.add(filteredDeviceWithDetails); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -539,7 +671,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException { + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty."); @@ -550,27 +682,40 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDevicesWithDetails = new ArrayList<>(); try { con = this.getConnection(); String sql; - sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + - " WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + }else{ + sql = "SELECT FEATURE_INFO.DEVICE_ID, FEATURE_INFO.DEVICE_IDENTIFICATION, FEATURE_INFO.PLATFORM, " + + "FEATURE_INFO.OWNERSHIP, FEATURE_INFO.CONNECTIVITY_STATUS FROM "+ + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2+" FEATURE_INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID" + + " = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? "; + } // appending filters to support advanced filtering options // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - sql = sql + " AND " + column + " = ?"; + sql = sql + " AND FEATURE_INFO." + column + " = ?"; } } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); stmt.setString(2, featureCode); + int index = 3; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(3, userName); + index = 4; + } if (filters != null && filters.values().size() > 0) { - int i = 3; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -593,6 +738,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); filteredDevicesWithDetails.add(filteredDeviceWithDetails); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java index c5c1638fba..0033f19327 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java @@ -30,45 +30,45 @@ import java.util.List; public interface GadgetDataServiceDAO { - DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet) + DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException; - DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet) + DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException; - DeviceCountByGroup getTotalDeviceCount() throws SQLException; + DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException; - List getDeviceCountsByConnectivityStatuses() throws SQLException; + List getDeviceCountsByConnectivityStatuses(String userName) throws SQLException; - List getDeviceCountsByPotentialVulnerabilities() throws SQLException; + List getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException; - PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) throws + PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException; - List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet) + List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException; List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException; + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException; - List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet) + List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException; List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException; + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException; - PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException; PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet, - int startIndex, int resultCount) throws InvalidFeatureCodeValueException, + int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException; - List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet) + List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, SQLException; List getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, SQLException; + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java index 4a0deb7d24..68defcc788 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java @@ -18,7 +18,8 @@ package org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl; -import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup; import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet; @@ -26,7 +27,9 @@ import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet; import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO; import org.wso2.carbon.device.mgt.analytics.dashboard.dao.GadgetDataServiceDAOConstants; import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*; +import org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil; import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; import java.sql.Connection; @@ -37,10 +40,14 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUserTenantDomainId; + public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO { + private static final Log log = LogFactory.getLog(GenericGadgetDataServiceDAOImpl.class); + @Override - public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) { @@ -56,19 +63,33 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>(); int totalRecordsCount = 0; try { + String sql; con = this.getConnection(); - String sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE " + - "ORDER BY DEVICE_COUNT DESC LIMIT ?, ?"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? GROUP BY FEATURE_CODE " + + "ORDER BY DEVICE_COUNT DESC LIMIT ?, ?"; + }else{ + sql = "SELECT FEATURE_INFO.FEATURE_CODE, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT " + + "FROM "+GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2+" FEATURE_INFO INNER JOIN " + + "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND " + + "FEATURE_INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? GROUP BY FEATURE_INFO.FEATURE_CODE ORDER BY" + + " DEVICE_COUNT DESC LIMIT ?, ?"; + } stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); - stmt.setInt(2, startIndex); - stmt.setInt(3, resultCount); - + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + stmt.setInt(3, startIndex); + stmt.setInt(4, resultCount); + }else{ + stmt.setInt(2, startIndex); + stmt.setInt(3, resultCount); + } // executing query rs = stmt.executeQuery(); // fetching query results @@ -81,19 +102,30 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature); } // fetching total records count - sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM (SELECT DISTINCT FEATURE_CODE FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ?) " + - "NON_COMPLIANT_FEATURE_CODE"; - + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM (SELECT DISTINCT FEATURE_CODE FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ?) " + + "NON_COMPLIANT_FEATURE_CODE"; + }else{ + sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM (SELECT DISTINCT " + + "FEATURE_INFO.FEATURE_CODE FROM "+GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + +" FEATURE_INFO INNER JOIN DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " + + "AND FEATURE_INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? ) NON_COMPLIANT_FEATURE_CODE"; + } stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); - + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + } // executing query rs = stmt.executeQuery(); // fetching query results while (rs.next()) { totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT"); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -105,7 +137,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA @Override public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, - int resultCount) throws InvalidPotentialVulnerabilityValueException, + int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) { @@ -123,7 +155,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDevicesWithDetails = new ArrayList<>(); int totalRecordsCount = 0; try { @@ -133,17 +165,31 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? "; } } - sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + - GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ? " + - advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " + + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; + }else{ + sql = "SELECT POLICY__INFO.DEVICE_ID, POLICY__INFO.DEVICE_IDENTIFICATION, POLICY__INFO.PLATFORM, " + + "POLICY__INFO.OWNERSHIP, POLICY__INFO.CONNECTIVITY_STATUS FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN DM_ENROLMENT " + + "ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " + + "POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " ORDER BY " + + "POLICY__INFO.DEVICE_ID ASC LIMIT ?,?"; + } stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); + int index = 2; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + index = 3; + } if (filters != null && filters.values().size() > 0) { - int i = 2; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -155,8 +201,8 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA stmt.setInt(i, startIndex); stmt.setInt(++i, resultCount); } else { - stmt.setInt(2, startIndex); - stmt.setInt(3, resultCount); + stmt.setInt(3, startIndex); + stmt.setInt(4, resultCount); } // executing query rs = stmt.executeQuery(); @@ -171,20 +217,28 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); filteredDevicesWithDetails.add(filteredDeviceWithDetails); } - - // fetching total records count - sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?"; - + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_1 + " WHERE TENANT_ID = ?"; + }else{ + sql = "SELECT COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "+GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_1+" POLICY__INFO INNER JOIN DM_ENROLMENT ENR_DB ON " + + "ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? "; + } stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); - + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(2, userName); + } // executing query rs = stmt.executeQuery(); // fetching query results while (rs.next()) { totalRecordsCount = rs.getInt("DEVICE_COUNT"); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } @@ -196,7 +250,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet, int startIndex, int resultCount) + BasicFilterSet basicFilterSet, int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { @@ -219,7 +273,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA Connection con; PreparedStatement stmt = null; ResultSet rs = null; - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + int tenantId = getAuthenticatedUserTenantDomainId(); List filteredDevicesWithDetails = new ArrayList<>(); int totalRecordsCount = 0; try { @@ -229,19 +283,34 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { for (String column : filters.keySet()) { - advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + advancedSqlFiltering = advancedSqlFiltering + "AND FEATURE_INFO." + column + " = ? "; } } - sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + - " WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; + }else{ + sql = "SELECT FEATURE_INFO.DEVICE_ID, FEATURE_INFO.DEVICE_IDENTIFICATION, FEATURE_INFO.PLATFORM, " + + "FEATURE_INFO.OWNERSHIP, FEATURE_INFO.CONNECTIVITY_STATUS FROM " + + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN DM_ENROLMENT " + + "ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " + + " AND FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " + + advancedSqlFiltering + " ORDER BY DEVICE_ID ASC LIMIT ?,?"; + } + stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); stmt.setString(2, featureCode); + int index = 3; + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(3, userName); + index = 4; + } if (filters != null && filters.values().size() > 0) { - int i = 3; + int i = index; for (Object value : filters.values()) { if (value instanceof Integer) { stmt.setInt(i, (Integer) value); @@ -253,8 +322,8 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA stmt.setInt(i, startIndex); stmt.setInt(++i, resultCount); } else { - stmt.setInt(3, startIndex); - stmt.setInt(4, resultCount); + stmt.setInt(index, startIndex); + stmt.setInt(++index, resultCount); } // executing query rs = stmt.executeQuery(); @@ -269,21 +338,30 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); filteredDevicesWithDetails.add(filteredDeviceWithDetails); } - - // fetching total records count - sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. - DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; - + if(APIUtil.isDeviceAdminUser()){ + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_2 + " WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + }else{ + sql = "SELECT COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants. + DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN DM_ENROLMENT ENR_DB ON " + + "ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID = ? AND " + + "FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? "; + } stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); stmt.setString(2, featureCode); - + if(!APIUtil.isDeviceAdminUser()){ + stmt.setString(3, userName); + } // executing query rs = stmt.executeQuery(); // fetching query results while (rs.next()) { totalRecordsCount = rs.getInt("DEVICE_COUNT"); } + } catch (DeviceAccessAuthorizationException e) { + String msg = "Error occurred while checking device access authorization"; + log.error(msg, e); } finally { DeviceManagementDAOUtil.cleanupResources(stmt, rs); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java index 396a596c9b..23374a3fc2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java @@ -40,7 +40,7 @@ import java.util.Map; public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO { @Override - public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) { @@ -104,7 +104,7 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO } @Override - public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException, InvalidResultCountValueException, @@ -198,7 +198,7 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet, int startIndex, int resultCount) + BasicFilterSet basicFilterSet, int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java index b90a9046b0..4d58e508e7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java @@ -40,7 +40,7 @@ import java.util.Map; public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO { @Override - public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) { @@ -105,7 +105,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO } @Override - public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { @@ -197,7 +197,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet, - int startIndex, int resultCount) throws InvalidFeatureCodeValueException, + int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java index d44ad929ee..5f859ec8b2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java @@ -40,7 +40,7 @@ import java.util.Map; public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO { @Override - public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (startIndex < GadgetDataServiceDAOConstants.Pagination.MIN_START_INDEX) { @@ -105,7 +105,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic } @Override - public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { @@ -198,7 +198,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet, - int startIndex, int resultCount) throws InvalidFeatureCodeValueException, + int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, InvalidStartIndexValueException, InvalidResultCountValueException, SQLException { if (featureCode == null || featureCode.isEmpty()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/impl/GadgetDataServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/impl/GadgetDataServiceImpl.java index 495172e3e0..9a392ab8df 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/impl/GadgetDataServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/impl/GadgetDataServiceImpl.java @@ -36,13 +36,14 @@ import java.util.List; public class GadgetDataServiceImpl implements GadgetDataService { @Override - public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet) + public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException { DeviceCountByGroup filteredDeviceCount; try { + GadgetDataServiceDAOFactory.openConnection(); filteredDeviceCount = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getDeviceCount(extendedFilterSet); + getDeviceCount(extendedFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -53,13 +54,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet) + public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException { DeviceCountByGroup featureNonCompliantDeviceCount; try { GadgetDataServiceDAOFactory.openConnection(); featureNonCompliantDeviceCount = GadgetDataServiceDAOFactory. - getGadgetDataServiceDAO().getFeatureNonCompliantDeviceCount(featureCode, basicFilterSet); + getGadgetDataServiceDAO().getFeatureNonCompliantDeviceCount(featureCode, basicFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -70,11 +71,11 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public DeviceCountByGroup getTotalDeviceCount() throws DataAccessLayerException { + public DeviceCountByGroup getTotalDeviceCount(String userName) throws DataAccessLayerException { DeviceCountByGroup totalDeviceCount; try { GadgetDataServiceDAOFactory.openConnection(); - totalDeviceCount = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().getTotalDeviceCount(); + totalDeviceCount = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO().getTotalDeviceCount(userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -85,12 +86,12 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public List getDeviceCountsByConnectivityStatuses() throws DataAccessLayerException { + public List getDeviceCountsByConnectivityStatuses(String userName) throws DataAccessLayerException { List deviceCountsByConnectivityStatuses; try { GadgetDataServiceDAOFactory.openConnection(); deviceCountsByConnectivityStatuses = GadgetDataServiceDAOFactory. - getGadgetDataServiceDAO().getDeviceCountsByConnectivityStatuses(); + getGadgetDataServiceDAO().getDeviceCountsByConnectivityStatuses(userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -101,12 +102,12 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public List getDeviceCountsByPotentialVulnerabilities() throws DataAccessLayerException { + public List getDeviceCountsByPotentialVulnerabilities(String userName) throws DataAccessLayerException { List deviceCountsByPotentialVulnerabilities; try { GadgetDataServiceDAOFactory.openConnection(); deviceCountsByPotentialVulnerabilities = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getDeviceCountsByPotentialVulnerabilities(); + getDeviceCountsByPotentialVulnerabilities(userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -117,14 +118,14 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws InvalidStartIndexValueException, InvalidResultCountValueException, DataAccessLayerException { PaginationResult paginationResult; try { GadgetDataServiceDAOFactory.openConnection(); paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getNonCompliantDeviceCountsByFeatures(startIndex, resultCount); + getNonCompliantDeviceCountsByFeatures(startIndex, resultCount, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -135,13 +136,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet) + public List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException { List deviceCountsByPlatforms; try { GadgetDataServiceDAOFactory.openConnection(); deviceCountsByPlatforms = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getDeviceCountsByPlatforms(extendedFilterSet); + getDeviceCountsByPlatforms(extendedFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -153,13 +154,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { @Override public List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException { List featureNonCompliantDeviceCountsByPlatforms; try { GadgetDataServiceDAOFactory.openConnection(); featureNonCompliantDeviceCountsByPlatforms = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getFeatureNonCompliantDeviceCountsByPlatforms(featureCode, basicFilterSet); + getFeatureNonCompliantDeviceCountsByPlatforms(featureCode, basicFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -170,14 +171,14 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet) + public List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException { List deviceCountsByOwnershipTypes; try { GadgetDataServiceDAOFactory.openConnection(); deviceCountsByOwnershipTypes = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getDeviceCountsByOwnershipTypes(extendedFilterSet); + getDeviceCountsByOwnershipTypes(extendedFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -189,13 +190,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { @Override public List - getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, BasicFilterSet basicFilterSet) + getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode, BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException { List featureNonCompliantDeviceCountsByOwnershipTypes; try { GadgetDataServiceDAOFactory.openConnection(); featureNonCompliantDeviceCountsByOwnershipTypes = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getFeatureNonCompliantDeviceCountsByOwnershipTypes(featureCode, basicFilterSet); + getFeatureNonCompliantDeviceCountsByOwnershipTypes(featureCode, basicFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -206,14 +207,14 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount) + public PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException, InvalidStartIndexValueException, InvalidResultCountValueException { PaginationResult paginationResult; try { GadgetDataServiceDAOFactory.openConnection(); paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getDevicesWithDetails(extendedFilterSet, startIndex, resultCount); + getDevicesWithDetails(extendedFilterSet, startIndex, resultCount, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -225,14 +226,14 @@ public class GadgetDataServiceImpl implements GadgetDataService { @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet, - int startIndex, int resultCount) throws InvalidFeatureCodeValueException, + int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException, InvalidStartIndexValueException, InvalidResultCountValueException { PaginationResult paginationResult; try { GadgetDataServiceDAOFactory.openConnection(); paginationResult = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet, startIndex, resultCount); + getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet, startIndex, resultCount, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -243,13 +244,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { } @Override - public List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet) + public List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName) throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException { List devicesWithDetails; try { GadgetDataServiceDAOFactory.openConnection(); devicesWithDetails = GadgetDataServiceDAOFactory. - getGadgetDataServiceDAO().getDevicesWithDetails(extendedFilterSet); + getGadgetDataServiceDAO().getDevicesWithDetails(extendedFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); @@ -261,13 +262,13 @@ public class GadgetDataServiceImpl implements GadgetDataService { @Override public List getFeatureNonCompliantDevicesWithDetails(String featureCode, - BasicFilterSet basicFilterSet) throws InvalidFeatureCodeValueException, + BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, DataAccessLayerException { List featureNonCompliantDevicesWithDetails; try { GadgetDataServiceDAOFactory.openConnection(); featureNonCompliantDevicesWithDetails = GadgetDataServiceDAOFactory.getGadgetDataServiceDAO(). - getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet); + getFeatureNonCompliantDevicesWithDetails(featureCode, basicFilterSet, userName); } catch (SQLException e) { throw new DataAccessLayerException("Error in either opening a database connection or " + "accessing the database to fetch corresponding results.", e); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/util/APIUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/util/APIUtil.java new file mode 100644 index 0000000000..e9635e5d58 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/util/APIUtil.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +package org.wso2.carbon.device.mgt.analytics.dashboard.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.user.api.UserStoreException; + +import java.net.SocketException; + + +/** + * This class provides utility functions used by REST-API. + */ +public class APIUtil { + + private static Log log = LogFactory.getLog(APIUtil.class); + + public static String getAuthenticatedUser() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + String username = threadLocalCarbonContext.getUsername(); + String tenantDomain = threadLocalCarbonContext.getTenantDomain(); + if (username.endsWith(tenantDomain)) { + return username.substring(0, username.lastIndexOf("@")); + } + return username; + } + + public static int getAuthenticatedUserTenantDomainId() { + PrivilegedCarbonContext threadLocalCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + return threadLocalCarbonContext.getTenantId(); + } + + public static boolean isDeviceAdminUser() throws DeviceAccessAuthorizationException { + return getDeviceAccessAuthorizationService().isDeviceAdminUser(); + } + + private static DeviceAccessAuthorizationService getDeviceAccessAuthorizationService() { + PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); + DeviceAccessAuthorizationService deviceAccessAuthorizationService = + (DeviceAccessAuthorizationService) ctx.getOSGiService(DeviceAccessAuthorizationService.class, null); + if (deviceAccessAuthorizationService == null) { + String msg = "DeviceAccessAuthorization service has not initialized."; + log.error(msg); + throw new IllegalStateException(msg); + } + return deviceAccessAuthorizationService; + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml index 512b757a38..00bbf73e04 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt device-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml index 62fa85bae9..7dee3b0012 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml @@ -22,7 +22,7 @@ device-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/Dashboard.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/Dashboard.java deleted file mode 100644 index 3a0564bb06..0000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/Dashboard.java +++ /dev/null @@ -1,841 +0,0 @@ -package org.wso2.carbon.device.mgt.jaxrs.service.api; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.Authorization; -import io.swagger.annotations.AuthorizationScope; -import io.swagger.annotations.Extension; -import io.swagger.annotations.ExtensionProperty; -import io.swagger.annotations.Info; -import io.swagger.annotations.ResponseHeader; -import io.swagger.annotations.SwaggerDefinition; -import io.swagger.annotations.Tag; -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup; -import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardGadgetDataWrapper; -import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardPaginationGadgetDataWrapper; -import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse; -import org.wso2.carbon.device.mgt.jaxrs.util.Constants; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -/** - * Device Analytics Dashboard related REST-APIs. This can be used to obtain device related analytics. - */ -@SwaggerDefinition( - info = @Info( - version = "1.0.0", - title = "", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = "name", value = "DeviceAnalyticsDashboard"), - @ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/dashboard"), - }) - } - ), - tags = { - @Tag(name = "device_management", description = "Device Analytics Dashboard related APIs.") - } -) -@Scopes( - scopes = { - @Scope( - name = "Device Count Overview", - description = "Device Count Overview", - key = "perm:dashboard:count-overview", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Device Counts by Potential Vulnerabilities", - description = "Device Counts by Potential Vulnerabilities", - key = "perm:dashboard:vulnerabilities", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get the number of devices that have not complied to a policy", - description = "Get the number of devices that have not complied to a policy", - key = "perm:dashboard:non-compliant", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get the number of devices for a given device type, such as connectivity status, " - + "potential vulnerability, platform, and ownership", - description = "Get the number of devices for a given device type, such as connectivity status, " - + "potential vulnerability, platform, and ownership", - key = "perm:dashboard:by-groups", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get the number of devices that have not complied to a given policy based on a particular", - description = "Get the number of devices that have not complied to a given policy based on a particular", - key = "perm:dashboard:device-counts", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get the number of devices that have not complied to a given policy based on a particular" - + " device type.", - description = "Get the number of devices that have not complied to a given policy based on a " + - "particular device type.", - key = "perm:dashboard:filtered-count", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get the number of devices that have not complied to a given policy over the total" - + " number of devices registered with WSO2 EMM.\n", - description = "Get the number of devices that have not complied to a given policy over the total" - + " number of devices registered with WSO2 EMM.\n", - key = "perm:dashboard:non-compliant-count", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get device details of devices based on a particular device type.", - description = "Get device details of devices based on a particular device type.", - key = "perm:dashboard:details", - permissions = {"/device-mgt/dashboard/view"} - ), - @Scope( - name = "Get device details of non-compliant devices which do not comply to a given policy.", - description = "Get device details of non-compliant devices which do not comply to a given policy.", - key = "perm:dashboard:feature-non-compliant", - permissions = {"/device-mgt/dashboard/view"} - ) - } -) -@Path("/dashboard") -@Api(value = "Device Analytics Dashboard", - description = "Device Analytics Dashboard related information APIs are described here.") -@Produces(MediaType.APPLICATION_JSON) -@Consumes(MediaType.APPLICATION_JSON) -public interface Dashboard { - - String CONNECTIVITY_STATUS = "connectivity-status"; - String POTENTIAL_VULNERABILITY = "potential-vulnerability"; - String NON_COMPLIANT_FEATURE_CODE = "non-compliant-feature-code"; - String PLATFORM = "platform"; - String OWNERSHIP = "ownership"; - // Constants related to pagination - String PAGINATION_ENABLED = "pagination-enabled"; - String START_INDEX = "start"; - String RESULT_COUNT = "length"; - - @GET - @Path("device-count-overview") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the details of registered devices in WSO2 IoT.", - notes = "Get the details of active, inactive, removed and total number of registered devices in" - + " WSO2 IoT.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:count-overview") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getOverviewDeviceCounts(); - - @GET - @Path("device-counts-by-potential-vulnerabilities") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of unmonitored and non-compliant devices in WSO2 IoT.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:vulnerabilities") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Server error occurred while fetching activity data.", - response = ErrorResponse.class) - }) - Response getDeviceCountsByPotentialVulnerabilities(); - - @GET - @Path("non-compliant-device-counts-by-features") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of devices that have not complied to a policy that was enforced on a " - + "device.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:non-compliant") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardPaginationGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request. \n", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found. \n", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getNonCompliantDeviceCountsByFeatures( - @ApiParam( - name = "start", - value = "Provide the starting pagination index. Example 10", - required = true) - @QueryParam(START_INDEX) int startIndex, - @ApiParam( - name = "length", - value = "Provide how many policy details you require from the starting pagination index." - + " For example if you require the non-compliant policy details from the 10th " - + "pagination index to the 15th, you must define 10 as the value for start and " - + "5 as the value for length.", - required = true) - @QueryParam(RESULT_COUNT) int resultCount); - - @GET - @Path("device-counts-by-groups") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of devices for a given device type, such as connectivity status, " - + "potential vulnerability, platform, and ownership.\n", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:by-groups") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DeviceCountByGroup.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getDeviceCountsByGroups( - @ApiParam( - name = "connectivity-status", - value = "Provide the connectivity status of the device. The following values can be assigned:\n" - + "active: The devices that are registered with WSO2 IoT and are actively " - + "communicating with the server.\n" - + "inactive: The devices that are registered with WSO2 IoT but unable to " - + "actively communicate with the server.\n" - + "removed: The devices that have unregistered from WSO2 IoT", - required = true) - @QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @ApiParam( - name = "potential-vulnerability", - value = "Provide details of the potential vulnerabilities of the device. The following " - + "values can be assigned:\n" - + "non-compliant: Devices that have not complied to the policies enforced on the " - + "device by WSO2 IoT.\n" - + "unmonitored: Devices that have no policy assigned to them.", - required = true) - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. The following values can " - + "be assigned:\n" - + "iOS\n" + "Android\n" + "Windows", - required = true) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. The following values can be assigned:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = true) - @QueryParam(OWNERSHIP) String ownership); - - @GET - @Path("feature-non-compliant-device-counts-by-groups") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of devices that have not complied to a given policy based on a particular" - + " device type.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:device-counts") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DeviceCountByGroup.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getFeatureNonCompliantDeviceCountsByGroups( - @ApiParam( - name = "non-compliant-feature-code", - value = "As the value for this parameter, the policy feature code or ID can be used. Some" - + " examples for feature codes are: PASSCODE_POLICY,CAMERA and WIFI.", - required = true) - @QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. The following values can " - + "be assigned:\n" - + "iOS\n" + "Android\n" + "Windows", - required = false) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. The following values can be assigned:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = false) - @QueryParam(OWNERSHIP) String ownership); - - @GET - @Path("filtered-device-count-over-total") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of devices that are registered with WSO2 IoT filtered by one of the " - + "following attributes:\n" - + "Connectivity status of the device, such as active, inactive or removed.\n" - + "The device ownership type, such as BYOD or COPE.\n" + "The device platform.\n" - + "The potential vulnerabilities faced by the devices.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:filtered-count") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getFilteredDeviceCountOverTotal( - @ApiParam( - name = "connectivity-status", - value = "Provide the connectivity status of the device. You can assign any of the values " - + "given below:\n" - + "Total: All the devices that have registered with WSO2 IoT.\n" - + "active: The devices that are registered with WSO2 IoT and are actively " - + "communicating with the server.\n" - + "inactive: The devices that are registered with WSO2 IoT but unable to actively" - + " communicate with the server.\n" - + "removed: The devices that have unregistered from WSO2 IoT.", - required = true) - @QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @ApiParam( - name = "potential-vulnerability", - value = "Provide details of the potential vulnerabilities of the device. You can assign" - + " any of the values given below:\n" - + "non-compliant: Devices that have not complied to the policies enforced on the " - + "device by WSO2 IoT.\n" - + "unmonitored: Devices that have no policy assigned to them.", - required = true) - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. You can assign any of the " - + "values given below:\n" - + "iOS\n" + "Android\n" + "Windows", - required = true) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. You can assign any of the values " - + "given below:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = true) - @QueryParam(OWNERSHIP) String ownership); - - @GET - @Path("feature-non-compliant-device-count-over-total") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get the number of devices that have not complied to a given policy over the total" - + " number of devices registered with WSO2 IoT.\n", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:non-compliant-count") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getFeatureNonCompliantDeviceCountOverTotal( - @ApiParam( - name = "non-compliant-feature-code", - value = "Provide the feature code or ID of the policy. Some examples for feature codes " - + "are: WIFI, PASSCODE_POLICY, CAMERA and ENCRYPT_STORAGE.", - required = true) - @QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. You can assign the values " - + "given below:\n" - + "iOS\n" + "Android\n" + "Windows", - required = true) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. You can assign the values given below:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = true) - @QueryParam(OWNERSHIP) String ownership); - - @GET - @Path("devices-with-details") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get device details of devices based on a particular device type.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:details") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardPaginationGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getDevicesWithDetails( - @ApiParam( - name = "connectivity-status", - value = "Provide the connectivity status of the device. This can be one of the following:\n" - + "Total: All the devices that have registered with WSO2 IoT.\n" - + "active: The devices that are registered with WSO2 IoT and are actively " - + "communicating with the server.\n" - + "inactive: The devices that are registered with WSO2 IoT but unable to actively" - + " communicate with the server.\n" - + "removed: The devices that have unregistered from WSO2 IoT.", - required = true) - @QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @ApiParam( - name = "potential-vulnerability", - value = "Provide details of the potential vulnerabilities of the device. This can be:\n" - + "non-compliant: Devices that have not complied to the policies enforced on " - + "the device by WSO2 IoT.\n" - + "unmonitored: Devices that have no policy assigned to them. ", - required = true) - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. This can be one of the following:\n" - + "iOS\n" + "Android\n" + "Windows", - required = true) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. This can be one of the following:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = true) - @QueryParam(OWNERSHIP) String ownership, - @ApiParam( - name = "pagination-enabled", - value = "To enable/disable pagination set the value as true or false", - required = true) - @QueryParam(PAGINATION_ENABLED) String paginationEnabled, - @ApiParam( - name = "start", - value = "Provide the starting pagination index.", - required = true) - @QueryParam(START_INDEX) int startIndex, - @ApiParam( - name = "length", - value = "Provide how many policy details you require from the starting pagination index.", - required = true) - @QueryParam(RESULT_COUNT) int resultCount); - - @GET - @Path("feature-non-compliant-devices-with-details") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Get device details of non-compliant devices which do not comply to a given policy.", - tags = "Dashboard", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:dashboard:feature-non-compliant") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK.", - response = DashboardPaginationGadgetDataWrapper.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client has already the latest version of " + - "the requested resource."), - @ApiResponse( - code = 400, - message = "Bad Request.", - response = ErrorResponse.class), - @ApiResponse( - code = 401, - message = "Unauthorized. \n Unauthorized request."), - @ApiResponse( - code = 404, - message = "Not Found.", - response = ErrorResponse.class), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n ErrorResponse in retrieving requested data.", - response = ErrorResponse.class) - }) - Response getFeatureNonCompliantDevicesWithDetails( - @ApiParam( - name = "non-compliant-feature-code", - value = "Provide the code specific to the feature " - + "(examples for feature codes are: WIFI,PASSCODE_POLICY, CAMERA and ENCRYPT_STORAGE.)", - required = true) - @QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @ApiParam( - name = "platform", - value = "Provide the platform that the device is running on. This can be one of the following:\n" - + "iOS\n" + "Android\n" + "Windows", - required = true) - @QueryParam(PLATFORM) String platform, - @ApiParam( - name = "ownership", - value = "Provide the ownership status of the device. This can be one of the following:\n" - + "BYOD: Bring Your Own Device\n" + "COPE: Corporate-Owned, Personally-Enabled", - required = true) - @QueryParam(OWNERSHIP) String ownership, - @ApiParam( - name = "pagination-enabled", - value = "To enable/disable pagination set the value as true or false", - required = true) - @QueryParam(PAGINATION_ENABLED) String paginationEnabled, - @ApiParam( - name = "start", - value = "Provide the starting pagination index.", - required = true) - @QueryParam(START_INDEX) int startIndex, - @ApiParam( - name = "length", - value = "Provide how many policy details you require from the starting pagination index.", - required = true) - @QueryParam(RESULT_COUNT) int resultCount); -} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceManagementService.java index 2938b7bb96..b655b7b26b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceManagementService.java @@ -18,32 +18,40 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.api; -import io.swagger.annotations.SwaggerDefinition; -import io.swagger.annotations.Info; -import io.swagger.annotations.ExtensionProperty; -import io.swagger.annotations.Extension; -import io.swagger.annotations.Tag; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.Extension; +import io.swagger.annotations.ExtensionProperty; +import io.swagger.annotations.Info; import io.swagger.annotations.ResponseHeader; +import io.swagger.annotations.SwaggerDefinition; +import io.swagger.annotations.Tag; import org.wso2.carbon.apimgt.annotations.api.Scope; import org.wso2.carbon.apimgt.annotations.api.Scopes; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.Feature; import org.wso2.carbon.device.mgt.common.app.mgt.Application; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; +import org.wso2.carbon.device.mgt.common.policy.mgt.Policy; +import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData; import org.wso2.carbon.device.mgt.common.search.SearchContext; import org.wso2.carbon.device.mgt.jaxrs.beans.DeviceList; import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse; import org.wso2.carbon.device.mgt.jaxrs.util.Constants; -import org.wso2.carbon.device.mgt.common.policy.mgt.Policy; -import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData; import javax.validation.constraints.Size; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -141,7 +149,7 @@ public interface DeviceManagementService { produces = MediaType.APPLICATION_JSON, httpMethod = "GET", value = "Getting Details of Registered Devices", - notes = "Provides details of all the devices enrolled with WSO2 EMM.", + notes = "Provides details of all the devices enrolled with WSO2 IoT Server.", tags = "Device Management", extensions = { @Extension(properties = { @@ -205,6 +213,13 @@ public interface DeviceManagementService { required = false) @QueryParam("user") String user, + @ApiParam( + name = "role", + value = "A role of device owners. Ex : store-admin", + required = false) + @QueryParam("role") + @Size(max = 45) + String role, @ApiParam( name = "ownership", allowableValues = "BYOD, COPE", @@ -259,6 +274,71 @@ public interface DeviceManagementService { @QueryParam("limit") int limit); + @GET + @ApiOperation( + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Getting Details of Registered Devices owned by authenticated user", + notes = "Provides details of devices enrolled by authenticated user.", + tags = "Device Management", + extensions = { + @Extension(properties = { + @ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:view") + }) + } + ) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "OK. \n Successfully fetched the list of devices.", + response = DeviceList.class, + responseHeaders = { + @ResponseHeader( + name = "Content-Type", + description = "The content type of the body"), + @ResponseHeader( + name = "ETag", + description = "Entity Tag of the response resource.\n" + + "Used by caches, or in conditional requests."), + @ResponseHeader( + name = "Last-Modified", + description = "Date and time the resource was last modified.\n" + + "Used by caches, or in conditional requests."), + }), + @ApiResponse( + code = 304, + message = "Not Modified. \n Empty body because the client already has the latest version of " + + "the requested resource.\n"), + @ApiResponse( + code = 400, + message = "The incoming request has more than one selection criteria defined via the query parameters.", + response = ErrorResponse.class), + @ApiResponse( + code = 404, + message = "The search criteria did not match any device registered with the server.", + response = ErrorResponse.class), + @ApiResponse( + code = 406, + message = "Not Acceptable.\n The requested media type is not supported."), + @ApiResponse( + code = 500, + message = "Internal Server Error. \n Server error occurred while fetching the device list.", + response = ErrorResponse.class) + }) + @Path("/user-devices") + Response getDeviceByUser( + @ApiParam( + name = "offset", + value = "The starting pagination index for the complete list of qualified items.", + required = false, + defaultValue = "0") + @QueryParam("offset") + int offset, + @ApiParam( + name = "limit", + value = "Provide how many device details you require from the starting pagination index/offset.", + required = false, + defaultValue = "5") + @QueryParam("limit") + int limit); @GET @Path("/{type}/{id}") @@ -314,9 +394,8 @@ public interface DeviceManagementService { Response getDevice( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, @@ -549,9 +628,8 @@ public interface DeviceManagementService { Response getFeaturesOfDevice( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, @@ -716,9 +794,8 @@ public interface DeviceManagementService { Response getInstalledApplications( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, @@ -818,9 +895,8 @@ public interface DeviceManagementService { Response getDeviceOperations( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, @@ -929,9 +1005,8 @@ public interface DeviceManagementService { Response getEffectivePolicyOfDevice( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java index 83566b6f12..b71c918fca 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/DeviceTypeManagementService.java @@ -192,9 +192,8 @@ public interface DeviceTypeManagementService { Response getFeatures( @ApiParam( name = "type", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("type") @Size(max = 45) String type, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java index 51a6dae87c..a815304fb0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/GroupManagementService.java @@ -204,10 +204,6 @@ public interface GroupManagementService { code = 304, message = "Not Modified. \n Empty body because the client has already the latest version of " + "the requested resource."), - @ApiResponse( - code = 404, - message = "No groups found.", - response = ErrorResponse.class), @ApiResponse( code = 406, message = "Not Acceptable.\n The requested media type is not supported."), @@ -219,19 +215,25 @@ public interface GroupManagementService { Response getGroups(@ApiParam( name = "name", value = "Name of the group.") - @QueryParam("name") String name, + @QueryParam("name") + String name, @ApiParam( name = "owner", value = "Owner of the group.") - @QueryParam("owner") String owner, + @QueryParam("owner") + String owner, @ApiParam( name = "offset", - value = "Starting point within the complete list of items qualified.") - @QueryParam("offset") int offset, + value = "The starting pagination index for the complete list of qualified items.", + defaultValue = "0") + @QueryParam("offset") + int offset, @ApiParam( name = "limit", - value = "Maximum size of resource array to return.") - @QueryParam("limit") int limit); + value = "Provide how many device details you require from the starting pagination index/offset.", + defaultValue = "5") + @QueryParam("limit") + int limit); @Path("/count") @GET @@ -268,10 +270,6 @@ public interface GroupManagementService { code = 304, message = "Not Modified. \n Empty body because the client has already the latest version of " + "the requested resource."), - @ApiResponse( - code = 404, - message = "No groups found.", - response = ErrorResponse.class), @ApiResponse( code = 406, message = "Not Acceptable.\n The requested media type is not supported."), @@ -383,7 +381,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -435,7 +433,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group not found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -492,7 +490,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group not found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -544,7 +542,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group not found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -601,7 +599,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group not found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -653,7 +651,7 @@ public interface GroupManagementService { "the requested resource."), @ApiResponse( code = 404, - message = "No groups found.", + message = "Group not found.", response = ErrorResponse.class), @ApiResponse( code = 406, @@ -667,15 +665,20 @@ public interface GroupManagementService { name = "groupId", value = "ID of the group.", required = true) - @PathParam("groupId") int groupId, + @PathParam("groupId") + int groupId, @ApiParam( name = "offset", - value = "Starting point within the complete list of items qualified.") - @QueryParam("offset") int offset, + value = "The starting pagination index for the complete list of qualified items.", + defaultValue = "0") + @QueryParam("offset") + int offset, @ApiParam( name = "limit", - value = "Maximum size of resource array to return.") - @QueryParam("limit") int limit); + value = "Provide how many device details you require from the starting pagination index/offset.", + defaultValue = "5") + @QueryParam("limit") + int limit); @Path("/id/{groupId}/devices/count") @GET @@ -926,10 +929,6 @@ public interface GroupManagementService { code = 304, message = "Not Modified. \n Empty body because the client has already the latest version of " + "the requested resource."), - @ApiResponse( - code = 404, - message = "No groups found.", - response = ErrorResponse.class), @ApiResponse( code = 406, message = "Not Acceptable.\n The requested media type is not supported."), @@ -941,11 +940,15 @@ public interface GroupManagementService { Response getGroups( @ApiParam( name = "deviceId", - value = "Id of the device.") - @QueryParam("deviceId") String deviceId, + value = "Id of the device.", + required = true) + @QueryParam("deviceId") + String deviceId, @ApiParam( name = "deviceType", - value = "Type of the device.") - @QueryParam("deviceType") String deviceType); + value = "Type of the device.", + required = true) + @QueryParam("deviceType") + String deviceType); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/PolicyManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/PolicyManagementService.java index 8656456f1f..ed49af08cc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/PolicyManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/PolicyManagementService.java @@ -672,9 +672,8 @@ public interface PolicyManagementService { Response getEffectivePolicy( @ApiParam( name = "deviceType", - value = "The device type, such as ios, android or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @PathParam("deviceType") @Size(max = 45) String deviceType, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/DeviceManagementAdminService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/DeviceManagementAdminService.java index 14a34d3520..0ac0677151 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/DeviceManagementAdminService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/DeviceManagementAdminService.java @@ -136,9 +136,8 @@ public interface DeviceManagementAdminService { String name, @ApiParam( name = "type", - value = "The type of the device, such as android, ios or windows.", - required = true, - allowableValues = "android, ios, windows") + value = "The device type name, such as ios, android, windows or fire-alarm.", + required = true) @QueryParam("type") @Size(min = 2, max = 45) String type, diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java index 64020ce56e..3e47728c3d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/admin/GroupManagementAdminService.java @@ -113,10 +113,6 @@ public interface GroupManagementAdminService { code = 304, message = "Not Modified. \n Empty body because the client has already the latest version of " + "the requested resource."), - @ApiResponse( - code = 404, - message = "No groups found.", - response = ErrorResponse.class), @ApiResponse( code = 406, message = "Not Acceptable.\n The requested media type is not supported."), @@ -128,19 +124,25 @@ public interface GroupManagementAdminService { Response getGroups(@ApiParam( name = "name", value = "Name of the group.") - @QueryParam("name") String name, + @QueryParam("name") + String name, @ApiParam( name = "owner", value = "Owner of the group.") - @QueryParam("owner") String owner, + @QueryParam("owner") + String owner, @ApiParam( name = "offset", - value = "Starting point within the complete list of items qualified.") - @QueryParam("offset") int offset, + value = "The starting pagination index for the complete list of qualified items.", + defaultValue = "0") + @QueryParam("offset") + int offset, @ApiParam( name = "limit", - value = "Maximum size of resource array to return.") - @QueryParam("limit") int limit); + value = "Provide how many device details you require from the starting pagination index/offset.", + defaultValue = "5") + @QueryParam("limit") + int limit); @Path("/count") @GET diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DashboardImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DashboardImpl.java deleted file mode 100644 index ba5e00d0d8..0000000000 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DashboardImpl.java +++ /dev/null @@ -1,688 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.device.mgt.jaxrs.service.impl; - -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.analytics.dashboard.GadgetDataService; -import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet; -import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup; -import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails; -import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet; -import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*; -import org.wso2.carbon.device.mgt.common.PaginationResult; -import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardGadgetDataWrapper; -import org.wso2.carbon.device.mgt.jaxrs.beans.DashboardPaginationGadgetDataWrapper; -import org.wso2.carbon.device.mgt.jaxrs.service.api.Dashboard; - -import javax.ws.rs.*; -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - -/** - * This class consists of dashboard related REST APIs - * to be consumed by individual client gadgets such as - * [1] Overview of Devices, - * [2] Potential Vulnerabilities, - * [3] Non-compliant Devices by Features, - * [4] Device Groupings and etc. - */ - -@Consumes({"application/json"}) -@Produces({"application/json"}) - -@SuppressWarnings("NonJaxWsWebServices") -public class DashboardImpl implements Dashboard { - - private static Log log = LogFactory.getLog(DashboardImpl.class); - - private static final String FLAG_TRUE = "true"; - private static final String FLAG_FALSE = "false"; - // Constants related to common error-response messages - private static final String INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY = "Received an invalid value for " + - "query parameter : " + POTENTIAL_VULNERABILITY + ", Should be either NON_COMPLIANT or UNMONITORED."; - private static final String INVALID_QUERY_PARAM_VALUE_START_INDEX = "Received an invalid value for " + - "query parameter : " + START_INDEX + ", Should not be lesser than 0."; - private static final String INVALID_QUERY_PARAM_VALUE_RESULT_COUNT = "Received an invalid value for " + - "query parameter : " + RESULT_COUNT + ", Should not be lesser than 5."; - private static final String INVALID_QUERY_PARAM_VALUE_PAGINATION_ENABLED = "Received an invalid value for " + - "query parameter : " + PAGINATION_ENABLED + ", Should be either true or false."; - private static final String REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE = "Missing required query " + - "parameter : " + NON_COMPLIANT_FEATURE_CODE; - private static final String REQUIRED_QUERY_PARAM_VALUE_PAGINATION_ENABLED = "Missing required query " + - "parameter : " + PAGINATION_ENABLED; - private static final String ERROR_IN_RETRIEVING_REQUESTED_DATA = "ErrorResponse in retrieving requested data."; - - @GET - @Path("device-count-overview") - public Response getOverviewDeviceCounts() { - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper1 = new DashboardGadgetDataWrapper(); - - // getting total device count - DeviceCountByGroup totalDeviceCount; - try { - totalDeviceCount = gadgetDataService.getTotalDeviceCount(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve total device count.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - List totalDeviceCountInListEntry = new ArrayList<>(); - totalDeviceCountInListEntry.add(totalDeviceCount); - - dashboardGadgetDataWrapper1.setContext("Total-device-count"); - dashboardGadgetDataWrapper1.setGroupingAttribute(null); - dashboardGadgetDataWrapper1.setData(totalDeviceCountInListEntry); - - // getting device counts by connectivity statuses - List deviceCountsByConnectivityStatuses; - try { - deviceCountsByConnectivityStatuses = gadgetDataService.getDeviceCountsByConnectivityStatuses(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve device counts by connectivity statuses.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper2 = new DashboardGadgetDataWrapper(); - - dashboardGadgetDataWrapper2.setContext("Device-counts-by-connectivity-statuses"); - dashboardGadgetDataWrapper2.setGroupingAttribute(CONNECTIVITY_STATUS); - dashboardGadgetDataWrapper2.setData(deviceCountsByConnectivityStatuses); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper1); - responsePayload.add(dashboardGadgetDataWrapper2); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("device-counts-by-potential-vulnerabilities") - public Response getDeviceCountsByPotentialVulnerabilities() { - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - List deviceCountsByPotentialVulnerabilities; - try { - deviceCountsByPotentialVulnerabilities = gadgetDataService.getDeviceCountsByPotentialVulnerabilities(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve device counts by potential vulnerabilities.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper.setContext("Device-counts-by-potential-vulnerabilities"); - dashboardGadgetDataWrapper.setGroupingAttribute(POTENTIAL_VULNERABILITY); - dashboardGadgetDataWrapper.setData(deviceCountsByPotentialVulnerabilities); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("non-compliant-device-counts-by-features") - public Response getNonCompliantDeviceCountsByFeatures(@QueryParam(START_INDEX) int startIndex, - @QueryParam(RESULT_COUNT) int resultCount) { - - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - DashboardPaginationGadgetDataWrapper - dashboardPaginationGadgetDataWrapper = new DashboardPaginationGadgetDataWrapper(); - - PaginationResult paginationResult; - try { - paginationResult = gadgetDataService. - getNonCompliantDeviceCountsByFeatures(startIndex, resultCount); - } catch (InvalidStartIndexValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a non-compliant set " + - "of device counts by features.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(INVALID_QUERY_PARAM_VALUE_START_INDEX).build(); - } catch (InvalidResultCountValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a non-compliant set " + - "of device counts by features.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST).entity(INVALID_QUERY_PARAM_VALUE_RESULT_COUNT).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a non-compliant set of device counts by features.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - dashboardPaginationGadgetDataWrapper.setContext("Non-compliant-device-counts-by-features"); - dashboardPaginationGadgetDataWrapper.setGroupingAttribute(NON_COMPLIANT_FEATURE_CODE); - dashboardPaginationGadgetDataWrapper.setData(paginationResult.getData()); - dashboardPaginationGadgetDataWrapper.setTotalRecordCount(paginationResult.getRecordsTotal()); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardPaginationGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("device-counts-by-groups") - public Response getDeviceCountsByGroups(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - ExtendedFilterSet filterSet = new ExtendedFilterSet(); - filterSet.setConnectivityStatus(connectivityStatus); - filterSet.setPotentialVulnerability(potentialVulnerability); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - // creating device-Counts-by-platforms Data Wrapper - List deviceCountsByPlatforms; - try { - deviceCountsByPlatforms = gadgetDataService.getDeviceCountsByPlatforms(filterSet); - } catch (InvalidPotentialVulnerabilityValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of device counts by platforms.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of device counts by platforms.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper1 = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper1.setContext("Device-counts-by-platforms"); - dashboardGadgetDataWrapper1.setGroupingAttribute(PLATFORM); - dashboardGadgetDataWrapper1.setData(deviceCountsByPlatforms); - - // creating device-Counts-by-ownership-types Data Wrapper - List deviceCountsByOwnerships; - try { - deviceCountsByOwnerships = gadgetDataService.getDeviceCountsByOwnershipTypes(filterSet); - } catch (InvalidPotentialVulnerabilityValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of device counts by ownerships.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of device counts by ownerships.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper2 = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper2.setContext("Device-counts-by-ownerships"); - dashboardGadgetDataWrapper2.setGroupingAttribute(OWNERSHIP); - dashboardGadgetDataWrapper2.setData(deviceCountsByOwnerships); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper1); - responsePayload.add(dashboardGadgetDataWrapper2); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("feature-non-compliant-device-counts-by-groups") - public Response getFeatureNonCompliantDeviceCountsByGroups(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership) { - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - BasicFilterSet filterSet = new BasicFilterSet(); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - // creating feature-non-compliant-device-Counts-by-platforms Data Wrapper - List featureNonCompliantDeviceCountsByPlatforms; - try { - featureNonCompliantDeviceCountsByPlatforms = gadgetDataService. - getFeatureNonCompliantDeviceCountsByPlatforms(nonCompliantFeatureCode, filterSet); - } catch (InvalidFeatureCodeValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of feature " + - "non-compliant device counts by platforms.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of feature non-compliant " + - "device counts by platforms.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper1 = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper1.setContext("Feature-non-compliant-device-counts-by-platforms"); - dashboardGadgetDataWrapper1.setGroupingAttribute(PLATFORM); - dashboardGadgetDataWrapper1.setData(featureNonCompliantDeviceCountsByPlatforms); - - // creating feature-non-compliant-device-Counts-by-ownership-types Data Wrapper - List featureNonCompliantDeviceCountsByOwnerships; - try { - featureNonCompliantDeviceCountsByOwnerships = gadgetDataService. - getFeatureNonCompliantDeviceCountsByOwnershipTypes(nonCompliantFeatureCode, filterSet); - } catch (InvalidFeatureCodeValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of feature " + - "non-compliant device counts by ownerships.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of feature non-compliant " + - "device counts by ownerships.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper2 = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper2.setContext("Feature-non-compliant-device-counts-by-ownerships"); - dashboardGadgetDataWrapper2.setGroupingAttribute(OWNERSHIP); - dashboardGadgetDataWrapper2.setData(featureNonCompliantDeviceCountsByOwnerships); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper1); - responsePayload.add(dashboardGadgetDataWrapper2); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("filtered-device-count-over-total") - public Response getFilteredDeviceCountOverTotal(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - ExtendedFilterSet filterSet = new ExtendedFilterSet(); - filterSet.setConnectivityStatus(connectivityStatus); - filterSet.setPotentialVulnerability(potentialVulnerability); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - // creating filteredDeviceCount Data Wrapper - DeviceCountByGroup filteredDeviceCount; - try { - filteredDeviceCount = gadgetDataService.getDeviceCount(filterSet); - } catch (InvalidPotentialVulnerabilityValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered device count over the total.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered device count over the total.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - // creating TotalDeviceCount Data Wrapper - DeviceCountByGroup totalDeviceCount; - try { - totalDeviceCount = gadgetDataService.getTotalDeviceCount(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve the total device count over filtered.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - List filteredDeviceCountOverTotalDataWrapper = new ArrayList<>(); - filteredDeviceCountOverTotalDataWrapper.add(filteredDeviceCount); - filteredDeviceCountOverTotalDataWrapper.add(totalDeviceCount); - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper.setContext("Filtered-device-count-over-total"); - dashboardGadgetDataWrapper.setGroupingAttribute(null); - dashboardGadgetDataWrapper.setData(filteredDeviceCountOverTotalDataWrapper); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("feature-non-compliant-device-count-over-total") - public Response getFeatureNonCompliantDeviceCountOverTotal(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - BasicFilterSet filterSet = new BasicFilterSet(); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - // creating featureNonCompliantDeviceCount Data Wrapper - DeviceCountByGroup featureNonCompliantDeviceCount; - try { - featureNonCompliantDeviceCount = gadgetDataService. - getFeatureNonCompliantDeviceCount(nonCompliantFeatureCode, filterSet); - } catch (InvalidFeatureCodeValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a feature non-compliant device count over the total.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a feature non-compliant device count over the total.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - // creating TotalDeviceCount Data Wrapper - DeviceCountByGroup totalDeviceCount; - try { - totalDeviceCount = gadgetDataService.getTotalDeviceCount(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve the total device count over filtered feature non-compliant.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - List featureNonCompliantDeviceCountOverTotalDataWrapper = new ArrayList<>(); - featureNonCompliantDeviceCountOverTotalDataWrapper.add(featureNonCompliantDeviceCount); - featureNonCompliantDeviceCountOverTotalDataWrapper.add(totalDeviceCount); - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper.setContext("Feature-non-compliant-device-count-over-total"); - dashboardGadgetDataWrapper.setGroupingAttribute(null); - dashboardGadgetDataWrapper.setData(featureNonCompliantDeviceCountOverTotalDataWrapper); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - } - - @GET - @Path("devices-with-details") - public Response getDevicesWithDetails(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership, - @QueryParam(PAGINATION_ENABLED) String paginationEnabled, - @QueryParam(START_INDEX) int startIndex, - @QueryParam(RESULT_COUNT) int resultCount) { - - if (paginationEnabled == null) { - - log.error("Bad request on retrieving a filtered set of devices with details @ " + - "Dashboard API layer. " + REQUIRED_QUERY_PARAM_VALUE_PAGINATION_ENABLED); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_PAGINATION_ENABLED).build(); - - } else if (FLAG_TRUE.equals(paginationEnabled)) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - ExtendedFilterSet filterSet = new ExtendedFilterSet(); - filterSet.setConnectivityStatus(connectivityStatus); - filterSet.setPotentialVulnerability(potentialVulnerability); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - PaginationResult paginationResult; - try { - paginationResult = gadgetDataService. - getDevicesWithDetails(filterSet, startIndex, resultCount); - } catch (InvalidPotentialVulnerabilityValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY).build(); - } catch (InvalidStartIndexValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_START_INDEX).build(); - } catch (InvalidResultCountValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_RESULT_COUNT).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardPaginationGadgetDataWrapper - dashboardPaginationGadgetDataWrapper = new DashboardPaginationGadgetDataWrapper(); - dashboardPaginationGadgetDataWrapper.setContext("Filtered-and-paginated-devices-with-details"); - dashboardPaginationGadgetDataWrapper.setGroupingAttribute(null); - dashboardPaginationGadgetDataWrapper.setData(paginationResult.getData()); - dashboardPaginationGadgetDataWrapper.setTotalRecordCount(paginationResult.getRecordsTotal()); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardPaginationGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - - } else if (FLAG_FALSE.equals(paginationEnabled)) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - ExtendedFilterSet filterSet = new ExtendedFilterSet(); - filterSet.setConnectivityStatus(connectivityStatus); - filterSet.setPotentialVulnerability(potentialVulnerability); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - List devicesWithDetails; - try { - devicesWithDetails = gadgetDataService.getDevicesWithDetails(filterSet); - } catch (InvalidPotentialVulnerabilityValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_POTENTIAL_VULNERABILITY).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of devices with details.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper.setContext("Filtered-devices-with-details"); - dashboardGadgetDataWrapper.setGroupingAttribute(null); - dashboardGadgetDataWrapper.setData(devicesWithDetails); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - - } else { - - log.error("Bad request on retrieving a filtered set of devices with details @ " + - "Dashboard API layer. " + INVALID_QUERY_PARAM_VALUE_PAGINATION_ENABLED); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_PAGINATION_ENABLED).build(); - - } - } - - @GET - @Path("feature-non-compliant-devices-with-details") - public Response getFeatureNonCompliantDevicesWithDetails(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership, - @QueryParam(PAGINATION_ENABLED) String paginationEnabled, - @QueryParam(START_INDEX) int startIndex, - @QueryParam(RESULT_COUNT) int resultCount) { - if (paginationEnabled == null) { - - log.error("Bad request on retrieving a filtered set of feature non-compliant devices with " + - "details @ Dashboard API layer. " + REQUIRED_QUERY_PARAM_VALUE_PAGINATION_ENABLED); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_PAGINATION_ENABLED).build(); - - } else if (FLAG_TRUE.equals(paginationEnabled)) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - BasicFilterSet filterSet = new BasicFilterSet(); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - PaginationResult paginationResult; - try { - paginationResult = gadgetDataService. - getFeatureNonCompliantDevicesWithDetails(nonCompliantFeatureCode, - filterSet, startIndex, resultCount); - } catch (InvalidFeatureCodeValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of " + - "feature non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE).build(); - } catch (InvalidStartIndexValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of " + - "feature non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_START_INDEX).build(); - } catch (InvalidResultCountValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of " + - "feature non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_RESULT_COUNT).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of feature " + - "non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardPaginationGadgetDataWrapper - dashboardPaginationGadgetDataWrapper = new DashboardPaginationGadgetDataWrapper(); - dashboardPaginationGadgetDataWrapper. - setContext("Filtered-and-paginated-feature-non-compliant-devices-with-details"); - dashboardPaginationGadgetDataWrapper.setGroupingAttribute(null); - dashboardPaginationGadgetDataWrapper.setData(paginationResult.getData()); - dashboardPaginationGadgetDataWrapper.setTotalRecordCount(paginationResult.getRecordsTotal()); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardPaginationGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - - } else if (FLAG_FALSE.equals(paginationEnabled)) { - - // getting gadget data service - GadgetDataService gadgetDataService = DeviceMgtAPIUtils.getGadgetDataService(); - - // constructing filter set - BasicFilterSet filterSet = new BasicFilterSet(); - filterSet.setPlatform(platform); - filterSet.setOwnership(ownership); - - List featureNonCompliantDevicesWithDetails; - try { - featureNonCompliantDevicesWithDetails = gadgetDataService. - getFeatureNonCompliantDevicesWithDetails(nonCompliantFeatureCode, filterSet); - } catch (InvalidFeatureCodeValueException e) { - log.error("Bad request and error occurred @ Gadget Data Service layer due to " + - "invalid (query) parameter value. This was while trying to execute relevant data service " + - "function @ Dashboard API layer to retrieve a filtered set of " + - "feature non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(REQUIRED_QUERY_PARAM_VALUE_NON_COMPLIANT_FEATURE_CODE).build(); - } catch (DataAccessLayerException e) { - log.error("An internal error occurred while trying to execute relevant data service function " + - "@ Dashboard API layer to retrieve a filtered set of feature " + - "non-compliant devices with details.", e); - return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR). - entity(ERROR_IN_RETRIEVING_REQUESTED_DATA).build(); - } - - DashboardGadgetDataWrapper dashboardGadgetDataWrapper = new DashboardGadgetDataWrapper(); - dashboardGadgetDataWrapper.setContext("Filtered-feature-non-compliant-devices-with-details"); - dashboardGadgetDataWrapper.setGroupingAttribute(null); - dashboardGadgetDataWrapper.setData(featureNonCompliantDevicesWithDetails); - - List responsePayload = new ArrayList<>(); - responsePayload.add(dashboardGadgetDataWrapper); - - return Response.status(HttpStatus.SC_OK).entity(responsePayload).build(); - - } else { - - log.error("Bad request on retrieving a filtered set of feature non-compliant devices with " + - "details @ Dashboard API layer. " + INVALID_QUERY_PARAM_VALUE_PAGINATION_ENABLED); - return Response.status(HttpStatus.SC_BAD_REQUEST). - entity(INVALID_QUERY_PARAM_VALUE_PAGINATION_ENABLED).build(); - - } - } - -} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceManagementServiceImpl.java index 9a8f3b80f3..3532fbe38f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/DeviceManagementServiceImpl.java @@ -18,6 +18,7 @@ */ package org.wso2.carbon.device.mgt.jaxrs.service.impl; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.CarbonContext; @@ -84,6 +85,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { @QueryParam("name") String name, @QueryParam("type") String type, @QueryParam("user") String user, + @QueryParam("role") String role, @QueryParam("ownership") String ownership, @QueryParam("status") String status, @QueryParam("groupId") int groupId, @@ -92,6 +94,12 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { @QueryParam("offset") int offset, @QueryParam("limit") int limit) { try { + if (!StringUtils.isEmpty(name) && !StringUtils.isEmpty(role)) { + return Response.status(Response.Status.BAD_REQUEST).entity( + new ErrorResponse.ErrorResponseBuilder().setMessage("Request contains both name and role " + + "parameters. Only one is allowed " + + "at once.").build()).build(); + } // RequestValidationUtil.validateSelectionCriteria(type, user, roleName, ownership, status); RequestValidationUtil.validatePaginationParameters(offset, limit); DeviceManagementProviderService dms = DeviceMgtAPIUtils.getDeviceManagementService(); @@ -126,6 +134,9 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { if (groupId != 0 ) { request.setGroupId(groupId); } + if (role != null && !role.isEmpty()) { + request.setOwnerRole(role); + } // this is the user who initiates the request String authorizedUser = MultitenantUtils.getTenantAwareUsername(CarbonContext.getThreadLocalCarbonContext().getUsername()); @@ -210,6 +221,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService { } @GET + @Override @Path("/user-devices") public Response getDeviceByUser(@QueryParam("offset") int offset, @QueryParam("limit") int limit) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java index 4811e9b902..cc5fa3ddac 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/GroupManagementServiceImpl.java @@ -65,14 +65,15 @@ public class GroupManagementServiceImpl implements GroupManagementService { request.setOwner(owner); PaginationResult deviceGroupsResult = DeviceMgtAPIUtils.getGroupManagementProviderService() .getGroups(currentUser, request); + DeviceGroupList deviceGroupList = new DeviceGroupList(); if (deviceGroupsResult.getData() != null && deviceGroupsResult.getRecordsTotal() > 0) { - DeviceGroupList deviceGroupList = new DeviceGroupList(); deviceGroupList.setList(deviceGroupsResult.getData()); deviceGroupList.setCount(deviceGroupsResult.getRecordsTotal()); - return Response.status(Response.Status.OK).entity(deviceGroupList).build(); } else { - return Response.status(Response.Status.NOT_FOUND).build(); + deviceGroupList.setList(new ArrayList<>()); + deviceGroupList.setCount(0); } + return Response.status(Response.Status.OK).entity(deviceGroupList).build(); } catch (GroupManagementException e) { String error = "Error occurred while getting the groups."; log.error(error, e); @@ -184,15 +185,15 @@ public class GroupManagementServiceImpl implements GroupManagementService { public Response getRolesOfGroup(int groupId) { try { List groupRoles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupId); - - if(groupRoles != null && groupRoles.size() > 0) { - RoleList deviceGroupRolesList = new RoleList(); + RoleList deviceGroupRolesList = new RoleList(); + if(groupRoles != null) { deviceGroupRolesList.setList(groupRoles); deviceGroupRolesList.setCount(groupRoles.size()); - return Response.status(Response.Status.OK).entity(deviceGroupRolesList).build(); } else { - return Response.status(Response.Status.OK).entity(EMPTY_RESULT).build(); + deviceGroupRolesList.setList(new ArrayList()); + deviceGroupRolesList.setCount(0); } + return Response.status(Response.Status.OK).entity(deviceGroupRolesList).build(); } catch (GroupManagementException e) { String msg = "Error occurred while getting roles of the group."; log.error(msg, e); @@ -205,14 +206,15 @@ public class GroupManagementServiceImpl implements GroupManagementService { try { GroupManagementProviderService service = DeviceMgtAPIUtils.getGroupManagementProviderService(); List deviceList = service.getDevices(groupId, offset, limit); - if (deviceList != null && deviceList.size() > 0) { - DeviceList deviceListWrapper = new DeviceList(); + int deviceCount = service.getDeviceCount(groupId); + DeviceList deviceListWrapper = new DeviceList(); + if (deviceList != null) { deviceListWrapper.setList(deviceList); - deviceListWrapper.setCount(service.getDeviceCount(groupId)); - return Response.status(Response.Status.OK).entity(deviceListWrapper).build(); } else { - return Response.status(Response.Status.NOT_FOUND).build(); + deviceListWrapper.setList(new ArrayList()); } + deviceListWrapper.setCount(deviceCount); + return Response.status(Response.Status.OK).entity(deviceListWrapper).build(); } catch (GroupManagementException e) { String msg = "Error occurred while getting devices the group."; log.error(msg, e); @@ -295,7 +297,7 @@ public class GroupManagementServiceImpl implements GroupManagementService { List deviceGroups = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroups(deviceIdentifier); return Response.status(Response.Status.OK).entity(deviceGroups).build(); } catch (GroupManagementException e) { - String msg = "Error occurred while removing devices from group."; + String msg = "Error occurred while getting groups of device."; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/ApplicationManagementAdminServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/ApplicationManagementAdminServiceImpl.java index 59f32534c9..5141399fa1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/ApplicationManagementAdminServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/ApplicationManagementAdminServiceImpl.java @@ -65,9 +65,10 @@ public class ApplicationManagementAdminServiceImpl implements ApplicationManagem if (applicationWrapper.getDeviceIdentifiers() != null) { for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - if (Platform.ANDROID.toString().equals(deviceIdentifier.getType())) { + String deviceType = deviceIdentifier.getType().toUpperCase(); + if (Platform.ANDROID.toString().equals(deviceType)) { operation = MDMAndroidOperationUtil.createInstallAppOperation(mobileApp); - } else if (Platform.IOS.toString().equals(deviceIdentifier.getType())) { + } else if (Platform.IOS.toString().equals(deviceType)) { operation = MDMIOSOperationUtil.createInstallAppOperation(mobileApp); } } @@ -114,9 +115,10 @@ public class ApplicationManagementAdminServiceImpl implements ApplicationManagem if (applicationWrapper.getDeviceIdentifiers() != null) { for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - if (Platform.ANDROID.toString().equals(deviceIdentifier.getType())) { + String deviceType = deviceIdentifier.getType().toUpperCase(); + if (Platform.ANDROID.toString().equals(deviceType)) { operation = MDMAndroidOperationUtil.createAppUninstallOperation(mobileApp); - } else if (deviceIdentifier.getType().equals(Platform.IOS.toString())) { + } else if (deviceType.equals(Platform.IOS.toString())) { operation = MDMIOSOperationUtil.createAppUninstallOperation(mobileApp); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java index 55b67029fa..8222210cad 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/admin/GroupManagementAdminServiceImpl.java @@ -32,6 +32,7 @@ import org.wso2.carbon.device.mgt.jaxrs.service.impl.util.RequestValidationUtil; import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils; import javax.ws.rs.core.Response; +import java.util.ArrayList; import java.util.List; public class GroupManagementAdminServiceImpl implements GroupManagementAdminService { @@ -47,14 +48,15 @@ public class GroupManagementAdminServiceImpl implements GroupManagementAdminServ request.setOwner(owner); PaginationResult deviceGroupsResult = DeviceMgtAPIUtils.getGroupManagementProviderService() .getGroups(request); - if (deviceGroupsResult.getData() != null && deviceGroupsResult.getRecordsTotal() > 0) { - DeviceGroupList deviceGroupList = new DeviceGroupList(); + DeviceGroupList deviceGroupList = new DeviceGroupList(); + if (deviceGroupsResult.getData() != null) { deviceGroupList.setList(deviceGroupsResult.getData()); deviceGroupList.setCount(deviceGroupsResult.getRecordsTotal()); - return Response.status(Response.Status.OK).entity(deviceGroupList).build(); } else { - return Response.status(Response.Status.NOT_FOUND).build(); + deviceGroupList.setList(new ArrayList<>()); + deviceGroupList.setCount(0); } + return Response.status(Response.Status.OK).entity(deviceGroupList).build(); } catch (GroupManagementException e) { String msg = "ErrorResponse occurred while retrieving all groups."; log.error(msg, e); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml index 7650316687..7948186893 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -39,7 +39,6 @@ - @@ -79,7 +78,6 @@ - diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml index 9f2fb4f03c..b0cb8b4032 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml @@ -21,7 +21,7 @@ device-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java index 6c3a6c9f60..151e86b6ad 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/PaginationRequest.java @@ -33,6 +33,7 @@ public class PaginationRequest { private String deviceType; private String deviceName; private String ownership; + private String ownerRole; private Date since; public PaginationRequest(int start, int rowCount) { @@ -112,4 +113,11 @@ public class PaginationRequest { this.since = since; } + public String getOwnerRole() { + return ownerRole; + } + + public void setOwnerRole(String ownerRole) { + this.ownerRole = ownerRole; + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml index afbf63738a..e9728972d8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt device-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java index 39389ee879..a9d974b4af 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java @@ -17,6 +17,7 @@ */ package org.wso2.carbon.device.mgt.core.service; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.CarbonConstants; @@ -607,12 +608,17 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv @Override public PaginationResult getAllDevices(PaginationRequest request) throws DeviceManagementException { + List devicesForRoles = null; PaginationResult paginationResult = new PaginationResult(); List devices = new ArrayList<>(); List allDevices = new ArrayList<>(); int count = 0; int tenantId = this.getTenantId(); request = DeviceManagerUtil.validateDeviceListPageSize(request); + if (!StringUtils.isEmpty(request.getOwnerRole())) { + devicesForRoles = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider() + .getAllDevicesOfRole(request.getOwnerRole()); + } try { DeviceManagementDAOFactory.openConnection(); allDevices = deviceDAO.getDevices(request, tenantId); @@ -625,6 +631,20 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } finally { DeviceManagementDAOFactory.closeConnection(); } + + devices = processDevices(devices, allDevices); + + if (devicesForRoles != null) { + count += devicesForRoles.size(); + devices = processDevices(devices, devicesForRoles); + } + paginationResult.setData(devices); + paginationResult.setRecordsFiltered(count); + paginationResult.setRecordsTotal(count); + return paginationResult; + } + + private List processDevices(List devices, List allDevices) throws DeviceManagementException { for (Device device : allDevices) { DeviceInfo info = null; try { @@ -637,7 +657,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv device.setDeviceInfo(info); } catch (DeviceDetailsMgtDAOException e) { log.error("Error occurred while retrieving advance info of '" + device.getType() + - "' that carries the id '" + device.getDeviceIdentifier() + "'"); + "' that carries the id '" + device.getDeviceIdentifier() + "'"); } catch (SQLException e) { log.error("Error occurred while opening a connection to the data source", e); } finally { @@ -651,7 +671,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv device.setApplications(applications); } catch (DeviceManagementDAOException e) { log.error("Error occurred while retrieving the application list of '" + device.getType() + "', " + - "which carries the id '" + device.getId() + "'", e); + "which carries the id '" + device.getId() + "'", e); } catch (SQLException e) { log.error("Error occurred while opening a connection to the data source", e); } finally { @@ -662,7 +682,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv if (deviceManager == null) { if (log.isDebugEnabled()) { log.debug("Device Manager associated with the device type '" + device.getType() + "' is null. " + - "Therefore, not attempting method 'isEnrolled'"); + "Therefore, not attempting method 'isEnrolled'"); } devices.add(device); continue; @@ -675,12 +695,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } devices.add(device); } - paginationResult.setData(devices); - paginationResult.setRecordsFiltered(count); - paginationResult.setRecordsTotal(count); - return paginationResult; + return devices; } - @Override public List getAllDevices(String deviceType) throws DeviceManagementException { List devices = new ArrayList<>(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml index 4106537df5..acca02f593 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml @@ -22,7 +22,7 @@ device-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml index 447fe51c5b..65578b4e00 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml @@ -22,7 +22,7 @@ device-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json index 5323b5814c..340aac83e8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/config.json @@ -1,5 +1,6 @@ { "appContext": "/devicemgt/", + "isCloud": false, "httpsURL" : "https://%iot.gateway.host%:%iot.gateway.https.port%", "httpURL" : "http://%iot.gateway.host%:%iot.gateway.http.port", "wssURL" : "https://%iot.analytics.host%:%iot.analytics.https.port%", diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/batch-provider-api.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/batch-provider-api.js index 78d026bf1a..b747ae3153 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/batch-provider-api.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/batch-provider-api.js @@ -125,6 +125,13 @@ batchProviders = function () { result = connector.getRecordsByRange(loggedInUser, tablename, from, to, 0, limit, null).getMessage(); } + + // error handling ---- + var resultString = result.toString(); + if (resultString.contains("Failed to get records from table")) { + return null; + } + result = JSON.parse(result); var data = []; for (var i = 0; i < result.length; i++) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js index 56939377cf..68fa4630d7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/device.js @@ -71,7 +71,7 @@ deviceModule = function () { var userName = carbonUser.username + "@" + carbonUser.domain; var locationDataSet = []; - switch(deviceType) { + switch (deviceType) { case 'android': locationDataSet = batchProvider.getData(userName, deviceId, deviceType); break; @@ -80,24 +80,24 @@ deviceModule = function () { break; } - - var locationData = []; var locationTimeData = []; - for (var i = 0 ; i < locationDataSet.length; i++) { - var gpsReading = {}; - var gpsReadingTimes = {}; - gpsReading.lat = locationDataSet[i].latitude; - gpsReading.lng = locationDataSet[i].longitude; - if (deviceType == "android") { - gpsReadingTimes.time = locationDataSet[i].timeStamp; - } else { - gpsReadingTimes.time = locationDataSet[i].meta_timestamp; + if (locationDataSet != null) { + + for (var i = 0; i < locationDataSet.length; i++) { + var gpsReading = {}; + var gpsReadingTimes = {}; + gpsReading.lat = locationDataSet[i].latitude; + gpsReading.lng = locationDataSet[i].longitude; + if (deviceType == "android") { + gpsReadingTimes.time = locationDataSet[i].timeStamp; + } else { + gpsReadingTimes.time = locationDataSet[i].meta_timestamp; + } + locationData.push(gpsReading); + locationTimeData.push(gpsReadingTimes); } - locationData.push(gpsReading); - locationTimeData.push(gpsReadingTimes); } - var utility = require('/app/modules/utility.js')["utility"]; try { utility.startTenantFlow(carbonUser); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs index 6c152b07ee..e69c9d4184 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.user.create/create.hbs @@ -127,14 +127,7 @@

User was added successfully.

An invitation mail will be sent to this user to initiate device enrollment. - Below QR code can also be used to enroll a device.

-
- -
-
-
-

Please click "Add Another User", if you wish to add another user or click "View User List" to complete the process and go back to the user list. diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.hbs new file mode 100644 index 0000000000..28f1e68b7c --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.hbs @@ -0,0 +1,219 @@ +{{! + Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + + WSO2 Inc. licenses this file to you 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. +}} + \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.js new file mode 100644 index 0000000000..03d61cad53 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.js @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +function onRequest(context) { + var constants = require("/app/modules/constants.js"); + var user = context.user; + var isSuperTenant = false; + if (user.tenantId == -1234){ + isSuperTenant = true; + } + var viewModal = {}; + viewModal.isSuperTenant = isSuperTenant; + viewModal.USER_SESSION_KEY = session.get(constants["USER_SESSION_KEY"]); + return viewModal; +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.json b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.json new file mode 100644 index 0000000000..e4e47235ef --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.cloud.user-menu/user-menu.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0", +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/public/js/user-menu.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/public/js/user-menu.js similarity index 100% rename from components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/public/js/user-menu.js rename to components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/public/js/user-menu.js diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.hbs new file mode 100644 index 0000000000..8bc7d0b35b --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.hbs @@ -0,0 +1,123 @@ +{{! + Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + + WSO2 Inc. licenses this file to you 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. +}} + + + +{{#zone "bottomJs"}} + {{js "/js/user-menu.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.js new file mode 100644 index 0000000000..03d61cad53 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.js @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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. + */ + +function onRequest(context) { + var constants = require("/app/modules/constants.js"); + var user = context.user; + var isSuperTenant = false; + if (user.tenantId == -1234){ + isSuperTenant = true; + } + var viewModal = {}; + viewModal.isSuperTenant = isSuperTenant; + viewModal.USER_SESSION_KEY = session.get(constants["USER_SESSION_KEY"]); + return viewModal; +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.json b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.json new file mode 100644 index 0000000000..e4e47235ef --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.default.user-menu/user-menu.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0", +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.hbs index 95d7264473..bd55f2a00d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.hbs @@ -15,110 +15,11 @@ specific language governing permissions and limitations under the License. }} -{{#zone "userMenu"}} - -{{/zone}} - -{{#zone "bottomJs"}} - {{js "/js/user-menu.js"}} +{{#zone "userMenu"}} + {{#if isCloud}} + {{unit "cdmf.unit.ui.header.cloud.user-menu"}} + {{else}} + {{unit "cdmf.unit.ui.header.default.user-menu"}} + {{/if}} {{/zone}} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.js index 03d61cad53..e63ad073c3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.header.user-menu/user-menu.js @@ -17,14 +17,8 @@ */ function onRequest(context) { - var constants = require("/app/modules/constants.js"); - var user = context.user; - var isSuperTenant = false; - if (user.tenantId == -1234){ - isSuperTenant = true; - } + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; var viewModal = {}; - viewModal.isSuperTenant = isSuperTenant; - viewModal.USER_SESSION_KEY = session.get(constants["USER_SESSION_KEY"]); + viewModal.isCloud = mdmProps["isCloud"]; return viewModal; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.theme/public/css/custom-desktop.css b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.theme/public/css/custom-desktop.css index 6321372ccd..a7114108ee 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.theme/public/css/custom-desktop.css +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.ui.theme/public/css/custom-desktop.css @@ -6517,7 +6517,7 @@ select > option:hover { } .header .fw:before { - color: #000; + } /* Adding style for required fields */ diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs index fe6c030d27..af3e248189 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs @@ -21,6 +21,9 @@
{{defineZone "brand"}}
+
+ {{defineZone "cloudMenu"}} +
{{defineZone "userMenu"}}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml index 25f9e09ebf..6068e21032 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml @@ -23,7 +23,7 @@ device-mgt org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml index 3dd861c032..8b64683016 100644 --- a/components/device-mgt/pom.xml +++ b/components/device-mgt/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml b/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml index 88db5fd8d4..4b3789930e 100644 --- a/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml +++ b/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt email-sender - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/email-sender/pom.xml b/components/email-sender/pom.xml index be1d8fe2db..b72645fc5f 100644 --- a/components/email-sender/pom.xml +++ b/components/email-sender/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web-proxy/pom.xml b/components/identity-extensions/dynamic-client-registration/dynamic-client-web-proxy/pom.xml index 4fa3507780..53ae4d5bdb 100644 --- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web-proxy/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/dynamic-client-web-proxy/pom.xml @@ -21,7 +21,7 @@ dynamic-client-registration org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml index c9c58b5700..9c9c48aba2 100644 --- a/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/dynamic-client-web/pom.xml @@ -21,7 +21,7 @@ dynamic-client-registration org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml index bb6a8c9e61..6a2af20689 100644 --- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration/pom.xml @@ -21,13 +21,13 @@ dynamic-client-registration org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.registration - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Dynamic client registration service WSO2 Carbon - Dynamic Client Registration Service diff --git a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml index 73c1261438..f2bc60114c 100644 --- a/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/org.wso2.carbon.dynamic.client.web.app.registration/pom.xml @@ -21,13 +21,13 @@ dynamic-client-registration org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.web.app.registration - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Dynamic client web app registration WSO2 Carbon - Dynamic Client Web-app Registration Service diff --git a/components/identity-extensions/dynamic-client-registration/pom.xml b/components/identity-extensions/dynamic-client-registration/pom.xml index 561b1c3752..79c63da111 100644 --- a/components/identity-extensions/dynamic-client-registration/pom.xml +++ b/components/identity-extensions/dynamic-client-registration/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt identity-extensions - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt dynamic-client-registration - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Dynamic client registration http://wso2.org diff --git a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml index 11a6afac84..794527132b 100644 --- a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml +++ b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml @@ -22,13 +22,13 @@ org.wso2.carbon.devicemgt identity-extensions - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.oauth.extensions - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - OAuth Extensions http://wso2.org diff --git a/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml index e970bbc4f5..4b71180656 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml +++ b/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml @@ -21,7 +21,7 @@ identity-extensions org.wso2.carbon.devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT 4.0.0 diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml index fd6c2a6244..aee30bdda2 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt identity-extensions - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml index 468813fcdc..fcb84775bd 100644 --- a/components/identity-extensions/pom.xml +++ b/components/identity-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml b/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml index 41efcc6c3a..e4512e9eb1 100644 --- a/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.complex.policy.decision.point - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Policy Decision Point WSO2 Carbon - Policy Decision Point diff --git a/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml index 8f0c457042..275b501c22 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml @@ -3,14 +3,14 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.decision.point - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Policy Decision Point WSO2 Carbon - Policy Decision Point diff --git a/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml index 2bd612a543..107db4eb40 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml @@ -3,7 +3,7 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml @@ -11,7 +11,7 @@ 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.information.point - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Policy Information Point WSO2 Carbon - Policy Information Point diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml index 420fc0ddad..90278858b6 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.mgt.common - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Policy Management Common WSO2 Carbon - Policy Management Common diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml index b53e55fe74..b8d15613c3 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.mgt.core - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Policy Management Core WSO2 Carbon - Policy Management Core diff --git a/components/policy-mgt/pom.xml b/components/policy-mgt/pom.xml index 72649963e8..431ccb78e7 100644 --- a/components/policy-mgt/pom.xml +++ b/components/policy-mgt/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 policy-mgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Policy Management Component http://wso2.org diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml index 65ac2299b2..26f3ba3936 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml @@ -21,14 +21,14 @@ org.wso2.carbon.devicemgt webapp-authenticator-framework - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.webapp.authenticator.framework - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT bundle WSO2 Carbon - Web Application Authenticator Framework Bundle WSO2 Carbon - Web Application Authenticator Framework Bundle diff --git a/components/webapp-authenticator-framework/pom.xml b/components/webapp-authenticator-framework/pom.xml index 287c5cfb70..c838d7e1c6 100644 --- a/components/webapp-authenticator-framework/pom.xml +++ b/components/webapp-authenticator-framework/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt webapp-authenticator-framework - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Webapp Authenticator Framework http://wso2.org diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml index 34c7dcde0f..10969ec3eb 100644 --- a/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml +++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml @@ -21,14 +21,14 @@ org.wso2.carbon.devicemgt apimgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.application.extension.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - API Management Application Extension Feature http://wso2.org This feature contains an implementation of a api application registration, which takes care of subscription diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml index 4e342280f1..9176e530fd 100644 --- a/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml +++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt apimgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.handler.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Management - APIM handler Server Feature http://wso2.org This feature contains the handler for the api authentications diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml index 89d2f06b44..b20a10d656 100644 --- a/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml +++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml @@ -21,14 +21,14 @@ org.wso2.carbon.devicemgt apimgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.apimgt.webapp.publisher.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - API Management Webapp Publisher Feature http://wso2.org This feature contains an implementation of a Tomcat lifecycle listener, which takes care of publishing diff --git a/features/apimgt-extensions/pom.xml b/features/apimgt-extensions/pom.xml index 67e5ef22d6..fae0871ed2 100644 --- a/features/apimgt-extensions/pom.xml +++ b/features/apimgt-extensions/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt apimgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - API Management Extensions Feature http://wso2.org diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml index fa31452abe..d11567cd8e 100644 --- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt certificate-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml index c551a8caf1..70d38073cf 100644 --- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt certificate-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml index a26509edd7..1c19414ebf 100644 --- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml +++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt certificate-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.certificate.mgt.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Certificate Management Server Feature http://wso2.org This feature contains the core bundles required for back-end Certificate Management functionality diff --git a/features/certificate-mgt/pom.xml b/features/certificate-mgt/pom.xml index 2a414eff42..590cf2fc95 100644 --- a/features/certificate-mgt/pom.xml +++ b/features/certificate-mgt/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt certificate-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Certificate Management Feature http://wso2.org diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml index e449811d35..608c6278f5 100644 --- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml +++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Type Deployer Feature http://wso2.org WSO2 Carbon - Device Type Deployer Feature diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature/pom.xml index 74c27277f5..a16aa580da 100644 --- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature/pom.xml +++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - GCM Based Push Notification Provider Feature http://wso2.org WSO2 Carbon - MQTT Based Push Notification Provider Feature diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml index 7b4dafd7b0..8bb7e725ba 100644 --- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml +++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - MQTT Based Push Notification Provider Feature http://wso2.org WSO2 Carbon - MQTT Based Push Notification Provider Feature diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml index 888da00d5f..64bbfa055d 100644 --- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml +++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - XMPP Based Push Notification Provider Feature http://wso2.org WSO2 Carbon - XMPP Based Push Notification Provider Feature diff --git a/features/device-mgt-extensions/pom.xml b/features/device-mgt-extensions/pom.xml index 17f761d74a..cd1a75a0b9 100644 --- a/features/device-mgt-extensions/pom.xml +++ b/features/device-mgt-extensions/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml index f5d5667dd7..22fd593786 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml @@ -3,13 +3,13 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.analytics.dashboard.feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Device Management Dashboard Analytics Feature WSO2 Carbon - Device Management Dashboard Analytics Feature diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml index c6d8029d45..72bc3b2915 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.analytics.data.publisher.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Management Server Feature http://wso2.org This feature contains bundles related to device analytics data publisher diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml index f5ec89ddeb..3f757d8199 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml index 40f41b738f..e83b418ef4 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml @@ -4,14 +4,14 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Management Extensions Feature http://wso2.org This feature contains common extensions used by key device management functionalities diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml index 0db5a7563a..c4c2cbd900 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml index 6723d7773a..04adb18c2f 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Management Server Feature http://wso2.org This feature contains the core bundles required for Back-end Device Management functionality diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml index 630472df8c..595bfa1b01 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt device-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml index 9e6b593ab2..0036709663 100644 --- a/features/device-mgt/pom.xml +++ b/features/device-mgt/pom.xml @@ -22,7 +22,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml diff --git a/features/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration.server.feature/pom.xml b/features/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration.server.feature/pom.xml index 46613e4b43..e58d7222a9 100644 --- a/features/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration.server.feature/pom.xml +++ b/features/dynamic-client-registration/org.wso2.carbon.dynamic.client.registration.server.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt dynamic-client-registration-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.registration.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Dynamic Client Registration Server Feature http://wso2.org This feature contains dynamic client registration features diff --git a/features/dynamic-client-registration/pom.xml b/features/dynamic-client-registration/pom.xml index d26fa6b6c0..49aec402ea 100644 --- a/features/dynamic-client-registration/pom.xml +++ b/features/dynamic-client-registration/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt dynamic-client-registration-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Dynamic Client Registration Feature http://wso2.org diff --git a/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml b/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml index 24c59b7306..7406fc48d5 100644 --- a/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml +++ b/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt email-sender-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.email.sender.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Email Sender Feature http://wso2.org This feature contains the core bundles required for email sender related functionality diff --git a/features/email-sender/pom.xml b/features/email-sender/pom.xml index 71ed8fa383..035f4ffa38 100644 --- a/features/email-sender/pom.xml +++ b/features/email-sender/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt email-sender-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Email Sender Feature http://wso2.org diff --git a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml index 4afc10925f..c6fc448bce 100644 --- a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml +++ b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt jwt-client-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.identity.jwt.client.extension.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - JWT Client Feature http://wso2.org This feature contains jwt client implementation from which we can get a access token using the jwt diff --git a/features/jwt-client/pom.xml b/features/jwt-client/pom.xml index bfaa5f38c0..a360c71400 100644 --- a/features/jwt-client/pom.xml +++ b/features/jwt-client/pom.xml @@ -23,13 +23,13 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 jwt-client-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Dynamic Client Registration Feature http://wso2.org diff --git a/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml b/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml index 560e2242b2..5c07d9febe 100644 --- a/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml +++ b/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt oauth-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.oauth.extensions.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Mgt OAuth Extensions Feature http://wso2.org This feature contains devicemgt related OAuth extensions diff --git a/features/oauth-extensions/pom.xml b/features/oauth-extensions/pom.xml index 5db71fefef..0a02381d6e 100644 --- a/features/oauth-extensions/pom.xml +++ b/features/oauth-extensions/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt oauth-extensions-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Device Management OAuth Extensions Feature http://wso2.org diff --git a/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml b/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml index 10b18a43b4..a38bea89c0 100644 --- a/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml +++ b/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt policy-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.policy.mgt.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Policy Management Server Feature http://wso2.org This feature contains the core bundles required for Back-end Device Management functionality diff --git a/features/policy-mgt/pom.xml b/features/policy-mgt/pom.xml index 8db56d41e8..7b67edcab4 100644 --- a/features/policy-mgt/pom.xml +++ b/features/policy-mgt/pom.xml @@ -23,14 +23,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt policy-mgt-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Policy Management Feature http://wso2.org diff --git a/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml b/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml index 6cd51096a4..74228c78a0 100644 --- a/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml +++ b/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt webapp-authenticator-framework-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../pom.xml 4.0.0 org.wso2.carbon.webapp.authenticator.framework.server.feature pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Webapp Authenticator Framework Server Feature http://wso2.org This feature contains the core bundles required for Back-end Device Management functionality diff --git a/features/webapp-authenticator-framework/pom.xml b/features/webapp-authenticator-framework/pom.xml index f81315634d..d7c2b863ad 100644 --- a/features/webapp-authenticator-framework/pom.xml +++ b/features/webapp-authenticator-framework/pom.xml @@ -22,14 +22,14 @@ org.wso2.carbon.devicemgt carbon-devicemgt - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt webapp-authenticator-framework-feature - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT pom WSO2 Carbon - Webapp Authenticator Framework Feature http://wso2.org diff --git a/pom.xml b/pom.xml index b68c12acf4..1f0b7ff783 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt pom - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT WSO2 Carbon - Device Management - Parent http://wso2.org WSO2 Connected Device Manager Components @@ -1787,7 +1787,7 @@ 1.2.11.wso2v10 - 2.0.12-SNAPSHOT + 2.0.15-SNAPSHOT 4.4.8