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 339110eac71..5ca5c0b802c 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.apimgt.annotations - 2.0.3-SNAPSHOT + 2.0.4 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 3ad50786761..38a029a8c11 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 - 2.0.3-SNAPSHOT + 2.0.4 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 cec4c34f7df..1ec783cae21 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 - 2.0.3-SNAPSHOT + 2.0.4 org.wso2.carbon.apimgt.application.extension bundle WSO2 Carbon - API Application Management diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java index 913541e5334..97dea104b2d 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/src/main/java/org/wso2/carbon/apimgt/application/extension/APIManagementProviderServiceImpl.java @@ -131,7 +131,7 @@ public class APIManagementProviderServiceImpl implements APIManagementProviderSe * {@inheritDoc} */ @Override - public ApiApplicationKey generateAndRetrieveApplicationKeys(String apiApplicationName, String tags[], + public synchronized ApiApplicationKey generateAndRetrieveApplicationKeys(String apiApplicationName, String tags[], String keyType, String username, boolean isAllowedAllDomains, String validityTime) throws APIManagerException { 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 74566bd2376..87240246548 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.apimgt.webapp.publisher - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - API Management Webapp Publisher WSO2 Carbon - API Management Webapp Publisher diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationProcessor.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationProcessor.java index d36e1442f48..5611b563ca2 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationProcessor.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/AnnotationProcessor.java @@ -359,7 +359,7 @@ public class AnnotationProcessor { * @param servletContext * @return null if cannot determin /WEB-INF/classes */ - public static URL findWebInfClassesPath(ServletContext servletContext) + private static URL findWebInfClassesPath(ServletContext servletContext) { String path = servletContext.getRealPath("/WEB-INF/classes"); if (path == null) return null; diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedFileProtocolIteratorFactory.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedFileProtocolIteratorFactory.java index 34936f61c8c..3d5ad74087f 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedFileProtocolIteratorFactory.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedFileProtocolIteratorFactory.java @@ -21,7 +21,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; -public class ExtendedFileProtocolIteratorFactory implements DirectoryIteratorFactory { +class ExtendedFileProtocolIteratorFactory implements DirectoryIteratorFactory { private static final String ENCODING_SCHEME = "UTF-8"; diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedIteratorFactory.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedIteratorFactory.java index e20b4ba4674..2fe56fc9302 100644 --- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedIteratorFactory.java +++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/lifecycle/util/ExtendedIteratorFactory.java @@ -25,11 +25,11 @@ import java.io.IOException; import java.net.URL; import java.util.concurrent.ConcurrentHashMap; -public class ExtendedIteratorFactory { +class ExtendedIteratorFactory { private static final ConcurrentHashMap registry = new ConcurrentHashMap(); - public static StreamIterator create(URL url, Filter filter) throws IOException { + static StreamIterator create(URL url, Filter filter) throws IOException { String urlString = url.toString(); if(urlString.endsWith("!/")) { urlString = urlString.substring(4); diff --git a/components/apimgt-extensions/pom.xml b/components/apimgt-extensions/pom.xml index 8d486740eeb..a7af72a4752 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 apimgt-extensions - 2.0.3-SNAPSHOT + 2.0.4 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 96d690bc86d..814dcc97c36 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.3-SNAPSHOT + 2.0.4 ../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 ee995e22bff..5569f2deaea 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.3-SNAPSHOT + 2.0.4 ../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 bae82a92b08..e2760fea187 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.certificate.mgt.core - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - Certificate Management Core WSO2 Carbon - Certificate Management Core @@ -50,14 +50,16 @@ ${project.artifactId} ${carbon.device.mgt.version} Device Management Core Bundle - org.wso2.carbon.certificate.mgt.core.internal + + org.wso2.carbon.certificate.mgt.core.internal + org.osgi.framework, org.osgi.service.component, org.apache.commons.logging, javax.security.auth.x500, javax.xml.*, - javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional, + javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional, org.apache.commons.codec.binary, org.bouncycastle.asn1, org.bouncycastle.asn1.x500, diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java index 854d88794a3..8f47afc6881 100755 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java @@ -526,61 +526,61 @@ public class CertificateGenerator { } } - private PrivateKey getSignerKey(String signerPrivateKeyPath) throws KeystoreException { - - File file = new File(signerPrivateKeyPath); - FileInputStream fis; - - try { - fis = new FileInputStream(file); - DataInputStream dis = new DataInputStream(fis); - byte[] keyBytes = new byte[(int) file.length()]; - dis.readFully(keyBytes); - dis.close(); - - String temp = new String(keyBytes); - String privateKeyPEM = temp.replace( - CertificateManagementConstants.RSA_PRIVATE_KEY_BEGIN_TEXT, CertificateManagementConstants.EMPTY_TEXT); - privateKeyPEM = privateKeyPEM - .replace(CertificateManagementConstants.RSA_PRIVATE_KEY_END_TEXT, CertificateManagementConstants.EMPTY_TEXT); - - byte[] decoded = Base64.decodeBase64(privateKeyPEM); - PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(decoded); - KeyFactory keyFactory = KeyFactory.getInstance(CertificateManagementConstants.RSA); - - return keyFactory.generatePrivate(encodedKeySpec); - } catch (FileNotFoundException e) { - String errorMsg = "Private key file not found in getSignerKey"; - throw new KeystoreException(errorMsg, e); - } catch (IOException e) { - String errorMsg = "Input output issue in getSignerKey"; - throw new KeystoreException(errorMsg, e); - } catch (NoSuchAlgorithmException e) { - String errorMsg = "Algorithm not not found in getSignerKey"; - throw new KeystoreException(errorMsg, e); - } catch (InvalidKeySpecException e) { - String errorMsg = "Invalid key found in getSignerKey"; - throw new KeystoreException(errorMsg, e); - } - } - - private X509Certificate getSigner(String signerCertificatePath) throws KeystoreException { - - X509Certificate certificate; - try { - CertificateFactory certificateFactory = CertificateFactory.getInstance(CertificateManagementConstants.X_509); - certificate = (X509Certificate) certificateFactory.generateCertificate( - new FileInputStream(signerCertificatePath)); - - return certificate; - } catch (CertificateException e) { - String errorMsg = "Certificate related issue occurred in getSigner"; - throw new KeystoreException(errorMsg, e); - } catch (FileNotFoundException e) { - String errorMsg = "Signer certificate path not found in getSigner"; - throw new KeystoreException(errorMsg, e); - } - } +// private PrivateKey getSignerKey(String signerPrivateKeyPath) throws KeystoreException { +// +// File file = new File(signerPrivateKeyPath); +// FileInputStream fis; +// +// try { +// fis = new FileInputStream(file); +// DataInputStream dis = new DataInputStream(fis); +// byte[] keyBytes = new byte[(int) file.length()]; +// dis.readFully(keyBytes); +// dis.close(); +// +// String temp = new String(keyBytes); +// String privateKeyPEM = temp.replace( +// CertificateManagementConstants.RSA_PRIVATE_KEY_BEGIN_TEXT, CertificateManagementConstants.EMPTY_TEXT); +// privateKeyPEM = privateKeyPEM +// .replace(CertificateManagementConstants.RSA_PRIVATE_KEY_END_TEXT, CertificateManagementConstants.EMPTY_TEXT); +// +// byte[] decoded = Base64.decodeBase64(privateKeyPEM); +// PKCS8EncodedKeySpec encodedKeySpec = new PKCS8EncodedKeySpec(decoded); +// KeyFactory keyFactory = KeyFactory.getInstance(CertificateManagementConstants.RSA); +// +// return keyFactory.generatePrivate(encodedKeySpec); +// } catch (FileNotFoundException e) { +// String errorMsg = "Private key file not found in getSignerKey"; +// throw new KeystoreException(errorMsg, e); +// } catch (IOException e) { +// String errorMsg = "Input output issue in getSignerKey"; +// throw new KeystoreException(errorMsg, e); +// } catch (NoSuchAlgorithmException e) { +// String errorMsg = "Algorithm not not found in getSignerKey"; +// throw new KeystoreException(errorMsg, e); +// } catch (InvalidKeySpecException e) { +// String errorMsg = "Invalid key found in getSignerKey"; +// throw new KeystoreException(errorMsg, e); +// } +// } +// +// private X509Certificate getSigner(String signerCertificatePath) throws KeystoreException { +// +// X509Certificate certificate; +// try { +// CertificateFactory certificateFactory = CertificateFactory.getInstance(CertificateManagementConstants.X_509); +// certificate = (X509Certificate) certificateFactory.generateCertificate( +// new FileInputStream(signerCertificatePath)); +// +// return certificate; +// } catch (CertificateException e) { +// String errorMsg = "Certificate related issue occurred in getSigner"; +// throw new KeystoreException(errorMsg, e); +// } catch (FileNotFoundException e) { +// String errorMsg = "Signer certificate path not found in getSigner"; +// throw new KeystoreException(errorMsg, e); +// } +// } public SCEPResponse getCACert() throws KeystoreException { @@ -657,28 +657,28 @@ public class CertificateGenerator { return null; } - private ASN1Primitive toASN1Primitive(byte[] data) { - - ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data); - ASN1InputStream inputStream = new ASN1InputStream(byteArrayInputStream); - - try { - return inputStream.readObject(); - } catch (IOException e) { - String errorMsg = "IOException occurred when converting binary array to ASN1Primitive"; - log.error(errorMsg, e); - } finally { - try { - byteArrayInputStream.close(); - inputStream.close(); - } catch (IOException e) { - String errorMsg = "IOException occurred when closing streams"; - log.error(errorMsg, e); - } - } - - return null; - } +// private ASN1Primitive toASN1Primitive(byte[] data) { +// +// ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data); +// ASN1InputStream inputStream = new ASN1InputStream(byteArrayInputStream); +// +// try { +// return inputStream.readObject(); +// } catch (IOException e) { +// String errorMsg = "IOException occurred when converting binary array to ASN1Primitive"; +// log.error(errorMsg, e); +// } finally { +// try { +// byteArrayInputStream.close(); +// inputStream.close(); +// } catch (IOException e) { +// String errorMsg = "IOException occurred when closing streams"; +// log.error(errorMsg, e); +// } +// } +// +// return null; +// } /** * This method is used to retrieve signed certificate from certificate signing request. diff --git a/components/certificate-mgt/pom.xml b/components/certificate-mgt/pom.xml index d61aa978510..c759ff122c7 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt certificate-mgt - 2.0.3-SNAPSHOT + 2.0.4 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 9b958b392e6..a96a91e9728 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/config/TaskConfiguration.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/config/TaskConfiguration.java index c2539d2e6e6..6de303e5573 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/config/TaskConfiguration.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/config/TaskConfiguration.java @@ -30,10 +30,8 @@ import java.util.List; @XmlRootElement(name = "TaskConfiguration") public class TaskConfiguration { - private boolean enabled; private int frequency; - private String taskClazz; private List operations; @XmlElement(name = "Enable", required = true) @@ -54,15 +52,6 @@ public class TaskConfiguration { this.frequency = frequency; } - @XmlElement(name = "TaskClass", required = true) - public String getTaskClazz() { - return taskClazz; - } - - public void setTaskClazz(String taskClazz) { - this.taskClazz = taskClazz; - } - @XmlElementWrapper(name="Operations") @XmlElement(name = "Operation", required = true) public List getOperations() { diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManager.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManager.java index 8a9bcd7ed59..eba2f18721a 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManager.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManager.java @@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.extensions.device.type.deployer.template; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; @@ -41,6 +42,7 @@ import org.wso2.carbon.device.mgt.extensions.device.type.deployer.template.util. import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager; import org.wso2.carbon.registry.api.RegistryException; import org.wso2.carbon.registry.api.Resource; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -118,25 +120,34 @@ public class DeviceTypeManager implements DeviceManager { throw new DeviceTypeDeployerFileException("Could not find definition for table: " + tableName); } propertiesExist = true; - DeviceDAODefinition deviceDAODefinition = new DeviceDAODefinition(deviceDefinitionTable); - String datasourceName = deviceTypeConfiguration.getDataSource().getJndiConfig().getName(); - if (datasourceName != null && !datasourceName.isEmpty()) { - String setupOption = System.getProperty("setup"); - if (setupOption != null) { - if (log.isDebugEnabled()) { - log.debug("-Dsetup is enabled. Device management repository schema initialization is about " + - "to begin"); - } - try { - DeviceTypeUtils.setupDeviceManagementSchema(datasourceName, deviceType, - deviceDAODefinition.getDeviceTableName()); - } catch (DeviceTypeMgtPluginException e) { - log.error("Exception occurred while initializing device management database schema", e); + + try { + PrivilegedCarbonContext.startTenantFlow(); + PrivilegedCarbonContext.getThreadLocalCarbonContext() + .setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, true); + + DeviceDAODefinition deviceDAODefinition = new DeviceDAODefinition(deviceDefinitionTable); + String datasourceName = deviceTypeConfiguration.getDataSource().getJndiConfig().getName(); + if (datasourceName != null && !datasourceName.isEmpty()) { + String setupOption = System.getProperty("setup"); + if (setupOption != null) { + if (log.isDebugEnabled()) { + log.debug("-Dsetup is enabled. Device management repository schema initialization is about " + + "to begin"); + } + try { + DeviceTypeUtils.setupDeviceManagementSchema(datasourceName, deviceType, + deviceDAODefinition.getDeviceTableName()); + } catch (DeviceTypeMgtPluginException e) { + log.error("Exception occurred while initializing device management database schema", e); + } } + deviceTypePluginDAOManager = new DeviceTypePluginDAOManager(datasourceName, deviceDAODefinition); + } else { + throw new DeviceTypeDeployerFileException("Invalid datasource name."); } - deviceTypePluginDAOManager = new DeviceTypePluginDAOManager(datasourceName, deviceDAODefinition); - } else { - throw new DeviceTypeDeployerFileException("Invalid datasource name."); + } finally { + PrivilegedCarbonContext.endTenantFlow(); } } } diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManagerService.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManagerService.java index c83318ca9b8..62d03ffeb5d 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManagerService.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/deployer/template/DeviceTypeManagerService.java @@ -22,8 +22,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManager; +import org.wso2.carbon.device.mgt.common.MonitoringOperation; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.ProvisioningConfig; -import org.wso2.carbon.device.mgt.common.TaskOperation; import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; @@ -51,7 +52,8 @@ public class DeviceTypeManagerService implements DeviceManagementService { private PushNotificationConfig pushNotificationConfig; private ProvisioningConfig provisioningConfig; private String type; - private List taskOperations; + private OperationMonitoringTaskConfig operationMonitoringConfigs; + private List monitoringOperations; public DeviceTypeManagerService(DeviceTypeConfigIdentifier deviceTypeConfigIdentifier, DeviceTypeConfiguration deviceTypeConfiguration) { @@ -59,7 +61,8 @@ public class DeviceTypeManagerService implements DeviceManagementService { this.deviceManager = new DeviceTypeManager(deviceTypeConfigIdentifier, deviceTypeConfiguration); this.setType(deviceTypeConfiguration.getName()); this.populatePushNotificationConfig(deviceTypeConfiguration.getPushNotificationProvider()); - this.setTask(deviceTypeConfiguration); + this.operationMonitoringConfigs = new OperationMonitoringTaskConfig(); + this.setOperationMonitoringConfig(deviceTypeConfiguration); } @Override @@ -68,24 +71,27 @@ public class DeviceTypeManagerService implements DeviceManagementService { } @Override - public List getTasksForPlatform(){ - return taskOperations; + public OperationMonitoringTaskConfig getOperationMonitoringConfig(){ + return operationMonitoringConfigs; } - private void setTask(DeviceTypeConfiguration deviceTypeConfiguration) { + private void setOperationMonitoringConfig(DeviceTypeConfiguration deviceTypeConfiguration) { //Read the config file and take the list of operations there in the config TaskConfiguration taskConfiguration = deviceTypeConfiguration.getTaskConfiguration(); if (taskConfiguration != null) { + operationMonitoringConfigs.setEnabled(taskConfiguration.isEnabled()); + operationMonitoringConfigs.setFrequency(taskConfiguration.getFrequency()); List ops = taskConfiguration.getOperations(); if (ops != null && !ops.isEmpty()) { - taskOperations = new ArrayList<>(); + monitoringOperations = new ArrayList<>(); for (TaskConfiguration.Operation op : ops) { - TaskOperation taskOperation = new TaskOperation(); - taskOperation.setTaskName(op.getOperationName()); - taskOperation.setRecurrentTimes(op.getRecurrency()); - taskOperations.add(taskOperation); + MonitoringOperation monitoringOperation = new MonitoringOperation(); + monitoringOperation.setTaskName(op.getOperationName()); + monitoringOperation.setRecurrentTimes(op.getRecurrency()); + monitoringOperations.add(monitoringOperation); } } + operationMonitoringConfigs.setMonitoringOperation(monitoringOperations); } } diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/sample.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/sample.xml index a3d19a34ac0..31b54ec20a0 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/sample.xml +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/src/test/resources/sample.xml @@ -102,6 +102,8 @@ + true + 600000 DEVICE_INFO 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 4f9ce19d66a..354cce8f740 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/gcm/GCMNotificationStrategy.java b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/gcm/GCMNotificationStrategy.java index 4990de95f5e..af93b692a47 100644 --- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/gcm/GCMNotificationStrategy.java +++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm/src/main/java/org/wso2/carbon/device/mgt/extensions/push/notification/provider/gcm/GCMNotificationStrategy.java @@ -38,7 +38,7 @@ import java.util.List; public class GCMNotificationStrategy implements NotificationStrategy { private static final String GCM_TOKEN = "GCM_TOKEN"; - private final static String GCM_ENDPOINT = "https://gcm-http.googleapis.com/gcm/send"; + private final static String GCM_ENDPOINT = "https://fcm.googleapis.com/fcm/send"; private static final String GCM_API_KEY = "gcmAPIKey"; private static final int TIME_TO_LIVE = 60; private static final int HTTP_STATUS_CODE_OK = 200; @@ -84,13 +84,10 @@ public class GCMNotificationStrategy implements NotificationStrategy { HttpURLConnection conn = null; try { conn = (HttpURLConnection) new URL(GCM_ENDPOINT).openConnection(); - conn.setDoOutput(true); - conn.setUseCaches(false); - conn.setFixedLengthStreamingMode(bytes.length); - conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Authorization", "key=" + config.getProperty(GCM_API_KEY)); - + conn.setRequestMethod("POST"); + conn.setDoOutput(true); os = conn.getOutputStream(); os.write(bytes); } finally { 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 8061872787c..06b42a14035 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.3-SNAPSHOT + 2.0.4 ../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 dc8a94bffa4..2c955c75fdf 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml index d974c8d0a2e..a086ca65b4e 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.3-SNAPSHOT + 2.0.4 ../../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 986cdf98557..c39bf25b48a 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.3-SNAPSHOT + 2.0.4 ../pom.xml 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 3b494b77e6d..0d5283348b8 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.3-SNAPSHOT + 2.0.4 ../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 a1f3bc8657b..d92ac9aa5a7 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PasswordResetWrapper.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PasswordResetWrapper.java index 7bd67c20289..f1e186835a1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PasswordResetWrapper.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PasswordResetWrapper.java @@ -27,7 +27,8 @@ public class PasswordResetWrapper { /* Base64 encoded password */ - @ApiModelProperty(name = "newPassword", value = "New password of the user.", required = true ) + @ApiModelProperty(name = "newPassword", value = "New password of the user.", required = true, + example = "JiM&100%pW") private String newPassword; public String getNewPassword() { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PolicyList.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PolicyList.java index 8710f2bb747..5087fc81b5c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PolicyList.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/PolicyList.java @@ -30,7 +30,8 @@ public class PolicyList extends BasePaginatedResult { private List policies; - @ApiModelProperty(value = "List of policies returned") + @ApiModelProperty(value = "Returns the list of policies that match the offset and limit parameter values" + + " that were specified.") @JsonProperty("policies") public List getList() { return policies; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java index 77bd4f9b636..89f0dbff7d7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java @@ -30,23 +30,39 @@ import java.util.List; @ApiModel(value = "Profile", description = "This class carries all information related to policy profiles") public class Profile { - @ApiModelProperty(name = "profileId", value = "The ID of each profile that is in the selected policy", - required = true) + @ApiModelProperty(name = "profileId", + value = "The ID of each profile that is in the selected policy", + required = true, + example = "1") private int profileId; - @ApiModelProperty(name = "profileName", value = "The name of the profile", required = true) + @ApiModelProperty(name = "profileName", + value = "The name of the profile", + required = true, + example = "Block Camera") private String profileName; - @ApiModelProperty(name = "tenantId", value = "The ID of the tenant that added the policy", required = true) + @ApiModelProperty(name = "tenantId", + value = "The ID of the tenant that added the policy", + required = true, + example = "-1234") private int tenantId; - @ApiModelProperty(name = "deviceType", value = "Contains the device type details the policy was created " - + "for", required = true) + @ApiModelProperty(name = "deviceType", + value = "Contains the device type details the policy was created for", + required = true, + example = "android") private String deviceType; - @ApiModelProperty(name = "createdDate", value = "The date the policy was created", required = true) + @ApiModelProperty(name = "createdDate", + value = "The date the policy was created", + required = true, + example = "Thu, 6 Oct 2016 14:39:32 +0530") private Timestamp createdDate; - @ApiModelProperty(name = "updatedDate", value = "The date the changes made to the policy was published to" - + " the devices registered with the EMM", required = true) + @ApiModelProperty(name = "updatedDate", + value = "The date the changes made to the policy was published to the devices registered with the EMM", + required = true, + example = "Thu, 6 Oct 2016 14:39:32 +0530") private Timestamp updatedDate; - @ApiModelProperty(name = "profileFeaturesList", value = "Contains the features specific to each profile " - + "in the policy", required = true) + @ApiModelProperty(name = "profileFeaturesList", + value = "Contains the features specific to each profile in the policy", + required = true) private List profileFeaturesList; // Features included in the policies. public String getDeviceType() { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ProfileFeature.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ProfileFeature.java index 7a214c308c6..b32c7613f45 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ProfileFeature.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/ProfileFeature.java @@ -28,20 +28,33 @@ import java.io.Serializable; + "features") public class ProfileFeature implements Serializable { - @ApiModelProperty(name = "id", value = "Define the ID", required = true) + @ApiModelProperty(name = "id", + value = "Define the ID", + required = true, + example = "1") private int id; - @ApiModelProperty(name = "featureCode", value = "Provide the code that defines the policy you wish to add", - required = true) + @ApiModelProperty(name = "featureCode", + value = "Provide the code that defines the policy you wish to add", + required = true, + example = "CAMERA") private String featureCode; - @ApiModelProperty(name = "profileId", value = "Define the ID of the profile", required = true) + @ApiModelProperty(name = "profileId", + value = "Define the ID of the profile", + required = true, + example = "1") private int profileId; - @ApiModelProperty(name = "deviceTypeId", value = "The ID used to define the type of the device platform", - required = true) + @ApiModelProperty(name = "deviceTypeId", + value = "The ID used to define the type of the device platform", + required = true, + example = "android") private String deviceType; - @ApiModelProperty(name = "content", value = "The list of parameters that define the policy", - required = true) + @ApiModelProperty(name = "content", + value = "The list of parameters that define the policy", + required = true, + example = "{\\\"enabled\\\":false}") private Object content; - @ApiModelProperty(name = "payLoad", value = "The payload which is submitted to each feature", + @ApiModelProperty(name = "payLoad", + value = "The payload which is submitted to each feature", required = true) private String payLoad; 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 index 22126d90423..5fcb651b45d 100644 --- 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 @@ -1,57 +1,24 @@ -/* - * 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.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.ResponseHeader; import org.wso2.carbon.apimgt.annotations.api.Permission; +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 javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; 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 = "") - } -) @Path("/dashboard") @Api(value = "Device Analytics Dashboard", description = "Device Analytics Dashboard related information APIs are described here.") @@ -71,67 +38,667 @@ public interface Dashboard { @GET @Path("device-count-overview") + @ApiOperation( + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Get the details of registered devices in WSO2 EMM.", + notes = "Get the details of active, inactive, removed and total number of registered devices in" + + " WSO2 EMM.", + tags = "Dashboard") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") 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 EMM.", + tags = "Dashboard") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") 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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - Response getNonCompliantDeviceCountsByFeatures(@QueryParam(START_INDEX) int startIndex, - @QueryParam(RESULT_COUNT) int resultCount); + 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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - Response getDeviceCountsByGroups(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership); + 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 EMM and are actively " + + "communicating with the server.\n" + + "inactive: The devices that are registered with WSO2 EMM but unable to " + + "actively communicate with the server.\n" + + "removed: The devices that have unregistered from WSO2 EMM", + 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 EMM.\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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - Response getFeatureNonCompliantDeviceCountsByGroups(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership); + 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 EMM 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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - Response getFilteredDeviceCountOverTotal(@QueryParam(CONNECTIVITY_STATUS) String connectivityStatus, - @QueryParam(POTENTIAL_VULNERABILITY) String potentialVulnerability, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership); + 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 EMM.\n" + + "active: The devices that are registered with WSO2 EMM and are actively " + + "communicating with the server.\n" + + "inactive: The devices that are registered with WSO2 EMM but unable to actively" + + " communicate with the server.\n" + + "removed: The devices that have unregistered from WSO2 EMM.", + 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 EMM.\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 EMM.\n", + tags = "Dashboard") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - Response getFeatureNonCompliantDeviceCountOverTotal(@QueryParam(NON_COMPLIANT_FEATURE_CODE) String nonCompliantFeatureCode, - @QueryParam(PLATFORM) String platform, - @QueryParam(OWNERSHIP) String ownership); + 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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - 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); + 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 EMM.\n" + + "active: The devices that are registered with WSO2 EMM and are actively " + + "communicating with the server.\n" + + "inactive: The devices that are registered with WSO2 EMM but unable to actively" + + " communicate with the server.\n" + + "removed: The devices that have unregistered from WSO2 EMM.", + 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 EMM.\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") + @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) + }) @Permission(name = "View Dashboard", permission = "/device-mgt/dashboard/view") - 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); -} + 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); +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/RoleManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/RoleManagementServiceImpl.java index 35ccabfab35..ee664e2c63d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/RoleManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/RoleManagementServiceImpl.java @@ -143,6 +143,17 @@ public class RoleManagementServiceImpl implements RoleManagementService { } } + private UIPermissionNode getAllRolePermissions(String roleName, UserRealm userRealm) throws UserAdminException { + org.wso2.carbon.user.core.UserRealm userRealmCore = null; + if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { + userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; + } + final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); + final UIPermissionNode rolePermissions = + userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); + return rolePermissions; + } + private UIPermissionNode getUIPermissionNode(String roleName, UserRealm userRealm) throws UserAdminException { org.wso2.carbon.user.core.UserRealm userRealmCore = null; @@ -228,6 +239,19 @@ public class RoleManagementServiceImpl implements RoleManagementService { return list; } + + private List getAuthorizedPermissions(UIPermissionNode uiPermissionNode, List list) { + for (UIPermissionNode permissionNode : uiPermissionNode.getNodeList()) { + if (permissionNode.isSelected()) { + list.add(permissionNode.getResourcePath()); + } + if (permissionNode.getNodeList() != null && permissionNode.getNodeList().length > 0) { + getAuthorizedPermissions(permissionNode, list); + } + } + return list; + } + @POST @Override public Response addRole(RoleInfo roleInfo) { @@ -377,6 +401,17 @@ public class RoleManagementServiceImpl implements RoleManagementService { } if (roleInfo.getPermissions() != null) { + // Get all role permissions + final UIPermissionNode rolePermissions = this.getAllRolePermissions(roleName, userRealm); + List permissions = new ArrayList(); + this.getAuthorizedPermissions(rolePermissions, permissions); + for (String permission : roleInfo.getPermissions()) { + permissions.add(permission); + } + String [] allApplicablePerms = new String[permissions.size()]; + allApplicablePerms = permissions.toArray(allApplicablePerms); + roleInfo.setPermissions(allApplicablePerms); + // Delete all authorizations for the current role before authorizing the permission tree authorizationManager.clearRoleAuthorization(roleName); if (roleInfo.getPermissions().length > 0) { @@ -394,6 +429,11 @@ public class RoleManagementServiceImpl implements RoleManagementService { log.error(msg, e); return Response.serverError().entity( new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build(); + } catch (UserAdminException e) { + String msg = "Error occurred while updating permissions of the role '" + roleName + "'"; + log.error(msg, e); + return Response.serverError().entity( + new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build(); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java index 96d0cf2c128..1b527337c8f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/UserManagementServiceImpl.java @@ -87,6 +87,17 @@ public class UserManagementServiceImpl implements UserManagementService { if (log.isDebugEnabled()) { log.debug("User by username: " + userInfo.getUsername() + " was found."); } + DeviceManagementProviderService dms = DeviceMgtAPIUtils.getDeviceManagementService(); + String[] bits = userInfo.getUsername().split("/"); + String username = bits[bits.length - 1]; + String recipient = userInfo.getEmailAddress(); + Properties props = new Properties(); + props.setProperty("first-name", userInfo.getFirstname()); + props.setProperty("username", username); + props.setProperty("password", initialUserPassword); + + EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); + dms.sendRegistrationEmail(metaInfo); return Response.created(new URI(API_BASE_PATH + "/" + URIEncoder.encode(userInfo.getUsername(), "UTF-8"))) .entity( createdUserInfo).build(); @@ -108,6 +119,12 @@ public class UserManagementServiceImpl implements UserManagementService { log.error(msg, e); return Response.serverError().entity( new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while sending registration email to the user " + + userInfo.getUsername(); + log.error(msg, e); + return Response.serverError().entity( + new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build(); } } 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 4228d88255e..1e8726650bd 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/TaskOperation.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/MonitoringOperation.java similarity index 96% rename from components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/TaskOperation.java rename to components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/MonitoringOperation.java index a7143b71730..7ce7000d815 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/TaskOperation.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/MonitoringOperation.java @@ -21,7 +21,7 @@ package org.wso2.carbon.device.mgt.common; /** * */ -public class TaskOperation { +public class MonitoringOperation { private String taskName; private int recurrentTimes; @@ -42,5 +42,6 @@ public class TaskOperation { this.recurrentTimes = recurrentTimes; } + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/OperationMonitoringTaskConfig.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/OperationMonitoringTaskConfig.java new file mode 100644 index 00000000000..ec50a02b6fb --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/OperationMonitoringTaskConfig.java @@ -0,0 +1,57 @@ +/* + * 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.common; + +import java.util.ArrayList; +import java.util.List; + +/** + * This class holds configurations for Operation Monitoring Task. + */ +public class OperationMonitoringTaskConfig { + + private boolean isEnabled; + private int frequency; + private List monitoringOperation = new ArrayList<>(); + + public boolean isEnabled() { + return isEnabled; + } + + public void setEnabled(boolean enabled) { + isEnabled = enabled; + } + + public int getFrequency() { + return frequency; + } + + public void setFrequency(int frequency) { + this.frequency = frequency; + } + + public List getMonitoringOperation() { + return monitoringOperation; + } + + public void setMonitoringOperation(List monitoringOperation) { + this.monitoringOperation = monitoringOperation; + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/spi/DeviceManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/spi/DeviceManagementService.java index 24836a02ae6..5870436678c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/spi/DeviceManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/spi/DeviceManagementService.java @@ -20,13 +20,11 @@ package org.wso2.carbon.device.mgt.common.spi; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManager; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.ProvisioningConfig; -import org.wso2.carbon.device.mgt.common.TaskOperation; import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig; -import java.util.List; - /** * Composite interface that acts as the SPI exposing all device management as well as application management * functionalities. @@ -37,7 +35,7 @@ public interface DeviceManagementService { String getType(); - List getTasksForPlatform();//getTasksConfiguraitons + OperationMonitoringTaskConfig getOperationMonitoringConfig(); DeviceManager getDeviceManager(); 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 190b4324254..2427761ab47 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java index 2526ece3050..9e2a81d5c38 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/DeviceManagementPluginRepository.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceTypeIdentifier; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.ProvisioningConfig; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager; import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy; @@ -31,8 +32,11 @@ import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent; import org.wso2.carbon.device.mgt.core.internal.DeviceManagerStartupListener; +import org.wso2.carbon.device.mgt.core.internal.DeviceMonitoringOperationDataHolder; import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl; import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerRepository; +import org.wso2.carbon.device.mgt.core.task.DeviceMgtTaskException; +import org.wso2.carbon.device.mgt.core.task.DeviceTaskManagerService; import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; import java.util.Collections; @@ -72,6 +76,7 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis provider.getDeviceManager() .requireDeviceAuthorization()); registerPushNotificationStrategy(provider); + registerMonitoringTask(provider); } } catch (DeviceManagementException e) { throw new DeviceManagementException("Error occurred while adding device management provider '" + @@ -87,19 +92,26 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis } } - public void removeDeviceManagementProvider(DeviceManagementService provider) throws DeviceManagementException { - String deviceTypeName = provider.getType().toLowerCase(); - DeviceTypeIdentifier deviceTypeIdentifier; - ProvisioningConfig provisioningConfig = provider.getProvisioningConfig(); - if (provisioningConfig.isSharedWithAllTenants()) { - deviceTypeIdentifier = new DeviceTypeIdentifier(deviceTypeName); - providers.remove(deviceTypeIdentifier); - } else { - int providerTenantId = DeviceManagerUtil.getTenantId(provisioningConfig.getProviderTenantDomain()); - deviceTypeIdentifier = new DeviceTypeIdentifier(deviceTypeName, providerTenantId); - providers.remove(deviceTypeIdentifier); - } - OperationManager operationManager = operationManagerRepository.getOperationManager(deviceTypeIdentifier); + public void removeDeviceManagementProvider(DeviceManagementService provider) + throws DeviceManagementException { + String deviceTypeName = provider.getType().toLowerCase(); + DeviceTypeIdentifier deviceTypeIdentifier; + ProvisioningConfig provisioningConfig = provider.getProvisioningConfig(); + if (provisioningConfig.isSharedWithAllTenants()) { + deviceTypeIdentifier = new DeviceTypeIdentifier(deviceTypeName); + providers.remove(deviceTypeIdentifier); + } else { + int providerTenantId = DeviceManagerUtil.getTenantId(provisioningConfig.getProviderTenantDomain()); + deviceTypeIdentifier = new DeviceTypeIdentifier(deviceTypeName, providerTenantId); + providers.remove(deviceTypeIdentifier); + } + unregisterPushNotificationStrategy(deviceTypeIdentifier); + unregisterMonitoringTask(provider); + } + + private void unregisterPushNotificationStrategy(DeviceTypeIdentifier deviceTypeIdentifier) { + OperationManager operationManager = operationManagerRepository.getOperationManager( + deviceTypeIdentifier); if (operationManager != null) { NotificationStrategy notificationStrategy = operationManager.getNotificationStrategy(); if (notificationStrategy != null) { @@ -137,34 +149,78 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain( deviceManagementService.getProvisioningConfig().getProviderTenantDomain(), true); try { - boolean isSharedWithAllTenants = deviceManagementService.getProvisioningConfig().isSharedWithAllTenants(); - DeviceTypeIdentifier deviceTypeIdentifier; - if (isSharedWithAllTenants) { - deviceTypeIdentifier = new DeviceTypeIdentifier(deviceManagementService.getType()); - } else { - int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - deviceTypeIdentifier = new DeviceTypeIdentifier(deviceManagementService.getType(), tenantId); - } + boolean isSharedWithAllTenants = deviceManagementService.getProvisioningConfig().isSharedWithAllTenants(); + DeviceTypeIdentifier deviceTypeIdentifier; + if (isSharedWithAllTenants) { + deviceTypeIdentifier = new DeviceTypeIdentifier(deviceManagementService.getType()); + } else { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + deviceTypeIdentifier = new DeviceTypeIdentifier(deviceManagementService.getType(), tenantId); + } - if (pushNoteConfig != null) { - PushNotificationProvider provider = DeviceManagementDataHolder.getInstance() - .getPushNotificationProviderRepository().getProvider(pushNoteConfig.getType()); - if (provider == null) { - throw new DeviceManagementException( - "No registered push notification provider found for the type: '" + - pushNoteConfig.getType() + "'."); - } - NotificationStrategy notificationStrategy = provider.getNotificationStrategy(pushNoteConfig); - operationManagerRepository.addOperationManager(deviceTypeIdentifier, new OperationManagerImpl( - notificationStrategy)); - } else { - operationManagerRepository.addOperationManager(deviceTypeIdentifier, new OperationManagerImpl()); + if (pushNoteConfig != null) { + PushNotificationProvider provider = DeviceManagementDataHolder.getInstance() + .getPushNotificationProviderRepository().getProvider(pushNoteConfig.getType()); + if (provider == null) { + throw new DeviceManagementException( + "No registered push notification provider found for the type: '" + + pushNoteConfig.getType() + "'."); } + NotificationStrategy notificationStrategy = provider.getNotificationStrategy(pushNoteConfig); + operationManagerRepository.addOperationManager(deviceTypeIdentifier, + new OperationManagerImpl(deviceTypeIdentifier.getDeviceType(), notificationStrategy)); + } else { + operationManagerRepository.addOperationManager(deviceTypeIdentifier, + new OperationManagerImpl(deviceTypeIdentifier.getDeviceType())); + } } finally { PrivilegedCarbonContext.endTenantFlow(); } } + private void registerMonitoringTask(DeviceManagementService deviceManagementService) + throws DeviceManagementException { + try { + DeviceTaskManagerService deviceTaskManagerService = DeviceManagementDataHolder.getInstance() + .getDeviceTaskManagerService(); + + OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementService + .getOperationMonitoringConfig(); + + if (operationMonitoringTaskConfig != null && operationMonitoringTaskConfig.isEnabled()) { + + if (deviceTaskManagerService == null) { + DeviceMonitoringOperationDataHolder.getInstance().addOperationMonitoringConfigToMap( + deviceManagementService.getType(), operationMonitoringTaskConfig); + } else { + deviceTaskManagerService.startTask(deviceManagementService.getType(), + operationMonitoringTaskConfig); + // TODO: In here a race condition can arise. Need to handle it. + } + } + } catch (DeviceMgtTaskException e) { + throw new DeviceManagementException("Error occurred while adding task service for '" + + deviceManagementService.getType() + "'", e); + } + } + + private void unregisterMonitoringTask(DeviceManagementService deviceManagementService) + throws DeviceManagementException { + try { + DeviceTaskManagerService deviceTaskManagerService = DeviceManagementDataHolder.getInstance() + .getDeviceTaskManagerService(); + OperationMonitoringTaskConfig operationMonitoringTaskConfig = deviceManagementService + .getOperationMonitoringConfig(); + if (operationMonitoringTaskConfig != null) { + deviceTaskManagerService.stopTask(deviceManagementService.getType(), + deviceManagementService.getOperationMonitoringConfig()); + } + } catch (DeviceMgtTaskException e) { + throw new DeviceManagementException("Error occurred while removing task service for '" + + deviceManagementService.getType() + "'", e); + } + } + public OperationManager getOperationManager(String deviceType, int tenantId) { //Priority need to be given to the tenant before public. DeviceTypeIdentifier deviceTypeIdentifier = new DeviceTypeIdentifier(deviceType.toLowerCase(), tenantId); @@ -189,6 +245,7 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis DeviceManagerUtil.registerDeviceType(deviceTypeName, tenantId, provisioningConfig.isSharedWithAllTenants()); registerPushNotificationStrategy(provider); + registerMonitoringTask(provider); //TODO: //This is a temporory fix. //windows and IOS cannot resolve user info by extracting certs @@ -207,5 +264,4 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis this.isInited = true; } } - } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedFileProtocolIteratorFactory.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedFileProtocolIteratorFactory.java index 13943756567..01780e26d64 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedFileProtocolIteratorFactory.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedFileProtocolIteratorFactory.java @@ -21,7 +21,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; -public class ExtendedFileProtocolIteratorFactory implements DirectoryIteratorFactory { +final class ExtendedFileProtocolIteratorFactory implements DirectoryIteratorFactory { @Override public StreamIterator create(URL url, Filter filter) throws IOException { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedIteratorFactory.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedIteratorFactory.java index 18c8b7620c8..0a05b1079cb 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedIteratorFactory.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/permission/ExtendedIteratorFactory.java @@ -24,11 +24,11 @@ import java.io.IOException; import java.net.URL; import java.util.concurrent.ConcurrentHashMap; -public class ExtendedIteratorFactory { +class ExtendedIteratorFactory { private static final ConcurrentHashMap registry = new ConcurrentHashMap(); - public static StreamIterator create(URL url, Filter filter) throws IOException { + static StreamIterator create(URL url, Filter filter) throws IOException { String urlString = url.toString(); if(urlString.endsWith("!/")) { urlString = urlString.substring(4); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java index c688b5997fa..1eb39fc5020 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/DeviceDAO.java @@ -218,6 +218,17 @@ public interface DeviceDAO { */ List getDevicesOfUser(String username, int tenantId) throws DeviceManagementDAOException; + /** + * This method is used to retrieve the devices of given user of given device type. + * @param username user name. + * @param type device type. + * @param tenantId tenant id. + * @return + * @throws DeviceManagementDAOException + */ + List getDevicesOfUser(String username, String type, int tenantId) throws DeviceManagementDAOException; + + /** * This method is used to retrieve devices of a given user as a paginated result. * diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java index 3c08f863398..ffb9aacc1f1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java @@ -82,16 +82,17 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { int rows; try { conn = this.getConnection(); - String sql = "UPDATE DM_DEVICE SET DESCRIPTION = ?, LAST_UPDATED_TIMESTAMP = ? " + + String sql = "UPDATE DM_DEVICE SET NAME = ?, DESCRIPTION = ?, LAST_UPDATED_TIMESTAMP = ? " + "WHERE DEVICE_TYPE_ID = (SELECT ID FROM DM_DEVICE_TYPE WHERE NAME = ? AND PROVIDER_TENANT_ID = ?) " + "AND DEVICE_IDENTIFICATION = ? AND TENANT_ID = ?"; stmt = conn.prepareStatement(sql, new String[] {"id"}); - stmt.setString(1, device.getDescription()); - stmt.setTimestamp(2, new Timestamp(new Date().getTime())); - stmt.setString(3, device.getType()); - stmt.setInt(4, tenantId); - stmt.setString(5, device.getDeviceIdentifier()); - stmt.setInt(6, tenantId); + stmt.setString(1, device.getName()); + stmt.setString(2, device.getDescription()); + stmt.setTimestamp(3, new Timestamp(new Date().getTime())); + stmt.setString(4, device.getType()); + stmt.setInt(5, tenantId); + stmt.setString(6, device.getDeviceIdentifier()); + stmt.setInt(7, tenantId); rows = stmt.executeUpdate(); return (rows > 0); } catch (SQLException e) { @@ -368,6 +369,40 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO { return devices; } + + @Override + public List getDevicesOfUser(String username, String type, int tenantId) throws DeviceManagementDAOException { + Connection conn; + PreparedStatement stmt = null; + ResultSet rs = null; + List devices = new ArrayList<>(); + try { + conn = this.getConnection(); + String sql = "SELECT e1.OWNER, e1.OWNERSHIP, e1.ENROLMENT_ID, e1.DEVICE_ID, e1.STATUS, e1.DATE_OF_LAST_UPDATE," + + " e1.DATE_OF_ENROLMENT, d.DESCRIPTION, d.NAME AS DEVICE_NAME, d.DEVICE_IDENTIFICATION, t.NAME " + + "AS DEVICE_TYPE FROM DM_DEVICE d, (SELECT e.OWNER, e.OWNERSHIP, e.ID AS ENROLMENT_ID, " + + "e.DEVICE_ID, e.STATUS, e.DATE_OF_LAST_UPDATE, e.DATE_OF_ENROLMENT FROM DM_ENROLMENT e WHERE " + + "e.TENANT_ID = ? AND e.OWNER = ?) e1, DM_DEVICE_TYPE t WHERE d.ID = e1.DEVICE_ID " + + "AND t.ID = d.DEVICE_TYPE_ID AND t.NAME= ?"; + stmt = conn.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, username); + stmt.setString(3, type); + rs = stmt.executeQuery(); + + while (rs.next()) { + Device device = DeviceManagementDAOUtil.loadDevice(rs); + devices.add(device); + } + } catch (SQLException e) { + throw new DeviceManagementDAOException("Error occurred while fetching the list of devices belongs to '" + + username + "'", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + return devices; + } + private Connection getConnection() throws SQLException { return DeviceManagementDAOFactory.getConnection(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementDataHolder.java index ea502206448..0ca96ec4d29 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementDataHolder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementDataHolder.java @@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.core.internal; import org.wso2.carbon.apimgt.impl.APIManagerConfiguration; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; @@ -28,6 +29,7 @@ import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig; import org.wso2.carbon.device.mgt.core.push.notification.mgt.PushNotificationProviderRepository; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; +import org.wso2.carbon.device.mgt.core.task.DeviceTaskManagerService; import org.wso2.carbon.email.sender.core.service.EmailSenderService; import org.wso2.carbon.ntask.core.service.TaskService; import org.wso2.carbon.registry.core.service.RegistryService; @@ -36,6 +38,7 @@ import org.wso2.carbon.user.core.tenant.TenantManager; import org.wso2.carbon.utils.ConfigurationContextService; import java.util.HashMap; +import java.util.Map; public class DeviceManagementDataHolder { @@ -56,6 +59,18 @@ public class DeviceManagementDataHolder { private TaskService taskService; private EmailSenderService emailSenderService; private PushNotificationProviderRepository pushNotificationProviderRepository; + private DeviceTaskManagerService deviceTaskManagerService; + + private Map map = new HashMap<>(); + + + public void addToMap(OperationMonitoringTaskConfig taskConfig) { + this.map.put("aa", taskConfig); + } + + public Map getMap(){ + return this.map; + } private APIManagerConfiguration apiManagerConfiguration; @@ -210,4 +225,11 @@ public class DeviceManagementDataHolder { return pushNotificationProviderRepository; } + public DeviceTaskManagerService getDeviceTaskManagerService() { + return deviceTaskManagerService; + } + + public void setDeviceTaskManagerService(DeviceTaskManagerService deviceTaskManagerService) { + this.deviceTaskManagerService = deviceTaskManagerService; + } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementServiceComponent.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementServiceComponent.java index e1b1389a78d..adbf6cda436 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementServiceComponent.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceManagementServiceComponent.java @@ -53,6 +53,7 @@ import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl; import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderServiceImpl; +import org.wso2.carbon.device.mgt.core.task.DeviceTaskManagerService; import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer; import org.wso2.carbon.email.sender.core.service.EmailSenderService; import org.wso2.carbon.ndatasource.core.DataSourceService; @@ -402,4 +403,18 @@ public class DeviceManagementServiceComponent { DeviceManagementDataHolder.getInstance().setEmailSenderService(null); } + + protected void setDeviceTaskManagerService(DeviceTaskManagerService emailSenderService) { + if (log.isDebugEnabled()) { + } + DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(emailSenderService); + } + + protected void unsetDeviceTaskManagerService(DeviceTaskManagerService emailSenderService) { + if (log.isDebugEnabled()) { + } + DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null); + } } + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceMonitoringOperationDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceMonitoringOperationDataHolder.java new file mode 100644 index 00000000000..5ae804d93fc --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceMonitoringOperationDataHolder.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, 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.core.internal; + +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * + */ +public class DeviceMonitoringOperationDataHolder { + + private static DeviceMonitoringOperationDataHolder thisInstance = new DeviceMonitoringOperationDataHolder(); + private Map OperationConfigMap = Collections.synchronizedMap( + new HashMap()); + + + public static DeviceMonitoringOperationDataHolder getInstance() { + return thisInstance; + } + + public void addOperationMonitoringConfigToMap(String deviceType, OperationMonitoringTaskConfig OperationConfig) { + this.OperationConfigMap.put(deviceType, OperationConfig); + } + + public Map getOperationMonitoringConfigFromMap(){ + return this.OperationConfigMap; + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceTaskManagerServiceComponent.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceTaskManagerServiceComponent.java index 7051d72f51c..7dab5413215 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceTaskManagerServiceComponent.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/internal/DeviceTaskManagerServiceComponent.java @@ -22,15 +22,19 @@ package org.wso2.carbon.device.mgt.core.internal; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.service.component.ComponentContext; -import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; import org.wso2.carbon.device.mgt.core.device.details.mgt.impl.DeviceInformationManagerImpl; import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService; import org.wso2.carbon.device.mgt.core.search.mgt.impl.SearchManagerServiceImpl; +import org.wso2.carbon.device.mgt.core.task.DeviceMgtTaskException; import org.wso2.carbon.device.mgt.core.task.DeviceTaskManagerService; import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerServiceImpl; import org.wso2.carbon.ntask.core.service.TaskService; +import java.util.ArrayList; +import java.util.Map; + /** * @scr.component name="org.wso2.carbon.device.task.manager" immediate="true" * @scr.reference name="device.ntask.component" @@ -45,6 +49,8 @@ public class DeviceTaskManagerServiceComponent { private static Log log = LogFactory.getLog(DeviceManagementServiceComponent.class); + + @SuppressWarnings("unused") protected void activate(ComponentContext componentContext) { try { @@ -52,13 +58,14 @@ public class DeviceTaskManagerServiceComponent { log.debug("Initializing device details retrieving task manager bundle."); } // This will start the device details retrieving task. - boolean taskEnable = - DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getTaskConfiguration(). - isEnabled(); - if (taskEnable) { - DeviceTaskManagerService taskManagerService = new DeviceTaskManagerServiceImpl(); - taskManagerService.startTask(); - } +// DeviceTaskManagerService deviceTaskManagerService = new DeviceTaskManagerServiceImpl(); +// DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService( +// deviceTaskManagerService); +// componentContext.getBundleContext().registerService(DeviceTaskManagerService.class, +// deviceTaskManagerService, null); + + getDeviceOperationMonitoringConfig(componentContext); + componentContext.getBundleContext().registerService(DeviceInformationManager.class, new DeviceInformationManagerImpl(), null); @@ -69,6 +76,26 @@ public class DeviceTaskManagerServiceComponent { } } + private void getDeviceOperationMonitoringConfig(ComponentContext componentContext) throws DeviceMgtTaskException { + + DeviceTaskManagerService deviceTaskManagerService = new DeviceTaskManagerServiceImpl(); + + DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService( + deviceTaskManagerService); + + componentContext.getBundleContext().registerService(DeviceTaskManagerService.class, + deviceTaskManagerService, null); + + Map deviceConfigMap = DeviceMonitoringOperationDataHolder + .getInstance().getOperationMonitoringConfigFromMap(); + + for (String platformType : new ArrayList(deviceConfigMap.keySet())) { + deviceTaskManagerService.startTask(platformType, deviceConfigMap.get(platformType)); + deviceConfigMap.remove(platformType); + } + + } + @SuppressWarnings("unused") protected void deactivate(ComponentContext componentContext) { try { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java index 7f4e2f7a993..e79d95c5cc2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java @@ -25,9 +25,9 @@ import org.wso2.carbon.device.mgt.common.Device; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.common.InvalidDeviceException; +import org.wso2.carbon.device.mgt.common.MonitoringOperation; import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; -import org.wso2.carbon.device.mgt.common.TaskOperation; import org.wso2.carbon.device.mgt.common.TransactionManagementException; import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants; @@ -61,9 +61,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * This class implements all the functionality exposed as part of the OperationManager. Any transaction initiated @@ -83,6 +81,7 @@ public class OperationManagerImpl implements OperationManager { private DeviceDAO deviceDAO; private EnrollmentDAO enrollmentDAO; private NotificationStrategy notificationStrategy; + private String deviceType; public OperationManagerImpl() { commandOperationDAO = OperationManagementDAOFactory.getCommandOperationDAO(); @@ -95,6 +94,11 @@ public class OperationManagerImpl implements OperationManager { enrollmentDAO = DeviceManagementDAOFactory.getEnrollmentDAO(); } + public OperationManagerImpl(String deviceType) { + this(); + this.deviceType = deviceType; + } + public NotificationStrategy getNotificationStrategy() { return notificationStrategy; } @@ -103,8 +107,8 @@ public class OperationManagerImpl implements OperationManager { this.notificationStrategy = notificationStrategy; } - public OperationManagerImpl(NotificationStrategy notificationStrategy) { - this(); + public OperationManagerImpl(String deviceType, NotificationStrategy notificationStrategy) { + this(deviceType); this.notificationStrategy = notificationStrategy; } @@ -243,7 +247,7 @@ public class OperationManagerImpl implements OperationManager { List unAuthorizedDeviceList = new ArrayList<>(); DeviceIDHolder deviceIDHolder = new DeviceIDHolder(); try { - if (operation != null && isAuthenticationSkippedOperation(operation, deviceIds)) { + if (operation != null && isAuthenticationSkippedOperation(operation)) { authorizedDeviceList = deviceIds; } else { boolean isAuthorized; @@ -885,11 +889,11 @@ public class OperationManagerImpl implements OperationManager { return CarbonContext.getThreadLocalCarbonContext().getUsername(); } - private boolean isAuthenticationSkippedOperation(Operation operation, List deviceIds) { + private boolean isAuthenticationSkippedOperation(Operation operation) { //This is to check weather operations are coming from the task related to retrieving device information. - DeviceTaskManager taskManager = new DeviceTaskManagerImpl(); - if (taskManager.isTaskOperation(operation.getCode(), deviceIds)) { + DeviceTaskManager taskManager = new DeviceTaskManagerImpl(deviceType); + if (taskManager.isTaskOperation(operation.getCode())) { return true; } @@ -1034,29 +1038,31 @@ public class OperationManagerImpl implements OperationManager { } private boolean isTaskScheduledOperation(Operation operation, List deviceIds) { - List taskOperations = new ArrayList<>(); - Map> deviceTypeSpecificTasks = new HashMap<>(); DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance(). getDeviceManagementProvider(); - deviceTypeSpecificTasks = deviceManagementProviderService.getTaskList();//Get task list from each device type + List monitoringOperations = deviceManagementProviderService.getMonitoringOperationList(deviceType);//Get task list from each device type - for(DeviceIdentifier deviceIdentifier : deviceIds){ - String deviceType = deviceIdentifier.getType(); - for(String dti : deviceTypeSpecificTasks.keySet()){ - if (dti.equals(deviceType)) { - taskOperations = deviceTypeSpecificTasks.get(dti); - for(TaskOperation op : taskOperations){ - if (operation.getCode().equals(op.getTaskName())) { - return true; - } - } - } + for(MonitoringOperation op : monitoringOperations){ + if (operation.getCode().equals(op.getTaskName())) { + return true; } - - } +// for(String dti : taskOperation){ +// if (dti.equals(deviceType)) { +// monitoringOperations = deviceTypeSpecificTasks.get(dti); +// +// } +// } +// +// for(DeviceIdentifier deviceIdentifier : deviceIds){ +// String deviceType = deviceIdentifier.getType(); +// +// +// +// } + // TaskConfiguration taskConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig(). // getTaskConfiguration(); // for (TaskConfiguration.Operation op : taskConfiguration.getOperations()) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/SearchDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/SearchDAO.java index bd17d7c26ef..f40c074d8c7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/SearchDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/SearchDAO.java @@ -19,14 +19,11 @@ package org.wso2.carbon.device.mgt.core.search.mgt.dao; -import org.wso2.carbon.device.mgt.common.Device; - -import java.util.List; public interface SearchDAO { - List searchDeviceDetailsTable(String query) throws SearchDAOException; - - List searchDevicePropertyTable(String query) throws SearchDAOException; +// List searchDeviceDetailsTable(String query) throws SearchDAOException; +// +// List searchDevicePropertyTable(String query) throws SearchDAOException; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/impl/SearchDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/impl/SearchDAOImpl.java index 1090e88c62b..8d2c7056992 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/impl/SearchDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/dao/impl/SearchDAOImpl.java @@ -19,235 +19,220 @@ package org.wso2.carbon.device.mgt.core.search.mgt.dao.impl; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; -import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation; -import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; -import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; import org.wso2.carbon.device.mgt.core.search.mgt.dao.SearchDAO; -import org.wso2.carbon.device.mgt.core.search.mgt.dao.SearchDAOException; -import org.wso2.carbon.device.mgt.core.search.mgt.impl.Utils; -import java.sql.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; public class SearchDAOImpl implements SearchDAO { - - private static final Log log = LogFactory.getLog(SearchDAOImpl.class); - - @Override - public List searchDeviceDetailsTable(String query) throws SearchDAOException { - if (log.isDebugEnabled()) { - log.debug("Query : " + query); - } - Connection conn; - PreparedStatement stmt = null; - ResultSet rs; - List devices = new ArrayList<>(); - Map devs = new HashMap<>(); - try { - conn = this.getConnection(); - stmt = conn.prepareStatement(query); - rs = stmt.executeQuery(); - while (rs.next()) { - if (!devs.containsKey(rs.getInt("ID"))) { - Device device = new Device(); - device.setId(rs.getInt("ID")); - device.setDescription(rs.getString("DESCRIPTION")); - device.setName("NAME"); - device.setType(rs.getString("DEVICE_TYPE_NAME")); - device.setDeviceIdentifier(rs.getString("DEVICE_IDENTIFICATION")); - - DeviceIdentifier identifier = new DeviceIdentifier(); - identifier.setType(rs.getString("DEVICE_TYPE_NAME")); - identifier.setId(rs.getString("DEVICE_IDENTIFICATION")); - - DeviceInfo deviceInfo = new DeviceInfo(); - deviceInfo.setAvailableRAMMemory(rs.getDouble("AVAILABLE_RAM_MEMORY")); - deviceInfo.setBatteryLevel(rs.getDouble("BATTERY_LEVEL")); - deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); - deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); - deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); - deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); - deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); - deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); - deviceInfo.setInternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); - deviceInfo.setOsVersion(rs.getString("OS_VERSION")); - deviceInfo.setOsBuildDate(rs.getString("OS_BUILD_DATE")); - deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); - deviceInfo.setSsid(rs.getString("SSID")); - deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); - deviceInfo.setVendor(rs.getString("VENDOR")); - deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); - - DeviceLocation deviceLocation = new DeviceLocation(); - deviceLocation.setLatitude(rs.getDouble("LATITUDE")); - deviceLocation.setLongitude(rs.getDouble("LONGITUDE")); - deviceLocation.setStreet1(rs.getString("STREET1")); - deviceLocation.setStreet2(rs.getString("STREET2")); - deviceLocation.setCity(rs.getString("CITY")); - deviceLocation.setState(rs.getString("STATE")); - deviceLocation.setZip(rs.getString("ZIP")); - deviceLocation.setCountry(rs.getString("COUNTRY")); - deviceLocation.setDeviceId(rs.getInt("ID")); - deviceLocation.setUpdatedTime(new java.util.Date(rs.getLong("DL_UPDATED_TIMESTAMP"))); - - deviceInfo.setLocation(deviceLocation); - device.setDeviceInfo(deviceInfo); - devices.add(device); - devs.put(device.getId(), device.getId()); - } - } - } catch (SQLException e) { - throw new SearchDAOException("Error occurred while acquiring the device details.", e); - } finally { - DeviceManagementDAOUtil.cleanupResources(stmt, null); - } - - this.fillPropertiesOfDevices(devices); - - if (log.isDebugEnabled()) { - log.debug("Number of the device returned from the query : " + devices.size()); - } - return devices; - } - - @Override - public List searchDevicePropertyTable(String query) throws SearchDAOException { - if (log.isDebugEnabled()) { - log.debug("Query : " + query); - } - - Connection conn; - PreparedStatement stmt = null; - ResultSet rs; - List devices = new ArrayList<>(); - Map devs = new HashMap<>(); - try { - conn = this.getConnection(); - stmt = conn.prepareStatement(query); - rs = stmt.executeQuery(); - while (rs.next()) { - if (!devs.containsKey(rs.getInt("ID"))) { - Device device = new Device(); - device.setId(rs.getInt("ID")); - device.setDescription(rs.getString("DESCRIPTION")); - device.setName(rs.getString("NAME")); - device.setType(rs.getString("DEVICE_TYPE_NAME")); - device.setDeviceIdentifier(rs.getString("DEVICE_IDENTIFICATION")); - - DeviceIdentifier identifier = new DeviceIdentifier(); - identifier.setType(rs.getString("DEVICE_TYPE_NAME")); - identifier.setId(rs.getString("DEVICE_IDENTIFICATION")); - - DeviceInfo deviceInfo = new DeviceInfo(); - deviceInfo.setAvailableRAMMemory(rs.getDouble("AVAILABLE_RAM_MEMORY")); - deviceInfo.setBatteryLevel(rs.getDouble("BATTERY_LEVEL")); - deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); - deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); - deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); - deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); - deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); - deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); - deviceInfo.setInternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); - deviceInfo.setOsVersion(rs.getString("OS_VERSION")); - deviceInfo.setOsBuildDate(rs.getString("OS_BUILD_DATE")); - deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); - deviceInfo.setSsid(rs.getString("SSID")); - deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); - deviceInfo.setVendor(rs.getString("VENDOR")); - deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); - - DeviceLocation deviceLocation = new DeviceLocation(); - deviceLocation.setLatitude(rs.getDouble("LATITUDE")); - deviceLocation.setLongitude(rs.getDouble("LONGITUDE")); - deviceLocation.setStreet1(rs.getString("STREET1")); - deviceLocation.setStreet2(rs.getString("STREET2")); - deviceLocation.setCity(rs.getString("CITY")); - deviceLocation.setState(rs.getString("STATE")); - deviceLocation.setZip(rs.getString("ZIP")); - deviceLocation.setCountry(rs.getString("COUNTRY")); - deviceLocation.setDeviceId(rs.getInt("ID")); - deviceLocation.setUpdatedTime(new java.util.Date(rs.getLong("DL_UPDATED_TIMESTAMP"))); - - deviceInfo.setLocation(deviceLocation); - device.setDeviceInfo(deviceInfo); - devices.add(device); - devs.put(device.getId(), device.getId()); - } - - } - } catch (SQLException e) { - throw new SearchDAOException("Error occurred while aquiring the device details.", e); - } finally { - DeviceManagementDAOUtil.cleanupResources(stmt, null); - } - - this.fillPropertiesOfDevices(devices); - - if (log.isDebugEnabled()) { - log.debug("Number of the device returned from the query : " + devices.size()); - } - - return devices; - } - - - private Connection getConnection() throws SQLException { - return DeviceManagementDAOFactory.getConnection(); - } - - private List fillPropertiesOfDevices(List devices) throws SearchDAOException { - if (devices.isEmpty()) { - return null; - } - - Connection conn; - PreparedStatement stmt; - ResultSet rs; - - try { - conn = this.getConnection(); - String query = "SELECT * FROM DM_DEVICE_INFO WHERE DEVICE_ID IN (?) ORDER BY DEVICE_ID ;"; - stmt = conn.prepareStatement(query); - if (conn.getMetaData().getDatabaseProductName().contains("H2") || - conn.getMetaData().getDatabaseProductName().contains("MySQL")) { - String inData = Utils.getDeviceIdsAsString(devices); - stmt.setString(1, inData); - } else { - Array array = conn.createArrayOf("INT", Utils.getArrayOfDeviceIds(devices)); - stmt.setArray(1, array); - } - rs = stmt.executeQuery(); - - DeviceInfo dInfo; - while (rs.next()) { - dInfo = this.getDeviceInfo(devices, rs.getInt("DEVICE_ID")); - dInfo.getDeviceDetailsMap().put(rs.getString("KEY_FIELD"), rs.getString("VALUE_FIELD")); - } - } catch (SQLException e) { - throw new SearchDAOException("Error occurred while retrieving the device properties.", e); - } - return devices; - } - - private DeviceInfo getDeviceInfo(List devices, int deviceId) { - for (Device device : devices) { - if (device.getId() == deviceId) { - if (device.getDeviceInfo() == null) { - device.setDeviceInfo(new DeviceInfo()); - } - return device.getDeviceInfo(); - } - } - return null; - } +// +// private static final Log log = LogFactory.getLog(SearchDAOImpl.class); +// +// @Override +// public List searchDeviceDetailsTable(String query) throws SearchDAOException { +// if (log.isDebugEnabled()) { +// log.debug("Query : " + query); +// } +// Connection conn; +// PreparedStatement stmt = null; +// ResultSet rs; +// List devices = new ArrayList<>(); +// Map devs = new HashMap<>(); +// try { +// conn = this.getConnection(); +// stmt = conn.prepareStatement(query); +// rs = stmt.executeQuery(); +// while (rs.next()) { +// if (!devs.containsKey(rs.getInt("ID"))) { +// Device device = new Device(); +// device.setId(rs.getInt("ID")); +// device.setDescription(rs.getString("DESCRIPTION")); +// device.setName("NAME"); +// device.setType(rs.getString("DEVICE_TYPE_NAME")); +// device.setDeviceIdentifier(rs.getString("DEVICE_IDENTIFICATION")); +// +// DeviceIdentifier identifier = new DeviceIdentifier(); +// identifier.setType(rs.getString("DEVICE_TYPE_NAME")); +// identifier.setId(rs.getString("DEVICE_IDENTIFICATION")); +// +// DeviceInfo deviceInfo = new DeviceInfo(); +// deviceInfo.setAvailableRAMMemory(rs.getDouble("AVAILABLE_RAM_MEMORY")); +// deviceInfo.setBatteryLevel(rs.getDouble("BATTERY_LEVEL")); +// deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); +// deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); +// deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); +// deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); +// deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); +// deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); +// deviceInfo.setInternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); +// deviceInfo.setOsVersion(rs.getString("OS_VERSION")); +// deviceInfo.setOsBuildDate(rs.getString("OS_BUILD_DATE")); +// deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); +// deviceInfo.setSsid(rs.getString("SSID")); +// deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); +// deviceInfo.setVendor(rs.getString("VENDOR")); +// deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); +// +// DeviceLocation deviceLocation = new DeviceLocation(); +// deviceLocation.setLatitude(rs.getDouble("LATITUDE")); +// deviceLocation.setLongitude(rs.getDouble("LONGITUDE")); +// deviceLocation.setStreet1(rs.getString("STREET1")); +// deviceLocation.setStreet2(rs.getString("STREET2")); +// deviceLocation.setCity(rs.getString("CITY")); +// deviceLocation.setState(rs.getString("STATE")); +// deviceLocation.setZip(rs.getString("ZIP")); +// deviceLocation.setCountry(rs.getString("COUNTRY")); +// deviceLocation.setDeviceId(rs.getInt("ID")); +// deviceLocation.setUpdatedTime(new java.util.Date(rs.getLong("DL_UPDATED_TIMESTAMP"))); +// +// deviceInfo.setLocation(deviceLocation); +// device.setDeviceInfo(deviceInfo); +// devices.add(device); +// devs.put(device.getId(), device.getId()); +// } +// } +// } catch (SQLException e) { +// throw new SearchDAOException("Error occurred while acquiring the device details.", e); +// } finally { +// DeviceManagementDAOUtil.cleanupResources(stmt, null); +// } +// +// this.fillPropertiesOfDevices(devices); +// +// if (log.isDebugEnabled()) { +// log.debug("Number of the device returned from the query : " + devices.size()); +// } +// return devices; +// } +// +// @Override +// public List searchDevicePropertyTable(String query) throws SearchDAOException { +// if (log.isDebugEnabled()) { +// log.debug("Query : " + query); +// } +// +// Connection conn; +// PreparedStatement stmt = null; +// ResultSet rs; +// List devices = new ArrayList<>(); +// Map devs = new HashMap<>(); +// try { +// conn = this.getConnection(); +// stmt = conn.prepareStatement(query); +// rs = stmt.executeQuery(); +// while (rs.next()) { +// if (!devs.containsKey(rs.getInt("ID"))) { +// Device device = new Device(); +// device.setId(rs.getInt("ID")); +// device.setDescription(rs.getString("DESCRIPTION")); +// device.setName(rs.getString("NAME")); +// device.setType(rs.getString("DEVICE_TYPE_NAME")); +// device.setDeviceIdentifier(rs.getString("DEVICE_IDENTIFICATION")); +// +// DeviceIdentifier identifier = new DeviceIdentifier(); +// identifier.setType(rs.getString("DEVICE_TYPE_NAME")); +// identifier.setId(rs.getString("DEVICE_IDENTIFICATION")); +// +// DeviceInfo deviceInfo = new DeviceInfo(); +// deviceInfo.setAvailableRAMMemory(rs.getDouble("AVAILABLE_RAM_MEMORY")); +// deviceInfo.setBatteryLevel(rs.getDouble("BATTERY_LEVEL")); +// deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); +// deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); +// deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); +// deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); +// deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); +// deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); +// deviceInfo.setInternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); +// deviceInfo.setOsVersion(rs.getString("OS_VERSION")); +// deviceInfo.setOsBuildDate(rs.getString("OS_BUILD_DATE")); +// deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); +// deviceInfo.setSsid(rs.getString("SSID")); +// deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); +// deviceInfo.setVendor(rs.getString("VENDOR")); +// deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); +// +// DeviceLocation deviceLocation = new DeviceLocation(); +// deviceLocation.setLatitude(rs.getDouble("LATITUDE")); +// deviceLocation.setLongitude(rs.getDouble("LONGITUDE")); +// deviceLocation.setStreet1(rs.getString("STREET1")); +// deviceLocation.setStreet2(rs.getString("STREET2")); +// deviceLocation.setCity(rs.getString("CITY")); +// deviceLocation.setState(rs.getString("STATE")); +// deviceLocation.setZip(rs.getString("ZIP")); +// deviceLocation.setCountry(rs.getString("COUNTRY")); +// deviceLocation.setDeviceId(rs.getInt("ID")); +// deviceLocation.setUpdatedTime(new java.util.Date(rs.getLong("DL_UPDATED_TIMESTAMP"))); +// +// deviceInfo.setLocation(deviceLocation); +// device.setDeviceInfo(deviceInfo); +// devices.add(device); +// devs.put(device.getId(), device.getId()); +// } +// +// } +// } catch (SQLException e) { +// throw new SearchDAOException("Error occurred while aquiring the device details.", e); +// } finally { +// DeviceManagementDAOUtil.cleanupResources(stmt, null); +// } +// +// this.fillPropertiesOfDevices(devices); +// +// if (log.isDebugEnabled()) { +// log.debug("Number of the device returned from the query : " + devices.size()); +// } +// +// return devices; +// } +// +// +// private Connection getConnection() throws SQLException { +// return DeviceManagementDAOFactory.getConnection(); +// } +// +// private List fillPropertiesOfDevices(List devices) throws SearchDAOException { +// if (devices.isEmpty()) { +// return null; +// } +// +// Connection conn; +// PreparedStatement stmt; +// ResultSet rs; +// +// try { +// conn = this.getConnection(); +// String query = "SELECT * FROM DM_DEVICE_INFO WHERE DEVICE_ID IN (?) ORDER BY DEVICE_ID ;"; +// stmt = conn.prepareStatement(query); +// if (conn.getMetaData().getDatabaseProductName().contains("H2") || +// conn.getMetaData().getDatabaseProductName().contains("MySQL")) { +// String inData = Utils.getDeviceIdsAsString(devices); +// stmt.setString(1, inData); +// } else { +// Array array = conn.createArrayOf("INT", Utils.getArrayOfDeviceIds(devices)); +// stmt.setArray(1, array); +// } +// rs = stmt.executeQuery(); +// +// DeviceInfo dInfo; +// while (rs.next()) { +// dInfo = this.getDeviceInfo(devices, rs.getInt("DEVICE_ID")); +// dInfo.getDeviceDetailsMap().put(rs.getString("KEY_FIELD"), rs.getString("VALUE_FIELD")); +// } +// } catch (SQLException e) { +// throw new SearchDAOException("Error occurred while retrieving the device properties.", e); +// } +// return devices; +// } +// +// private DeviceInfo getDeviceInfo(List devices, int deviceId) { +// for (Device device : devices) { +// if (device.getId() == deviceId) { +// if (device.getDeviceInfo() == null) { +// device.setDeviceInfo(new DeviceInfo()); +// } +// return device.getDeviceInfo(); +// } +// } +// return null; +// } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java index 2673c3f2636..7fe10ba8c40 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java @@ -19,29 +19,44 @@ package org.wso2.carbon.device.mgt.core.search.mgt.impl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException; +import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService; +import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; +import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation; import org.wso2.carbon.device.mgt.common.search.SearchContext; import org.wso2.carbon.device.mgt.core.dao.ApplicationDAO; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; +import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; +import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.search.mgt.*; -import org.wso2.carbon.device.mgt.core.search.mgt.dao.SearchDAO; import org.wso2.carbon.device.mgt.core.search.mgt.dao.SearchDAOException; -import java.sql.SQLException; +import java.sql.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ProcessorImpl implements Processor { - - private SearchDAO searchDAO; private ApplicationDAO applicationDAO; + private static final Log log = LogFactory.getLog(ProcessorImpl.class); + private DeviceAccessAuthorizationService deviceAccessAuthorizationService; public ProcessorImpl() { - searchDAO = DeviceManagementDAOFactory.getSearchDAO(); applicationDAO = DeviceManagementDAOFactory.getApplicationDAO(); + deviceAccessAuthorizationService = DeviceManagementDataHolder.getInstance() + .getDeviceAccessAuthorizationService(); + if (deviceAccessAuthorizationService == null) { + String msg = "DeviceAccessAuthorization service has not initialized."; + log.error(msg); + throw new IllegalStateException(msg); + } } @Override @@ -57,23 +72,22 @@ public class ProcessorImpl implements Processor { DeviceManagementDAOFactory.openConnection(); if (queries.containsKey(Constants.GENERAL)) { - generalDevices = searchDAO.searchDeviceDetailsTable(queries.get(Constants.GENERAL).get(0)); + generalDevices = searchDeviceDetailsTable(queries.get(Constants.GENERAL).get(0)); } if (queries.containsKey(Constants.PROP_AND)) { for (String query : queries.get(Constants.PROP_AND)) { - List andDevices = searchDAO.searchDevicePropertyTable(query); + List andDevices = searchDeviceDetailsTable(query); allANDDevices.add(andDevices); } } if (queries.containsKey(Constants.PROP_OR)) { for (String query : queries.get(Constants.PROP_OR)) { - List orDevices = searchDAO.searchDevicePropertyTable(query); + List orDevices = searchDeviceDetailsTable(query); allORDevices.add(orDevices); } } if (queries.containsKey(Constants.LOCATION)) { - locationDevices = searchDAO.searchDevicePropertyTable( - queries.get(Constants.LOCATION).get(0)); + locationDevices = searchDeviceDetailsTable(queries.get(Constants.LOCATION).get(0)); } } catch (InvalidOperatorException e) { throw new SearchMgtException("Invalid operator was provided, so cannot execute the search.", e); @@ -95,10 +109,35 @@ public class ProcessorImpl implements Processor { devices.put(Constants.LOCATION, locationDevices); List finalDevices = aggregator.aggregate(devices); + finalDevices = authorizedDevices(finalDevices); this.setApplicationListOfDevices(finalDevices); return finalDevices; } + /** + * To get the authorized devices for a particular user + * + * @param devices Devices that satisfy search results + * @return Devices that satisfy search results and authorized to be viewed by particular user + */ + private List authorizedDevices(List devices) throws SearchMgtException { + List filteredList = new ArrayList<>(); + try { + for (Device device : devices) { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(device.getDeviceIdentifier(), + device.getType()); + if (deviceAccessAuthorizationService != null && deviceAccessAuthorizationService + .isUserAuthorized(deviceIdentifier)) { + filteredList.add(device); + } + } + return filteredList; + } catch (DeviceAccessAuthorizationException e) { + log.error("Error getting authorized search results for logged in user"); + throw new SearchMgtException(e); + } + } + @Override public List getUpdatedDevices(long epochTime) throws SearchMgtException { @@ -107,9 +146,9 @@ public class ProcessorImpl implements Processor { } QueryBuilder queryBuilder = new QueryBuilderImpl(); try { - String query = queryBuilder.processUpdatedDevices(epochTime); + String query = queryBuilder.processUpdatedDevices(epochTime); DeviceManagementDAOFactory.openConnection(); - return searchDAO.searchDeviceDetailsTable(query); + return searchDeviceDetailsTable(query); } catch (InvalidOperatorException e) { throw new SearchMgtException("Invalid operator was provided, so cannot execute the search.", e); } catch (SQLException e) { @@ -202,5 +241,142 @@ public class ProcessorImpl implements Processor { } } -} + private List searchDeviceDetailsTable(String query) throws SearchDAOException { + if (log.isDebugEnabled()) { + log.debug("Query : " + query); + } + Connection conn; + PreparedStatement stmt = null; + ResultSet rs = null; + List devices = new ArrayList<>(); + Map devs = new HashMap<>(); + try { + conn = this.getConnection(); + stmt = conn.prepareStatement(query); + rs = stmt.executeQuery(); + while (rs.next()) { + if (!devs.containsKey(rs.getInt("ID"))) { + Device device = new Device(); + device.setId(rs.getInt("ID")); + device.setDescription(rs.getString("DESCRIPTION")); + device.setName(rs.getString("NAME")); + device.setType(rs.getString("DEVICE_TYPE_NAME")); + device.setDeviceIdentifier(rs.getString("DEVICE_IDENTIFICATION")); + + EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); + enrolmentInfo.setStatus(EnrolmentInfo.Status.valueOf(rs.getString("DE_STATUS"))); + enrolmentInfo.setOwner(rs.getString("OWNER")); + enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.valueOf(rs.getString("OWNERSHIP"))); + device.setEnrolmentInfo(enrolmentInfo); + + DeviceIdentifier identifier = new DeviceIdentifier(); + identifier.setType(rs.getString("DEVICE_TYPE_NAME")); + identifier.setId(rs.getString("DEVICE_IDENTIFICATION")); + + DeviceInfo deviceInfo = new DeviceInfo(); + deviceInfo.setAvailableRAMMemory(rs.getDouble("AVAILABLE_RAM_MEMORY")); + deviceInfo.setBatteryLevel(rs.getDouble("BATTERY_LEVEL")); + deviceInfo.setConnectionType(rs.getString("CONNECTION_TYPE")); + deviceInfo.setCpuUsage(rs.getDouble("CPU_USAGE")); + deviceInfo.setDeviceModel(rs.getString("DEVICE_MODEL")); + deviceInfo.setExternalAvailableMemory(rs.getDouble("EXTERNAL_AVAILABLE_MEMORY")); + deviceInfo.setExternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); + deviceInfo.setInternalAvailableMemory(rs.getDouble("INTERNAL_AVAILABLE_MEMORY")); + deviceInfo.setInternalTotalMemory(rs.getDouble("EXTERNAL_TOTAL_MEMORY")); + deviceInfo.setOsVersion(rs.getString("OS_VERSION")); + deviceInfo.setOsBuildDate(rs.getString("OS_BUILD_DATE")); + deviceInfo.setPluggedIn(rs.getBoolean("PLUGGED_IN")); + deviceInfo.setSsid(rs.getString("SSID")); + deviceInfo.setTotalRAMMemory(rs.getDouble("TOTAL_RAM_MEMORY")); + deviceInfo.setVendor(rs.getString("VENDOR")); + deviceInfo.setUpdatedTime(new java.util.Date(rs.getLong("UPDATE_TIMESTAMP"))); + + DeviceLocation deviceLocation = new DeviceLocation(); + deviceLocation.setLatitude(rs.getDouble("LATITUDE")); + deviceLocation.setLongitude(rs.getDouble("LONGITUDE")); + deviceLocation.setStreet1(rs.getString("STREET1")); + deviceLocation.setStreet2(rs.getString("STREET2")); + deviceLocation.setCity(rs.getString("CITY")); + deviceLocation.setState(rs.getString("STATE")); + deviceLocation.setZip(rs.getString("ZIP")); + deviceLocation.setCountry(rs.getString("COUNTRY")); + deviceLocation.setDeviceId(rs.getInt("ID")); + deviceLocation.setUpdatedTime(new java.util.Date(rs.getLong("DL_UPDATED_TIMESTAMP"))); + + deviceInfo.setLocation(deviceLocation); + device.setDeviceInfo(deviceInfo); + devices.add(device); + devs.put(device.getId(), device.getId()); + } + } + } catch (SQLException e) { + throw new SearchDAOException("Error occurred while aquiring the device details.", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + this.fillPropertiesOfDevices(devices); + if (log.isDebugEnabled()) { + log.debug("Number of the device returned from the query : " + devices.size()); + } + return devices; + } + + + private Connection getConnection() throws SQLException { + return DeviceManagementDAOFactory.getConnection(); + } + private List fillPropertiesOfDevices(List devices) throws SearchDAOException { + if (devices.isEmpty()) { + return null; + } + Connection conn; + PreparedStatement stmt = null; + ResultSet rs = null; + try { + conn = this.getConnection(); + String query = "SELECT * FROM DM_DEVICE_INFO WHERE DEVICE_ID IN ("; + if (conn.getMetaData().getDatabaseProductName().contains("H2") || conn.getMetaData() + .getDatabaseProductName().contains("MySQL")) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < devices.size(); i++) { + builder.append("?,"); + } + query += builder.deleteCharAt(builder.length() - 1).toString() + ") ORDER BY DEVICE_ID"; + stmt = conn.prepareStatement(query); + for (int i = 0; i < devices.size(); i++) { + stmt.setInt(i + 1, devices.get(i).getId()); + } + } else { + query += "?) ORDER BY DEVICE_ID"; + stmt = conn.prepareStatement(query); + Array array = conn.createArrayOf("INT", Utils.getArrayOfDeviceIds(devices)); + stmt.setArray(1, array); + } + rs = stmt.executeQuery(); + + DeviceInfo dInfo; + while (rs.next()) { + dInfo = this.getDeviceInfo(devices, rs.getInt("DEVICE_ID")); + dInfo.getDeviceDetailsMap().put(rs.getString("KEY_FIELD"), rs.getString("VALUE_FIELD")); + } + } catch (SQLException e) { + throw new SearchDAOException("Error occurred while retrieving the device properties.", e); + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt,rs); + } + return devices; + } + + private DeviceInfo getDeviceInfo(List devices, int deviceId) { + for (Device device : devices) { + if (device.getId() == deviceId) { + if (device.getDeviceInfo() == null) { + device.setDeviceInfo(new DeviceInfo()); + } + return device.getDeviceInfo(); + } + } + return null; + } +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java index 3a841f2aa07..251b7731238 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java @@ -36,10 +36,12 @@ public class QueryBuilderImpl implements QueryBuilder { private static final Log log = LogFactory.getLog(QueryBuilderImpl.class); + private final String WILDCARD_OPERATOR = "%"; + private String current_username; + private boolean isDeviceAdminUser; @Override public Map> buildQueries(List conditions) throws InvalidOperatorException { - List andColumns = new ArrayList<>(); List orColumns = new ArrayList<>(); List otherANDColumns = new ArrayList<>(); @@ -107,34 +109,40 @@ public class QueryBuilderImpl implements QueryBuilder { @Override public String processAND(List conditions) throws InvalidOperatorException { - String querySuffix = ""; - for (Condition con : conditions) { - if (Utils.checkDeviceDetailsColumns(con.getKey().toLowerCase())) { - querySuffix = querySuffix + " AND DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey().toLowerCase()) + - con.getOperator() + Utils.getConvertedValue(con.getKey().toLowerCase(), con.getValue()); + if (Utils.checkDeviceDetailsColumns(con.getKey())) { + if (con.operator.equals(WILDCARD_OPERATOR)){ + querySuffix = querySuffix + " OR DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + + " LIKE \'%" + con.getValue() + "%\'"; + } else { + querySuffix = querySuffix + " AND DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + con + .getOperator() + Utils.getConvertedValue(con.getKey(), con.getValue()); + } } else if (Utils.checkDeviceLocationColumns(con.getKey().toLowerCase())) { querySuffix = querySuffix + " AND DL." + Utils.getDeviceLocationColumnNames().get(con.getKey().toLowerCase()) + con.getOperator() + con.getValue(); } } - return querySuffix; } @Override public String processOR(List conditions) throws InvalidOperatorException { - String querySuffix = ""; - for (Condition con : conditions) { - if (Utils.checkDeviceDetailsColumns(con.getKey().toLowerCase())) { - querySuffix = querySuffix + " OR DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey().toLowerCase()) + - con.getOperator() + Utils.getConvertedValue(con.getKey(), con.getValue()); + if (Utils.checkDeviceDetailsColumns(con.getKey())) { + if (con.operator.equals(WILDCARD_OPERATOR)) { + querySuffix = querySuffix + " OR DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + + " LIKE \'%" + con.getValue() + "%\'"; + } else { + querySuffix = querySuffix + " OR DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + con + .getOperator() + Utils.getConvertedValue(con.getKey(), con.getValue()); + } } else if (Utils.checkDeviceLocationColumns(con.getKey().toLowerCase())) { - querySuffix = querySuffix + " OR DL." + Utils.getDeviceLocationColumnNames().get(con.getKey().toLowerCase()) + - con.getOperator() + con.getValue(); + querySuffix = + querySuffix + " OR DL." + Utils.getDeviceLocationColumnNames().get(con.getKey().toLowerCase()) + + con.getOperator() + con.getValue(); } } return querySuffix; @@ -177,17 +185,16 @@ public class QueryBuilderImpl implements QueryBuilder { private String buildLocationQuery(String location) { String query = this.getGenericQueryPart(); - query = query + " AND DL.STREET1 LIKE \'%" + location + "%\'"; + query = query + " AND (DL.STREET1 LIKE \'%" + location + "%\'"; query = query + " OR DL.STREET2 LIKE \'%" + location + "%\'"; query = query + " OR DL.CITY LIKE \'%" + location + "%\'"; query = query + " OR DL.STATE LIKE \'%" + location + "%\'"; query = query + " OR DL.COUNTRY LIKE \'%" + location + "%\'"; - query = query + " OR DL.ZIP LIKE \'%" + location + "%\'"; + query = query + " OR DL.ZIP LIKE \'%" + location + "%\')"; return query; } private String getGenericQueryPart() { - return "SELECT D.ID, D.DESCRIPTION, D.NAME, \n" + "D.DEVICE_TYPE_ID, D.DEVICE_IDENTIFICATION, DT.ID AS DEVICE_TYPE_ID, \n" + "DT.NAME AS DEVICE_TYPE_NAME, DD.DEVICE_ID, DD.DEVICE_MODEL, DD.VENDOR, \n" + @@ -195,18 +202,15 @@ public class QueryBuilderImpl implements QueryBuilder { "DD.EXTERNAL_TOTAL_MEMORY, DD.EXTERNAL_AVAILABLE_MEMORY, DD.CONNECTION_TYPE, \n" + "DD.SSID, DD.CPU_USAGE, DD.TOTAL_RAM_MEMORY, DD.AVAILABLE_RAM_MEMORY, \n" + "DD.PLUGGED_IN, DD.UPDATE_TIMESTAMP, DL.LATITUDE, DL.LONGITUDE, DL.STREET1, DL.STREET2, DL.CITY, DL.ZIP, \n" + - "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP \n" + - "FROM DM_DEVICE_DETAIL AS DD INNER JOIN DM_DEVICE AS D ON D.ID=DD.DEVICE_ID\n" + + "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP, DE.OWNER, DE.OWNERSHIP, DE.STATUS " + + "AS DE_STATUS FROM DM_DEVICE_DETAIL AS DD INNER JOIN DM_DEVICE AS D ON D.ID=DD.DEVICE_ID\n" + "LEFT JOIN DM_DEVICE_LOCATION AS DL ON DL.DEVICE_ID=D.ID \n" + - "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + - "WHERE D.TENANT_ID = " + - PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - - + "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + + "INNER JOIN DM_ENROLMENT AS DE ON D.ID=DE.DEVICE_ID\n" + + "WHERE D.TENANT_ID = " + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); } private String getPropertyQueryPart() { - return "SELECT D.ID, D.DESCRIPTION, D.NAME, \n" + "D.DEVICE_TYPE_ID, D.DEVICE_IDENTIFICATION, DT.ID AS DEVICE_TYPE_ID, \n" + "DT.NAME AS DEVICE_TYPE_NAME, DD.DEVICE_ID, DD.DEVICE_MODEL, DD.VENDOR, \n" + @@ -214,13 +218,14 @@ public class QueryBuilderImpl implements QueryBuilder { "DD.EXTERNAL_TOTAL_MEMORY, DD.EXTERNAL_AVAILABLE_MEMORY, DD.CONNECTION_TYPE, \n" + "DD.SSID, DD.CPU_USAGE, DD.TOTAL_RAM_MEMORY, DD.AVAILABLE_RAM_MEMORY, \n" + "DD.PLUGGED_IN, DD.UPDATE_TIMESTAMP, DL.LATITUDE, DL.LONGITUDE, DL.STREET1, DL.STREET2, DL.CITY, DL.ZIP, \n" + - "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP, DI.KEY_FIELD, DI.VALUE_FIELD \n" + + "DL.STATE, DL.COUNTRY, DL.UPDATE_TIMESTAMP AS DL_UPDATED_TIMESTAMP, DI.KEY_FIELD, DI.VALUE_FIELD, \n" + + "DE.OWNER, DE.OWNERSHIP, DE.STATUS AS DE_STATUS " + "FROM DM_DEVICE_DETAIL AS DD INNER JOIN DM_DEVICE AS D ON D.ID=DD.DEVICE_ID\n" + "LEFT JOIN DM_DEVICE_LOCATION AS DL ON DL.DEVICE_ID=D.ID \n" + - "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + + "INNER JOIN DM_DEVICE_TYPE AS DT ON DT.ID=D.DEVICE_TYPE_ID\n" + + "INNER JOIN DM_ENROLMENT AS DE ON D.ID=DE.DEVICE_ID\n" + "LEFT JOIN DM_DEVICE_INFO AS DI ON DI.DEVICE_ID=D.ID\n" + "WHERE D.TENANT_ID = " + PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - } -} +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java index 317f875b1cc..33bd6c0607b 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java @@ -17,17 +17,24 @@ */ package org.wso2.carbon.device.mgt.core.service; -import org.wso2.carbon.device.mgt.common.*; +import org.wso2.carbon.device.mgt.common.Device; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.EnrolmentInfo; +import org.wso2.carbon.device.mgt.common.FeatureManager; +import org.wso2.carbon.device.mgt.common.InvalidDeviceException; +import org.wso2.carbon.device.mgt.common.MonitoringOperation; +import org.wso2.carbon.device.mgt.common.PaginationRequest; +import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; import org.wso2.carbon.device.mgt.common.license.mgt.License; import org.wso2.carbon.device.mgt.common.operation.mgt.Activity; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import java.util.HashMap; import java.util.Date; +import java.util.HashMap; import java.util.List; -import java.util.Map; /** * Proxy class for all Device Management related operations that take the corresponding plugin type in @@ -120,6 +127,15 @@ public interface DeviceManagementProviderService { */ List getDevicesOfUser(String userName) throws DeviceManagementException; + /** + * This method returns the list of device owned by a user of given device type. + * @param userName user name. + * @param deviceType device type name + * @return + * @throws DeviceManagementException + */ + List getDevicesOfUser(String userName, String deviceType) throws DeviceManagementException; + /** * Method to get the list of devices owned by users of a particular user-role. * @@ -220,6 +236,12 @@ public interface DeviceManagementProviderService { boolean setActive(DeviceIdentifier deviceId, boolean status) throws DeviceManagementException; + /** + * Returns the device of specified id. + * @param deviceId device Id + * @return Device returns null when device is not avaialble. + * @throws DeviceManagementException + */ Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException; Device getDevice(DeviceIdentifier deviceId, Date since) throws DeviceManagementException; @@ -276,6 +298,10 @@ public interface DeviceManagementProviderService { int getActivityCountUpdatedAfter(long timestamp) throws OperationManagementException; - Map> getTaskList(); + List getMonitoringOperationList(String deviceType); + + int getDeviceMonitoringFrequency(String deviceType); + + boolean isDeviceMonitoringEnabled(String deviceType); } 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 fff5607ecfe..210b0927cb3 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 @@ -31,9 +31,10 @@ import org.wso2.carbon.device.mgt.common.DeviceTypeIdentifier; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; import org.wso2.carbon.device.mgt.common.FeatureManager; import org.wso2.carbon.device.mgt.common.InvalidDeviceException; +import org.wso2.carbon.device.mgt.common.MonitoringOperation; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.PaginationRequest; import org.wso2.carbon.device.mgt.common.PaginationResult; -import org.wso2.carbon.device.mgt.common.TaskOperation; import org.wso2.carbon.device.mgt.common.TransactionManagementException; import org.wso2.carbon.device.mgt.common.app.mgt.Application; import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; @@ -274,7 +275,9 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv Device currentDevice = deviceDAO.getDevice(deviceIdentifier, tenantId); device.setId(currentDevice.getId()); device.getEnrolmentInfo().setId(currentDevice.getEnrolmentInfo().getId()); - + if (device.getName() == null) { + device.setName(currentDevice.getName()); + } deviceDAO.updateDevice(device, tenantId); enrollmentDAO.updateEnrollment(device.getEnrolmentInfo()); DeviceManagementDAOFactory.commitTransaction(); @@ -365,7 +368,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } } catch (DeviceManagementDAOException e) { throw new DeviceManagementException("Error occurred while obtaining the enrollment information device for" + - "id '" + deviceId.getId() + "'", e); + "id '" + deviceId.getId() + "'", e); } catch (SQLException e) { throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); } finally { @@ -828,7 +831,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv if (log.isDebugEnabled()) { log.debug(msg); } - throw new DeviceManagementException(msg); + return null; } DeviceInfo info = deviceInfoDAO.getDeviceInformation(device.getId()); DeviceLocation location = deviceInfoDAO.getDeviceLocation(device.getId()); @@ -876,7 +879,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv if (device == null) { if (log.isDebugEnabled()) { log.debug("No device is found upon the type '" + deviceId.getType() + "' and id '" + - deviceId.getId() + "'"); + deviceId.getId() + "'"); } return null; } @@ -889,7 +892,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv device.setApplications(applications); } catch (DeviceManagementDAOException e) { throw new DeviceManagementException("Error occurred while obtaining the device for id " + - "'" + deviceId.getId() + "'", e); + "'" + deviceId.getId() + "'", e); } catch (SQLException e) { throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); } catch (DeviceDetailsMgtDAOException e) { @@ -903,7 +906,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv if (deviceManager == null) { if (log.isDebugEnabled()) { log.debug("Device Manager associated with the device type '" + deviceId.getType() + "' is null. " + - "Therefore, not attempting method 'getDevice'"); + "Therefore, not attempting method 'getDevice'"); } return device; } @@ -1217,24 +1220,37 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } @Override - public Map> getTaskList() { + public List getMonitoringOperationList(String deviceType) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - Map deviceManagementServiceMap = - pluginRepository.getAllDeviceManagementServices(tenantId); - DeviceManagementService dms; - String deviceType; - List taskOperations; - Map> deviceTypeSpecificTasks = new HashMap<>(); +// Map deviceManagementServiceMap = +// pluginRepository.getAllDeviceManagementServices(tenantId); + DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId); + // ; + // OperationMonitoringTaskConfig operationMonitoringTaskConfig; + //Map> deviceTypeSpecificMonitoringOperations = new HashMap<>(); + +// for(DeviceTypeIdentifier dti : deviceManagementServiceMap.keySet()){ +// dms = deviceManagementServiceMap.get(dti); +// +// } + OperationMonitoringTaskConfig operationMonitoringTaskConfig = dms.getOperationMonitoringConfig(); + return operationMonitoringTaskConfig.getMonitoringOperation(); + } - for(DeviceTypeIdentifier dti : deviceManagementServiceMap.keySet()){ - dms = deviceManagementServiceMap.get(dti); - taskOperations = dms.getTasksForPlatform(); - if (taskOperations != null) { - deviceType = dms.getType(); - deviceTypeSpecificTasks.put(deviceType, taskOperations); - } - } - return deviceTypeSpecificTasks; + @Override + public int getDeviceMonitoringFrequency(String deviceType) { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId); + OperationMonitoringTaskConfig operationMonitoringTaskConfig = dms.getOperationMonitoringConfig(); + return operationMonitoringTaskConfig.getFrequency(); + } + + @Override + public boolean isDeviceMonitoringEnabled(String deviceType) { + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId); + OperationMonitoringTaskConfig operationMonitoringTaskConfig = dms.getOperationMonitoringConfig(); + return operationMonitoringTaskConfig.isEnabled(); } @Override @@ -1305,6 +1321,74 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv return devices; } + @Override + public List getDevicesOfUser(String username, String deviceType) throws DeviceManagementException { + List devices = new ArrayList<>(); + List userDevices; + try { + DeviceManagementDAOFactory.openConnection(); + userDevices = deviceDAO.getDevicesOfUser(username, deviceType, this.getTenantId()); + } catch (DeviceManagementDAOException e) { + throw new DeviceManagementException("Error occurred while retrieving the list of devices that " + + "belong to the user '" + username + "'", e); + } catch (SQLException e) { + throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + + for (Device device : userDevices) { + DeviceInfo info = null; + try { + DeviceManagementDAOFactory.openConnection(); + info = deviceInfoDAO.getDeviceInformation(device.getId()); + DeviceLocation location = deviceInfoDAO.getDeviceLocation(device.getId()); + if (info != null) { + info.setLocation(location); + } + } catch (DeviceDetailsMgtDAOException e) { + log.error("Error occurred while retrieving advance info of '" + device.getType() + + "' that carries the id '" + device.getDeviceIdentifier() + "'"); + } catch (SQLException e) { + log.error("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + device.setDeviceInfo(info); + + try { + DeviceManagementDAOFactory.openConnection(); + List applications = applicationDAO.getInstalledApplications(device.getId()); + 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); + } catch (SQLException e) { + log.error("Error occurred while opening a connection to the data source", e); + } finally { + DeviceManagementDAOFactory.closeConnection(); + } + + DeviceManager deviceManager = this.getDeviceManager(device.getType()); + if (deviceManager == null) { + if (log.isDebugEnabled()) { + log.debug("Device Manager associated with the device type '" + device.getType() + "' is null. " + + "Therefore, not attempting method 'isEnrolled'"); + } + devices.add(device); + continue; + } + Device dmsDevice = + deviceManager.getDevice(new DeviceIdentifier(device.getDeviceIdentifier(), device.getType())); + if (dmsDevice != null) { + device.setFeatures(dmsDevice.getFeatures()); + device.setProperties(dmsDevice.getProperties()); + } + devices.add(device); + } + return devices; + } + @Override public PaginationResult getDevicesOfUser(PaginationRequest request) throws DeviceManagementException { @@ -1847,7 +1931,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv } } catch (DeviceManagementDAOException e) { throw new DeviceManagementException("Error occurred while obtaining the enrollment information device for" + - "id '" + deviceId.getId() + "' and user : " + user, e); + "id '" + deviceId.getId() + "' and user : " + user, e); } catch (SQLException e) { throw new DeviceManagementException("Error occurred while opening a connection to the data source", e); } finally { @@ -1915,8 +1999,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv /** * Checks for the default group existence and create group based on device ownership * - * @param service {@link GroupManagementProviderService} instance. - * @param groupName of the group to create. + * @param service {@link GroupManagementProviderService} instance. + * @param groupName of the group to create. * @return Group with details. * @throws GroupManagementException */ diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManager.java index b7d59c9072b..46128a37aa5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManager.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManager.java @@ -19,20 +19,16 @@ package org.wso2.carbon.device.mgt.core.task; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; - -import java.util.List; - public interface DeviceTaskManager { - /** - * This method will get the operation list from configurations. - * - * @return - list of Task Operations. - * @throws DeviceMgtTaskException - */ - List getOperationList(String deviceType) - throws DeviceMgtTaskException; +// /** +// * This method will get the operation list from configurations. +// * +// * @return - list of Task Operations. +// * @throws DeviceMgtTaskException +// */ +// List getOperationList(String deviceType) +// throws DeviceMgtTaskException; /** * This method will take the monitoring frequency. @@ -41,12 +37,12 @@ public interface DeviceTaskManager { */ int getTaskFrequency() throws DeviceMgtTaskException; - /** - * This method will return the task clazz from configurations. - * @return - Fully qualified class name. - * @throws DeviceMgtTaskException - */ - String getTaskImplementedClazz() throws DeviceMgtTaskException; +// /** +// * This method will return the task clazz from configurations. +// * @return - Fully qualified class name. +// * @throws DeviceMgtTaskException +// */ +// String getTaskImplementedClazz() throws DeviceMgtTaskException; /** * This method checks wheather task is enabled in config file. @@ -63,12 +59,12 @@ public interface DeviceTaskManager { void addOperations() throws DeviceMgtTaskException; - /** - * This method will return the operation names which should be added in each iterations. - * @return - * @throws DeviceMgtTaskException - */ - List getValidOperationNames(String deviceType) throws DeviceMgtTaskException; +// /** +// * This method will return the operation names which should be added in each iterations. +// * @return +// * @throws DeviceMgtTaskException +// */ +// List getValidOperationNames(String deviceType) throws DeviceMgtTaskException; /** * This method will check wheather give operation is added by the task. @@ -76,6 +72,6 @@ public interface DeviceTaskManager { * @return - true or false * @throws DeviceMgtTaskException */ - boolean isTaskOperation(String opName, List deviceIds); + boolean isTaskOperation(String opName); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerService.java index c327f0af38d..15635160852 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerService.java @@ -19,26 +19,33 @@ package org.wso2.carbon.device.mgt.core.task; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; + public interface DeviceTaskManagerService { /** - * This method will stop the task. + * This method will start the task. + * @param operationMonitoringTaskConfig - OperationMonitoringTaskConfig * @throws DeviceMgtTaskException */ - void startTask() throws DeviceMgtTaskException; + void startTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) + throws DeviceMgtTaskException; /** - * This method will start the task. + * This method will stop the task. + * @param operationMonitoringTaskConfig - OperationMonitoringTaskConfig * @throws DeviceMgtTaskException */ - void stopTask() throws DeviceMgtTaskException; + void stopTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) + throws DeviceMgtTaskException; /** * This will update the task frequency which it runs. - * @param frequency - integer + * @param operationMonitoringTaskConfig - OperationMonitoringTaskConfig * @throws DeviceMgtTaskException */ - void updateTask(int frequency) throws DeviceMgtTaskException; + void updateTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) + throws DeviceMgtTaskException; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceDetailsRetrieverTask.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceDetailsRetrieverTask.java index bba13ca3077..37a90f6f823 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceDetailsRetrieverTask.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceDetailsRetrieverTask.java @@ -31,15 +31,15 @@ public class DeviceDetailsRetrieverTask implements Task { private static Log log = LogFactory.getLog(DeviceDetailsRetrieverTask.class); // private DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(); + private String deviceType; @Override public void setProperties(Map map) { - + deviceType = map.get("DEVICE_TYPE"); } @Override public void init() { - } @Override @@ -49,7 +49,7 @@ public class DeviceDetailsRetrieverTask implements Task { log.debug("Device details retrieving task started to run."); } - DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(); + DeviceTaskManager deviceTaskManager = new DeviceTaskManagerImpl(deviceType); try { deviceTaskManager.addOperations(); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerImpl.java index 106159ef064..2606f07fd38 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerImpl.java @@ -22,13 +22,11 @@ package org.wso2.carbon.device.mgt.core.task.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.InvalidDeviceException; -import org.wso2.carbon.device.mgt.common.TaskOperation; +import org.wso2.carbon.device.mgt.common.MonitoringOperation; import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; @@ -42,65 +40,51 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; public class DeviceTaskManagerImpl implements DeviceTaskManager { private static Log log = LogFactory.getLog(DeviceTaskManagerImpl.class); - + private String deviceType; private static Map> map = new HashMap<>(); - - @Override - //get device type specific operations - public List getOperationList(String deviceType) throws DeviceMgtTaskException { - - List taskOperations = new ArrayList<>(); - Map> deviceTypeSpecificTasks; - //This Map contains task list against device type - DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance(). - getDeviceManagementProvider(); - - deviceTypeSpecificTasks = deviceManagementProviderService.getTaskList();//Get task list from each device type - for(String dti : deviceTypeSpecificTasks.keySet()){ - if (dti.equals(deviceType)) { - taskOperations = deviceTypeSpecificTasks.get(dti); - } - } - return taskOperations; + public DeviceTaskManagerImpl(String deviceType) { + this.deviceType = deviceType; } - private List getDeviceTypes() { - List operationPlatforms = new ArrayList<>(); - Map> deviceTypeSpecificTasks; + //get device type specific operations + public List getOperationList() throws DeviceMgtTaskException { - DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance(). - getDeviceManagementProvider(); - deviceTypeSpecificTasks = deviceManagementProviderService.getTaskList(); + DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder + .getInstance(). + getDeviceManagementProvider(); - Set platformTypes = deviceTypeSpecificTasks.keySet(); - for(String platformType : platformTypes ){ - operationPlatforms.add(platformType); - } - return operationPlatforms; + return deviceManagementProviderService.getMonitoringOperationList( + deviceType);//Get task list from each device type } @Override public int getTaskFrequency() throws DeviceMgtTaskException { - return DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getTaskConfiguration(). - getFrequency(); - } + DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder + .getInstance(). + getDeviceManagementProvider(); + + return deviceManagementProviderService.getDeviceMonitoringFrequency(deviceType); - @Override - public String getTaskImplementedClazz() throws DeviceMgtTaskException { - return DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getTaskConfiguration(). - getTaskClazz(); } +// @Override +// public String getTaskImplementedClazz() throws DeviceMgtTaskException { +// return DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getTaskConfiguration(). +// getTaskClazz(); +// } + @Override public boolean isTaskEnabled() throws DeviceMgtTaskException { - return DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getTaskConfiguration(). - isEnabled(); + DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder + .getInstance(). + getDeviceManagementProvider(); + + return deviceManagementProviderService.isDeviceMonitoringEnabled(deviceType); } @@ -111,26 +95,22 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager { try { List devices; List operations; - List deviceTypes = this.getDeviceTypes();//list available device types - - for(String deviceType : deviceTypes){ - operations = this.getValidOperationNames(deviceType); //list operations for each device type - devices = deviceManagementProviderService.getAllDevices(deviceType);//list devices for each type - if (!devices.isEmpty()) { - for (String str : operations) { - CommandOperation operation = new CommandOperation(); - operation.setEnabled(true); - operation.setType(Operation.Type.COMMAND); - operation.setCode(str); - deviceManagementProviderService.addOperation(deviceType, operation, - DeviceManagerUtil.getValidDeviceIdentifiers(devices)); - } - } else { - if (log.isDebugEnabled()) { - log.debug("No devices are available to perform the operations."); - } - } + operations = this.getValidOperationNames(); //list operations for each device type + devices = deviceManagementProviderService.getAllDevices(deviceType);//list devices for each type + if (!devices.isEmpty()) { + for (String str : operations) { + CommandOperation operation = new CommandOperation(); + operation.setEnabled(true); + operation.setType(Operation.Type.COMMAND); + operation.setCode(str); + deviceManagementProviderService.addOperation(deviceType, operation, + DeviceManagerUtil.getValidDeviceIdentifiers(devices)); + } + } else { + if (log.isDebugEnabled()) { + log.debug("No devices are available to perform the operations."); + } } } catch (InvalidDeviceException e) { throw new DeviceMgtTaskException("Invalid DeviceIdentifiers found.", e); @@ -141,16 +121,15 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager { } } - @Override - public List getValidOperationNames(String deviceType) throws DeviceMgtTaskException { + private List getValidOperationNames() throws DeviceMgtTaskException { - List taskOperations = this.getOperationList(deviceType); + List monitoringOperations = this.getOperationList(); List opNames = new ArrayList<>(); Long milliseconds = System.currentTimeMillis(); int frequency = this.getTaskFrequency(); Map mp = Utils.getTenantedTaskOperationMap(map); - for (TaskOperation top : taskOperations) { + for (MonitoringOperation top : monitoringOperations) { if (!mp.containsKey(top.getTaskName())) { opNames.add(top.getTaskName()); mp.put(top.getTaskName(), milliseconds); @@ -173,20 +152,17 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager { @Override - public boolean isTaskOperation(String opName, List deviceIds) { - - for(DeviceIdentifier deviceIdentifier : deviceIds){ - String deviceType = deviceIdentifier.getType(); - try { - List taskOperations = this.getOperationList(deviceType); - for (TaskOperation taop : taskOperations) { - if (taop.getTaskName().equalsIgnoreCase(opName)) { - return true; - } + public boolean isTaskOperation(String opName) { + + try { + List monitoringOperations = this.getOperationList(); + for (MonitoringOperation taop : monitoringOperations) { + if (taop.getTaskName().equalsIgnoreCase(opName)) { + return true; } - } catch (DeviceMgtTaskException e) { - // ignoring the error, no need to throw, If error occurs, return value will be false. } + } catch (DeviceMgtTaskException e) { + // ignoring the error, no need to throw, If error occurs, return value will be false. } return false; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerServiceImpl.java index 87c45d079ee..7a47f8d6bfd 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerServiceImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/task/impl/DeviceTaskManagerServiceImpl.java @@ -22,9 +22,9 @@ package org.wso2.carbon.device.mgt.core.task.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder; import org.wso2.carbon.device.mgt.core.task.DeviceMgtTaskException; -import org.wso2.carbon.device.mgt.core.task.DeviceTaskManager; import org.wso2.carbon.device.mgt.core.task.DeviceTaskManagerService; import org.wso2.carbon.ntask.common.TaskException; import org.wso2.carbon.ntask.core.TaskInfo; @@ -36,23 +36,21 @@ import java.util.Map; public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { - public static final String TASK_TYPE = "DEVICE_DETAILS"; - public static final String TASK_NAME = "DEVICE_DETAILS_TASK"; + public static final String TASK_TYPE = "DEVICE_MONITORING"; public static final String TENANT_ID = "TENANT_ID"; private static String TASK_CLASS = "org.wso2.carbon.device.mgt.core.task.impl.DeviceDetailsRetrieverTask"; - private DeviceTaskManager deviceTaskManager; +// private DeviceTaskManager deviceTaskManager; private static Log log = LogFactory.getLog(DeviceTaskManagerServiceImpl.class); @Override - public void startTask() throws DeviceMgtTaskException { + public void startTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) throws DeviceMgtTaskException { - deviceTaskManager = new DeviceTaskManagerImpl(); - if (!deviceTaskManager.isTaskEnabled()) { - throw new DeviceMgtTaskException("Task cannot be started, Please enable the task in cdm-config.xml file."); - } +// String TASK_NAME = deviceType; + + log.info("Task adding for " + deviceType); int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); @@ -62,23 +60,27 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { if (log.isDebugEnabled()) { log.debug("Device details retrieving task is started for the tenant id " + tenantId); - log.debug("Device details retrieving task is at frequency of : " + deviceTaskManager.getTaskFrequency()); +// log.debug("Device details retrieving task is at frequency of : " + deviceTaskManager +// .getTaskFrequency()); + log.debug("Device details retrieving task is at frequency of : " + operationMonitoringTaskConfig + .getFrequency()); } TaskManager taskManager = taskService.getTaskManager(TASK_TYPE); TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo(); - triggerInfo.setIntervalMillis(deviceTaskManager.getTaskFrequency()); +// triggerInfo.setIntervalMillis(deviceTaskManager.getTaskFrequency()); + triggerInfo.setIntervalMillis(operationMonitoringTaskConfig.getFrequency()); triggerInfo.setRepeatCount(-1); Map properties = new HashMap<>(); properties.put(TENANT_ID, String.valueOf(tenantId)); + properties.put("DEVICE_TYPE", deviceType); - if (!taskManager.isTaskScheduled(TASK_NAME)) { + if (!taskManager.isTaskScheduled(deviceType)) { - TaskInfo taskInfo = new TaskInfo(TASK_NAME, TASK_CLASS, - properties, triggerInfo); + TaskInfo taskInfo = new TaskInfo(deviceType, TASK_CLASS, properties, triggerInfo); taskManager.registerTask(taskInfo); taskManager.rescheduleTask(taskInfo.getName()); @@ -94,13 +96,15 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { } @Override - public void stopTask() throws DeviceMgtTaskException { + public void stopTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) throws DeviceMgtTaskException { + +// String TASK_NAME = deviceType; try { TaskService taskService = DeviceManagementDataHolder.getInstance().getTaskService(); if (taskService.isServerInit()) { TaskManager taskManager = taskService.getTaskManager(TASK_TYPE); - taskManager.deleteTask(TASK_NAME); + taskManager.deleteTask(deviceType); } } catch (TaskException e) { int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); @@ -110,29 +114,27 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { } @Override - public void updateTask(int frequency) throws DeviceMgtTaskException { + public void updateTask(String deviceType, OperationMonitoringTaskConfig operationMonitoringTaskConfig) throws DeviceMgtTaskException { - if (!deviceTaskManager.isTaskEnabled()) { - throw new DeviceMgtTaskException("Task cannot be updated, Please enable the task in cdm-config.xml file."); - } +// String TASK_NAME = deviceType; int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); - deviceTaskManager = new DeviceTaskManagerImpl(); +// deviceTaskManager = new DeviceTaskManagerImpl(); try { TaskService taskService = DeviceManagementDataHolder.getInstance().getTaskService(); TaskManager taskManager = taskService.getTaskManager(TASK_TYPE); - if (taskManager.isTaskScheduled(TASK_NAME)) { + if (taskManager.isTaskScheduled(deviceType)) { - taskManager.deleteTask(TASK_NAME); + taskManager.deleteTask(deviceType); TaskInfo.TriggerInfo triggerInfo = new TaskInfo.TriggerInfo(); - triggerInfo.setIntervalMillis(frequency); + triggerInfo.setIntervalMillis(operationMonitoringTaskConfig.getFrequency()); triggerInfo.setRepeatCount(-1); Map properties = new HashMap<>(); properties.put(TENANT_ID, String.valueOf(tenantId)); - TaskInfo taskInfo = new TaskInfo(TASK_NAME, TASK_CLASS, properties, + TaskInfo taskInfo = new TaskInfo(deviceType, TASK_CLASS, properties, triggerInfo); taskManager.registerTask(taskInfo); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java index fcba8942060..86433ce1410 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java @@ -19,14 +19,12 @@ package org.wso2.carbon.device.mgt.core; import org.wso2.carbon.device.mgt.common.DeviceManagementException; import org.wso2.carbon.device.mgt.common.DeviceManager; +import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig; import org.wso2.carbon.device.mgt.common.ProvisioningConfig; -import org.wso2.carbon.device.mgt.common.TaskOperation; import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig; import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService; -import java.util.List; - public class TestDeviceManagementService implements DeviceManagementService { private String providerType; @@ -42,7 +40,7 @@ public class TestDeviceManagementService implements DeviceManagementService { } @Override - public List getTasksForPlatform(){ + public OperationMonitoringTaskConfig getOperationMonitoringConfig(){ return null; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml index d050c5ada7e..b30b66cb78c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml @@ -32,7 +32,7 @@ - + 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 7f5c837578b..112265809d0 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.3-SNAPSHOT + 2.0.4 ../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 35cc220a833..c2e8b64289d 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json index 2e2ad8b83a7..ddce0b02046 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/conf/app-conf.json @@ -33,8 +33,10 @@ "identityProviderUrl" : "https://localhost:9443/samlsso", "acs": "https://localhost:9443/devicemgt/uuf/sso/acs", "identityAlias": "wso2carbon", - "responseSigningEnabled" : "true", - "useTenantKey": false + "responseSigningEnabled" : true, + "validateAssertionValidityPeriod": true, + "validateAudienceRestriction": true, + "assertionSigningEnabled": true } }, "errorPages": { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/user.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/user.js index 693d00b2365..51cbd25c647 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/user.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/business-controllers/user.js @@ -340,6 +340,7 @@ var userModule = function () { * @returns {object} a response object with status and content on success. */ publicMethods.getRolesByUserStore = function (userStore) { + userStore = userStore ? userStore : "all"; var carbonUser = session.get(constants["USER_SESSION_KEY"]); var utility = require("/app/modules/utility.js")["utility"]; if (!carbonUser) { @@ -673,23 +674,29 @@ var userModule = function () { */ publicMethods.getSecondaryUserStores = function () { var returnVal = []; - var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"]; - var wsPayload = ""; - serviceInvokers.WS.soapRequest( - "urn:getSecondaryRealmConfigurations", - wsPayload, - endpoint, - function (wsResponse) { - var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text()); - if (domainIDs != "\"\"") { - var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g"); - domainIDs = domainIDs.replace(regExpForSearch, ""); - returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]); + if (publicMethods.isAuthorized("/permission/admin")) { + var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"]; + var wsPayload = ""; + serviceInvokers.WS.soapRequest( + "urn:getSecondaryRealmConfigurations", + wsPayload, + endpoint, + function (wsResponse) { + var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text()); + if (domainIDs != "\"\"") { + var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g"); + domainIDs = domainIDs.replace(regExpForSearch, ""); + returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]); + } + }, function (e) { + log.error("Error retrieving secondary user stores", e); + }, + constants["SOAP_VERSION"]); + } else { + if (log.isDebugEnabled()) { + log.debug("User does not have admin permission to get the secondary user store details."); } - }, function (e) { - log.error("Error retrieving secondary user stores", e); - }, - constants["SOAP_VERSION"]); + } return returnVal; }; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs index 199e362a46d..6b466d90a3a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.dashboard/dashboard.hbs @@ -15,12 +15,12 @@ specific language governing permissions and limitations under the License. }} -{{unit "cdmf.unit.ui.title" pageTitle="Resource Dashboard"}} +{{unit "cdmf.unit.ui.title" pageTitle="Home"}} {{#zone "breadcrumbs"}}
  • - Resource Dashboard +
  • {{/zone}} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/js/bottomJs.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/js/bottomJs.js index 0dc9a796029..c885566db84 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/js/bottomJs.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/js/bottomJs.js @@ -1,13 +1,10 @@ /* 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, @@ -46,17 +43,23 @@ var dynamicForm = '' + '
    ' + - '
    '; + '
    ' + + '
    '; + +var nonNumericKeyValuePair = ["deviceModel", "vendor", "osVersion", "connectionType", "ssid", "pluggedIn"]; $(document).ready(function () { var isInit = true; @@ -64,14 +67,49 @@ $(document).ready(function () { $("#customSearchParam").prepend(dynamicForm); $(".close-button-div").unbind("click"); $(".close-button-div").bind("click", removeCustomParam); - $(".txt-key").select2({tags: true}); $(".no-tag").select2({tags: false}); + $(".txt-key").select2({tags: true}).on('change', function() { + // Based on the selected key, relevant operations are changed + var operationsForSelectedKey = getOperators($(this).val()); + $("#operators").empty(); + $("#operators").append(operationsForSelectedKey); + $("#operators").select2("val", "="); + }); }); + /** Function to get operators based on the key Value + * + * @param keyValue + */ + function getOperators(keyValue) { + if (nonNumericKeyValuePair.indexOf(keyValue) < 0) { + return ''; + } else { + return ''; + } + } + + /** To validate the key and value before sending that to back-end + * + * @param key Key of the search + * @param value value given for the search + */ + function isValidKeyAndValue(key, value) { + if (nonNumericKeyValuePair.indexOf(key) < 0) { + if (!isNaN(parseFloat(value)) && isFinite(value)){ + return true; + } + } else { + return true; + } + } + $("#device-search-btn").click(function () { var location = $("#location").val(); var payload_obj = {}; var conditions = []; + var hasError = false; if (location) { var conditionObject = {}; conditionObject.key = "LOCATION"; @@ -83,93 +121,104 @@ $(document).ready(function () { $("#customSearchParam .dynamic-search-param").each(function () { var value = $(this).find(".txt-value").val(); - var key = $(this).find(".txt-key").val() - if (value && key) { - var conditionObject = {}; - conditionObject.key = key; - conditionObject.value = value; - conditionObject.operator = $(this).find(".operator").val(); - conditionObject.state = $(this).find(".state").val(); - conditions.push(conditionObject) - } - }); - payload_obj.conditions = conditions; - var deviceSearchAPI = "/api/device-mgt/v1.0/devices/search-devices"; - $("#advance-search-form").addClass(" hidden"); - $("#loading-content").removeClass('hidden'); - var deviceListing = $("#device-listing"); - var deviceListingSrc = deviceListing.attr("src"); - $.template("device-listing", deviceListingSrc, function (template) { - - var successCallback = function (data) { - if (!data) { - $("#loading-content").addClass('hidden'); + var key = $(this).find(".txt-key").val(); + if (!hasError && value && key ) { + if (isValidKeyAndValue(key, value)) { + var conditionObject = {}; + conditionObject.key = key; + conditionObject.value = value; + conditionObject.operator = $(this).find(".operator").val(); + conditionObject.state = $(this).find(".state").val(); + conditions.push(conditionObject); + } else { + hasError = true; $("#advance-search-result").addClass("hidden"); $("#advance-search-form").removeClass(" hidden"); $('#device-listing-status').removeClass('hidden'); - $('#device-listing-status-msg').text('No Device are available to be displayed.'); - return; + $('#device-listing-status-msg').text('Error in user input values. ' + key + " requires a" + + " numerical value as the search value"); } - data = JSON.parse(data); - if (data.devices.length == 0) { + } + }); + + // Sent the search conditions to back-end only, if all the values compliant with there key values + if (hasError) { + hasError = false; + } else { + payload_obj.conditions = conditions; + var deviceSearchAPI = "/api/device-mgt/v1.0/devices/search-devices"; + $("#advance-search-form").addClass(" hidden"); + $("#loading-content").removeClass('hidden'); + var deviceListing = $("#device-listing"); + var deviceListingSrc = deviceListing.attr("src"); + $.template("device-listing", deviceListingSrc, function (template) { + var successCallback = function (data) { + if (!data) { + $("#loading-content").addClass('hidden'); + $("#advance-search-result").addClass("hidden"); + $("#advance-search-form").removeClass(" hidden"); + $('#device-listing-status').removeClass('hidden'); + $('#device-listing-status-msg').text('No Device are available to be displayed.'); + return; + } + data = JSON.parse(data); + if (data.devices.length == 0) { + $("#loading-content").addClass('hidden'); + $("#advance-search-result").addClass("hidden"); + $("#advance-search-form").removeClass(" hidden"); + $('#device-listing-status').removeClass('hidden'); + $('#device-listing-status-msg').text('No Device are available to be displayed.'); + return; + } + var viewModel = {}; + var devices = []; + if (data.devices.length > 0) { + for (i = 0; i < data.devices.length; i++) { + var tempDevice = data.devices[i]; + var device = {}; + device.type = tempDevice.type; + device.name = tempDevice.name; + device.deviceIdentifier = tempDevice.deviceIdentifier; + var properties = {}; + var enrolmentInfo = {}; + properties.VENDOR = tempDevice.deviceInfo.vendor; + properties.DEVICE_MODEL = tempDevice.deviceInfo.deviceModel; + device.enrolmentInfo = tempDevice.enrolmentInfo; + device.properties = properties; + devices.push(device); + } + viewModel.devices = devices; + $('#advance-search-result').removeClass('hidden'); + $("#view-search-param").removeClass('hidden'); + $("#back-to-search").removeClass('hidden'); + $('#device-grid').removeClass('hidden'); + $('#ast-container').removeClass('hidden'); + $('#user-listing-status-msg').text(""); + var content = template(viewModel); + $("#ast-container").html(content); + } else { + $('#device-listing-status').removeClass('hidden'); + $('#device-listing-status-msg').text('No Device are available to be displayed.'); + } $("#loading-content").addClass('hidden'); - $("#advance-search-result").addClass("hidden"); - $("#advance-search-form").removeClass(" hidden"); - $('#device-listing-status').removeClass('hidden'); - $('#device-listing-status-msg').text('No Device are available to be displayed.'); - return; - } - var viewModel = {}; - var devices = []; - if (data.devices.length > 0) { - for (i = 0; i < data.devices.length; i++) { - var tempDevice = data.devices[i]; - var device = {}; - device.type = tempDevice.type; - device.name = tempDevice.name; - device.deviceIdentifier = tempDevice.deviceIdentifier; - var properties = {} ; - var enrolmentInfo = {}; - properties.VENDOR = tempDevice.deviceInfo.vendor; - properties.DEVICE_MODEL = tempDevice.deviceInfo.deviceModel; - enrolmentInfo.status = "ACTIVE"; - enrolmentInfo.owner = "N/A"; - enrolmentInfo.ownership = "N/A"; - device.enrolmentInfo = enrolmentInfo; - device.properties = properties; - devices.push(device); + if (isInit) { + $('#device-grid').datatables_extended(); + isInit = false; } - viewModel.devices = devices; - $('#advance-search-result').removeClass('hidden'); - $("#view-search-param").removeClass('hidden'); - $("#back-to-search").removeClass('hidden'); - $('#device-grid').removeClass('hidden'); - $('#ast-container').removeClass('hidden'); - $('#user-listing-status-msg').text(""); - var content = template(viewModel); - $("#ast-container").html(content); - } else { - $('#device-listing-status').removeClass('hidden'); - $('#device-listing-status-msg').text('No Device are available to be displayed.'); - } - $("#loading-content").addClass('hidden'); - if (isInit) { - $('#device-grid').datatables_extended(); - isInit = false; - } - $(".icon .text").res_text(0.2); - }; - invokerUtil.post(deviceSearchAPI, - payload_obj, - successCallback, - function (message) { - $("#loading-content").addClass('hidden'); - $("#advance-search-result").addClass("hidden"); - $("#advance-search-form").removeClass(" hidden"); - $('#device-listing-status').removeClass('hidden'); - $('#device-listing-status-msg').text('Server is unable to perform the search please enroll at least one device or check the search query'); - } - ); - }); + $(".icon .text").res_text(0.2); + }; + invokerUtil.post(deviceSearchAPI, + payload_obj, + successCallback, + function (message) { + $("#loading-content").addClass('hidden'); + $("#advance-search-result").addClass("hidden"); + $("#advance-search-form").removeClass(" hidden"); + $('#device-listing-status').removeClass('hidden'); + $('#device-listing-status-msg').text('Server is unable to perform the search please enroll at least one device or check the search query'); + } + ); + }); + } }); -}); +}); \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/templates/device-listing.hbs b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/templates/device-listing.hbs index eafe9cd4b14..30b5f71e5f2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/templates/device-listing.hbs +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.device.search/public/templates/device-listing.hbs @@ -5,7 +5,7 @@
    +
    -
    {{#if referer}} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/jaggery.conf b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/jaggery.conf index 038abd25e5d..7c5a2d41c9d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/jaggery.conf +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/jaggery.conf @@ -26,5 +26,52 @@ "url": "/*", "path": "/lib/pages.jag" } - ] + ], + "filters": [ + { + "name": "URLBasedCachePreventionFilter", + "class": "org.wso2.carbon.ui.filters.cache.URLBasedCachePreventionFilter" + }, + { + "name":"HttpHeaderSecurityFilter", + "class":"org.apache.catalina.filters.HttpHeaderSecurityFilter", + "params" : [{"name" : "hstsEnabled", "value" : "false"}] + } + ], + "filterMappings": [ + { + "name": "URLBasedCachePreventionFilter", + "url": "/api/*" + }, + { + "name":"HttpHeaderSecurityFilter", + "url":"*" + } + ], + "listeners" : [ + { + "class" : "org.owasp.csrfguard.CsrfGuardServletContextListener" + }, + { + "class" : "org.owasp.csrfguard.CsrfGuardHttpSessionListener" + } + ], + "servlets" : [ + { + "name" : "JavaScriptServlet", + "class" : "org.owasp.csrfguard.servlet.JavaScriptServlet" + } + ], + "servletMappings" : [ + { + "name" : "JavaScriptServlet", + "url" : "/csrf.js" + } + ], + "contextParams" : [ + { + "name" : "Owasp.CsrfGuard.Config", + "value" : "/repository/conf/security/Owasp.CsrfGuard.Carbon.properties" + } + ] } \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js index ab0f099fea1..2cf9771beab 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js @@ -502,27 +502,25 @@ var module = {}; // This is a logout response. module.logout(response); } else { - // This is a login response. - var ssoConfigs = getSsoConfigurations(); - var rsEnabled = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_RESPONSE_SIGNING_ENABLED]; - if (utils.parseBoolean(rsEnabled)) { - var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils; - var keyStorePassword = CarbonUtils.getServerConfiguration().getFirstProperty("Security.TrustStore.Password"); - var keyStoreName = CarbonUtils.getServerConfiguration().getFirstProperty("Security.TrustStore.Location"); - var identityAlias = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_IDENTITY_ALIAS]; - var keyStoreParams = { - KEY_STORE_NAME: keyStoreName, - KEY_STORE_PASSWORD: keyStorePassword, - IDP_ALIAS: identityAlias, - USE_ST_KEY: !ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_USE_ST_KEY] - }; - if (!ssoClient.validateSignature(samlResponseObj, keyStoreParams)) { - var msg = "Invalid signature found in the SAML response."; - log.error(msg); - response.sendError(500, msg); - return; - } - } + // This is a login response. + var ssoConfigs = getSsoConfigurations(); + var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils; + var keyStorePassword = CarbonUtils.getServerConfiguration().getFirstProperty("Security.TrustStore.Password"); + var keyStoreName = CarbonUtils.getServerConfiguration().getFirstProperty("Security.TrustStore.Location"); + var identityAlias = ssoConfigs[constants.APP_CONF_AUTH_MODULE_SSO_IDENTITY_ALIAS]; + var keyStoreParams = { + KEY_STORE_NAME: keyStoreName, + KEY_STORE_PASSWORD: keyStorePassword, + IDP_ALIAS: identityAlias + }; + + if (!ssoClient.validateSamlResponse(samlResponseObj, ssoConfigs, keyStoreParams)) { + var msg = "Invalid signature found in the SAML response."; + log.error(msg); + response.sendError(500, msg); + return; + } + /** * @type {{sessionId: string, loggedInUser: string, sessionIndex: string, samlToken: * string}} @@ -532,9 +530,10 @@ var module = {}; if (ssoSession.sessionId) { var ssoSessions = getSsoSessions(); ssoSessions[ssoSession.sessionId] = ssoSession; - if (ssoSession.sessionIndex != null || ssoSession.sessionIndex != 'undefined') { + if (ssoSession.sessionIndex) { module.loadTenant(ssoSession.loggedInUser); var carbonUser = (require("carbon")).server.tenantUser(ssoSession.loggedInUser); + module.loadTenant(ssoSession.loggedInUser); utils.setCurrentUser(carbonUser.username, carbonUser.domain, carbonUser.tenantId); var scriptArgument = {input: {samlToken: ssoSession.samlToken}, user: module.getCurrentUser()}; handleEvent(OPERATION_LOGIN, EVENT_SUCCESS, scriptArgument); 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 6d6f50f6bbc..3ccb8888e93 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml index d3c8b43e77e..16bfc27a2af 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.3-SNAPSHOT + 2.0.4 ../../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 472dcfacbc8..83dc81fab3d 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/email-sender/pom.xml b/components/email-sender/pom.xml index 6a2ac5a40bd..56d147ef85a 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.3-SNAPSHOT + 2.0.4 ../../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 15188b391ab..6add0583a23 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.3-SNAPSHOT + 2.0.4 ../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 1c8d91ef77d..b75adb2e355 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.3-SNAPSHOT + 2.0.4 ../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 19eca13ccc8..54dd14e31f2 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.registration - 2.0.3-SNAPSHOT + 2.0.4 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 e7fd4ccb4fe..a67e6c986e9 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.web.app.registration - 2.0.3-SNAPSHOT + 2.0.4 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 cad357e821a..68e2913e6f7 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt dynamic-client-registration - 2.0.3-SNAPSHOT + 2.0.4 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 440e770ce54..34fd53ef3f3 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.oauth.extensions - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - OAuth Extensions http://wso2.org @@ -116,6 +116,8 @@ org.wso2.carbon.identity.application.authentication.framework.model, org.apache.oltu.oauth2.common, org.wso2.carbon.base, + org.apache.xerces.impl; resolution:=optional, + org.apache.xerces.util; resolution:=optional
    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 0d761e9e259..d691028f15b 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.3-SNAPSHOT + 2.0.4 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 924d47d84fe..491f472598a 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml index d4e3ca77d93..a16a49ee7e4 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.3-SNAPSHOT + 2.0.4 ../../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 252c27eac12..62745e3db39 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.complex.policy.decision.point - 2.0.3-SNAPSHOT + 2.0.4 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 17afe5772e6..31b49794275 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.3-SNAPSHOT + 2.0.4 ../pom.xml @@ -11,7 +11,7 @@ 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.information.point - 2.0.3-SNAPSHOT + 2.0.4 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 a8a72d345ea..73ed07e105b 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.mgt.common - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - Policy Management Common WSO2 Carbon - Policy Management Common diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Policy.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Policy.java index 4620adb72e1..d62fbbc0c17 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Policy.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Policy.java @@ -36,55 +36,133 @@ public class Policy implements Comparable, Serializable { private static final long serialVersionUID = 19981017L; - @ApiModelProperty(name = "id", value = "The policy ID", required = true) + @ApiModelProperty( + name = "id", + value = "The policy ID", + required = true, + example = "1") private int id; // Identifier of the policy. - @ApiModelProperty(name = "priorityId", value = "The priority order of the policy. 1 indicates the highest" - + " priority", required = true) + + @ApiModelProperty( + name = "priorityId", + value = "The priority order of the policy. 1 indicates the highest priority", + required = true, + example = "1") private int priorityId; // Priority of the policies. This will be used only for simple evaluation. - @ApiModelProperty(name = "profile", value = "Contains the details of the profile that is included in the " - + "policy", required = true) + + @ApiModelProperty( + name = "profile", + value = "Contains the details of the profile that is included in the policy", + required = true) private Profile profile; // Profile - @ApiModelProperty(name = "policyName", value = "The name of the policy", required = true) + + @ApiModelProperty( + name = "policyName", + value = "The name of the policy", + required = true, + example = "Block Camera") private String policyName; // Name of the policy. - @ApiModelProperty(name = "generic", value = "If true, this should be applied to all related device", - required = true) + + @ApiModelProperty( + name = "generic", + value = "If true, this should be applied to all related device", + required = true, + example = "false") private boolean generic; // If true, this should be applied to all related device. - @ApiModelProperty(name = "roles", value = "The roles to whom the policy is applied on", required = true) + + @ApiModelProperty( + name = "roles", + value = "The roles to whom the policy is applied on", + required = true, + example = "[ \n" + " \"ANY\"\n" + " ]") private List roles; // Roles which this policy should be applied. - @ApiModelProperty(name = "ownershipType", value = "The policy ownership type. It can be any of the " - + "following values:\n" - + "ANY - The policy will be applied on the BYOD and COPE device types\n" - + "BYOD (Bring Your Own Device) - The policy will only be applied on the BYOD device type\n" - + "COPE (Corporate-Owned, Personally-Enabled) - The policy will only be applied on the COPE " - + "device type\n", required = true) + + @ApiModelProperty( + name = "ownershipType", + value = "The policy ownership type. It can be any of the following values:\n" + + "ANY - The policy will be applied on the BYOD and COPE device types\n" + + "BYOD (Bring Your Own Device) - The policy will only be applied on the BYOD device type\n" + + "COPE (Corporate-Owned, Personally-Enabled) - The policy will only be applied on the COPE " + + "device type\n", + required = true, + example = "BYOD") private String ownershipType; // Ownership type (COPE, BYOD, CPE) - @ApiModelProperty(name = "devices", value = "Lists out the devices the policy is enforced on", - required = true) + + @ApiModelProperty( + name = "devices", + value = "Lists out the devices the policy is enforced on", + required = true, + example = "[]") private List devices; // Individual devices this policy should be applied - @ApiModelProperty(name = "users", value = "Lists out the users on whose devices the policy is enforced", - required = true) + + @ApiModelProperty( + name = "users", + value = "Lists out the users on whose devices the policy is enforced", + required = true, + example = "[]") private List users; - @ApiModelProperty(name = "active", value = "If the value is true it indicates that the policy is active. " - + "If the value is false it indicates that the policy is inactive", required = true) + + @ApiModelProperty( + name = "active", + value = "If the value is true it indicates that the policy is active. " + + "If the value is false it indicates that the policy is inactive", + required = true, + example = "false") private boolean active; - @ApiModelProperty(name = "updated", value = "If you have made changes to the policy but have not applied" - + " these changes to the devices that are registered with EMM, then the value is defined as true." - + " But if you have already applied any changes made to the policy then the value is defined as" - + " false.", required = true) + + @ApiModelProperty( + name = "updated", + value = "If you have made changes to the policy but have not applied" + + " these changes to the devices that are registered with EMM, then the value is defined as true." + + " But if you have already applied any changes made to the policy then the value is defined as" + + " false.", + required = true, + example = "false") private boolean updated; - @ApiModelProperty(name = "description", value = "Gives a description on the policy", required = true) + + @ApiModelProperty( + name = "description", + value = "Gives a description on the policy", + required = true, + example = "This will block the camera functionality") private String description; - /* Compliance data*/ - private String compliance; + @ApiModelProperty( + name = "compliance", + value = "Define the non-compliance rules. WSO2 EMM provides the following non-compliance rules:\n" + + "Enforce - Forcefully enforce the policies on the devices.\n" + + "Warning - If the device does not adhere to the given policies a warning message will " + + "be sent.\n" + + "Monitor - If the device does not adhere to the given policies the server is notified " + + "of the violation unknown to the user and the administrator can take the necessary " + + "actions with regard to the reported", + required = true, + example = "enforce") + private String compliance; /* Compliance data*/ /*Dynamic policy attributes*/ /* This is related criteria based policy */ + @ApiModelProperty( + name = "policyCriterias", + value = "", + required = true, + example = "[]") private List policyCriterias; + @ApiModelProperty( + name = "tenantId", + value = "", + required = true, + example = "-1234") private int tenantId; + + @ApiModelProperty( + name = "profileId", + value = "", + required = true, + example = "1") private int profileId; /*This will be used to record attributes which will be used by customer extended PDPs and PIPs*/ @@ -92,7 +170,11 @@ public class Policy implements Comparable, Serializable { private Map attributes; /*This will keep the list of groups to which the policy will be applied. */ - + @ApiModelProperty( + name = "deviceGroups", + value = "This will keep the list of groups to which the policy will be applied", + required = true, + example = "[]") private List deviceGroups; diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Profile.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Profile.java index 0d3d08026d2..ddc1411330e 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Profile.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/Profile.java @@ -18,8 +18,8 @@ package org.wso2.carbon.policy.mgt.common; - - +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import org.wso2.carbon.device.mgt.core.dto.DeviceType; import javax.xml.bind.annotation.XmlElement; @@ -28,17 +28,61 @@ import java.io.Serializable; import java.sql.Timestamp; import java.util.List; @XmlRootElement +@ApiModel(value = "Profile", description = "This class carries all information related to policy profiles") + public class Profile implements Serializable { + @ApiModelProperty( + name = "profileId", + value = "The ID of each profile that is in the selected policy", + required = true, + example = "1") private int profileId; + + @ApiModelProperty( + name = "profileName", + value = "The name of the profile", + required = true, + example = "Block Camera") private String profileName; + + @ApiModelProperty( + name = "tenantId", + value = "The ID of the tenant that added the policy", + required = true, + example = "-1234") private int tenantId; + + @ApiModelProperty( + name = "deviceType", + value = "Contains the device type details the policy was created for", + required = true, + example = "android") private String deviceType; + + @ApiModelProperty( + name = "createdDate", + value = "The date the policy was created", + required = true, + example = "Thu, 6 Oct 2016 14:39:32 +0530") private Timestamp createdDate; + + @ApiModelProperty( + name = "updatedDate", + value = "The date the changes made to the policy was published to" + + " the devices registered with the EMM", + required = true, + example = "Thu, 6 Oct 2016 14:39:32 +0530") private Timestamp updatedDate; -// private List featuresList; // Features included in the policies. + + @ApiModelProperty( + name = "profileFeaturesList", + value = "Contains the features specific to each profile in the policy", + required = true) private List profileFeaturesList; // Features included in the policies. +// private List featuresList; // Features included in the policies. + public String getDeviceType() { return deviceType; } @@ -55,13 +99,12 @@ public class Profile implements Serializable { this.tenantId = tenantId; } -/* public List getFeaturesList() { - return featuresList; - } - - public void setFeaturesList(List featuresList) { - this.featuresList = featuresList; - }*/ + /* public List getFeaturesList() { + return featuresList; + } + public void setFeaturesList(List featuresList) { + this.featuresList = featuresList; + }*/ @XmlElement public int getProfileId() { return profileId; @@ -106,4 +149,4 @@ public class Profile implements Serializable { public void setProfileFeaturesList(List profileFeaturesList) { this.profileFeaturesList = profileFeaturesList; } -} +} \ No newline at end of file diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/ProfileFeature.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/ProfileFeature.java index 723f5fb49c6..e5e353adc25 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/ProfileFeature.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/src/main/java/org/wso2/carbon/policy/mgt/common/ProfileFeature.java @@ -29,18 +29,39 @@ public class ProfileFeature implements Serializable { private static final long serialVersionUID = 19981018L; - @ApiModelProperty(name = "id", value = "Define the ID", required = true) + @ApiModelProperty( + name = "id", + value = "Define the ID", + required = true, + example = "1") private int id; - @ApiModelProperty(name = "featureCode", value = "Provide the code that defines the policy you wish to add", - required = true) + + @ApiModelProperty( + name = "featureCode", + value = "Provide the code that defines the policy you wish to add", + required = true, + example = "CAMERA") private String featureCode; - @ApiModelProperty(name = "profileId", value = "Define the ID of the profile", required = true) + + @ApiModelProperty( + name = "profileId", + value = "Define the ID of the profile", + required = true, + example = "1") private int profileId; - @ApiModelProperty(name = "deviceTypeId", value = "The ID used to define the type of the device platform", - required = true) + + @ApiModelProperty( + name = "deviceType", + value = "The ID used to define the type of the device platform", + required = true, + example = "android") private String deviceType; - @ApiModelProperty(name = "content", value = "The list of parameters that define the policy", - required = true) + + @ApiModelProperty( + name = "content", + value = "The list of parameters that define the policy", + required = true, + example = "{\\\"enabled\\\":false}") private Object content; public int getId() { @@ -82,4 +103,4 @@ public class ProfileFeature implements Serializable { public void setContent(Object content) { this.content = content; } -} +} \ No newline at end of file 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 0c3f72dae29..eb1c1dbdee9 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.policy.mgt.core - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - Policy Management Core WSO2 Carbon - Policy Management Core diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyFilterImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyFilterImpl.java index 18cf7a15601..f589d5bfd2e 100644 --- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyFilterImpl.java +++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/impl/PolicyFilterImpl.java @@ -70,7 +70,10 @@ public class PolicyFilterImpl implements PolicyFilter { Map policyMap = new HashMap<>(); for (Policy policy : policies) { List wrappers = policy.getDeviceGroups(); - if (PolicyManagementConstants.ANY.equalsIgnoreCase(wrappers.get(0).getName())) { + if (wrappers.isEmpty()) { + temp.add(policy); + continue; + } else if (PolicyManagementConstants.ANY.equalsIgnoreCase(wrappers.get(0).getName())) { temp.add(policy); policyMap.put(policy.getId(), policy); continue; diff --git a/components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/pom.xml b/components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/pom.xml index 59b2e2d6a55..b16f80e7a94 100644 --- a/components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/pom.xml +++ b/components/policy-mgt/org.wso2.carbon.simple.policy.decision.point/pom.xml @@ -3,14 +3,14 @@ org.wso2.carbon.devicemgt policy-mgt - 2.0.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.simple.policy.decision.point - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - Simple Policy Decision Point WSO2 Carbon - Simple Policy Decision Point diff --git a/components/policy-mgt/pom.xml b/components/policy-mgt/pom.xml index e65c922d90e..07b7c1093d7 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 policy-mgt - 2.0.3-SNAPSHOT + 2.0.4 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 5d6bdfaf4d8..6f7aa000597 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.devicemgt org.wso2.carbon.webapp.authenticator.framework - 2.0.3-SNAPSHOT + 2.0.4 bundle WSO2 Carbon - Web Application Authenticator Framework Bundle WSO2 Carbon - Web Application Authenticator Framework Bundle diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java index 352d8d8f62a..e02f5001198 100755 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java @@ -19,6 +19,7 @@ package org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.impl; import org.wso2.carbon.identity.oauth2.dto.OAuth2TokenValidationRequestDTO; import org.wso2.carbon.identity.oauth2.dto.OAuth2TokenValidationResponseDTO; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import org.wso2.carbon.utils.multitenancy.MultitenantUtils; import org.wso2.carbon.webapp.authenticator.framework.AuthenticatorFrameworkDataHolder; import org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.OAuth2TokenValidator; @@ -64,6 +65,9 @@ public class LocalOAuthValidator implements OAuth2TokenValidator { tokenValidationResponse.getAuthorizedUser()); tenantDomain = MultitenantUtils.getTenantDomain(tokenValidationResponse.getAuthorizedUser()); + if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) { + tenantDomain = MultitenantUtils.getTenantDomain(userName); + } } else { OAuthValidationResponse oAuthValidationResponse = new OAuthValidationResponse(); oAuthValidationResponse.setErrorMsg(tokenValidationResponse.getErrorMsg()); diff --git a/components/webapp-authenticator-framework/pom.xml b/components/webapp-authenticator-framework/pom.xml index c7858f679ca..1752cb68a62 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt webapp-authenticator-framework - 2.0.3-SNAPSHOT + 2.0.4 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 0189099a8b0..439957fa604 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.apimgt.application.extension.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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.webapp.publisher.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml index 864f8faa03f..117f899a390 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.apimgt.webapp.publisher.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 692cea442a2..0804d11989f 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt apimgt-extensions-feature - 2.0.3-SNAPSHOT + 2.0.4 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 cc877b4bf1a..065fb9581a0 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.3-SNAPSHOT + 2.0.4 ../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 09acf3200e8..66f0f60faad 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.3-SNAPSHOT + 2.0.4 ../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 961a7779f9f..59e974fd1cb 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.certificate.mgt.server.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 fd6e4d5dadc..fa6800e0d47 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt certificate-mgt-feature - 2.0.3-SNAPSHOT + 2.0.4 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 134c70ceafd..c51ff3c94ca 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 969c5061935..2da4880364a 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 6dd22d279b2..dc2ffb79271 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 3a1570045a9..f35eabf9b68 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 cc47934a9d3..71f1527ee1a 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.3-SNAPSHOT + 2.0.4 ../../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 cfab1bf4445..46002f193b3 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.analytics.dashboard.feature - 2.0.3-SNAPSHOT + 2.0.4 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 b2d0c7bfbcf..eb14745efd5 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.analytics.data.publisher.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 ea4a0e20395..2a1d925cb66 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.3-SNAPSHOT + 2.0.4 ../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 ae0d5db6156..c7354167d27 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.extensions.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 ef4c8d10f05..dd290f50096 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.3-SNAPSHOT + 2.0.4 ../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 82b1d1e43e9..0b908958a98 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.server.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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.server.feature/src/main/resources/conf/cdm-config.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml index 462258c681d..1f76b3dacdf 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/conf/cdm-config.xml @@ -27,6 +27,7 @@ org.wso2.carbon.device.mgt.extensions.push.notification.provider.gcm.GCMBasedPushNotificationProvider + @@ -48,10 +49,10 @@ windows - - true - 600000 - + + + + 20 diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql index 8a5195b4cd7..eb30a07b12e 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql @@ -147,8 +147,8 @@ CREATE TABLE IF NOT EXISTS DM_PROFILE ( UPDATED_TIME DATETIME NOT NULL , PRIMARY KEY (ID) , CONSTRAINT DM_PROFILE_DEVICE_TYPE - FOREIGN KEY (DEVICE_TYPE ) - REFERENCES DM_DEVICE_TYPE (NAME) + FOREIGN KEY (DEVICE_TYPE, TENANT_ID) + REFERENCES DM_DEVICE_TYPE (NAME, PROVIDER_TENANT_ID) ON DELETE NO ACTION ON UPDATE NO ACTION ); @@ -200,11 +200,6 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE_POLICY ( FOREIGN KEY (POLICY_ID ) REFERENCES DM_POLICY (ID ) ON DELETE NO ACTION - ON UPDATE NO ACTION, - CONSTRAINT FK_DEVICE_TYPE_POLICY_DEVICE_TYPE - FOREIGN KEY (DEVICE_TYPE ) - REFERENCES DM_DEVICE_TYPE (NAME) - ON DELETE NO ACTION ON UPDATE NO ACTION ); 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 e01fa5a90c8..ceeb14e5168 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.3-SNAPSHOT + 2.0.4 ../pom.xml diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml index ef48f7cd4e0..dd41d4adf6e 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.3-SNAPSHOT + 2.0.4 ../../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 1ab5b01a8af..ac5f3e79de3 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.dynamic.client.registration.server.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 156de0bc872..bc20b056a60 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt dynamic-client-registration-feature - 2.0.3-SNAPSHOT + 2.0.4 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 37a62260e72..039184f316e 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.email.sender.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 06e05bac9a0..8d6550a193d 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt email-sender-feature - 2.0.3-SNAPSHOT + 2.0.4 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 9d35ddea01f..92f9068bdae 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.identity.jwt.client.extension.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 f13ad1591b3..bb9e02ff128 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 jwt-client-feature - 2.0.3-SNAPSHOT + 2.0.4 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 ef987f94304..70dd81f1668 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.device.mgt.oauth.extensions.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 5b9a8f6b483..651c071331e 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt oauth-extensions-feature - 2.0.3-SNAPSHOT + 2.0.4 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 38c66ca9b1e..fd8c780fbfa 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.policy.mgt.server.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 0b13c1abd5c..e050615fc2a 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt policy-mgt-feature - 2.0.3-SNAPSHOT + 2.0.4 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 e18ae97bc31..12cbb2d8b2b 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.3-SNAPSHOT + 2.0.4 ../pom.xml 4.0.0 org.wso2.carbon.webapp.authenticator.framework.server.feature pom - 2.0.3-SNAPSHOT + 2.0.4 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 30734997ebc..12c78e3203e 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.3-SNAPSHOT + 2.0.4 ../../pom.xml 4.0.0 org.wso2.carbon.devicemgt webapp-authenticator-framework-feature - 2.0.3-SNAPSHOT + 2.0.4 pom WSO2 Carbon - Webapp Authenticator Framework Feature http://wso2.org diff --git a/pom.xml b/pom.xml index bcd15ec495a..25bb565618f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ org.wso2.carbon.devicemgt carbon-devicemgt pom - 2.0.3-SNAPSHOT + 2.0.4 WSO2 Carbon - Device Management - Parent http://wso2.org WSO2 Connected Device Manager Components @@ -1562,7 +1562,7 @@ https://github.com/wso2/carbon-device-mgt.git scm:git:https://github.com/wso2/carbon-device-mgt.git scm:git:https://github.com/wso2/carbon-device-mgt.git - HEAD + v2.0.4 @@ -1838,7 +1838,7 @@ 1.2.11.wso2v10 - 2.0.3-SNAPSHOT + 2.0.4 4.4.8