mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'release-2.0.x' of https://github.com/wso2/carbon-device-mgt into release-2.0.x
This commit is contained in:
commit
91437ff81c
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.annotations</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Annotations</name>
|
||||
<description>WSO2 Carbon - API Management Custom Annotation Module</description>
|
||||
|
||||
@ -21,12 +21,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension.api</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<name>WSO2 Carbon - API Application Management API</name>
|
||||
|
||||
@ -22,12 +22,12 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<artifactId>org.wso2.carbon.apimgt.application.extension</artifactId>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Application Management</name>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.apimgt.webapp.publisher</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - API Management Webapp Publisher</name>
|
||||
<description>WSO2 Carbon - API Management Webapp Publisher</description>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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";
|
||||
|
||||
|
||||
@ -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<String, DirectoryIteratorFactory> 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);
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>apimgt-extensions</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - API Management Extensions Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Certificate Management Core</name>
|
||||
<description>WSO2 Carbon - Certificate Management Core</description>
|
||||
@ -50,7 +50,9 @@
|
||||
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
||||
<Bundle-Description>Device Management Core Bundle</Bundle-Description>
|
||||
<Private-Package>org.wso2.carbon.certificate.mgt.core.internal</Private-Package>
|
||||
<Private-Package>
|
||||
org.wso2.carbon.certificate.mgt.core.internal
|
||||
</Private-Package>
|
||||
<Import-Package>
|
||||
org.osgi.framework,
|
||||
org.osgi.service.component,
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>certificate-mgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - Certificate Management Component</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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<Operation> 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<Operation> getOperations() {
|
||||
|
||||
@ -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<TaskOperation> taskOperations;
|
||||
private OperationMonitoringTaskConfig operationMonitoringConfigs;
|
||||
private List<MonitoringOperation> 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<TaskOperation> 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<TaskConfiguration.Operation> 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -102,6 +102,8 @@
|
||||
</tableConfig>
|
||||
</DataSource>
|
||||
<TaskConfiguration>
|
||||
<Enable>true</Enable>
|
||||
<Frequency>600000</Frequency>
|
||||
<Operations>
|
||||
<Operation>
|
||||
<Name>DEVICE_INFO</Name>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -30,7 +30,8 @@ public class PolicyList extends BasePaginatedResult {
|
||||
|
||||
private List<Policy> 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<Policy> getList() {
|
||||
return policies;
|
||||
|
||||
@ -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<ProfileFeature> profileFeaturesList; // Features included in the policies.
|
||||
|
||||
public String getDeviceType() {
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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);
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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> 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<MonitoringOperation> getMonitoringOperation() {
|
||||
return monitoringOperation;
|
||||
}
|
||||
|
||||
public void setMonitoringOperation(List<MonitoringOperation> monitoringOperation) {
|
||||
this.monitoringOperation = monitoringOperation;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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<TaskOperation> getTasksForPlatform();//getTasksConfiguraitons
|
||||
OperationMonitoringTaskConfig getOperationMonitoringConfig();
|
||||
|
||||
DeviceManager getDeviceManager();
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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,7 +92,8 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis
|
||||
}
|
||||
}
|
||||
|
||||
public void removeDeviceManagementProvider(DeviceManagementService provider) throws DeviceManagementException {
|
||||
public void removeDeviceManagementProvider(DeviceManagementService provider)
|
||||
throws DeviceManagementException {
|
||||
String deviceTypeName = provider.getType().toLowerCase();
|
||||
DeviceTypeIdentifier deviceTypeIdentifier;
|
||||
ProvisioningConfig provisioningConfig = provider.getProvisioningConfig();
|
||||
@ -99,7 +105,13 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis
|
||||
deviceTypeIdentifier = new DeviceTypeIdentifier(deviceTypeName, providerTenantId);
|
||||
providers.remove(deviceTypeIdentifier);
|
||||
}
|
||||
OperationManager operationManager = operationManagerRepository.getOperationManager(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) {
|
||||
@ -155,16 +167,60 @@ public class DeviceManagementPluginRepository implements DeviceManagerStartupLis
|
||||
pushNoteConfig.getType() + "'.");
|
||||
}
|
||||
NotificationStrategy notificationStrategy = provider.getNotificationStrategy(pushNoteConfig);
|
||||
operationManagerRepository.addOperationManager(deviceTypeIdentifier, new OperationManagerImpl(
|
||||
notificationStrategy));
|
||||
operationManagerRepository.addOperationManager(deviceTypeIdentifier,
|
||||
new OperationManagerImpl(deviceTypeIdentifier.getDeviceType(), notificationStrategy));
|
||||
} else {
|
||||
operationManagerRepository.addOperationManager(deviceTypeIdentifier, new OperationManagerImpl());
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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<String, DirectoryIteratorFactory> 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);
|
||||
|
||||
@ -218,6 +218,17 @@ public interface DeviceDAO {
|
||||
*/
|
||||
List<Device> 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<Device> getDevicesOfUser(String username, String type, int tenantId) throws DeviceManagementDAOException;
|
||||
|
||||
|
||||
/**
|
||||
* This method is used to retrieve devices of a given user as a paginated result.
|
||||
*
|
||||
|
||||
@ -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<Device> getDevicesOfUser(String username, String type, int tenantId) throws DeviceManagementDAOException {
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
List<Device> 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();
|
||||
}
|
||||
|
||||
@ -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<String, OperationMonitoringTaskConfig> map = new HashMap<>();
|
||||
|
||||
|
||||
public void addToMap(OperationMonitoringTaskConfig taskConfig) {
|
||||
this.map.put("aa", taskConfig);
|
||||
}
|
||||
|
||||
public Map<String, OperationMonitoringTaskConfig> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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<String, OperationMonitoringTaskConfig> OperationConfigMap = Collections.synchronizedMap(
|
||||
new HashMap<String, OperationMonitoringTaskConfig>());
|
||||
|
||||
|
||||
public static DeviceMonitoringOperationDataHolder getInstance() {
|
||||
return thisInstance;
|
||||
}
|
||||
|
||||
public void addOperationMonitoringConfigToMap(String deviceType, OperationMonitoringTaskConfig OperationConfig) {
|
||||
this.OperationConfigMap.put(deviceType, OperationConfig);
|
||||
}
|
||||
|
||||
public Map<String, OperationMonitoringTaskConfig> getOperationMonitoringConfigFromMap(){
|
||||
return this.OperationConfigMap;
|
||||
}
|
||||
}
|
||||
@ -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<String, OperationMonitoringTaskConfig> deviceConfigMap = DeviceMonitoringOperationDataHolder
|
||||
.getInstance().getOperationMonitoringConfigFromMap();
|
||||
|
||||
for (String platformType : new ArrayList<String>(deviceConfigMap.keySet())) {
|
||||
deviceTaskManagerService.startTask(platformType, deviceConfigMap.get(platformType));
|
||||
deviceConfigMap.remove(platformType);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
protected void deactivate(ComponentContext componentContext) {
|
||||
try {
|
||||
|
||||
@ -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<String> 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<DeviceIdentifier> 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,28 +1038,30 @@ public class OperationManagerImpl implements OperationManager {
|
||||
}
|
||||
|
||||
private boolean isTaskScheduledOperation(Operation operation, List<DeviceIdentifier> deviceIds) {
|
||||
List<TaskOperation> taskOperations = new ArrayList<>();
|
||||
Map<String, List<TaskOperation>> deviceTypeSpecificTasks = new HashMap<>();
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance().
|
||||
getDeviceManagementProvider();
|
||||
|
||||
deviceTypeSpecificTasks = deviceManagementProviderService.getTaskList();//Get task list from each device type
|
||||
List<MonitoringOperation> 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){
|
||||
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();
|
||||
|
||||
@ -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<Device> searchDeviceDetailsTable(String query) throws SearchDAOException;
|
||||
|
||||
List<Device> searchDevicePropertyTable(String query) throws SearchDAOException;
|
||||
// List<Device> searchDeviceDetailsTable(String query) throws SearchDAOException;
|
||||
//
|
||||
// List<Device> searchDevicePropertyTable(String query) throws SearchDAOException;
|
||||
|
||||
}
|
||||
|
||||
@ -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<Device> searchDeviceDetailsTable(String query) throws SearchDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Query : " + query);
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs;
|
||||
List<Device> devices = new ArrayList<>();
|
||||
Map<Integer, Integer> 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<Device> searchDevicePropertyTable(String query) throws SearchDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Query : " + query);
|
||||
}
|
||||
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs;
|
||||
List<Device> devices = new ArrayList<>();
|
||||
Map<Integer, Integer> 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<Device> fillPropertiesOfDevices(List<Device> 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<Device> 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<Device> searchDeviceDetailsTable(String query) throws SearchDAOException {
|
||||
// if (log.isDebugEnabled()) {
|
||||
// log.debug("Query : " + query);
|
||||
// }
|
||||
// Connection conn;
|
||||
// PreparedStatement stmt = null;
|
||||
// ResultSet rs;
|
||||
// List<Device> devices = new ArrayList<>();
|
||||
// Map<Integer, Integer> 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<Device> searchDevicePropertyTable(String query) throws SearchDAOException {
|
||||
// if (log.isDebugEnabled()) {
|
||||
// log.debug("Query : " + query);
|
||||
// }
|
||||
//
|
||||
// Connection conn;
|
||||
// PreparedStatement stmt = null;
|
||||
// ResultSet rs;
|
||||
// List<Device> devices = new ArrayList<>();
|
||||
// Map<Integer, Integer> 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<Device> fillPropertiesOfDevices(List<Device> 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<Device> devices, int deviceId) {
|
||||
// for (Device device : devices) {
|
||||
// if (device.getId() == deviceId) {
|
||||
// if (device.getDeviceInfo() == null) {
|
||||
// device.setDeviceInfo(new DeviceInfo());
|
||||
// }
|
||||
// return device.getDeviceInfo();
|
||||
// }
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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<Device> andDevices = searchDAO.searchDevicePropertyTable(query);
|
||||
List<Device> andDevices = searchDeviceDetailsTable(query);
|
||||
allANDDevices.add(andDevices);
|
||||
}
|
||||
}
|
||||
if (queries.containsKey(Constants.PROP_OR)) {
|
||||
for (String query : queries.get(Constants.PROP_OR)) {
|
||||
List<Device> orDevices = searchDAO.searchDevicePropertyTable(query);
|
||||
List<Device> 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<Device> 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<Device> authorizedDevices(List<Device> devices) throws SearchMgtException {
|
||||
List<Device> 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<Device> getUpdatedDevices(long epochTime) throws SearchMgtException {
|
||||
|
||||
@ -109,7 +148,7 @@ public class ProcessorImpl implements Processor {
|
||||
try {
|
||||
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<Device> searchDeviceDetailsTable(String query) throws SearchDAOException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Query : " + query);
|
||||
}
|
||||
Connection conn;
|
||||
PreparedStatement stmt = null;
|
||||
ResultSet rs = null;
|
||||
List<Device> devices = new ArrayList<>();
|
||||
Map<Integer, Integer> 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<Device> fillPropertiesOfDevices(List<Device> 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<Device> devices, int deviceId) {
|
||||
for (Device device : devices) {
|
||||
if (device.getId() == deviceId) {
|
||||
if (device.getDeviceInfo() == null) {
|
||||
device.setDeviceInfo(new DeviceInfo());
|
||||
}
|
||||
return device.getDeviceInfo();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -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<String, List<String>> buildQueries(List<Condition> conditions) throws InvalidOperatorException {
|
||||
|
||||
List<Condition> andColumns = new ArrayList<>();
|
||||
List<Condition> orColumns = new ArrayList<>();
|
||||
List<Condition> otherANDColumns = new ArrayList<>();
|
||||
@ -107,34 +109,40 @@ public class QueryBuilderImpl implements QueryBuilder {
|
||||
|
||||
@Override
|
||||
public String processAND(List<Condition> 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<Condition> 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_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_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();
|
||||
|
||||
}
|
||||
}
|
||||
@ -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<Device> 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<Device> getDevicesOfUser(String userName, String deviceType) throws DeviceManagementException;
|
||||
|
||||
/**
|
||||
* Method to get the list of devices owned by users of a particular user-role.
|
||||
*
|
||||
@ -282,6 +298,10 @@ public interface DeviceManagementProviderService {
|
||||
|
||||
int getActivityCountUpdatedAfter(long timestamp) throws OperationManagementException;
|
||||
|
||||
Map<String, List<TaskOperation>> getTaskList();
|
||||
List<MonitoringOperation> getMonitoringOperationList(String deviceType);
|
||||
|
||||
int getDeviceMonitoringFrequency(String deviceType);
|
||||
|
||||
boolean isDeviceMonitoringEnabled(String deviceType);
|
||||
|
||||
}
|
||||
|
||||
@ -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();
|
||||
@ -1217,24 +1220,37 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<TaskOperation>> getTaskList() {
|
||||
public List<MonitoringOperation> getMonitoringOperationList(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
Map<DeviceTypeIdentifier, DeviceManagementService> deviceManagementServiceMap =
|
||||
pluginRepository.getAllDeviceManagementServices(tenantId);
|
||||
DeviceManagementService dms;
|
||||
String deviceType;
|
||||
List<TaskOperation> taskOperations;
|
||||
Map<String, List<TaskOperation>> deviceTypeSpecificTasks = new HashMap<>();
|
||||
// Map<DeviceTypeIdentifier, DeviceManagementService> deviceManagementServiceMap =
|
||||
// pluginRepository.getAllDeviceManagementServices(tenantId);
|
||||
DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId);
|
||||
// ;
|
||||
// OperationMonitoringTaskConfig operationMonitoringTaskConfig;
|
||||
//Map<String, List<MonitoringOperation>> deviceTypeSpecificMonitoringOperations = new HashMap<>();
|
||||
|
||||
for(DeviceTypeIdentifier dti : deviceManagementServiceMap.keySet()){
|
||||
dms = deviceManagementServiceMap.get(dti);
|
||||
taskOperations = dms.getTasksForPlatform();
|
||||
if (taskOperations != null) {
|
||||
deviceType = dms.getType();
|
||||
deviceTypeSpecificTasks.put(deviceType, taskOperations);
|
||||
// for(DeviceTypeIdentifier dti : deviceManagementServiceMap.keySet()){
|
||||
// dms = deviceManagementServiceMap.get(dti);
|
||||
//
|
||||
// }
|
||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig = dms.getOperationMonitoringConfig();
|
||||
return operationMonitoringTaskConfig.getMonitoringOperation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDeviceMonitoringFrequency(String deviceType) {
|
||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
DeviceManagementService dms = pluginRepository.getDeviceManagementService(deviceType, tenantId);
|
||||
OperationMonitoringTaskConfig operationMonitoringTaskConfig = dms.getOperationMonitoringConfig();
|
||||
return operationMonitoringTaskConfig.getFrequency();
|
||||
}
|
||||
return deviceTypeSpecificTasks;
|
||||
|
||||
@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<Device> getDevicesOfUser(String username, String deviceType) throws DeviceManagementException {
|
||||
List<Device> devices = new ArrayList<>();
|
||||
List<Device> 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<Application> 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 {
|
||||
|
||||
@ -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<org.wso2.carbon.device.mgt.common.TaskOperation> getOperationList(String deviceType)
|
||||
throws DeviceMgtTaskException;
|
||||
// /**
|
||||
// * This method will get the operation list from configurations.
|
||||
// *
|
||||
// * @return - list of Task Operations.
|
||||
// * @throws DeviceMgtTaskException
|
||||
// */
|
||||
// List<MonitoringOperation> 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<String> getValidOperationNames(String deviceType) throws DeviceMgtTaskException;
|
||||
// /**
|
||||
// * This method will return the operation names which should be added in each iterations.
|
||||
// * @return
|
||||
// * @throws DeviceMgtTaskException
|
||||
// */
|
||||
// List<String> 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<DeviceIdentifier> deviceIds);
|
||||
boolean isTaskOperation(String opName);
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -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<String, String> 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();
|
||||
|
||||
@ -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<Integer, Map<String, Long>> map = new HashMap<>();
|
||||
|
||||
public DeviceTaskManagerImpl(String deviceType) {
|
||||
this.deviceType = deviceType;
|
||||
}
|
||||
|
||||
@Override
|
||||
//get device type specific operations
|
||||
public List<TaskOperation> getOperationList(String deviceType) throws DeviceMgtTaskException {
|
||||
public List<MonitoringOperation> getOperationList() throws DeviceMgtTaskException {
|
||||
|
||||
List<TaskOperation> taskOperations = new ArrayList<>();
|
||||
Map<String, List<TaskOperation>> deviceTypeSpecificTasks;
|
||||
//This Map contains task list against device type
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance().
|
||||
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;
|
||||
}
|
||||
|
||||
private List<String> getDeviceTypes() {
|
||||
List<String> operationPlatforms = new ArrayList<>();
|
||||
Map<String, List<TaskOperation>> deviceTypeSpecificTasks;
|
||||
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance().
|
||||
getDeviceManagementProvider();
|
||||
deviceTypeSpecificTasks = deviceManagementProviderService.getTaskList();
|
||||
|
||||
Set<String> 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,10 +95,8 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
try {
|
||||
List<Device> devices;
|
||||
List<String> operations;
|
||||
List<String> deviceTypes = this.getDeviceTypes();//list available device types
|
||||
|
||||
for(String deviceType : deviceTypes){
|
||||
operations = this.getValidOperationNames(deviceType); //list operations for each device type
|
||||
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) {
|
||||
@ -130,8 +112,6 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
log.debug("No devices are available to perform the operations.");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (InvalidDeviceException e) {
|
||||
throw new DeviceMgtTaskException("Invalid DeviceIdentifiers found.", e);
|
||||
} catch (DeviceManagementException e) {
|
||||
@ -141,16 +121,15 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getValidOperationNames(String deviceType) throws DeviceMgtTaskException {
|
||||
private List<String> getValidOperationNames() throws DeviceMgtTaskException {
|
||||
|
||||
List<TaskOperation> taskOperations = this.getOperationList(deviceType);
|
||||
List<MonitoringOperation> monitoringOperations = this.getOperationList();
|
||||
List<String> opNames = new ArrayList<>();
|
||||
Long milliseconds = System.currentTimeMillis();
|
||||
int frequency = this.getTaskFrequency();
|
||||
Map<String, Long> 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,13 +152,11 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
|
||||
|
||||
@Override
|
||||
public boolean isTaskOperation(String opName, List<DeviceIdentifier> deviceIds) {
|
||||
public boolean isTaskOperation(String opName) {
|
||||
|
||||
for(DeviceIdentifier deviceIdentifier : deviceIds){
|
||||
String deviceType = deviceIdentifier.getType();
|
||||
try {
|
||||
List<TaskOperation> taskOperations = this.getOperationList(deviceType);
|
||||
for (TaskOperation taop : taskOperations) {
|
||||
List<MonitoringOperation> monitoringOperations = this.getOperationList();
|
||||
for (MonitoringOperation taop : monitoringOperations) {
|
||||
if (taop.getTaskName().equalsIgnoreCase(opName)) {
|
||||
return true;
|
||||
}
|
||||
@ -187,7 +164,6 @@ public class DeviceTaskManagerImpl implements DeviceTaskManager {
|
||||
} catch (DeviceMgtTaskException e) {
|
||||
// ignoring the error, no need to throw, If error occurs, return value will be false.
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
|
||||
@ -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<String, String> 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<String, String> 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);
|
||||
|
||||
@ -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<TaskOperation> getTasksForPlatform(){
|
||||
public OperationMonitoringTaskConfig getOperationMonitoringConfig(){
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
<class name="org.wso2.carbon.device.mgt.core.app.mgt.AppManagementConfigurationManagerTest"/>
|
||||
<class name="org.wso2.carbon.device.mgt.core.dao.ApplicationPersistenceTests"/>
|
||||
<class name="org.wso2.carbon.device.mgt.core.search.DeviceDetails"/>
|
||||
<class name="org.wso2.carbon.device.mgt.core.search.SearchDevice"/>
|
||||
<!--<class name="org.wso2.carbon.device.mgt.core.search.SearchDevice"/>-->
|
||||
<class name="org.wso2.carbon.device.mgt.core.dao.GroupPersistTests"/>
|
||||
</classes>
|
||||
</test>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -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": {
|
||||
|
||||
@ -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,6 +674,7 @@ var userModule = function () {
|
||||
*/
|
||||
publicMethods.getSecondaryUserStores = function () {
|
||||
var returnVal = [];
|
||||
if (publicMethods.isAuthorized("/permission/admin")) {
|
||||
var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"];
|
||||
var wsPayload = "<xsd:getSecondaryRealmConfigurations xmlns:xsd='http://org.apache.axis2/xsd'/>";
|
||||
serviceInvokers.WS.soapRequest(
|
||||
@ -690,6 +692,11 @@ var userModule = function () {
|
||||
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.");
|
||||
}
|
||||
}
|
||||
return returnVal;
|
||||
};
|
||||
|
||||
|
||||
@ -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"}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/">
|
||||
Resource Dashboard
|
||||
<i class="icon fw fw-home"></i>
|
||||
</a>
|
||||
</li>
|
||||
{{/zone}}
|
||||
|
||||
@ -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 = '<div class="dynamic-search-param row"><div class="row"><a cla
|
||||
'</a></div><div class="form-group wr-input-control col-md-2"><label class="wr-input-label ">State</label>' +
|
||||
'<select class="state no-tag form-control select2-custom"><option>AND</option><option>OR</option></select></div><div ' +
|
||||
'class="form-group wr-input-control col-md-4"><label class="wr-input-label ">Key</label><select class=' +
|
||||
'"txt-key form-control select2-custom"><option>deviceModel</option><option>vendor</option><option>osVersion' +
|
||||
'</option><option>batteryLevel</option><option>internalTotalMemory</option> <option>' +
|
||||
'internalAvailableMemory</option> <option>externalTotalMemory</option> <option>externalAvailableMemory' +
|
||||
'</option> <option>connectionType</option> <option>ssid</option> <option>cpuUsage</option> <option>' +
|
||||
'totalRAMMemory</option> <option>availableRAMMemory</option> <option>pluggedIn</option></select></div>' +
|
||||
'"txt-key form-control select2-custom"><option value = "deviceModel">Device Model' +
|
||||
'</option><option value = "vendor">Vendor</option><option value = "osVersion">OS Version' +
|
||||
'</option><option value = "batteryLevel">Battery Level</option><option value =' +
|
||||
' "internalTotalMemory">Internal Total Memory</option> <option value ="internalAvailableMemory">' +
|
||||
'Internal Available Memory</option> <option value = "externalTotalMemory">externalTotalMemory</option>' +
|
||||
' <option value = "externalAvailableMemory">External Available Memory' +
|
||||
'</option> <option value = "connectionType">Connection Type</option> <option value =' +
|
||||
' "ssid">SSID</option><option value = "cpuUsage">CPU Usage</option><option value = "totalRAMMemory">' +
|
||||
'Total RAM Memory</option> <option value = "availableRAMMemory">Available RAM Memory</option>' +
|
||||
'<option value = "pluggedIn">Plugged In</option></select></div>' +
|
||||
'<div class="form-group wr-input-control col-md-2">' +
|
||||
'<label class="wr-input-label ">Operator</label><select class="form-control select2-custom no-tag operator">' +
|
||||
'<option>=</option><option> !=</option><option> <</option>' +
|
||||
'<option> =<</option><option> ></option><option> >=</option></select></div><div class="form-group ' +
|
||||
'wr-input-control col-md-4"><label class="wr-input-label' +
|
||||
' ">Value</label><input type="text" class="form-control txt-value"/></div></div>';
|
||||
'<label class="wr-input-label ">Operator</label><select id = "operators" class="form-control' +
|
||||
' select2-custom no-tag operator"><option>=</option><option> !=</option><option> %</option>' +
|
||||
'</select></div><div class="form-group ' + 'wr-input-control col-md-4"><label class="wr-input-label">Value</label>' +
|
||||
'<input type="text" class="form-control txt-value"/></div></div>';
|
||||
|
||||
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 '<option> =</option><option> !=</option><option> <</option><option> =<</option><option>' +
|
||||
' ></option><option> >=</option>';
|
||||
} else {
|
||||
return '<option> =</option><option> !=</option><option><option> %</option>';
|
||||
}
|
||||
}
|
||||
|
||||
/** 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,16 +121,30 @@ $(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 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)
|
||||
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('Error in user input values. ' + key + " requires a" +
|
||||
" numerical value as the search value");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// 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");
|
||||
@ -100,7 +152,6 @@ $(document).ready(function () {
|
||||
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');
|
||||
@ -128,14 +179,11 @@ $(document).ready(function () {
|
||||
device.type = tempDevice.type;
|
||||
device.name = tempDevice.name;
|
||||
device.deviceIdentifier = tempDevice.deviceIdentifier;
|
||||
var properties = {} ;
|
||||
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.enrolmentInfo = tempDevice.enrolmentInfo;
|
||||
device.properties = properties;
|
||||
devices.push(device);
|
||||
}
|
||||
@ -171,5 +219,6 @@ $(document).ready(function () {
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -5,7 +5,7 @@
|
||||
<tr data-type="selectable" data-deviceid="{{deviceIdentifier}}" data-devicetype="{{type}}">
|
||||
<td class="remove-padding icon-only content-fill viewEnabledIcon"
|
||||
{{#unequal enrolmentInfo.status "REMOVED"}}
|
||||
data-url="view?type={{type}}&id={{deviceIdentifier}}"
|
||||
data-url="../device/{{type}}?id={{deviceIdentifier}}"
|
||||
{{/unequal}}
|
||||
>
|
||||
<div class="thumbnail icon">
|
||||
|
||||
@ -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,
|
||||
@ -15,6 +12,8 @@
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
{{unit "cdmf.unit.ui.modal"}}
|
||||
{{unit "cdmf.unit.data-tables-extended"}}
|
||||
{{#zone "breadcrumbs"}}
|
||||
<li>
|
||||
<a href="{{@app.context}}/">
|
||||
@ -96,6 +95,21 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- /content -->
|
||||
<div id="group-error-content" class="hide">
|
||||
<div class="modal-content">
|
||||
<div class="row">
|
||||
<div class="col-md-7 col-centered center-container">
|
||||
<h4 id="error-msg">Unexpected error occurred!</h4>
|
||||
<br/>
|
||||
<div class="buttons">
|
||||
<a href="#" id="group-unexpected-error-link" class="btn-operations">
|
||||
Ok
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- loading -->
|
||||
<div id="loading-content" class="col-centered hidden">
|
||||
<i class="fw fw-settings fw-spin fw-2x"></i>
|
||||
@ -143,4 +157,3 @@
|
||||
<script id="device-listing" src="{{@page.publicUri}}/templates/device-listing.hbs"
|
||||
type="text/x-handlebars-template"></script>
|
||||
{{/zone}}
|
||||
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
|
||||
WSO2 Inc. licenses this file to you under the Apache License,
|
||||
Version 2.0 (the "License"); you may not use this file except
|
||||
in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns the dynamic state to be populated by add-user page.
|
||||
*
|
||||
* @param context Object that gets updated with the dynamic state of this page to be presented
|
||||
* @returns {*} A context object that returns the dynamic state of this page to be presented
|
||||
*/
|
||||
function onRequest(context) {
|
||||
var log = new Log("units/user-create/certificate-create.js");
|
||||
var userModule = require("/app/modules/business-controllers/user.js")["userModule"];
|
||||
var response = userModule.getRolesByUserStore();
|
||||
var mdmProps = require("/app/modules/conf-reader/main.js")["conf"];
|
||||
if (response["status"] == "success") {
|
||||
context["roles"] = response["content"];
|
||||
}
|
||||
|
||||
context["charLimit"] = mdmProps["usernameLength"];
|
||||
context["usernameJSRegEx"] = mdmProps["userValidationConfig"]["usernameJSRegEx"];
|
||||
context["usernameHelpText"] = mdmProps["userValidationConfig"]["usernameHelpMsg"];
|
||||
context["usernameRegExViolationErrorMsg"] = mdmProps["userValidationConfig"]["usernameRegExViolationErrorMsg"];
|
||||
context["firstnameJSRegEx"] = mdmProps["userValidationConfig"]["firstnameJSRegEx"];
|
||||
context["firstnameRegExViolationErrorMsg"] = mdmProps["userValidationConfig"]["firstnameRegExViolationErrorMsg"];
|
||||
context["lastnameJSRegEx"] = mdmProps["userValidationConfig"]["lastnameJSRegEx"];
|
||||
context["lastnameRegExViolationErrorMsg"] = mdmProps["userValidationConfig"]["lastnameRegExViolationErrorMsg"];
|
||||
|
||||
return context;
|
||||
}
|
||||
@ -39,8 +39,8 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Password *</label>
|
||||
<input type="password" name="password" class="form-control" placeholder="Enter your password"
|
||||
required="required" />
|
||||
<input type="password" name="password" class="form-control" autocomplete="off"
|
||||
placeholder="Enter your password" required="required" />
|
||||
</div>
|
||||
{{#if sessionDataKey}}
|
||||
<input type="hidden" name="sessionDataKey" value="{{sessionDataKey}}" />
|
||||
|
||||
@ -85,7 +85,7 @@ $("a#invite-user-link").click(function () {
|
||||
modalDialog.footer('<div class="buttons"> <a href="#" id="invite-user-success-link" ' +
|
||||
'class="btn-operations">Ok </a> </div>');
|
||||
$("a#invite-user-success-link").click(function () {
|
||||
modalPopup.hide();
|
||||
modalDialog.hide();
|
||||
});
|
||||
},
|
||||
function () {
|
||||
@ -95,14 +95,14 @@ $("a#invite-user-link").click(function () {
|
||||
modalDialog.footer('<div class="buttons"> <a href="#" id="invite-user-error-link" ' +
|
||||
'class="btn-operations">Ok </a> </div>');
|
||||
$("a#invite-user-error-link").click(function () {
|
||||
modalPopup.hide();
|
||||
modalDialog.hide();
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
$("a#invite-user-cancel-link").click(function () {
|
||||
modalPopup.hide();
|
||||
modalDialog.hide();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -108,14 +108,14 @@
|
||||
Enter new password
|
||||
<br><br>
|
||||
<div>
|
||||
<input type="password" class="form-control modal-input operationDataKeys new-password"
|
||||
<input type="password" autocomplete="off" class="form-control modal-input operationDataKeys new-password"
|
||||
data-key="message"/>
|
||||
</div>
|
||||
<br>
|
||||
Retype new password
|
||||
<br><br>
|
||||
<div>
|
||||
<input type="password" class="form-control modal-input operationDataKeys confirmed-password"
|
||||
<input type="password" autocomplete="off" class="form-control modal-input operationDataKeys confirmed-password"
|
||||
data-key="message"/>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
@ -35,3 +35,18 @@ window.queryEditor = CodeMirror.fromTextArea(document.getElementById('policy-def
|
||||
var validatePolicyProfile = function () {
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Generates policy profile feature list which will be saved with the profile.
|
||||
*
|
||||
* This function will be invoked from the relevant cdmf unit at the time of policy creation.
|
||||
*
|
||||
* @returns {Array} profile payloads
|
||||
*/
|
||||
var generateGenericPayload = function () {
|
||||
return [{
|
||||
"featureCode": "CONFIG",
|
||||
"deviceTypeId": policy["platformId"],
|
||||
"content": {"policyDefinition": window.queryEditor.getValue()}
|
||||
}];
|
||||
};
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in milliseconds )
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="monitoring-config-frequency" type="text"
|
||||
class="form-control"
|
||||
|
||||
@ -18,10 +18,10 @@
|
||||
var stepForwardFrom = {};
|
||||
var stepBackFrom = {};
|
||||
var policy = {};
|
||||
var configuredOperations = [];
|
||||
var validateInline = {};
|
||||
var clearInline = {};
|
||||
var validateStep = {};
|
||||
var hasPolicyProfileScript = false;
|
||||
|
||||
var enableInlineError = function (inputField, errorMsg, errorSign) {
|
||||
var fieldIdentifier = "#" + inputField;
|
||||
@ -158,6 +158,9 @@ stepForwardFrom["policy-platform"] = function (actionButton) {
|
||||
script.type = 'text/javascript';
|
||||
script.src = context + policyOperationsScriptSrc;
|
||||
$(".wr-advance-operations").prepend(script);
|
||||
hasPolicyProfileScript = true;
|
||||
} else {
|
||||
hasPolicyProfileScript = false;
|
||||
}
|
||||
if (policyOperationsStylesSrc) {
|
||||
var style = document.createElement('link');
|
||||
@ -173,7 +176,14 @@ stepForwardFrom["policy-platform"] = function (actionButton) {
|
||||
* Forward action of policy profile page. Generates policy profile payload.
|
||||
*/
|
||||
stepForwardFrom["policy-profile"] = function () {
|
||||
policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations);
|
||||
policy["profile"] = [];
|
||||
if (hasPolicyProfileScript) {
|
||||
/*
|
||||
generatePolicyProfile() function should be implemented in plugin side and should include the logic to build the
|
||||
policy profile object.
|
||||
*/
|
||||
policy["profile"] = generatePolicyProfile();
|
||||
}
|
||||
// updating next-page wizard title with selected platform
|
||||
$("#policy-criteria-page-wizard-title").text("ADD " + policy["platform"] + " POLICY");
|
||||
};
|
||||
@ -182,8 +192,13 @@ stepForwardFrom["policy-profile"] = function () {
|
||||
* Backward action of policy profile page. Moves back to platform selection step.
|
||||
*/
|
||||
stepBackFrom["policy-profile"] = function () {
|
||||
// reinitialize configuredOperations
|
||||
configuredOperations = [];
|
||||
if (hasPolicyProfileScript) {
|
||||
/*
|
||||
resetPolicyProfile() function should be implemented in plugin side and should include the logic to reset the policy
|
||||
profile object.
|
||||
*/
|
||||
resetPolicyProfile();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
@ -359,18 +374,14 @@ stepForwardFrom["policy-naming"] = function () {
|
||||
};
|
||||
|
||||
var savePolicy = function (policy, isActive, serviceURL) {
|
||||
var profilePayloads = [];
|
||||
// traverses key by key in policy["profile"]
|
||||
var key;
|
||||
for (key in policy["profile"]) {
|
||||
if (policy["profile"].hasOwnProperty(key)) {
|
||||
profilePayloads.push({
|
||||
"featureCode": key,
|
||||
"deviceType": policy["platform"],
|
||||
"content": policy["profile"][key]
|
||||
});
|
||||
}
|
||||
}
|
||||
var profilePayloads;
|
||||
if (hasPolicyProfileScript) {
|
||||
/*
|
||||
generateProfileFeaturesList() should be implemented in the plugin side and should include logic to build the
|
||||
profilePayloads array which contains objects, {featureCode:"value", deviceType:"value", content:"value"}.
|
||||
policy["profile"] object will be available for the method which returns from the generatePolicyProfile() function.
|
||||
*/
|
||||
profilePayloads = generateProfileFeaturesList();
|
||||
|
||||
$.each(profilePayloads, function (i, item) {
|
||||
$.each(item.content, function (key, value) {
|
||||
@ -380,6 +391,9 @@ var savePolicy = function (policy, isActive, serviceURL) {
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
profilePayloads = generateGenericPayload();
|
||||
}
|
||||
|
||||
var payload = {
|
||||
"policyName": policy["policyName"],
|
||||
|
||||
@ -20,7 +20,6 @@ var validateStep = {};
|
||||
var skipStep = {};
|
||||
var stepForwardFrom = {};
|
||||
var stepBackFrom = {};
|
||||
var configuredOperations = [];
|
||||
var policy = {};
|
||||
var currentlyEffected = {};
|
||||
|
||||
@ -200,9 +199,11 @@ skipStep["policy-platform"] = function (policyPayloadObj) {
|
||||
script.type = 'text/javascript';
|
||||
script.src = policyOperationsScriptSrc;
|
||||
$(".wr-advance-operations").prepend(script);
|
||||
var configuredOperations = operationModule.populateProfile(policy["platform"],
|
||||
policyPayloadObj["profile"]["profileFeaturesList"]);
|
||||
polulateProfileOperations(configuredOperations);
|
||||
/*
|
||||
This method should be implemented in the relevant plugin side and should include the logic to
|
||||
populate the policy profile in the plugin specific UI.
|
||||
*/
|
||||
polulateProfileOperations(policyPayloadObj["profile"]["profileFeaturesList"]);
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -227,7 +228,11 @@ skipStep["policy-platform"] = function (policyPayloadObj) {
|
||||
* Forward action of policy profile page. Generates policy profile payload.
|
||||
*/
|
||||
stepForwardFrom["policy-profile"] = function () {
|
||||
policy["profile"] = operationModule.generateProfile(policy["platform"], configuredOperations);
|
||||
/*
|
||||
generatePolicyProfile() function should be implemented in plugin side and should include the logic to build the
|
||||
policy profile object.
|
||||
*/
|
||||
policy["profile"] = generatePolicyProfile();
|
||||
// updating next-page wizard title with selected platform
|
||||
$("#policy-criteria-page-wizard-title").text("EDIT " + policy["platform"] + " POLICY - " + policy["name"]);
|
||||
};
|
||||
@ -415,19 +420,12 @@ var getParameterByName = function (name) {
|
||||
};
|
||||
|
||||
var updatePolicy = function (policy, state) {
|
||||
var profilePayloads = [];
|
||||
// traverses key by key in policy["profile"]
|
||||
var key;
|
||||
for (key in policy["profile"]) {
|
||||
|
||||
if (policy["profile"].hasOwnProperty(key)) {
|
||||
profilePayloads.push({
|
||||
"featureCode": key,
|
||||
"deviceType": policy["platform"],
|
||||
"content": policy["profile"][key]
|
||||
});
|
||||
}
|
||||
}
|
||||
/*
|
||||
generateProfileFeaturesList() should be implemented in the plugin side and should include logic to build the
|
||||
profilePayloads array which contains objects, {featureCode:"value", deviceType:"value", content:"value"}.
|
||||
policy["profile"] object will be available for the method which returns from the generatePolicyProfile() function.
|
||||
*/
|
||||
var profilePayloads = generateProfileFeaturesList();
|
||||
|
||||
$.each(profilePayloads, function (i, item) {
|
||||
$.each(item.content, function (key, value) {
|
||||
|
||||
@ -86,9 +86,11 @@ var displayPolicy = function (policyPayloadObj) {
|
||||
script.type = 'text/javascript';
|
||||
script.src = policyOperationsScriptSrc;
|
||||
$(".wr-advance-operations").prepend(script);
|
||||
var previouslyConfiguredOperations = operationModule.populateProfile(policy["platform"],
|
||||
policyPayloadObj["profile"]["profileFeaturesList"]);
|
||||
polulateProfileOperations(previouslyConfiguredOperations);
|
||||
/*
|
||||
This method should be implemented in the relevant plugin side and should include the logic to
|
||||
populate the policy profile in the plugin specific UI.
|
||||
*/
|
||||
polulateProfileOperations(policyPayloadObj["profile"]["profileFeaturesList"]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@ -67,20 +67,20 @@
|
||||
Type your current password *
|
||||
<br><br>
|
||||
<div>
|
||||
<input id="current-password" type="password" class="form-control modal-input"/>
|
||||
<input id="current-password" type="password" autocomplete="off" class="form-control modal-input"/>
|
||||
</div>
|
||||
<br><br>
|
||||
Type a new password *
|
||||
<br><br>
|
||||
<div>
|
||||
<input id="new-password" type="password" class="form-control modal-input"
|
||||
<input id="new-password" type="password" autocomplete="off" class="form-control modal-input"
|
||||
placeholder="[ Password should be in minimum 5 characters long and should not include any whitespaces ]"/>
|
||||
</div>
|
||||
<br><br>
|
||||
Reconfirm your new password *
|
||||
<br><br>
|
||||
<div>
|
||||
<input id="retyped-new-password" type="password" class="form-control modal-input"/>
|
||||
<input id="retyped-new-password" type="password" autocomplete="off" class="form-control modal-input"/>
|
||||
</div>
|
||||
<br><br>
|
||||
</h5>
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Bad request - Error 400</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
</head>
|
||||
<body>
|
||||
<i class="icon-unlink error-icon"></i>
|
||||
<h1>Error 400</h1>
|
||||
<h3>We are unable to understand the request and process it. Please re-check your request.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Unauthorized - Error 401</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
</head>
|
||||
<body>
|
||||
<i class="icon-unlink error-icon"></i>
|
||||
<h1>Error 401</h1>
|
||||
<h3>You do not have permission to access this page.Please contact your administrator and request permission.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Forbidden - Error 403</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<i class="icon-unlink error-icon"></i>
|
||||
<h1>Error 403</h1>
|
||||
<h3>We cannot process this request.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Page not found - Error 404</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
</head>
|
||||
<body>
|
||||
<i class="icon-unlink error-icon"></i>
|
||||
<h1>Error 404</h1>
|
||||
<h3>We can't find what you are looking for.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Method not allowed - Error 405</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
</head>
|
||||
<body>
|
||||
<i class="icon-unlink error-icon"></i>
|
||||
<h1>Error 405</h1>
|
||||
<h3>Method not allowed.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
<!--
|
||||
~ Copyright 2016 WSO2, Inc. (http://wso2.com)
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Internal Server Error - Error 500</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<body>
|
||||
<i class="icon-ambulance error-icon"></i>
|
||||
<h1>Error 500</h1>
|
||||
<h3>Something went wrong and we're trying to fix it.</h3>
|
||||
<h4 id="link"><a href="/devicemgt">Go to IoT Home</a></h4>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -56,6 +56,14 @@
|
||||
"path": "/api/operation-api.jag"
|
||||
}
|
||||
],
|
||||
"errorPages": {
|
||||
"500": "/error-pages/error500.html",
|
||||
"404": "/error-pages/error404.html",
|
||||
"401": "/error-pages/error401.html",
|
||||
"405": "/error-pages/error405.html",
|
||||
"403": "/error-pages/error403.html",
|
||||
"400": "/error-pages/error400.html"
|
||||
},
|
||||
"filters": [
|
||||
{
|
||||
"name": "URLBasedCachePreventionFilter",
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
placeholder="User Name" required="required" autofocus="autofocus" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="password" name="password" class="form-control"
|
||||
<input type="password" name="password" class="form-control" autocomplete="off"
|
||||
placeholder="Password" required="required" />
|
||||
</div>
|
||||
{{#if referer}}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -504,8 +504,6 @@ var module = {};
|
||||
} 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");
|
||||
@ -513,16 +511,16 @@ var module = {};
|
||||
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]
|
||||
IDP_ALIAS: identityAlias
|
||||
};
|
||||
if (!ssoClient.validateSignature(samlResponseObj, keyStoreParams)) {
|
||||
|
||||
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);
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<parent>
|
||||
<artifactId>device-mgt</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>email-sender</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>dynamic-client-registration</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>dynamic-client-registration</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<artifactId>dynamic-client-registration</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.dynamic.client.registration</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Dynamic client registration service</name>
|
||||
<description>WSO2 Carbon - Dynamic Client Registration Service</description>
|
||||
|
||||
@ -21,13 +21,13 @@
|
||||
<parent>
|
||||
<artifactId>dynamic-client-registration</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.dynamic.client.web.app.registration</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - Dynamic client web app registration</name>
|
||||
<description>WSO2 Carbon - Dynamic Client Web-app Registration Service</description>
|
||||
|
||||
@ -22,14 +22,14 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>dynamic-client-registration</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 Carbon - Dynamic client registration</name>
|
||||
<url>http://wso2.org</url>
|
||||
|
||||
@ -22,13 +22,13 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.device.mgt.oauth.extensions</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<packaging>bundle</packaging>
|
||||
<name>WSO2 Carbon - OAuth Extensions</name>
|
||||
<url>http://wso2.org</url>
|
||||
@ -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
|
||||
</Import-Package>
|
||||
</instructions>
|
||||
</configuration>
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
<parent>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>identity-extensions</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
<parent>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>carbon-devicemgt</artifactId>
|
||||
<version>2.0.3-SNAPSHOT</version>
|
||||
<version>2.0.4-SNAPSHOT</version>
|
||||
<relativePath>../../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user