From 0a1e11d192a617a5ec7fb5de72855c6713effdbf Mon Sep 17 00:00:00 2001 From: hasuniea Date: Wed, 24 Feb 2016 07:46:53 +0530 Subject: [PATCH 01/21] fixed import issue --- .../mgt/core/impl/CertificateGenerator.java | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java index 3dfe16854f..267753c4b5 100755 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java @@ -44,7 +44,14 @@ import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.util.Store; -import org.jscep.message.*; +import org.jscep.message.PkcsPkiEnvelopeDecoder; +import org.jscep.message.PkcsPkiEnvelopeEncoder; +import org.jscep.message.CertRep; +import org.jscep.message.PkiMessageEncoder; +import org.jscep.message.PkiMessageDecoder; +import org.jscep.message.PkiMessage; +import org.jscep.message.MessageEncodingException; +import org.jscep.message.MessageDecodingException; import org.jscep.transaction.FailInfo; import org.jscep.transaction.Nonce; import org.jscep.transaction.TransactionId; @@ -61,10 +68,30 @@ import org.wso2.carbon.device.mgt.common.TransactionManagementException; import javax.security.auth.x500.X500Principal; import javax.xml.bind.DatatypeConverter; -import java.io.*; -import java.security.*; +import java.io.DataInputStream; +import java.io.FileNotFoundException; +import java.io.FileInputStream; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.File; +import java.security.Security; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.SecureRandom; +import java.security.NoSuchAlgorithmException; +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchProviderException; +import java.security.SignatureException; +import java.security.PrivateKey; import java.security.cert.Certificate; -import java.security.cert.*; +import java.security.cert.X509Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateNotYetValidException; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.util.ArrayList; @@ -266,7 +293,7 @@ public class CertificateGenerator { public boolean verifySignature(String headerSignature) throws KeystoreException { Certificate certificate = extractCertificateFromSignature(headerSignature); - return (certificate != null); + return (certificate != null); } public X509Certificate extractCertificateFromSignature(String headerSignature) throws KeystoreException { @@ -289,12 +316,12 @@ public class CertificateGenerator { X509Certificate reqCert = (X509Certificate) certificateFactory. generateCertificate(byteArrayInputStream); - if(reqCert != null && reqCert.getSerialNumber() != null) { + if (reqCert != null && reqCert.getSerialNumber() != null) { Certificate lookUpCertificate = keyStoreReader.getCertificateByAlias( reqCert.getSerialNumber().toString()); if (lookUpCertificate != null && (lookUpCertificate instanceof X509Certificate)) { - return (X509Certificate)lookUpCertificate; + return (X509Certificate) lookUpCertificate; } } @@ -317,8 +344,8 @@ public class CertificateGenerator { } public X509Certificate generateCertificateFromCSR(PrivateKey privateKey, - PKCS10CertificationRequest request, - String issueSubject) + PKCS10CertificationRequest request, + String issueSubject) throws KeystoreException { CommonUtil commonUtil = new CommonUtil(); @@ -350,10 +377,10 @@ public class CertificateGenerator { certificateBuilder.addExtension(X509Extension.keyUsage, true, new KeyUsage( KeyUsage.digitalSignature | KeyUsage.keyEncipherment)); - if(attributes != null) { + if (attributes != null) { ASN1Encodable extractedValue = getChallengePassword(attributes); - if(extractedValue != null) { + if (extractedValue != null) { certificateBuilder.addExtension(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, true, extractedValue); } @@ -387,7 +414,7 @@ public class CertificateGenerator { for (Attribute attribute : attributes) { if (PKCSObjectIdentifiers.pkcs_9_at_challengePassword.equals(attribute.getAttrType())) { - if(attribute.getAttrValues() != null && attribute.getAttrValues().size() > 0) { + if (attribute.getAttrValues() != null && attribute.getAttrValues().size() > 0) { return attribute.getAttrValues().getObjectAt(0); } } @@ -552,7 +579,7 @@ public class CertificateGenerator { log.error(errorMsg, e); CertificateManagementDAOFactory.rollbackTransaction(); throw new KeystoreException(errorMsg, e); - }finally { + } finally { CertificateManagementDAOFactory.closeConnection(); } } From abd018afd6af8c8108fdcca75d69c4331af1a6c8 Mon Sep 17 00:00:00 2001 From: hasuniea Date: Mon, 4 Apr 2016 14:24:40 +0530 Subject: [PATCH 02/21] refactored imports in Certificate Generator --- .../mgt/core/impl/CertificateGenerator.java | 37 ++++--------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java index caefc7111a..20843c8b96 100755 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java @@ -39,18 +39,17 @@ import org.bouncycastle.cms.CMSException; import org.bouncycastle.cms.CMSSignedData; import org.bouncycastle.cms.CMSSignedDataGenerator; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.openssl.PEMWriter; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; import org.bouncycastle.pkcs.PKCS10CertificationRequest; import org.bouncycastle.util.Store; import org.jscep.message.PkcsPkiEnvelopeDecoder; -import org.jscep.message.PkcsPkiEnvelopeEncoder; -import org.jscep.message.CertRep; -import org.jscep.message.PkiMessageEncoder; import org.jscep.message.PkiMessageDecoder; import org.jscep.message.PkiMessage; +import org.jscep.message.CertRep; +import org.jscep.message.PkcsPkiEnvelopeEncoder; +import org.jscep.message.PkiMessageEncoder; import org.jscep.message.MessageEncodingException; import org.jscep.message.MessageDecodingException; import org.jscep.transaction.FailInfo; @@ -66,34 +65,15 @@ import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; import org.wso2.carbon.certificate.mgt.core.util.CommonUtil; import org.wso2.carbon.certificate.mgt.core.util.ConfigurationUtil; import org.wso2.carbon.certificate.mgt.core.util.Serializer; +import org.wso2.carbon.context.PrivilegedCarbonContext; import org.wso2.carbon.device.mgt.common.TransactionManagementException; import javax.security.auth.x500.X500Principal; import javax.xml.bind.DatatypeConverter; -import java.io.DataInputStream; -import java.io.FileNotFoundException; -import java.io.FileInputStream; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.File; -import java.security.Security; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.SecureRandom; -import java.security.NoSuchAlgorithmException; -import java.security.InvalidKeyException; -import java.security.KeyFactory; -import java.security.NoSuchProviderException; -import java.security.SignatureException; -import java.security.PrivateKey; +import java.io.*; +import java.security.*; import java.security.cert.Certificate; -import java.security.cert.X509Certificate; -import java.security.cert.CertificateFactory; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; +import java.security.cert.*; import java.security.spec.InvalidKeySpecException; import java.security.spec.PKCS8EncodedKeySpec; import java.util.ArrayList; @@ -315,7 +295,7 @@ public class CertificateGenerator { public static String getCommonName(X509Certificate requestCertificate) { String distinguishedName = requestCertificate.getSubjectDN().getName(); - if(distinguishedName != null && !distinguishedName.isEmpty()) { + if (distinguishedName != null && !distinguishedName.isEmpty()) { String[] dnSplits = distinguishedName.split(","); for (String dnSplit : dnSplits) { if (dnSplit.contains("CN=")) { @@ -641,7 +621,6 @@ public class CertificateGenerator { } - public String extractChallengeToken(X509Certificate certificate) { byte[] challengePassword = certificate.getExtensionValue( From 0b6acdc92926070d30fb8d84e84dba77492f7fcb Mon Sep 17 00:00:00 2001 From: ayyoob Date: Sun, 8 May 2016 02:44:24 +0530 Subject: [PATCH 03/21] Added file seperator --- .../identity/jwt/client/extension/util/JWTClientUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java index 352e8177aa..cbfa846c21 100644 --- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java +++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/src/main/java/org/wso2/carbon/identity/jwt/client/extension/util/JWTClientUtil.java @@ -73,7 +73,7 @@ public class JWTClientUtil { private static final Log log = LogFactory.getLog(JWTClientUtil.class); private static final String HTTPS_PROTOCOL = "https"; - private static final String TENANT_JWT_CONFIG_LOCATION = "/jwt-config/jwt.properties"; + private static final String TENANT_JWT_CONFIG_LOCATION = File.separator + "jwt-config" + File.separator + "jwt.properties"; private static final String JWT_CONFIG_FILE_NAME = "jwt.properties"; private static final String SUPERTENANT_JWT_CONFIG_LOCATION = CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + JWT_CONFIG_FILE_NAME; From c165156dcd79f3af867e5b00230a4bd245fefc00 Mon Sep 17 00:00:00 2001 From: ayyoob Date: Mon, 9 May 2016 01:05:08 +0530 Subject: [PATCH 04/21] remove imports --- .../org.wso2.carbon.device.mgt.server.feature/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml index ec7962494d..9dfce99e2b 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml @@ -123,8 +123,6 @@ org.wso2.carbon.core.server:${carbon.kernel.version} - org.wso2.carbon.apimgt.core:${carbon.api.mgt.version} - org.wso2.carbon.device.mgt.extensions:${carbon.device.mgt.version} org.wso2.carbon.email.sender:${carbon.device.mgt.version} From e055519d4ca6b22c96dc6bb92f0660fb83590884 Mon Sep 17 00:00:00 2001 From: Dileesha Rajapakse Date: Wed, 11 May 2016 11:02:43 +0530 Subject: [PATCH 05/21] Fixed errors in MSSQL DB script --- .../main/resources/dbscripts/cdm/mssql.sql | 161 ++++++++++-------- 1 file changed, 93 insertions(+), 68 deletions(-) diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql index ffbeff63e0..c4bd77fa10 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql @@ -2,10 +2,21 @@ CREATE TABLE DM_DEVICE_TYPE ( ID INTEGER IDENTITY NOT NULL, NAME VARCHAR(300) DEFAULT NULL, PROVIDER_TENANT_ID INTEGER DEFAULT 0, - SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE, + SHARED_WITH_ALL_TENANTS INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (ID) ); +CREATE TABLE DM_GROUP ( + ID INTEGER IDENTITY NOT NULL, + GROUP_NAME VARCHAR(100) DEFAULT NULL, + DESCRIPTION VARCHAR(max) DEFAULT NULL, + DATE_OF_CREATE BIGINT DEFAULT NULL, + DATE_OF_LAST_UPDATE BIGINT DEFAULT NULL, + OWNER VARCHAR(45) DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID) +); + CREATE TABLE DM_DEVICE_CERTIFICATE ( ID INTEGER IDENTITY NOT NULL, SERIAL_NUMBER VARCHAR(500) DEFAULT NULL, @@ -18,7 +29,7 @@ CREATE TABLE DM_DEVICE ( ID INTEGER identity NOT NULL, DESCRIPTION VARCHAR(max) DEFAULT NULL, NAME VARCHAR(100) DEFAULT NULL, - DEVICE_TYPE_ID INT DEFAULT NULL, + DEVICE_TYPE_ID INTEGER DEFAULT NULL, DEVICE_IDENTIFICATION VARCHAR(300) DEFAULT NULL, TENANT_ID INTEGER DEFAULT 0, PRIMARY KEY (ID), @@ -26,6 +37,18 @@ CREATE TABLE DM_DEVICE ( REFERENCES DM_DEVICE_TYPE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION ); +CREATE TABLE DM_DEVICE_GROUP_MAP ( + ID INTEGER IDENTITY NOT NULL, + DEVICE_ID INTEGER DEFAULT NULL, + GROUP_ID INTEGER DEFAULT NULL, + TENANT_ID INTEGER DEFAULT 0, + PRIMARY KEY (ID), + CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_DEVICE2 FOREIGN KEY (DEVICE_ID) + REFERENCES DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_GROUP2 FOREIGN KEY (GROUP_ID) + REFERENCES DM_GROUP (ID) ON DELETE NO ACTION ON UPDATE NO ACTION +); + CREATE TABLE DM_OPERATION ( ID INTEGER IDENTITY NOT NULL, TYPE VARCHAR(50) NOT NULL, @@ -77,7 +100,7 @@ CREATE TABLE DM_ENROLMENT ( STATUS VARCHAR(50) NULL, DATE_OF_ENROLMENT DATETIME2(0) DEFAULT NULL, DATE_OF_LAST_UPDATE DATETIME2(0) DEFAULT NULL, - TENANT_ID INT NOT NULL, + TENANT_ID INTEGER NOT NULL, PRIMARY KEY (ID), CONSTRAINT fk_dm_device_enrolment FOREIGN KEY (DEVICE_ID) REFERENCES DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION @@ -113,10 +136,10 @@ CREATE TABLE DM_DEVICE_OPERATION_RESPONSE ( CREATE TABLE DM_PROFILE ( - ID INT NOT NULL IDENTITY , + ID INTEGER NOT NULL IDENTITY , PROFILE_NAME VARCHAR(45) NOT NULL , - TENANT_ID INT NOT NULL , - DEVICE_TYPE_ID INT NOT NULL , + TENANT_ID INTEGER NOT NULL , + DEVICE_TYPE_ID INTEGER NOT NULL , CREATED_TIME DATETIME2(0) NOT NULL , UPDATED_TIME DATETIME2(0) NOT NULL , PRIMARY KEY (ID) , @@ -132,16 +155,16 @@ CREATE TABLE DM_PROFILE ( CREATE TABLE DM_POLICY ( - ID INT NOT NULL IDENTITY , + ID INTEGER NOT NULL IDENTITY , NAME VARCHAR(45) DEFAULT NULL , DESCRIPTION VARCHAR(1000) NULL, - TENANT_ID INT NOT NULL , - PROFILE_ID INT NOT NULL , + TENANT_ID INTEGER NOT NULL , + PROFILE_ID INTEGER NOT NULL , OWNERSHIP_TYPE VARCHAR(45) NULL, COMPLIANCE VARCHAR(100) NULL, - PRIORITY INT NOT NULL, - ACTIVE INT NOT NULL, - UPDATED INT NULL, + PRIORITY INTEGER NOT NULL, + ACTIVE INTEGER NOT NULL, + UPDATED INTEGER NULL, PRIMARY KEY (ID) , CONSTRAINT FK_DM_PROFILE_DM_POLICY FOREIGN KEY (PROFILE_ID ) @@ -154,11 +177,11 @@ CREATE TABLE DM_POLICY ( CREATE TABLE DM_DEVICE_POLICY ( - ID INT NOT NULL IDENTITY , - DEVICE_ID INT NOT NULL , - ENROLMENT_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY , + DEVICE_ID INTEGER NOT NULL , + ENROLMENT_ID INTEGER NOT NULL, DEVICE VARBINARY(max) NOT NULL, - POLICY_ID INT NOT NULL , + POLICY_ID INTEGER NOT NULL , PRIMARY KEY (ID) , CONSTRAINT FK_POLICY_DEVICE_POLICY FOREIGN KEY (POLICY_ID ) @@ -176,9 +199,9 @@ CREATE TABLE DM_DEVICE_POLICY ( CREATE TABLE DM_DEVICE_TYPE_POLICY ( - ID INT NOT NULL , - DEVICE_TYPE_ID INT NOT NULL , - POLICY_ID INT NOT NULL , + ID INTEGER NOT NULL , + DEVICE_TYPE_ID INTEGER NOT NULL , + POLICY_ID INTEGER NOT NULL , PRIMARY KEY (ID) , CONSTRAINT FK_DEVICE_TYPE_POLICY FOREIGN KEY (POLICY_ID ) @@ -197,11 +220,11 @@ CREATE TABLE DM_DEVICE_TYPE_POLICY ( CREATE TABLE DM_PROFILE_FEATURES ( - ID INT NOT NULL IDENTITY, - PROFILE_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + PROFILE_ID INTEGER NOT NULL, FEATURE_CODE VARCHAR(100) NOT NULL, - DEVICE_TYPE_ID INT NOT NULL, - TENANT_ID INT NOT NULL , + DEVICE_TYPE_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL , CONTENT VARBINARY(max) NULL DEFAULT NULL, PRIMARY KEY (ID), CONSTRAINT FK_DM_PROFILE_DM_POLICY_FEATURES @@ -215,9 +238,9 @@ CREATE TABLE DM_PROFILE_FEATURES ( CREATE TABLE DM_ROLE_POLICY ( - ID INT NOT NULL IDENTITY , + ID INTEGER NOT NULL IDENTITY , ROLE_NAME VARCHAR(45) NOT NULL , - POLICY_ID INT NOT NULL , + POLICY_ID INTEGER NOT NULL , PRIMARY KEY (ID) , CONSTRAINT FK_ROLE_POLICY_POLICY FOREIGN KEY (POLICY_ID ) @@ -230,8 +253,8 @@ CREATE TABLE DM_ROLE_POLICY ( CREATE TABLE DM_USER_POLICY ( - ID INT NOT NULL IDENTITY , - POLICY_ID INT NOT NULL , + ID INTEGER NOT NULL IDENTITY , + POLICY_ID INTEGER NOT NULL , USERNAME VARCHAR(45) NOT NULL , PRIMARY KEY (ID) , CONSTRAINT DM_POLICY_USER_POLICY @@ -243,12 +266,12 @@ CREATE TABLE DM_USER_POLICY ( CREATE TABLE DM_DEVICE_POLICY_APPLIED ( - ID INT NOT NULL IDENTITY , - DEVICE_ID INT NOT NULL , - ENROLMENT_ID INT NOT NULL, - POLICY_ID INT NOT NULL , + ID INTEGER NOT NULL IDENTITY , + DEVICE_ID INTEGER NOT NULL , + ENROLMENT_ID INTEGER NOT NULL, + POLICY_ID INTEGER NOT NULL , POLICY_CONTENT VARBINARY(max) NULL , - TENANT_ID INT NOT NULL, + TENANT_ID INTEGER NOT NULL, APPLIED SMALLINT NULL , CREATED_TIME DATETIME2(0) NULL , UPDATED_TIME DATETIME2(0) NULL , @@ -264,8 +287,8 @@ CREATE TABLE DM_USER_POLICY ( CREATE TABLE DM_CRITERIA ( - ID INT NOT NULL IDENTITY, - TENANT_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + TENANT_ID INTEGER NOT NULL, NAME VARCHAR(50) NULL, PRIMARY KEY (ID) ); @@ -273,9 +296,9 @@ CREATE TABLE DM_CRITERIA ( CREATE TABLE DM_POLICY_CRITERIA ( - ID INT NOT NULL IDENTITY, - CRITERIA_ID INT NOT NULL, - POLICY_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + CRITERIA_ID INTEGER NOT NULL, + POLICY_ID INTEGER NOT NULL, PRIMARY KEY (ID), CONSTRAINT FK_CRITERIA_POLICY_CRITERIA FOREIGN KEY (CRITERIA_ID) @@ -290,8 +313,8 @@ CREATE TABLE DM_POLICY_CRITERIA ( ); CREATE TABLE DM_POLICY_CRITERIA_PROPERTIES ( - ID INT NOT NULL IDENTITY, - POLICY_CRITERION_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + POLICY_CRITERION_ID INTEGER NOT NULL, PROP_KEY VARCHAR(45) NULL, PROP_VALUE VARCHAR(100) NULL, CONTENT VARBINARY(max) NULL , @@ -304,35 +327,35 @@ CREATE TABLE DM_POLICY_CRITERIA_PROPERTIES ( ); CREATE TABLE DM_POLICY_COMPLIANCE_STATUS ( - ID INT NOT NULL IDENTITY, - DEVICE_ID INT NOT NULL, - ENROLMENT_ID INT NOT NULL, - POLICY_ID INT NOT NULL, - TENANT_ID INT NOT NULL, - STATUS INT NULL, + ID INTEGER NOT NULL IDENTITY, + DEVICE_ID INTEGER NOT NULL, + ENROLMENT_ID INTEGER NOT NULL, + POLICY_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL, + STATUS INTEGER NULL, LAST_SUCCESS_TIME DATETIME2(0) NULL, LAST_REQUESTED_TIME DATETIME2(0) NULL, LAST_FAILED_TIME DATETIME2(0) NULL, - ATTEMPTS INT NULL, + ATTEMPTS INTEGER NULL, PRIMARY KEY (ID) ); CREATE TABLE DM_POLICY_CHANGE_MGT ( - ID INT NOT NULL IDENTITY, - POLICY_ID INT NOT NULL, - DEVICE_TYPE_ID INT NOT NULL, - TENANT_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + POLICY_ID INTEGER NOT NULL, + DEVICE_TYPE_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL, PRIMARY KEY (ID) ); CREATE TABLE DM_POLICY_COMPLIANCE_FEATURES ( - ID INT NOT NULL IDENTITY, - COMPLIANCE_STATUS_ID INT NOT NULL, - TENANT_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + COMPLIANCE_STATUS_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL, FEATURE_CODE VARCHAR(100) NOT NULL, - STATUS INT NULL, + STATUS INTEGER NULL, PRIMARY KEY (ID), CONSTRAINT FK_COMPLIANCE_FEATURES_STATUS FOREIGN KEY (COMPLIANCE_STATUS_ID) @@ -342,10 +365,10 @@ CREATE TABLE DM_POLICY_COMPLIANCE_FEATURES ( ); CREATE TABLE DM_DEVICE_GROUP_POLICY ( - ID INT NOT NULL IDENTITY, - DEVICE_GROUP_ID INT NOT NULL, - POLICY_ID INT NOT NULL, - TENANT_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + DEVICE_GROUP_ID INTEGER NOT NULL, + POLICY_ID INTEGER NOT NULL, + TENANT_ID INTEGER NOT NULL, PRIMARY KEY (ID), CONSTRAINT FK_DM_DEVICE_GROUP_POLICY FOREIGN KEY (DEVICE_GROUP_ID) @@ -370,7 +393,7 @@ CREATE TABLE DM_APPLICATION ( LOCATION_URL VARCHAR(100) DEFAULT NULL, IMAGE_URL VARCHAR(100) DEFAULT NULL, APP_PROPERTIES VARBINARY(max) NULL, - MEMORY_USAGE INTEGER(10) NULL, + MEMORY_USAGE INTEGER NULL, TENANT_ID INTEGER NOT NULL, PRIMARY KEY (ID) ); @@ -405,12 +428,12 @@ CREATE TABLE DM_NOTIFICATION ( ); -- NOTIFICATION TABLE END -- - -DROP TABLE IF EXISTS DM_DEVICE_INFO; +IF EXISTS (SELECT * FROM sys.objects WHERE name = 'DM_DEVICE_INFO' and type = 'u') + DROP TABLE DM_DEVICE_INFO; CREATE TABLE DM_DEVICE_INFO ( ID INTEGER IDENTITY NOT NULL, - DEVICE_ID INT NULL, + DEVICE_ID INTEGER NULL, KEY_FIELD VARCHAR(45) NULL, VALUE_FIELD VARCHAR(100) NULL, PRIMARY KEY (ID), @@ -423,11 +446,12 @@ CREATE TABLE DM_DEVICE_INFO ( CREATE INDEX DM_DEVICE_INFO_DEVICE_idx ON DM_DEVICE_INFO (DEVICE_ID ASC); -DROP TABLE IF EXISTS DM_DEVICE_LOCATION; +IF EXISTS (SELECT * FROM sys.objects WHERE name = 'DM_DEVICE_LOCATION' and type = 'u') + DROP TABLE DM_DEVICE_LOCATION; CREATE TABLE DM_DEVICE_LOCATION ( ID INTEGER IDENTITY NOT NULL, - DEVICE_ID INT NULL, + DEVICE_ID INTEGER NULL, LATITUDE FLOAT NULL, LONGITUDE FLOAT NULL, STREET1 VARCHAR(45) NULL, @@ -447,11 +471,12 @@ CREATE TABLE DM_DEVICE_LOCATION ( CREATE INDEX DM_DEVICE_LOCATION_DEVICE_idx ON DM_DEVICE_LOCATION (DEVICE_ID ASC); -DROP TABLE IF EXISTS DM_DEVICE_DETAIL; +IF EXISTS (SELECT * FROM sys.objects WHERE name = 'DM_DEVICE_DETAIL' and type = 'u') + DROP TABLE DM_DEVICE_DETAIL; CREATE TABLE DM_DEVICE_DETAIL ( - ID INT NOT NULL IDENTITY, - DEVICE_ID INT NOT NULL, + ID INTEGER NOT NULL IDENTITY, + DEVICE_ID INTEGER NOT NULL, DEVICE_MODEL VARCHAR(45) NULL, VENDOR VARCHAR(45) NULL, OS_VERSION VARCHAR(45) NULL, @@ -465,7 +490,7 @@ CREATE TABLE DM_DEVICE_DETAIL ( CPU_USAGE DECIMAL(5) NULL, TOTAL_RAM_MEMORY DECIMAL(30,3) NULL, AVAILABLE_RAM_MEMORY DECIMAL(30,3) NULL, - PLUGGED_IN INT NULL, + PLUGGED_IN INTEGER NULL, UPDATE_TIMESTAMP BIGINT NOT NULL, PRIMARY KEY (ID), CONSTRAINT FK_DM_DEVICE_DETAILS_DEVICE From 754195bee6b908c57238d9e9ca02abbc647febc4 Mon Sep 17 00:00:00 2001 From: dilanua Date: Wed, 11 May 2016 12:01:39 +0530 Subject: [PATCH 06/21] Adding mssql support to dashboard analytics feature --- .../main/resources/dbscripts/cdm/mssql.sql | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql index c4bd77fa10..e709195f19 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql @@ -502,3 +502,64 @@ CREATE TABLE DM_DEVICE_DETAIL ( CREATE INDEX FK_DM_DEVICE_DETAILS_DEVICE_idx ON DM_DEVICE_DETAIL (DEVICE_ID ASC); +-- DASHBOARD RELATED VIEWS -- + +CREATE VIEW DEVICES_VIEW_1 AS +SELECT TOP 100 PERCENT +DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.PLATFORM, +DEVICE_INFO.OWNERSHIP, +DEVICE_INFO.CONNECTIVITY_STATUS, +ISNULL(DEVICE_WITH_POLICY_INFO.POLICY_ID, -1) AS POLICY_ID, +ISNULL(DEVICE_WITH_POLICY_INFO.IS_COMPLIANT, -1) AS +IS_COMPLIANT, +DEVICE_INFO.TENANT_ID +FROM +(SELECT +DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE_TYPE.NAME AS PLATFORM, +DM_ENROLMENT.OWNERSHIP, +DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, +DM_DEVICE.TENANT_ID +FROM DM_DEVICE, DM_DEVICE_TYPE, DM_ENROLMENT +WHERE DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND DM_DEVICE.ID = DM_ENROLMENT.DEVICE_ID) DEVICE_INFO +LEFT JOIN +(SELECT +DEVICE_ID, +POLICY_ID, +STATUS AS IS_COMPLIANT +FROM +DM_POLICY_COMPLIANCE_STATUS) DEVICE_WITH_POLICY_INFO +ON DEVICE_INFO.DEVICE_ID = DEVICE_WITH_POLICY_INFO.DEVICE_ID +ORDER BY DEVICE_INFO.DEVICE_ID; +GO + +CREATE VIEW DEVICES_VIEW_2 AS +SELECT TOP 100 PERCENT +DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE_DETAIL.DEVICE_MODEL, +DM_DEVICE_DETAIL.VENDOR, +DM_DEVICE_DETAIL.OS_VERSION, +DM_ENROLMENT.OWNERSHIP, +DM_ENROLMENT.OWNER, +DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, +DM_POLICY_COMPLIANCE_STATUS.POLICY_ID, +DM_DEVICE_TYPE.NAME +AS PLATFORM, +DM_POLICY_COMPLIANCE_FEATURES.FEATURE_CODE, +DM_POLICY_COMPLIANCE_FEATURES.STATUS AS IS_COMPLAINT, +DM_DEVICE.TENANT_ID +FROM +DM_POLICY_COMPLIANCE_FEATURES, DM_POLICY_COMPLIANCE_STATUS, DM_ENROLMENT, DM_DEVICE, DM_DEVICE_TYPE, DM_DEVICE_DETAIL +WHERE +DM_POLICY_COMPLIANCE_FEATURES.COMPLIANCE_STATUS_ID = DM_POLICY_COMPLIANCE_STATUS.ID AND +DM_POLICY_COMPLIANCE_STATUS.ENROLMENT_ID = +DM_ENROLMENT.ID AND +DM_POLICY_COMPLIANCE_STATUS.DEVICE_ID = DM_DEVICE.ID AND +DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND +DM_DEVICE.ID = DM_DEVICE_DETAIL.DEVICE_ID +ORDER BY TENANT_ID, DEVICE_ID; +GO + +-- END OF DASHBOARD RELATED VIEWS -- + From bc894f2517efa9b0acf8806c397330a9bc44f028 Mon Sep 17 00:00:00 2001 From: prabathabey Date: Wed, 11 May 2016 12:38:15 +0530 Subject: [PATCH 07/21] Adding Swagger-annotation dependency to carbon-device-mgt --- .../org.wso2.carbon.device.mgt.api/pom.xml | 8 +++++--- pom.xml | 12 ++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml index f6c0292529..07ef52fde5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml @@ -43,11 +43,9 @@ 1.7 1.7 - 2.3.2 maven-war-plugin - 2.2 WEB-INF/lib/*cxf*.jar devicemgt_admin @@ -88,7 +86,6 @@ - client @@ -207,6 +204,11 @@ org.wso2.carbon.certificate.mgt.core provided + + io.swagger + swagger-annotations + provided + diff --git a/pom.xml b/pom.xml index c71293b049..3dbcc79a48 100644 --- a/pom.xml +++ b/pom.xml @@ -1451,6 +1451,11 @@ provided + + io.swagger + swagger-annotations + ${swagger.version} + @@ -1496,6 +1501,11 @@ 1.7 + + org.apache.maven.plugins + maven-war-plugin + 2.2 + org.apache.maven.plugins maven-release-plugin @@ -1811,6 +1821,8 @@ 2.26.1.wso2v3 [2.26.1, 3.0.0) + + 1.5.8 From 14c07846b21b53cdfc5c0e85492f99aa65943a3c Mon Sep 17 00:00:00 2001 From: dilanua Date: Wed, 11 May 2016 14:21:13 +0530 Subject: [PATCH 08/21] Adding mssql support to dashboard analytics feature --- .../dao/AbstractGadgetDataServiceDAO.java | 13 +- .../dao/GadgetDataServiceDAOFactory.java | 3 +- .../impl/GenericGadgetDataServiceDAOImpl.java | 4 +- .../impl/MSSQLGadgetDataServiceDAOImpl.java | 281 ++++++++++++++++++ .../impl/OracleGadgetDataServiceDAOImpl.java | 8 +- .../PostgreSQLGadgetDataServiceDAOImpl.java | 6 +- 6 files changed, 299 insertions(+), 16 deletions(-) create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java index bfc8af3f62..964eb02dd8 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java @@ -298,8 +298,9 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } @Override - public List getFeatureNonCompliantDeviceCountsByPlatforms(String nonCompliantFeatureCode, - FilterSet filterSet) throws InvalidParameterValueException, SQLException { + public List + getFeatureNonCompliantDeviceCountsByPlatforms(String nonCompliantFeatureCode, + FilterSet filterSet) throws InvalidParameterValueException, SQLException { if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); @@ -413,7 +414,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String nonCompliantFeatureCode, - FilterSet filterSet) throws InvalidParameterValueException, SQLException { + FilterSet filterSet) throws InvalidParameterValueException, SQLException { if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); @@ -472,7 +473,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getDevicesWithDetails(FilterSet filterSet) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { Map filters = this.extractDatabaseFiltersFromBean(filterSet); @@ -526,7 +527,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD @Override public List getFeatureNonCompliantDevicesWithDetails(String nonCompliantFeatureCode, - FilterSet filterSet) throws InvalidParameterValueException, SQLException { + FilterSet filterSet) throws InvalidParameterValueException, SQLException { if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); @@ -585,7 +586,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD } protected Map extractDatabaseFiltersFromBean(FilterSet filterSet) - throws InvalidParameterValueException { + throws InvalidParameterValueException { if (filterSet == null) { return null; } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java index 5ee595424f..43999fc46a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java @@ -21,6 +21,7 @@ package org.wso2.carbon.device.mgt.analytics.dashboard.dao; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.GenericGadgetDataServiceDAOImpl; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.MSSQLGadgetDataServiceDAOImpl; import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.OracleGadgetDataServiceDAOImpl; import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.PostgreSQLGadgetDataServiceDAOImpl; import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; @@ -52,7 +53,7 @@ public class GadgetDataServiceDAOFactory { case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL: return new GenericGadgetDataServiceDAOImpl(); case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL: - // to be added + return new MSSQLGadgetDataServiceDAOImpl(); case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL: return new PostgreSQLGadgetDataServiceDAOImpl(); case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE: diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java index caa6f9bb25..3126d7736a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java @@ -39,7 +39,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA @Override public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); @@ -99,7 +99,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA @Override public PaginationResult getDevicesWithDetails(FilterSet filterSet, int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java new file mode 100644 index 0000000000..4e5bef4d45 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * you may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl; + +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.AbstractGadgetDataServiceDAO; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.bean.DetailedDeviceEntry; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.bean.DeviceCountByGroupEntry; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.bean.FilterSet; +import org.wso2.carbon.device.mgt.analytics.dashboard.dao.exception.InvalidParameterValueException; +import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO { + + @Override + public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) + throws InvalidParameterValueException, SQLException { + + if (startIndex < 0) { + throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); + } + + if (resultCount < 5) { + throw new InvalidParameterValueException("Result count should be equal to 5 or greater than that."); + } + + Connection con; + PreparedStatement stmt = null; + ResultSet rs = null; + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + List filteredNonCompliantDeviceCountsByFeatures = new ArrayList<>(); + int totalRecordsCount = 0; + try { + con = this.getConnection(); + String sql = "SELECT FEATURE_CODE, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM DEVICES_VIEW_2 " + + "WHERE TENANT_ID = ? GROUP BY FEATURE_CODE ORDER BY DEVICE_COUNT DESC " + + "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = con.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setInt(2, startIndex); + stmt.setInt(3, resultCount); + + // executing query + rs = stmt.executeQuery(); + // fetching query results + DeviceCountByGroupEntry filteredNonCompliantDeviceCountByFeature; + while (rs.next()) { + filteredNonCompliantDeviceCountByFeature = new DeviceCountByGroupEntry(); + filteredNonCompliantDeviceCountByFeature.setGroup(rs.getString("FEATURE_CODE")); + filteredNonCompliantDeviceCountByFeature.setDisplayNameForGroup(rs.getString("FEATURE_CODE")); + filteredNonCompliantDeviceCountByFeature.setDeviceCount(rs.getInt("DEVICE_COUNT")); + filteredNonCompliantDeviceCountsByFeatures.add(filteredNonCompliantDeviceCountByFeature); + } + // fetching total records count + sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM " + + "(SELECT DISTINCT FEATURE_CODE FROM DEVICES_VIEW_2 WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE"; + + stmt = con.prepareStatement(sql); + stmt.setInt(1, tenantId); + + // executing query + rs = stmt.executeQuery(); + // fetching query results + while (rs.next()) { + totalRecordsCount = rs.getInt("NON_COMPLIANT_FEATURE_COUNT"); + } + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + PaginationResult paginationResult = new PaginationResult(); + paginationResult.setData(filteredNonCompliantDeviceCountsByFeatures); + paginationResult.setRecordsTotal(totalRecordsCount); + return paginationResult; + } + + @Override + public PaginationResult getDevicesWithDetails(FilterSet filterSet, int startIndex, int resultCount) + throws InvalidParameterValueException, SQLException { + + if (startIndex < 0) { + throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); + } + + if (resultCount < 5) { + throw new InvalidParameterValueException("Result count should be equal to 5 or greater than that."); + } + + Map filters = this.extractDatabaseFiltersFromBean(filterSet); + + Connection con; + PreparedStatement stmt = null; + ResultSet rs = null; + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + List filteredDevicesWithDetails = new ArrayList<>(); + int totalRecordsCount = 0; + try { + con = this.getConnection(); + String sql, advancedSqlFiltering = ""; + // appending filters if exist, to support advanced filtering options + // [1] appending filter columns, if exist + if (filters != null && filters.size() > 0) { + for (String column : filters.keySet()) { + advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + } + } + sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 " + + "WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC " + + "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = con.prepareStatement(sql); + // [2] appending filter column values, if exist + stmt.setInt(1, tenantId); + if (filters != null && filters.values().size() > 0) { + int i = 2; + for (Object value : filters.values()) { + if (value instanceof Integer) { + stmt.setInt(i, (Integer) value); + } else if (value instanceof String) { + stmt.setString(i, (String) value); + } + i++; + } + stmt.setInt(i, startIndex); + stmt.setInt(++i, resultCount); + } else { + stmt.setInt(2, startIndex); + stmt.setInt(3, resultCount); + } + // executing query + rs = stmt.executeQuery(); + // fetching query results + DetailedDeviceEntry filteredDeviceWithDetails; + while (rs.next()) { + filteredDeviceWithDetails = new DetailedDeviceEntry(); + filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); + filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); + filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); + filteredDevicesWithDetails.add(filteredDeviceWithDetails); + } + + // fetching total records count + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM DEVICES_VIEW_1 WHERE TENANT_ID = ?"; + + stmt = con.prepareStatement(sql); + stmt.setInt(1, tenantId); + + // executing query + rs = stmt.executeQuery(); + // fetching query results + while (rs.next()) { + totalRecordsCount = rs.getInt("DEVICE_COUNT"); + } + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + PaginationResult paginationResult = new PaginationResult(); + paginationResult.setData(filteredDevicesWithDetails); + paginationResult.setRecordsTotal(totalRecordsCount); + return paginationResult; + } + + @Override + public PaginationResult getFeatureNonCompliantDevicesWithDetails(String nonCompliantFeatureCode, + FilterSet filterSet, int startIndex, int resultCount) + throws InvalidParameterValueException, SQLException { + + if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { + throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); + } + + if (startIndex < 0) { + throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); + } + + if (resultCount < 5) { + throw new InvalidParameterValueException("Result count should be equal to 5 or greater than that."); + } + + Map filters = this.extractDatabaseFiltersFromBean(filterSet); + + Connection con; + PreparedStatement stmt = null; + ResultSet rs = null; + int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(); + List filteredDevicesWithDetails = new ArrayList<>(); + int totalRecordsCount = 0; + try { + con = this.getConnection(); + String sql, advancedSqlFiltering = ""; + // appending filters if exist, to support advanced filtering options + // [1] appending filter columns, if exist + if (filters != null && filters.size() > 0) { + for (String column : filters.keySet()) { + advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; + } + } + sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 " + + "WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + stmt = con.prepareStatement(sql); + // [2] appending filter column values, if exist + stmt.setInt(1, tenantId); + stmt.setString(2, nonCompliantFeatureCode); + if (filters != null && filters.values().size() > 0) { + int i = 3; + for (Object value : filters.values()) { + if (value instanceof Integer) { + stmt.setInt(i, (Integer) value); + } else if (value instanceof String) { + stmt.setString(i, (String) value); + } + i++; + } + stmt.setInt(i, startIndex); + stmt.setInt(++i, resultCount); + } else { + stmt.setInt(3, startIndex); + stmt.setInt(4, resultCount); + } + // executing query + rs = stmt.executeQuery(); + // fetching query results + DetailedDeviceEntry filteredDeviceWithDetails; + while (rs.next()) { + filteredDeviceWithDetails = new DetailedDeviceEntry(); + filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); + filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); + filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); + filteredDevicesWithDetails.add(filteredDeviceWithDetails); + } + + // fetching total records count + sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM DEVICES_VIEW_2 " + + "WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + + stmt = con.prepareStatement(sql); + stmt.setInt(1, tenantId); + stmt.setString(2, nonCompliantFeatureCode); + + // executing query + rs = stmt.executeQuery(); + // fetching query results + while (rs.next()) { + totalRecordsCount = rs.getInt("DEVICE_COUNT"); + } + } finally { + DeviceManagementDAOUtil.cleanupResources(stmt, rs); + } + PaginationResult paginationResult = new PaginationResult(); + paginationResult.setData(filteredDevicesWithDetails); + paginationResult.setRecordsTotal(totalRecordsCount); + return paginationResult; + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java index b82ea38a30..a433bca813 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java @@ -39,7 +39,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO @Override public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); @@ -100,7 +100,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO @Override public PaginationResult getDevicesWithDetails(FilterSet filterSet, int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); @@ -186,8 +186,8 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String nonCompliantFeatureCode, - FilterSet filterSet, int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + FilterSet filterSet, int startIndex, int resultCount) + throws InvalidParameterValueException, SQLException { if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java index 778f4b453e..d28a5e5b50 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java @@ -39,7 +39,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic @Override public PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); @@ -99,7 +99,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic @Override public PaginationResult getDevicesWithDetails(FilterSet filterSet, int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (startIndex < 0) { throw new InvalidParameterValueException("Start index should be equal to 0 or greater than that."); @@ -185,7 +185,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic @Override public PaginationResult getFeatureNonCompliantDevicesWithDetails(String nonCompliantFeatureCode, FilterSet filterSet, int startIndex, int resultCount) - throws InvalidParameterValueException, SQLException { + throws InvalidParameterValueException, SQLException { if (nonCompliantFeatureCode == null || "".equals(nonCompliantFeatureCode)) { throw new InvalidParameterValueException("Non-compliant feature code should not be either null or empty."); From 73222e347bd7e116bcebd8aca0e4410a9147cca3 Mon Sep 17 00:00:00 2001 From: charitha Date: Wed, 11 May 2016 15:59:35 +0530 Subject: [PATCH 09/21] Fixed https://wso2.org/jira/browse/IOTS-104 --- .../jaggeryapps/devicemgt/app/modules/utility.js | 11 +++-------- .../devicemgt/app/pages/cdmf.page.devices/devices.js | 10 +++++++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js index 185c2fa029..38cb7032ba 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/modules/utility.js @@ -80,18 +80,13 @@ utility = function () { }; publicMethods.getDeviceTypeConfig = function (deviceType) { - var JFile = Packages.java.io.File; - var sep = JFile.separator; - - var systemProcess = require('process'); - var parent = 'file:///' + (systemProcess.getProperty('jaggery.home') || systemProcess.getProperty('carbon.home')).replace(/[\\]/g, '/').replace(/^[\/]/g, ''); - + var unitName = publicMethods.getTenantedDeviceUnitName(deviceType, "type-view"); + if (deviceType in deviceTypeConfigMap) { return deviceTypeConfigMap[deviceType]; } var deviceTypeConfig; - var deviceTypeConfigFile = new File(parent + sep + "repository" + sep + "conf" + sep - + "device-types" + sep + deviceType + ".json"); + var deviceTypeConfigFile = new File("/app/units/" + unitName + "/private/config.json"); if (deviceTypeConfigFile.isExists()) { try { deviceTypeConfigFile.open("r"); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js index e56c529cc9..085f1f5a69 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js +++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/src/main/resources/jaggeryapps/devicemgt/app/pages/cdmf.page.devices/devices.js @@ -54,12 +54,16 @@ function onRequest(context) { var deviceTypes = []; if (data) { for (var i = 0; i < data.length; i++) { - var deviceType = utility.getDeviceTypeConfig(data[i].name).deviceType; + var config = utility.getDeviceTypeConfig(data[i].name); + if (!config){ + continue; + } + var deviceType = config.deviceType; deviceTypes.push({ "type": data[i].name, "category": deviceType.category, - "label": deviceType.label, - "thumb": utility.getDeviceThumb(data[i].name) + "label": deviceType.label, + "thumb": utility.getDeviceThumb(data[i].name) }); } } From e151bca0c76e0a28852e91d47f7fb6a232909fc0 Mon Sep 17 00:00:00 2001 From: dilanua Date: Wed, 11 May 2016 16:25:00 +0530 Subject: [PATCH 10/21] Adding device-identification attribute for database views in dashboard analytics feature --- .../src/main/resources/dbscripts/cdm/h2.sql | 3 +++ .../src/main/resources/dbscripts/cdm/mssql.sql | 3 +++ .../src/main/resources/dbscripts/cdm/mysql.sql | 3 +++ .../src/main/resources/dbscripts/cdm/oracle.sql | 3 +++ .../src/main/resources/dbscripts/cdm/postgresql.sql | 3 +++ 5 files changed, 15 insertions(+) diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql index 34b385655c..67cdf57a33 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/h2.sql @@ -515,6 +515,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_POLICY ( CREATE VIEW DEVICES_VIEW_1 AS SELECT DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.DEVICE_IDENTIFICATION, DEVICE_INFO.PLATFORM, DEVICE_INFO.OWNERSHIP, DEVICE_INFO.CONNECTIVITY_STATUS, @@ -524,6 +525,7 @@ DEVICE_INFO.TENANT_ID FROM (SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_TYPE.NAME AS PLATFORM, DM_ENROLMENT.OWNERSHIP, DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, @@ -542,6 +544,7 @@ ORDER BY DEVICE_INFO.DEVICE_ID; CREATE VIEW DEVICES_VIEW_2 AS SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_DETAIL.DEVICE_MODEL, DM_DEVICE_DETAIL.VENDOR, DM_DEVICE_DETAIL.OS_VERSION, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql index e709195f19..e18fcf915a 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mssql.sql @@ -507,6 +507,7 @@ CREATE INDEX FK_DM_DEVICE_DETAILS_DEVICE_idx ON DM_DEVICE_DETAIL (DEVICE_ID ASC) CREATE VIEW DEVICES_VIEW_1 AS SELECT TOP 100 PERCENT DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.DEVICE_IDENTIFICATION, DEVICE_INFO.PLATFORM, DEVICE_INFO.OWNERSHIP, DEVICE_INFO.CONNECTIVITY_STATUS, @@ -517,6 +518,7 @@ DEVICE_INFO.TENANT_ID FROM (SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_TYPE.NAME AS PLATFORM, DM_ENROLMENT.OWNERSHIP, DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, @@ -537,6 +539,7 @@ GO CREATE VIEW DEVICES_VIEW_2 AS SELECT TOP 100 PERCENT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_DETAIL.DEVICE_MODEL, DM_DEVICE_DETAIL.VENDOR, DM_DEVICE_DETAIL.OS_VERSION, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql index e031ea2fe2..0fd8889cc3 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/mysql.sql @@ -527,6 +527,7 @@ ENGINE = InnoDB; CREATE VIEW DEVICE_INFO_VIEW AS SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_TYPE.NAME AS PLATFORM, DM_ENROLMENT.OWNERSHIP, DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, @@ -544,6 +545,7 @@ FROM DM_POLICY_COMPLIANCE_STATUS; CREATE VIEW DEVICES_VIEW_1 AS SELECT DEVICE_INFO_VIEW.DEVICE_ID, +DEVICE_INFO_VIEW.DEVICE_IDENTIFICATION, DEVICE_INFO_VIEW.PLATFORM, DEVICE_INFO_VIEW.OWNERSHIP, DEVICE_INFO_VIEW.CONNECTIVITY_STATUS, @@ -560,6 +562,7 @@ ORDER BY DEVICE_INFO_VIEW.DEVICE_ID; CREATE VIEW DEVICES_VIEW_2 AS SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_DETAIL.DEVICE_MODEL, DM_DEVICE_DETAIL.VENDOR, DM_DEVICE_DETAIL.OS_VERSION, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql index c4a2fd0267..7a41ae3a66 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/oracle.sql @@ -853,6 +853,7 @@ WHEN (NEW.ID IS NULL) CREATE VIEW DEVICES_VIEW_1 AS SELECT DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.DEVICE_IDENTIFICATION, DEVICE_INFO.PLATFORM, DEVICE_INFO.OWNERSHIP, DEVICE_INFO.CONNECTIVITY_STATUS, @@ -862,6 +863,7 @@ DEVICE_INFO.TENANT_ID FROM (SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_TYPE.NAME AS PLATFORM, DM_ENROLMENT.OWNERSHIP, DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, @@ -880,6 +882,7 @@ ORDER BY DEVICE_INFO.DEVICE_ID; CREATE VIEW DEVICES_VIEW_2 AS SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_DETAIL.DEVICE_MODEL, DM_DEVICE_DETAIL.VENDOR, DM_DEVICE_DETAIL.OS_VERSION, diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql index 7e8c8a3e0c..9ec4ef3778 100644 --- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql +++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/src/main/resources/dbscripts/cdm/postgresql.sql @@ -434,6 +434,7 @@ CREATE TABLE IF NOT EXISTS DM_DEVICE_DETAIL ( CREATE VIEW DEVICES_VIEW_1 AS SELECT DEVICE_INFO.DEVICE_ID, +DEVICE_INFO.DEVICE_IDENTIFICATION, DEVICE_INFO.PLATFORM, DEVICE_INFO.OWNERSHIP, DEVICE_INFO.CONNECTIVITY_STATUS, @@ -443,6 +444,7 @@ DEVICE_INFO.TENANT_ID FROM (SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_TYPE.NAME AS PLATFORM, DM_ENROLMENT.OWNERSHIP, DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS, @@ -461,6 +463,7 @@ ORDER BY DEVICE_INFO.DEVICE_ID; CREATE VIEW DEVICES_VIEW_2 AS SELECT DM_DEVICE.ID AS DEVICE_ID, +DM_DEVICE.DEVICE_IDENTIFICATION, DM_DEVICE_DETAIL.DEVICE_MODEL, DM_DEVICE_DETAIL.VENDOR, DM_DEVICE_DETAIL.OS_VERSION, From bb3bcdfd2d0940f1d25afb3efe0f18fedbef954c Mon Sep 17 00:00:00 2001 From: dilanua Date: Wed, 11 May 2016 20:01:02 +0530 Subject: [PATCH 11/21] Adding device-identification attribute for DetailedDeviceEntry in dashboard analytics feature --- .../dashboard/dao/AbstractGadgetDataServiceDAO.java | 9 ++++++--- .../dashboard/dao/bean/DetailedDeviceEntry.java | 10 ++++++++++ .../dao/impl/GenericGadgetDataServiceDAOImpl.java | 10 ++++++---- .../dao/impl/MSSQLGadgetDataServiceDAOImpl.java | 10 ++++++---- .../dao/impl/OracleGadgetDataServiceDAOImpl.java | 12 +++++++----- .../dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java | 10 ++++++---- 6 files changed, 41 insertions(+), 20 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java index 964eb02dd8..d41ba45a62 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java @@ -485,7 +485,8 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD try { con = this.getConnection(); String sql; - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 WHERE TENANT_ID = ?"; + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_1 WHERE TENANT_ID = ?"; // appending filters to support advanced filtering options // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { @@ -514,6 +515,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); @@ -543,8 +545,8 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD try { con = this.getConnection(); String sql; - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 " + - "WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ?"; // appending filters to support advanced filtering options // [1] appending filter columns, if exist if (filters != null && filters.size() > 0) { @@ -574,6 +576,7 @@ public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceD while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/bean/DetailedDeviceEntry.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/bean/DetailedDeviceEntry.java index c8885b6833..307a202ba3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/bean/DetailedDeviceEntry.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/bean/DetailedDeviceEntry.java @@ -21,6 +21,7 @@ package org.wso2.carbon.device.mgt.analytics.dashboard.dao.bean; public class DetailedDeviceEntry { private int deviceId; + private String deviceIdentification; private String platform; private String ownershipType; private String connectivityStatus; @@ -34,6 +35,15 @@ public class DetailedDeviceEntry { this.deviceId = deviceId; } + @SuppressWarnings("unused") + public String getDeviceIdentification() { + return deviceIdentification; + } + + public void setDeviceIdentification(String deviceIdentification) { + this.deviceIdentification = deviceIdentification; + } + @SuppressWarnings("unused") public String getPlatform() { return platform; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java index 3126d7736a..feb8b7024a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/GenericGadgetDataServiceDAOImpl.java @@ -127,8 +127,8 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 " + - "WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_1 WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); @@ -155,6 +155,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); @@ -217,8 +218,8 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 " + - "WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC LIMIT ?, ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -247,6 +248,7 @@ public class GenericGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDA while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java index 4e5bef4d45..b1a725e2bf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/MSSQLGadgetDataServiceDAOImpl.java @@ -128,8 +128,8 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 " + - "WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC " + + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_1 WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC " + "OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -157,6 +157,7 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); @@ -219,8 +220,8 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 " + - "WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -249,6 +250,7 @@ public class MSSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java index a433bca813..a84b906f34 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/OracleGadgetDataServiceDAOImpl.java @@ -78,7 +78,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO } // fetching total records count sql = "SELECT COUNT(FEATURE_CODE) AS NON_COMPLIANT_FEATURE_COUNT FROM " + - "(SELECT DISTINCT FEATURE_CODE FROM DEVICES_VIEW_2 WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE"; + "(SELECT DISTINCT FEATURE_CODE FROM DEVICES_VIEW_2 WHERE TENANT_ID = ?) NON_COMPLIANT_FEATURE_CODE"; stmt = con.prepareStatement(sql); stmt.setInt(1, tenantId); @@ -128,8 +128,8 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT * FROM (SELECT ROWNUM offset, rs.* FROM (SELECT DEVICE_ID, PLATFORM, OWNERSHIP, " + - "CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 WHERE TENANT_ID = ? " + advancedSqlFiltering + + sql = "SELECT * FROM (SELECT ROWNUM offset, rs.* FROM (SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, " + + "OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC) rs) WHERE offset >= ? AND ROWNUM <= ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -157,6 +157,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); @@ -219,8 +220,8 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT * FROM (SELECT ROWNUM offset, rs.* FROM (SELECT DEVICE_ID, PLATFORM, OWNERSHIP, " + - "CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + + sql = "SELECT * FROM (SELECT ROWNUM offset, rs.* FROM (SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, " + + "OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC) rs) WHERE offset >= ? AND ROWNUM <= ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -249,6 +250,7 @@ public class OracleGadgetDataServiceDAOImpl extends AbstractGadgetDataServiceDAO while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java index d28a5e5b50..26986df2fe 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/impl/PostgreSQLGadgetDataServiceDAOImpl.java @@ -127,8 +127,8 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_1 " + - "WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? LIMIT ?"; + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_1 WHERE TENANT_ID = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? LIMIT ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist stmt.setInt(1, tenantId); @@ -155,6 +155,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); @@ -217,8 +218,8 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic advancedSqlFiltering = advancedSqlFiltering + "AND " + column + " = ? "; } } - sql = "SELECT DEVICE_ID, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM DEVICES_VIEW_2 " + - "WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + + sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " + + "DEVICES_VIEW_2 WHERE TENANT_ID = ? AND FEATURE_CODE = ? " + advancedSqlFiltering + "ORDER BY DEVICE_ID ASC OFFSET ? LIMIT ?"; stmt = con.prepareStatement(sql); // [2] appending filter column values, if exist @@ -247,6 +248,7 @@ public class PostgreSQLGadgetDataServiceDAOImpl extends AbstractGadgetDataServic while (rs.next()) { filteredDeviceWithDetails = new DetailedDeviceEntry(); filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID")); + filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION")); filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM")); filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP")); filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS")); From ac587c3353b26009a9323d043f47df924d6d8d8d Mon Sep 17 00:00:00 2001 From: ayyoob Date: Thu, 12 May 2016 02:42:29 +0530 Subject: [PATCH 12/21] fixes after testing --- .../mgt/analytics/data/publisher/DeviceDataPublisher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java index bcf51ebdae..04f9030760 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java @@ -83,7 +83,7 @@ public class DeviceDataPublisher { * */ public DataPublisher getDataPublisher() throws DataPublisherConfigurationException { - String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true); //Get LoadBalancingDataPublisher which has been registered for the tenant. DataPublisher dataPublisher = getDataPublisher(tenantDomain); //If a LoadBalancingDataPublisher had not been registered for the tenant. From 7b04d9f0b060594424a16f5535e70a589e7bfd49 Mon Sep 17 00:00:00 2001 From: Madhawa Date: Thu, 12 May 2016 09:51:43 +0530 Subject: [PATCH 13/21] created interfaces for the api classes in order add swagger definitions --- .../org.wso2.carbon.device.mgt.api/pom.xml | 14 +- .../device/mgt/jaxrs/api/Authentication.java | 10 +- .../device/mgt/jaxrs/api/Certificate.java | 143 +--- .../device/mgt/jaxrs/api/Configuration.java | 91 +-- .../carbon/device/mgt/jaxrs/api/Device.java | 260 ++---- .../mgt/jaxrs/api/DeviceInformation.java | 55 +- .../mgt/jaxrs/api/DeviceNotification.java | 81 +- .../device/mgt/jaxrs/api/DeviceSearch.java | 33 +- .../carbon/device/mgt/jaxrs/api/Feature.java | 29 +- .../carbon/device/mgt/jaxrs/api/Group.java | 427 +--------- .../carbon/device/mgt/jaxrs/api/License.java | 71 +- .../device/mgt/jaxrs/api/Operation.java | 183 +---- .../carbon/device/mgt/jaxrs/api/Policy.java | 368 +-------- .../carbon/device/mgt/jaxrs/api/Profile.java | 73 +- .../carbon/device/mgt/jaxrs/api/Role.java | 388 +-------- .../carbon/device/mgt/jaxrs/api/User.java | 703 +--------------- .../jaxrs/api/impl/AuthenticationImpl.java | 36 + .../mgt/jaxrs/api/impl/CertificateImpl.java | 195 +++++ .../mgt/jaxrs/api/impl/ConfigurationImpl.java | 113 +++ .../device/mgt/jaxrs/api/impl/DeviceImpl.java | 285 +++++++ .../jaxrs/api/impl/DeviceInformationImpl.java | 81 ++ .../api/impl/DeviceNotificationImpl.java | 110 +++ .../mgt/jaxrs/api/impl/DeviceSearchImpl.java | 56 ++ .../mgt/jaxrs/api/impl/FeatureImpl.java | 66 ++ .../device/mgt/jaxrs/api/impl/GroupImpl.java | 533 ++++++++++++ .../mgt/jaxrs/api/impl/LicenseImpl.java | 102 +++ .../mgt/jaxrs/api/impl/OperationImpl.java | 227 +++++ .../device/mgt/jaxrs/api/impl/PolicyImpl.java | 445 ++++++++++ .../mgt/jaxrs/api/impl/ProfileImpl.java | 87 ++ .../device/mgt/jaxrs/api/impl/RoleImpl.java | 450 ++++++++++ .../device/mgt/jaxrs/api/impl/UserImpl.java | 772 ++++++++++++++++++ .../CredentialManagementResponseBuilder.java | 8 +- .../mgt/jaxrs/api/util/DeviceMgtAPIUtils.java | 14 +- .../api/util/MDMAndroidOperationUtil.java | 4 +- .../jaxrs/api/util/MDMIOSOperationUtil.java | 2 +- .../device/mgt/jaxrs/beans/MobileApp.java | 2 +- .../device/mgt/jaxrs/beans/Profile.java | 4 +- .../beans/android/AppStoreApplication.java | 2 +- .../beans/android/EnterpriseApplication.java | 2 +- .../jaxrs/beans/android/WebApplication.java | 2 +- .../device/mgt/jaxrs/util/Constants.java | 2 +- .../src/main/webapp/META-INF/permissions.xml | 52 +- .../webapp/META-INF/webapp-classloading.xml | 14 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 44 +- .../src/main/webapp/WEB-INF/web.xml | 14 +- 45 files changed, 3946 insertions(+), 2707 deletions(-) create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/CertificateImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ConfigurationImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceInformationImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceNotificationImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/FeatureImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/GroupImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/LicenseImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java create mode 100644 components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml index 07ef52fde5..139385635d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml @@ -2,19 +2,19 @@ certificates = new ArrayList<>(); - org.wso2.carbon.certificate.mgt.core.bean.Certificate certificate; - certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); - try { - for (EnrollmentCertificate enrollmentCertificate : enrollmentCertificates) { - certificate = new org.wso2.carbon.certificate.mgt.core.bean.Certificate(); - certificate.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId()); - certificate.setSerial(enrollmentCertificate.getSerial()); - certificate.setCertificate(certificateService.pemToX509Certificate(enrollmentCertificate.getPem())); - certificates.add(certificate); - } - certificateService.saveCertificate(certificates); - return Response.status(Response.Status.CREATED).entity("Added successfully."). - type(responseMediaType).build(); - } catch (KeystoreException e) { - String msg = "Error occurred while converting PEM file to X509Certificate."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); - } - } + Response saveCertificate(@HeaderParam("Accept") String acceptHeader, + EnrollmentCertificate[] enrollmentCertificates); /** * Get a certificate when the serial number is given. @@ -98,31 +54,8 @@ public class Certificate { */ @GET @Path("{serialNumber}") - public Response getCertificate(@HeaderParam("Accept") String acceptHeader, - @PathParam("serialNumber") String serialNumber) { - MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - - if (serialNumber == null || serialNumber.isEmpty()) { - message.setErrorMessage("Invalid serial number"); - message.setDiscription("Serial number is missing or invalid."); - return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); - } - - CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); - CertificateResponse certificateResponse; - try { - certificateResponse = certificateService.getCertificateBySerial(serialNumber); - if(certificateResponse != null) { - certificateResponse.setCertificate(null); //avoid sending byte array in response. - } - return Response.status(Response.Status.OK).entity(certificateResponse).type(responseMediaType).build(); - } catch (KeystoreException e) { - String msg = "Error occurred while converting PEM file to X509Certificate"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); - } - } + Response getCertificate(@HeaderParam("Accept") String acceptHeader, + @PathParam("serialNumber") String serialNumber); /** * Get all certificates in a paginated manner. @@ -134,61 +67,13 @@ public class Certificate { */ @GET @Path("paginate") - public Response getAllCertificates(@HeaderParam("Accept") String acceptHeader, - @QueryParam("start") int startIndex, - @QueryParam("length") int length) - throws MDMAPIException { - MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - - if (startIndex < 0) { - message.setErrorMessage("Invalid start index."); - message.setDiscription("Start index cannot be less that 0."); - return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); - } else if (length <= 0) { - message.setErrorMessage("Invalid length value."); - message.setDiscription("Length should be a positive integer."); - return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); - } - - CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); - PaginationRequest paginationRequest = new PaginationRequest(startIndex, length); - try { - PaginationResult certificates = certificateService.getAllCertificates(paginationRequest); - return Response.status(Response.Status.OK).entity(certificates).type(responseMediaType).build(); - } catch (CertificateManagementDAOException e) { - String msg = "Error occurred while fetching all certificates."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); - } - } + Response getAllCertificates(@HeaderParam("Accept") String acceptHeader, + @QueryParam("start") int startIndex, @QueryParam("length") int length) + throws MDMAPIException; @DELETE @Path("{serialNumber}") - public Response removeCertificate(@HeaderParam("Accept") String acceptHeader, - @PathParam("serialNumber") String serialNumber) throws MDMAPIException { - MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - - if (serialNumber == null || serialNumber.isEmpty()) { - message.setErrorMessage("Invalid serial number"); - message.setDiscription("Serial number is missing or invalid."); - return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); - } + Response removeCertificate(@HeaderParam("Accept") String acceptHeader, + @PathParam("serialNumber") String serialNumber) throws MDMAPIException; - CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); - boolean deleted; - try { - deleted = certificateService.removeCertificate(serialNumber); - if(deleted){ - return Response.status(Response.Status.OK).entity(deleted).type(responseMediaType).build(); - } else { - return Response.status(Response.Status.GONE).entity(deleted).type(responseMediaType).build(); - } - } catch (CertificateManagementDAOException e) { - String msg = "Error occurred while converting PEM file to X509Certificate"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); - } - } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java index 80ad97ee6c..115d86797c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java @@ -18,96 +18,29 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAppConstants; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; -import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; /** - * General Tenant Configuration REST-API implementation. + * General Tenant ConfigurationImpl REST-API implementation. * All end points support JSON, XMl with content negotiation. */ - +@Api(value = "Configuration", description = "General Tenant Configuration implementation") @SuppressWarnings("NonJaxWsWebServices") -@Produces({"application/json", "application/xml"}) +@Produces({ "application/json", "application/xml" }) @Consumes({ "application/json", "application/xml" }) -public class Configuration { - - private static Log log = LogFactory.getLog(Configuration.class); +public interface Configuration { - @POST - public Response saveTenantConfiguration(TenantConfiguration configuration) { - ResponsePayload responseMsg = new ResponsePayload(); - try { - DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, - MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); - //Schedule the task service - DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); - responseMsg.setMessageFromServer("Tenant configuration saved successfully."); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (ConfigurationManagementException e) { - String msg = "Error occurred while saving the tenant configuration."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @POST + Response saveTenantConfiguration(TenantConfiguration configuration); - @GET - public Response getConfiguration() { - String msg; - try { - TenantConfiguration tenantConfiguration = DeviceMgtAPIUtils.getTenantConfigurationManagementService(). - getConfiguration(MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); - ConfigurationEntry configurationEntry = new ConfigurationEntry(); - configurationEntry.setContentType("text"); - configurationEntry.setName("notifierFrequency"); - configurationEntry.setValue(PolicyManagerUtil.getMonitoringFequency()); - List configList = tenantConfiguration.getConfiguration(); - if (configList == null) { - configList = new ArrayList<>(); - } - configList.add(configurationEntry); - tenantConfiguration.setConfiguration(configList); - return Response.status(Response.Status.OK).entity(tenantConfiguration).build(); - } catch (ConfigurationManagementException e) { - msg = "Error occurred while retrieving the tenant configuration."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @GET + Response getConfiguration(); - @PUT - public Response updateConfiguration(TenantConfiguration configuration) { - ResponsePayload responseMsg = new ResponsePayload(); - try { - DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, - MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); - //Schedule the task service - DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); - responseMsg.setMessageFromServer("Tenant configuration updated successfully."); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (ConfigurationManagementException e) { - String msg = "Error occurred while updating the tenant configuration."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @PUT + Response updateConfiguration(TenantConfiguration configuration); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java index f70ab278a5..949f40e4b7 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java @@ -18,163 +18,85 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementAdminService; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import io.swagger.annotations.*; import org.wso2.carbon.device.mgt.common.EnrolmentInfo; -import org.wso2.carbon.device.mgt.common.PaginationRequest; -import org.wso2.carbon.device.mgt.core.dto.DeviceType; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -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; -import java.util.List; /** - * Device related operations + * Device related operations such as get all the available devices, etc. */ +@Api(value = "Devices") @SuppressWarnings("NonJaxWsWebServices") -public class Device { - private static Log log = LogFactory.getLog(Device.class); +public interface Device { /** * Get all devices. We have to use accept all the necessary query parameters sent by datatable. * Hence had to put lot of query params here. * - * @return Device List + * @return DeviceImpl List */ @GET - public Response getAllDevices(@QueryParam("type") String type, @QueryParam("user") String user, - @QueryParam("role") String role, @QueryParam("status") EnrolmentInfo.Status status, - @QueryParam("start") int startIdx, @QueryParam("length") int length, - @QueryParam("device-name") String deviceName, - @QueryParam("ownership") EnrolmentInfo.OwnerShip ownership) { - try { - DeviceManagementProviderService service = DeviceMgtAPIUtils.getDeviceManagementService(); - //Length > 0 means this is a pagination request. - if (length > 0) { - PaginationRequest paginationRequest = new PaginationRequest(startIdx, length); - paginationRequest.setDeviceName(deviceName); - paginationRequest.setOwner(user); - if (ownership != null) { - paginationRequest.setOwnership(ownership.toString()); - } - if (status != null) { - paginationRequest.setStatus(status.toString()); - } - paginationRequest.setDeviceType(type); - return Response.status(Response.Status.OK).entity(service.getAllDevices(paginationRequest)).build(); - } - - List allDevices; - if ((type != null) && !type.isEmpty()) { - allDevices = service.getAllDevices(type); - } else if ((user != null) && !user.isEmpty()) { - allDevices = service.getDevicesOfUser(user); - } else if ((role != null) && !role.isEmpty()) { - allDevices = service.getAllDevicesOfRole(role); - } else if (status != null) { - allDevices = service.getDevicesByStatus(status); - } else if (deviceName != null) { - allDevices = service.getDevicesByName(deviceName); - } else { - allDevices = service.getAllDevices(); - } - return Response.status(Response.Status.OK).entity(allDevices).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the device list."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @ApiOperation( + consumes = MediaType.APPLICATION_JSON, + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Returns the set of devices that matches a given device type, user, role, " + + "enrollment status, ownership type", + notes = "Returns 500 if the operation fails", + response = Device.class, + responseContainer = "List") + @ApiResponses(value = { @ApiResponse(code = 200, message = "List of Devices"), + @ApiResponse(code = 500, message = "Server Error") }) + Response getAllDevices( + @ApiParam(name = "type", value = "Provide the device type, such as ios, android or windows", required = true) @QueryParam("type") String type, + @ApiParam(name = "user", value = "Get the details of the devices registered to a user by providing the user name", required = true) @QueryParam("user") String user, + @ApiParam(name = "role", value = "Get the details of the devices registered to a specific role by providing the role name", required = true) @QueryParam("role") String role, + @ApiParam(name = "status", value = "Provide the device status details, such as active or inactive", required = true) @QueryParam("status") EnrolmentInfo.Status status, + @ApiParam(name = "start", value = "Provide the starting pagination index", required = true) @QueryParam("start") int startIdx, + @ApiParam(name = "length", value = "Provide how many device details you require from the starting pagination index", required = true) @QueryParam("length") int length, + @ApiParam(name = "device-name", value = "Provide the name of a registered device and receive the specified device details", required = true) @QueryParam("device-name") String deviceName, + @ApiParam(name = "ownership", value = "Provide the device ownership type and receive the specific device details", required = true) @QueryParam("ownership") EnrolmentInfo.OwnerShip ownership); /** * Fetch device details for a given device type and device Id. * - * @return Device wrapped inside Response + * @return DeviceImpl wrapped inside Response */ @GET + @ApiOperation( + produces = MediaType.APPLICATION_JSON, + httpMethod = "GET", + value = "Fetch device details for a given device type and device Id", + notes = "Returns 500 if the operation fails", + response = Device.class) + @ApiResponses(value = { @ApiResponse(code = 200, message = "Matching Device"), + @ApiResponse(code = 500, message = "Server Error") }) @Path("view") - @Produces({MediaType.APPLICATION_JSON}) - public Response getDevice(@QueryParam("type") String type, - @QueryParam("id") String id) { - DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); - DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); - org.wso2.carbon.device.mgt.common.Device device; - try { - device = deviceManagementProviderService.getDevice(deviceIdentifier); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the device information."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - if (device == null) { - responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); - responsePayload.setMessageFromServer("Requested device by type: " + - type + " and id: " + id + " does not exist."); - return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); - } else { - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Sending Requested device by type: " + type + " and id: " + id + "."); - responsePayload.setResponseContent(device); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } - } + @Produces({ MediaType.APPLICATION_JSON }) + Response getDevice(@QueryParam("type") String type, @QueryParam("id") String id); /** * Fetch device details of a given user. * - * @param user User Name - * @return Device + * @param user UserImpl Name + * @return DeviceImpl */ @GET @Path("user/{user}") - public Response getDevice(@PathParam("user") String user) { - List devices; - try { - devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesOfUser(user); - if (devices == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - return Response.status(Response.Status.OK).entity(devices).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the devices list of given user."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getDevice(@PathParam("user") String user); /** * Fetch device count of a given user. * - * @param user User Name - * @return Device + * @param user UserImpl Name + * @return DeviceImpl */ @GET @Path("user/{user}/count") - public Response getDeviceCount(@PathParam("user") String user) { - try { - Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(user); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the devices list of given user."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getDeviceCount(@PathParam("user") String user); /** * Get current device count @@ -182,58 +104,36 @@ public class Device { * @return device count */ @GET + @ApiOperation( + httpMethod = "GET", + value = "Returns the current device count", + notes = "Returns 500 if the operation fails", + response = Integer.class) + @ApiResponses(value = { @ApiResponse(code = 200, message = "Device count"), + @ApiResponse(code = 500, message = "Server Error") }) @Path("count") - public Response getDeviceCount() { - try { - Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the device count."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getDeviceCount(); /** * Get the list of devices that matches with the given name. * - * @param deviceName Device name + * @param deviceName DeviceImpl name * @param tenantDomain Callee tenant domain * @return list of devices. */ @GET @Path("name/{name}/{tenantDomain}") - public Response getDevicesByName(@PathParam("name") String deviceName, - @PathParam("tenantDomain") String tenantDomain) { - List devices; - try { - devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesByName(deviceName); - return Response.status(Response.Status.OK).entity(devices).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the devices list of device name."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getDevicesByName(@PathParam("name") String deviceName, + @PathParam("tenantDomain") String tenantDomain); - /** - * Get the list of available device types. - * - * @return list of device types. - */ - @GET - @Path("types") - public Response getDeviceTypes() { - List deviceTypes; - try { - deviceTypes = DeviceMgtAPIUtils.getDeviceManagementService().getAvailableDeviceTypes(); - return Response.status(Response.Status.OK).entity(deviceTypes).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the list of device types."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + /** + * Get the list of available device types. + * + * @return list of device types. + */ + @GET + @Path("types") + Response getDeviceTypes(); /** * Update device. @@ -242,24 +142,8 @@ public class Device { */ @PUT @Path("type/{type}/id/{deviceId}") - public Response updateDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId, - org.wso2.carbon.device.mgt.common.Device updatedDevice) { - try { - DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService(); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setType(deviceType); - deviceIdentifier.setId(deviceId); - org.wso2.carbon.device.mgt.common.Device device = deviceManagementService.getDevice(deviceIdentifier); - device.setName(updatedDevice.getName()); - device.setDescription(updatedDevice.getDescription()); - Boolean response = deviceManagementService.modifyEnrollment(device); - return Response.status(Response.Status.OK).entity(response).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the list of device types."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response updateDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId, + org.wso2.carbon.device.mgt.common.Device updatedDevice); /** * disenroll device. @@ -268,18 +152,6 @@ public class Device { */ @DELETE @Path("type/{type}/id/{deviceId}") - public Response disenrollDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId) { - try { - DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService(); - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setType(deviceType); - deviceIdentifier.setId(deviceId); - Boolean response = deviceManagementService.disenrollDevice(deviceIdentifier); - return Response.status(Response.Status.OK).entity(response).build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while fetching the list of device types."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response disenrollDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId); + } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java index 5bfe8e0b0f..5cff26e61f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceInformation.java @@ -16,65 +16,28 @@ * under the License. */ - package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -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.device.details.mgt.DeviceDetailsMgtException; -import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import io.swagger.annotations.Api; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; +/** + * Device information related operations. + */ +@Api(value = "DeviceInfo") @SuppressWarnings("NonJaxWsWebServices") -public class DeviceInformation { - - private static Log log = LogFactory.getLog(DeviceInformation.class); +public interface DeviceInformation { @GET @Path("{type}/{id}") - public Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id) { - DeviceInformationManager informationManager; - DeviceInfo deviceInfo; - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(id); - deviceIdentifier.setType(type); - informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); - deviceInfo = informationManager.getDeviceInfo(deviceIdentifier); - } catch (DeviceDetailsMgtException e) { - String msg = "Error occurred while getting the device information."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(deviceInfo).build(); - } - + Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id); @GET @Path("location/{type}/{id}") - public Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id) { - DeviceInformationManager informationManager; - DeviceLocation deviceLocation; - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(id); - deviceIdentifier.setType(type); - informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); - deviceLocation = informationManager.getDeviceLocation(deviceIdentifier); - } catch (DeviceDetailsMgtException e) { - String msg = "Error occurred while getting the device location."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(deviceLocation).build(); - } -} + Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id); +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java index 0319ae349f..a9dbc34587 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java @@ -18,13 +18,8 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.common.notification.mgt.Notification; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -34,76 +29,30 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.util.List; /** - * DeviceNotification management REST-API implementation. + * DeviceNotificationImpl management REST-API implementation. * All end points support JSON, XMl with content negotiation. */ +@Api(value = "DeviceNotification") @SuppressWarnings("NonJaxWsWebServices") @Produces({"application/json", "application/xml"}) @Consumes({ "application/json", "application/xml" }) -public class DeviceNotification { +public interface DeviceNotification { - private static Log log = LogFactory.getLog(Configuration.class); + @GET + Response getNotifications(); - @GET - public Response getNotifications() { - String msg; - try { - List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getAllNotifications(); - return Response.status(Response.Status.OK).entity(notifications).build(); - } catch (NotificationManagementException e) { - msg = "Error occurred while retrieving the notification list."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @GET + @Path("{status}") + Response getNotificationsByStatus(@PathParam("status") Notification.Status status); - @GET - @Path("{status}") - public Response getNotificationsByStatus(@PathParam("status") Notification.Status status) { - String msg; - try { - List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getNotificationsByStatus(status); - return Response.status(Response.Status.OK).entity(notifications).build(); - } catch (NotificationManagementException e) { - msg = "Error occurred while retrieving the notification list."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @PUT + @Path("{id}/{status}") + Response updateNotificationStatus(@PathParam("id") int id, + @PathParam("status") Notification.Status status); - @PUT - @Path("{id}/{status}") - public Response updateNotificationStatus(@PathParam("id") int id, - @PathParam("status") Notification.Status status) { - ResponsePayload responseMsg = new ResponsePayload(); - try { - DeviceMgtAPIUtils.getNotificationManagementService().updateNotificationStatus(id, status); - responseMsg.setMessageFromServer("Notification status updated successfully."); - responseMsg.setStatusCode(HttpStatus.SC_ACCEPTED); - return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build(); - } catch (NotificationManagementException e) { - String msg = "Error occurred while updating notification status."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } - - @POST - public Response addNotification(Notification notification) { - ResponsePayload responseMsg = new ResponsePayload(); - try { - DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification); - responseMsg.setMessageFromServer("Notification has added successfully."); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (NotificationManagementException e) { - String msg = "Error occurred while updating notification status."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @POST + Response addNotification(Notification notification); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java index f3fdf8c065..ffb72fbebb 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceSearch.java @@ -16,40 +16,21 @@ * under the License. */ - package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.device.details.DeviceWrapper; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.common.search.SearchContext; -import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService; -import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; import javax.ws.rs.GET; import javax.ws.rs.core.Response; -import java.util.List; +/** + * Device search related operations such as getting device information. + */ +@Api(value = "DeviceSearch") @SuppressWarnings("NonJaxWsWebServices") -public class DeviceSearch { - - private static Log log = LogFactory.getLog(DeviceSearch.class); +public interface DeviceSearch { @GET - public Response getDeviceInfo(SearchContext searchContext) { - SearchManagerService searchManagerService; - List devices; - try { - searchManagerService = DeviceMgtAPIUtils.getSearchManagerService(); - devices = searchManagerService.search(searchContext); - - } catch (SearchMgtException e) { - String msg = "Error occurred while searching the device information."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(devices).build(); - } + Response getDeviceInfo(SearchContext searchContext); } - diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java index 667d6f683a..37765cb377 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java @@ -18,11 +18,7 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import io.swagger.annotations.Api; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -30,36 +26,23 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.util.List; /** * Features */ +@Api(value = "Feature") @SuppressWarnings("NonJaxWsWebServices") @Produces({"application/json", "application/xml"}) @Consumes({"application/json", "application/xml"}) -public class Feature { - private static Log log = LogFactory.getLog(Feature.class); +public interface Feature { /** - * Get all features for Mobile Device Type + * Get all features for Mobile DeviceImpl Type * - * @return Feature + * @return FeatureImpl */ @GET @Path("/{type}") - public Response getFeatures(@PathParam("type") String type) { - List features; - DeviceManagementProviderService dmService; - try { - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - features = dmService.getFeatureManager(type).getFeatures(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while retrieving the list of features"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(features).build(); - } + Response getFeatures(@PathParam("type") String type); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Group.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Group.java index ab350b6b07..cc8ce89039 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Group.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Group.java @@ -18,19 +18,9 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.PrivilegedCarbonContext; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.PaginationResult; import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; -import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants; -import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException; -import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; -import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser; -import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.user.core.multiplecredentials.UserDoesNotExistException; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -43,473 +33,144 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.util.Arrays; -import java.util.Date; import java.util.List; +/** + * + */ +@Api(value = "Group") @SuppressWarnings("NonJaxWsWebServices") -public class Group { - - private static Log log = LogFactory.getLog(Group.class); +public interface Group { @POST @Consumes("application/json") - public Response createGroup(DeviceGroup group) { - String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); - if (group == null) { - return Response.status(Response.Status.BAD_REQUEST).build(); - } - group.setOwner(owner); - group.setDateOfCreation(new Date().getTime()); - group.setDateOfLastUpdate(new Date().getTime()); - try { - GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); - groupManagementService.createGroup(group, DeviceGroupConstants.Roles.DEFAULT_ADMIN_ROLE, DeviceGroupConstants.Permissions.DEFAULT_ADMIN_PERMISSIONS); - groupManagementService.addGroupSharingRole(owner, group.getName(), owner, - DeviceGroupConstants.Roles.DEFAULT_OPERATOR_ROLE, - DeviceGroupConstants.Permissions.DEFAULT_OPERATOR_PERMISSIONS); - groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_STATS_MONITOR_ROLE, - DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS); - groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_POLICIES, - DeviceGroupConstants.Permissions.DEFAULT_VIEW_POLICIES_PERMISSIONS); - groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_MANAGE_POLICIES, - DeviceGroupConstants.Permissions.DEFAULT_MANAGE_POLICIES_PERMISSIONS); - groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_EVENTS, - DeviceGroupConstants.Permissions.DEFAULT_VIEW_EVENTS_PERMISSIONS); - return Response.status(Response.Status.CREATED).build(); - } catch (GroupAlreadyEixistException e) { - return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getErrorMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response createGroup(DeviceGroup group); @Path("/owner/{owner}/name/{groupName}") @PUT @Consumes("application/json") @Produces("application/json") - public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, - DeviceGroup deviceGroup) { - try { - DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner); - return Response.status(Response.Status.OK).build(); - } catch (GroupManagementException e) { - log.error(e.getErrorMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + DeviceGroup deviceGroup); @Path("/owner/{owner}/name/{groupName}") @DELETE - public Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { - try { - DeviceMgtAPIUtils.getGroupManagementProviderService().deleteGroup(groupName, owner); - return Response.status(Response.Status.OK).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage()); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner); @GET @Produces("application/json") - public Response getGroups(@QueryParam("start") int startIndex, @PathParam("length") int length) { - try { - PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() - .getGroups(startIndex, length); - if (paginationResult.getRecordsTotal() > 0) { - return Response.status(Response.Status.OK).entity(paginationResult).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroups(@QueryParam("start") int startIndex, @PathParam("length") int length); @Path("/all") @GET @Produces("application/json") - public Response getAllGroups() { - try { - GroupManagementProviderService groupManagementProviderService = DeviceMgtAPIUtils - .getGroupManagementProviderService(); - PaginationResult paginationResult = groupManagementProviderService - .getGroups(0, groupManagementProviderService.getGroupCount()); - if (paginationResult.getRecordsTotal() > 0) { - return Response.status(Response.Status.OK).entity(paginationResult.getData()).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getAllGroups(); @Path("/user/{user}") @GET @Produces("application/json") - public Response getGroups(@PathParam("user") String userName, @QueryParam("start") int startIndex, - @QueryParam("length") int length) { - try { - PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() - .getGroups(userName, startIndex, length); - if (paginationResult.getRecordsTotal() > 0) { - return Response.status(Response.Status.OK).entity(paginationResult).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroups(@PathParam("user") String userName, @QueryParam("start") int startIndex, + @QueryParam("length") int length); @Path("/user/{user}/all") @GET @Produces("application/json") - public Response getGroups(@PathParam("user") String userName) { - try { - List deviceGroups = DeviceMgtAPIUtils.getGroupManagementProviderService() - .getGroups(userName); - if (deviceGroups.size() > 0) { - return Response.status(Response.Status.OK).entity(deviceGroups).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroups(@PathParam("user") String userName); @Path("/owner/{owner}/name/{groupName}") @GET @Produces("application/json") - public Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { - try { - DeviceGroup deviceGroup = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroup(groupName, owner); - if (deviceGroup != null) { - return Response.status(Response.Status.OK).entity(deviceGroup).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner); @Path("/user/{user}/search") @GET @Produces("application/json") - public Response findGroups(@QueryParam("groupName") String groupName, - @PathParam("user") String user) { - try { - List groups = DeviceMgtAPIUtils.getGroupManagementProviderService() - .findInGroups(groupName, user); - DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; - groups.toArray(deviceGroups); - return Response.status(Response.Status.OK).entity(deviceGroups).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response findGroups(@QueryParam("groupName") String groupName, @PathParam("user") String user); @Path("/user/{user}/all") @GET @Produces("application/json") - public Response getGroups(@PathParam("user") String userName, - @QueryParam("permission") String permission) { - try { - GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); - List groups; - if (permission != null) { - groups = groupManagementService.getGroups(userName, permission); - } else { - groups = groupManagementService.getGroups(userName); - } - DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; - groups.toArray(deviceGroups); - return Response.status(Response.Status.OK).entity(deviceGroups).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroups(@PathParam("user") String userName, @QueryParam("permission") String permission); @Path("/count") @GET @Produces("application/json") - public Response getAllGroupCount() { - try { - int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getAllGroupCount(); @Path("/user/{user}/count") @GET @Produces("application/json") - public Response getGroupCount(@PathParam("user") String userName) { - try { - int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(userName); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getGroupCount(@PathParam("user") String userName); @Path("/owner/{owner}/name/{groupName}/share") @PUT @Produces("application/json") - public Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, - @FormParam("shareUser") String shareUser, - @FormParam("roleName") String sharingRole) { - - try { - boolean isShared = DeviceMgtAPIUtils.getGroupManagementProviderService().shareGroup( - shareUser, groupName, owner, sharingRole); - if (isShared) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).entity("Group not found").build(); - } - } catch (UserDoesNotExistException e) { - return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("shareUser") String shareUser, @FormParam("roleName") String sharingRole); @Path("/owner/{owner}/name/{groupName}/unshare") @PUT @Produces("application/json") - public Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, - @FormParam("unShareUser") String unShareUser, - @FormParam("roleName") String sharingRole) { - try { - boolean isUnShared = DeviceMgtAPIUtils.getGroupManagementProviderService().unshareGroup( - unShareUser, groupName, owner, sharingRole); - if (isUnShared) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).entity("Group not found").build(); - } - } catch (UserDoesNotExistException e) { - return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("unShareUser") String unShareUser, + @FormParam("roleName") String sharingRole); @Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions") @PUT @Produces("application/json") - public Response addSharing(@QueryParam("shareUser") String shareUser, @PathParam("groupName") String groupName, - @PathParam("owner") String owner, - @PathParam("roleName") String roleName, - @FormParam("permissions") String[] permissions) { - - try { - boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addGroupSharingRole( - shareUser, groupName, owner, roleName, permissions); - if (isAdded) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response addSharing(@QueryParam("shareUser") String shareUser, @PathParam("groupName") String groupName, + @PathParam("owner") String owner, @PathParam("roleName") String roleName, + @FormParam("permissions") String[] permissions); @DELETE @Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions") @Produces("application/json") - public Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupName") String groupName, - @PathParam("owner") String owner, - @PathParam("roleName") String roleName) { - try { - boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeGroupSharingRole( - groupName, owner, roleName); - if (isRemoved) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response removeSharing(@QueryParam("userName") String userName, @PathParam("groupName") String groupName, + @PathParam("owner") String owner, @PathParam("roleName") String roleName); @GET @Path("/owner/{owner}/name/{groupName}/share/roles") @Produces("application/json") - public Response getRoles(@PathParam("groupName") String groupName, - @PathParam("owner") String owner, @QueryParam("userName") String userName) { - try { - List roles; - if (userName != null && !userName.isEmpty()) { - roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(userName, groupName, owner); - } else { - roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner); - } - String[] rolesArray = new String[roles.size()]; - roles.toArray(rolesArray); - return Response.status(Response.Status.OK).entity(rolesArray).build(); - } catch (UserDoesNotExistException e) { - return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @QueryParam("userName") String userName); @PUT @Path("/owner/{owner}/name/{groupName}/user/{userName}/share/roles") @Produces("application/json") - public Response setRoles(@PathParam("groupName") String groupName, - @PathParam("owner") String owner, @PathParam("userName") String userName, - List selectedRoles) { - try { - List allRoles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner); - for (String role : allRoles) { - if (selectedRoles.contains(role)) { - DeviceMgtAPIUtils.getGroupManagementProviderService() - .shareGroup(userName, groupName, owner, role); - } else { - DeviceMgtAPIUtils.getGroupManagementProviderService() - .unshareGroup(userName, groupName, owner, role); - } - } - return Response.status(Response.Status.OK).build(); - } catch (UserDoesNotExistException e) { - return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response setRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("userName") String userName, List selectedRoles); @GET @Path("/owner/{owner}/name/{groupName}/users") @Produces("application/json") - public Response getUsers(@PathParam("groupName") String groupName, - @PathParam("owner") String owner) { - try { - List users = DeviceMgtAPIUtils.getGroupManagementProviderService().getUsers( - groupName, owner); - GroupUser[] usersArray = new GroupUser[users.size()]; - users.toArray(usersArray); - return Response.status(Response.Status.OK).entity(usersArray).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getUsers(@PathParam("groupName") String groupName, @PathParam("owner") String owner); @GET @Path("/owner/{owner}/name/{groupName}/devices") @Produces("application/json") - public Response getDevices(@PathParam("groupName") String groupName, @PathParam("owner") String owner, - @QueryParam("start") int startIdx, @QueryParam("length") int length) { - try { - PaginationResult paginationResult = DeviceMgtAPIUtils - .getGroupManagementProviderService().getDevices(groupName, owner, startIdx, length); - if (paginationResult.getRecordsTotal() > 0) { - return Response.status(Response.Status.OK).entity(paginationResult).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getDevices(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @QueryParam("start") int startIdx, @QueryParam("length") int length); @GET @Path("/owner/{owner}/name/{groupName}/devices/count") @Produces("application/json") - public Response getDeviceCount(@PathParam("groupName") String groupName, - @PathParam("owner") String owner) { - try { - int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getDeviceCount(groupName, owner); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response getDeviceCount(@PathParam("groupName") String groupName, @PathParam("owner") String owner); @POST @Path("/owner/{owner}/name/{groupName}/devices") @Produces("application/json") - public Response addDevice(@PathParam("groupName") String groupName, - @PathParam("owner") String owner, DeviceIdentifier deviceIdentifier) { - try { - boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addDevice( - deviceIdentifier, groupName, owner); - if (isAdded) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response addDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + DeviceIdentifier deviceIdentifier); @DELETE @Path("/owner/{owner}/name/{groupName}/devices/{deviceType}/{deviceId}") @Produces("application/json") - public Response removeDevice(@PathParam("groupName") String groupName, - @PathParam("owner") String owner, @PathParam("deviceId") String deviceId, - @PathParam("deviceType") String deviceType) { - try { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType); - boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeDevice( - deviceIdentifier, groupName, owner); - if (isRemoved) { - return Response.status(Response.Status.OK).build(); - } else { - return Response.status(Response.Status.NOT_FOUND).build(); - } - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } + Response removeDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("deviceId") String deviceId, @PathParam("deviceType") String deviceType); @GET @Path("/owner/{owner}/name/{groupName}/users/{userName}/permissions") @Produces("application/json") - public Response getPermissions(@PathParam("userName") String userName, - @PathParam("groupName") String groupName, - @PathParam("owner") String owner) { - try { - String[] permissions = DeviceMgtAPIUtils.getGroupManagementProviderService() - .getPermissions(userName, groupName, owner); - return Response.status(Response.Status.OK).entity(permissions).build(); - } catch (UserDoesNotExistException e) { - return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); - } catch (GroupManagementException e) { - log.error(e.getMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); - } - } - + Response getPermissions(@PathParam("userName") String userName, @PathParam("groupName") String groupName, + @PathParam("owner") String owner); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java index 73e78ceb83..c5320703b5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java @@ -18,84 +18,41 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import io.swagger.annotations.Api; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * This class represents license related operations. */ +@Api(value = "License") @SuppressWarnings("NonJaxWsWebServices") -public class License { - - private static Log log = LogFactory.getLog(License.class); +public interface License { /** * This method returns the license text related to a given device type and language code. * - * @param deviceType Device type, ex: android, ios + * @param deviceType DeviceImpl type, ex: android, ios * @param languageCode Language code, ex: en_US * @return Returns the license text */ @GET - @Path ("{deviceType}/{languageCode}") - @Produces ({MediaType.APPLICATION_JSON}) - public Response getLicense(@PathParam ("deviceType") String deviceType, - @PathParam("languageCode") String languageCode) { - - org.wso2.carbon.device.mgt.common.license.mgt.License license; - ResponsePayload responsePayload; - try { - license = DeviceMgtAPIUtils.getDeviceManagementService().getLicense(deviceType, languageCode); - if (license == null) { - return Response.status(HttpStatus.SC_NOT_FOUND).build(); - } - responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK). - messageFromServer("License for '" + deviceType + "' was retrieved successfully"). - responseContent(license.getText()). - build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while retrieving the license configured for '" + deviceType + "' device type"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + @Path("{deviceType}/{languageCode}") + @Produces({ MediaType.APPLICATION_JSON }) + Response getLicense(@PathParam("deviceType") String deviceType, + @PathParam("languageCode") String languageCode); /** * This method is used to add license to a specific device type. * - * @param deviceType Device type, ex: android, ios - * @param license License object + * @param deviceType DeviceImpl type, ex: android, ios + * @param license LicenseImpl object * @return Returns the acknowledgement for the action */ @POST - @Path ("{deviceType}") - public Response addLicense(@PathParam ("deviceType") String deviceType, - org.wso2.carbon.device.mgt.common.license.mgt.License license) { - - ResponsePayload responsePayload; - try { - DeviceMgtAPIUtils.getDeviceManagementService().addLicense(deviceType, license); - responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK). - messageFromServer("License added successfully for '" + deviceType + "' device type"). - build(); - } catch (DeviceManagementException e) { - String msg = "Error occurred while adding license for '" + deviceType + "' device type"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + @Path("{deviceType}") + Response addLicense(@PathParam("deviceType") String deviceType, + org.wso2.carbon.device.mgt.common.license.mgt.License license); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java index 8ff77412bb..9c8f854788 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Operation.java @@ -18,203 +18,52 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.jaxrs.api.context.DeviceOperationContext; -import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMIOSOperationUtil; import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper; -import org.wso2.carbon.device.mgt.jaxrs.beans.MobileApp; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.PaginationRequest; -import org.wso2.carbon.device.mgt.common.PaginationResult; -import org.wso2.carbon.device.mgt.common.Platform; -import org.wso2.carbon.device.mgt.common.app.mgt.Application; -import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException; -import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAndroidOperationUtil; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; -import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.util.List; /** - * Operation related REST-API implementation. + * */ -@SuppressWarnings("NonJaxWsWebServices") -@Produces({"application/json", "application/xml"}) -@Consumes({"application/json", "application/xml"}) -public class Operation { - - private static Log log = LogFactory.getLog(Operation.class); +@Api(value = "Operation") +public interface Operation { /* @deprecated */ @GET - public Response getAllOperations() { - List operations; - DeviceManagementProviderService dmService; - try { - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - operations = dmService.getOperations(null); - } catch (OperationManagementException e) { - String msg = "Error occurred while fetching the operations for the device."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(operations).build(); - } + Response getAllOperations(); @GET @Path("paginate/{type}/{id}") - public Response getDeviceOperations( - @PathParam("type") String type, @PathParam("id") String id, @QueryParam("start") int startIdx, - @QueryParam("length") int length, @QueryParam("search") String search) { - PaginationResult operations; - DeviceManagementProviderService dmService; - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - PaginationRequest paginationRequest = new PaginationRequest(startIdx, length); - try { - deviceIdentifier.setType(type); - deviceIdentifier.setId(id); - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - operations = dmService.getOperations(deviceIdentifier, paginationRequest); - } catch (OperationManagementException e) { - String msg = "Error occurred while fetching the operations for the device."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(operations).build(); - } + Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id, + @QueryParam("start") int startIdx, @QueryParam("length") int length, + @QueryParam("search") String search); @GET @Path("{type}/{id}") - public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) { - List operations; - DeviceManagementProviderService dmService; - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - try { - deviceIdentifier.setType(type); - deviceIdentifier.setId(id); - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - operations = dmService.getOperations(deviceIdentifier); - } catch (OperationManagementException e) { - String msg = "Error occurred while fetching the operations for the device."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).entity(operations).build(); - } + Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id); /* @deprecated */ @POST - public Response addOperation(DeviceOperationContext operationContext) { - DeviceManagementProviderService dmService; - ResponsePayload responseMsg = new ResponsePayload(); - try { - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - int operationId = dmService.addOperation(operationContext.getOperation(), operationContext.getDevices()); - if (operationId > 0) { - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Operation has added successfully."); - } - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (OperationManagementException e) { - String msg = "Error occurred while saving the operation"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response addOperation(DeviceOperationContext operationContext); @GET @Path("{type}/{id}/apps") - public Response getInstalledApps(@PathParam("type") String type, @PathParam("id") String id) { - List applications; - ApplicationManagementProviderService appManagerConnector; - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - try { - deviceIdentifier.setType(type); - deviceIdentifier.setId(id); - appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); - applications = appManagerConnector.getApplicationListForDevice(deviceIdentifier); - } catch (ApplicationManagementException e) { - String msg = "Error occurred while fetching the apps of the device."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.CREATED).entity(applications).build(); - } + Response getInstalledApps(@PathParam("type") String type, @PathParam("id") String id); @POST @Path("installApp/{tenantDomain}") - public Response installApplication(ApplicationWrapper applicationWrapper, - @PathParam("tenantDomain") String tenantDomain) { - ResponsePayload responseMsg = new ResponsePayload(); - ApplicationManager appManagerConnector; - org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; - try { - appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); - MobileApp mobileApp = applicationWrapper.getApplication(); - - if (applicationWrapper.getDeviceIdentifiers() != null) { - for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - if (deviceIdentifier.getType().equals(Platform.android.toString())) { - operation = MDMAndroidOperationUtil.createInstallAppOperation(mobileApp); - } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { - operation = MDMIOSOperationUtil.createInstallAppOperation(mobileApp); - } - } - appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); - } - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Application installation request has been sent to the device."); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (ApplicationManagementException | MDMAPIException e) { - String msg = "Error occurred while saving the operation"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response installApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain); @POST @Path("uninstallApp/{tenantDomain}") - public Response uninstallApplication(ApplicationWrapper applicationWrapper, - @PathParam("tenantDomain") String tenantDomain) { - ResponsePayload responseMsg = new ResponsePayload(); - ApplicationManager appManagerConnector; - org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; - try { - appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); - MobileApp mobileApp = applicationWrapper.getApplication(); - - if (applicationWrapper.getDeviceIdentifiers() != null) { - for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { - if (deviceIdentifier.getType().equals(Platform.android.toString())) { - operation = MDMAndroidOperationUtil.createAppUninstallOperation(mobileApp); - } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { - operation = MDMIOSOperationUtil.createAppUninstallOperation(mobileApp); - } - } - appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); - } - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Application removal request has been sent to the device."); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (ApplicationManagementException | MDMAPIException e) { - String msg = "Error occurred while saving the operation"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } -} \ No newline at end of file + Response uninstallApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain); +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java index a0d789b00f..1eebbb0c69 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Policy.java @@ -18,23 +18,10 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.beans.PriorityUpdatedPolicyWrapper; -import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; import org.wso2.carbon.device.mgt.jaxrs.beans.PolicyWrapper; -import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.policy.mgt.common.PolicyMonitoringTaskException; -import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; -import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; -import org.wso2.carbon.policy.mgt.core.PolicyManagerService; -import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService; +import org.wso2.carbon.device.mgt.jaxrs.beans.PriorityUpdatedPolicyWrapper; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -45,386 +32,83 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.ArrayList; import java.util.List; -@SuppressWarnings("NonJaxWsWebServices") -public class Policy { - private static Log log = LogFactory.getLog(Policy.class); +/** + * + */ +@Api(value = "Policy") +public interface Policy { @POST @Path("inactive-policy") - public Response addPolicy(PolicyWrapper policyWrapper) { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); - org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); - policy.setPolicyName(policyWrapper.getPolicyName()); - policy.setProfileId(policyWrapper.getProfileId()); - policy.setDescription(policyWrapper.getDescription()); - policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); - policy.setOwnershipType(policyWrapper.getOwnershipType()); - policy.setRoles(policyWrapper.getRoles()); - policy.setUsers(policyWrapper.getUsers()); - policy.setTenantId(policyWrapper.getTenantId()); - policy.setCompliance(policyWrapper.getCompliance()); - - return addPolicy(policyManagementService, responseMsg, policy); - } + Response addPolicy(PolicyWrapper policyWrapper); @POST @Path("active-policy") - public Response addActivePolicy(PolicyWrapper policyWrapper) { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); - org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); - policy.setPolicyName(policyWrapper.getPolicyName()); - policy.setProfileId(policyWrapper.getProfileId()); - policy.setDescription(policyWrapper.getDescription()); - policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); - policy.setOwnershipType(policyWrapper.getOwnershipType()); - policy.setRoles(policyWrapper.getRoles()); - policy.setUsers(policyWrapper.getUsers()); - policy.setTenantId(policyWrapper.getTenantId()); - policy.setCompliance(policyWrapper.getCompliance()); - policy.setActive(true); - - return addPolicy(policyManagementService, responseMsg, policy); - } - - private Response addPolicy(PolicyManagerService policyManagementService, ResponsePayload responseMsg, - org.wso2.carbon.policy.mgt.common.Policy policy) { - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - pap.addPolicy(policy); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Policy has been added successfully."); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response addActivePolicy(PolicyWrapper policyWrapper); @GET - @Produces({MediaType.APPLICATION_JSON}) - public Response getAllPolicies() { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - List policies; - try { - PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); - policies = policyAdministratorPoint.getPolicies(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Sending all retrieved device policies."); - responsePayload.setResponseContent(policies); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + @Produces({ MediaType.APPLICATION_JSON}) + Response getAllPolicies(); @GET @Produces({MediaType.APPLICATION_JSON}) @Path("{id}") - public Response getPolicy(@PathParam("id") int policyId) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - final org.wso2.carbon.policy.mgt.common.Policy policy; - try { - PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); - policy = policyAdministratorPoint.getPolicy(policyId); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - if (policy == null){ - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); - responsePayload.setMessageFromServer("Policy for ID " + policyId + " not found."); - return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Sending all retrieved device policies."); - responsePayload.setResponseContent(policy); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getPolicy(@PathParam("id") int policyId); @GET @Path("count") - public Response getPolicyCount() { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - try { - PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); - Integer count = policyAdministratorPoint.getPolicyCount(); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getPolicyCount(); @PUT @Path("{id}") - public Response updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId) { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); - org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); - policy.setPolicyName(policyWrapper.getPolicyName()); - policy.setId(policyId); - policy.setProfileId(policyWrapper.getProfileId()); - policy.setDescription(policyWrapper.getDescription()); - policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); - policy.setOwnershipType(policyWrapper.getOwnershipType()); - policy.setRoles(policyWrapper.getRoles()); - policy.setUsers(policyWrapper.getUsers()); - policy.setTenantId(policyWrapper.getTenantId()); - policy.setCompliance(policyWrapper.getCompliance()); - - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - pap.updatePolicy(policy); - responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("Policy has been updated successfully."); - return Response.status(Response.Status.CREATED).entity(responseMsg).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception in policy update."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId); @PUT @Path("priorities") @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response updatePolicyPriorities(List priorityUpdatedPolicies) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - List policiesToUpdate = - new ArrayList<>(priorityUpdatedPolicies.size()); - int i; - for (i = 0; i < priorityUpdatedPolicies.size(); i++) { - org.wso2.carbon.policy.mgt.common.Policy policyObj = new org.wso2.carbon.policy.mgt.common.Policy(); - policyObj.setId(priorityUpdatedPolicies.get(i).getId()); - policyObj.setPriorityId(priorityUpdatedPolicies.get(i).getPriority()); - policiesToUpdate.add(policyObj); - } - boolean policiesUpdated; - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - policiesUpdated = pap.updatePolicyPriorities(policiesToUpdate); - } catch (PolicyManagementException e) { - String msg = "Exception in updating policy priorities."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - if (policiesUpdated) { - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Policy Priorities successfully updated."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } else { - responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer("Policy priorities did not update. Bad Request."); - return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); - } - } + Response updatePolicyPriorities(List priorityUpdatedPolicies); @POST @Path("bulk-remove") @Consumes("application/json") @Produces("application/json") - public Response bulkRemovePolicy(List policyIds) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - boolean policyDeleted = true; - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - for(int i : policyIds) { - org.wso2.carbon.policy.mgt.common.Policy policy = pap.getPolicy(i); - if(!pap.deletePolicy(policy)){ - policyDeleted = false; - } - } - } catch (PolicyManagementException e) { - String msg = "Exception in deleting policies."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - if (policyDeleted) { - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Policies have been successfully deleted."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } else { - responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer("Policy does not exist."); - return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); - } - } + Response bulkRemovePolicy(List policyIds); @PUT @Produces("application/json") @Path("activate") - public Response activatePolicy(List policyIds) { - try { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - for(int i : policyIds) { - pap.activatePolicy(i); - } - } catch (PolicyManagementException e) { - String msg = "Exception in activating policies."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Selected policies have been successfully activated."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response activatePolicy(List policyIds); @PUT @Produces("application/json") @Path("inactivate") - public Response inactivatePolicy(List policyIds) throws MDMAPIException { - - try { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - for(int i : policyIds) { - pap.inactivatePolicy(i); - } - } catch (PolicyManagementException e) { - String msg = "Exception in inactivating policies."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Selected policies have been successfully inactivated."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response inactivatePolicy(List policyIds) throws MDMAPIException; @PUT @Produces("application/json") @Path("apply-changes") - public Response applyChanges() { - - try { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - pap.publishChanges(); - - - } catch (PolicyManagementException e) { - String msg = "Exception in applying changes."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Changes have been successfully updated."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response applyChanges(); @GET @Path("start-task/{milliseconds}") - public Response startTaskService(@PathParam("milliseconds") int monitoringFrequency) { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - try { - TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); - taskScheduleService.startTask(monitoringFrequency); - - - } catch (PolicyMonitoringTaskException e) { - String msg = "Policy Management related exception."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Policy monitoring service started successfully."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response startTaskService(@PathParam("milliseconds") int monitoringFrequency); @GET @Path("update-task/{milliseconds}") - public Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency) { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - try { - TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); - taskScheduleService.updateTask(monitoringFrequency); - - } catch (PolicyMonitoringTaskException e) { - String msg = "Policy Management related exception."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Policy monitoring service updated successfully."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency); @GET @Path("stop-task") - public Response stopTaskService() { - - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - try { - TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); - taskScheduleService.stopTask(); - - } catch (PolicyMonitoringTaskException e) { - String msg = "Policy Management related exception."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Policy monitoring service stopped successfully."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response stopTaskService(); @GET @Path("{type}/{id}") - public Response getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id) { - try { - DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ComplianceData complianceData = policyManagementService.getDeviceCompliance(deviceIdentifier); - return Response.status(Response.Status.OK).entity(complianceData).build(); - } catch (PolicyComplianceException e) { - String msg = "Error occurred while getting the compliance data."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id); - @GET - @Path("{type}/{id}/active-policy") - public Response getDeviceActivePolicy(@PathParam("type") String type, - @PathParam("id") String id) { - try { - DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - org.wso2.carbon.policy.mgt.common.Policy policy = policyManagementService - .getAppliedPolicyToDevice(deviceIdentifier); - return Response.status(Response.Status.OK).entity(policy).build(); - } catch (PolicyManagementException e) { - String msg = "Error occurred while getting the current policy."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @GET + @Path("{type}/{id}/active-policy") + Response getDeviceActivePolicy(@PathParam("type") String type, @PathParam("id") String id); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java index c9e0748be0..182b1adbf6 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Profile.java @@ -18,13 +18,7 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; -import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.policy.mgt.core.PolicyManagerService; +import io.swagger.annotations.Api; import javax.ws.rs.DELETE; import javax.ws.rs.POST; @@ -32,55 +26,22 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Response; +/** + * These end points provide profile related operations. + */ +@Api(value = "Profile") @SuppressWarnings("NonJaxWsWebServices") -public class Profile { - private static Log log = LogFactory.getLog(Profile.class); +public interface Profile { + + @POST + Response addProfile(org.wso2.carbon.policy.mgt.common.Profile profile); + + @POST + @Path("{id}") + Response updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile, + @PathParam("id") String profileId); - @POST - public Response addProfile(org.wso2.carbon.policy.mgt.common.Profile profile) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - profile = pap.addProfile(profile); - return Response.status(Response.Status.OK).entity(profile).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } - @POST - @Path("{id}") - public Response updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile, - @PathParam("id") String profileId) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - pap.updateProfile(profile); - responseMsg.setMessageFromServer("Profile has been updated successfully."); - return Response.status(Response.Status.OK).entity(responseMsg).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } - @DELETE - @Path("{id}") - public Response deleteProfile(@PathParam("id") int profileId) { - PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); - ResponsePayload responseMsg = new ResponsePayload(); - try { - PolicyAdministratorPoint pap = policyManagementService.getPAP(); - org.wso2.carbon.policy.mgt.common.Profile profile = pap.getProfile(profileId); - pap.deleteProfile(profile); - responseMsg.setMessageFromServer("Profile has been deleted successfully."); - return Response.status(Response.Status.OK).entity(responseMsg).build(); - } catch (PolicyManagementException e) { - String msg = "Policy Management related exception"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @DELETE + @Path("{id}") + Response deleteProfile(@PathParam("id") int profileId); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java index c46f13bdb0..c6f9a9a2cf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Role.java @@ -18,25 +18,8 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.CarbonConstants; -import org.wso2.carbon.base.MultitenantConstants; -import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.jaxrs.beans.RoleWrapper; -import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer; -import org.wso2.carbon.user.api.AuthorizationManager; -import org.wso2.carbon.user.api.Permission; -import org.wso2.carbon.user.api.UserRealm; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.api.UserStoreManager; -import org.wso2.carbon.user.core.common.AbstractUserStoreManager; -import org.wso2.carbon.user.mgt.UserRealmProxy; -import org.wso2.carbon.user.mgt.common.UIPermissionNode; -import org.wso2.carbon.user.mgt.common.UserAdminException; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -48,393 +31,56 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -@SuppressWarnings("NonJaxWsWebServices") -public class Role { - - private static Log log = LogFactory.getLog(Role.class); +/** + * + */ +@Api(value = "Role") +public interface Role { - /** - * Get user roles (except all internal roles) from system. - * - * @return A list of users - */ @GET - @Produces({MediaType.APPLICATION_JSON}) - public Response getRoles() { - List filteredRoles; - try { - filteredRoles = getRolesFromUserStore(); - } catch (MDMAPIException e) { - log.error(e.getErrorMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All user roles were successfully retrieved."); - responsePayload.setResponseContent(filteredRoles); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + @Produces({ MediaType.APPLICATION_JSON}) + Response getRoles(); - /** - * Get user roles by user store(except all internal roles) from system. - * - * @return A list of users - */ @GET @Path("{userStore}") @Produces({MediaType.APPLICATION_JSON}) - public Response getRoles(@PathParam("userStore") String userStore) { - String[] roles; - try { - AbstractUserStoreManager abstractUserStoreManager = - (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); - if (log.isDebugEnabled()) { - log.debug("Getting the list of user roles"); - } - roles = abstractUserStoreManager.getRoleNames(userStore + "/*", -1, false, true, true); + Response getRoles(@PathParam("userStore") String userStore); - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of user roles."; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList<>(); - for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { - filteredRoles.add(role); - } - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All user roles were successfully retrieved."); - responsePayload.setResponseContent(filteredRoles); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } - - /** - * Get user roles by providing a filtering criteria(except all internal roles & system roles) from system. - * - * @return A list of users - */ @GET @Path("search") @Produces({MediaType.APPLICATION_JSON}) - public Response getMatchingRoles(@QueryParam("filter") String filter) { - String[] roles; - try { - AbstractUserStoreManager abstractUserStoreManager = - (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); - if (log.isDebugEnabled()) { - log.debug("Getting the list of user roles using filter : " + filter); - } - roles = abstractUserStoreManager.getRoleNames("*" + filter + "*", -1, true, true, true); - - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of user roles using the filter : " + filter; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList<>(); - for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { - filteredRoles.add(role); - } - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All matching user roles were successfully retrieved."); - responsePayload.setResponseContent(filteredRoles); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getMatchingRoles(@QueryParam("filter") String filter); - /** - * Get role permissions. - * - * @return list of permissions - */ @GET @Path("permissions") @Produces({MediaType.APPLICATION_JSON}) - public Response getPermissions(@QueryParam("rolename") String roleName) { - try { - final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); - org.wso2.carbon.user.core.UserRealm userRealmCore = null; - final UIPermissionNode rolePermissions; - if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { - userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; - } - final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); - rolePermissions = getUIPermissionNode(roleName, userRealmProxy); - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All permissions retrieved"); - responsePayload.setResponseContent(rolePermissions); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } catch (UserAdminException | MDMAPIException e) { - String msg = "Error occurred while retrieving the user role"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getPermissions(@QueryParam("rolename") String roleName); - /** - * Get user role of the system - * - * @return user role - */ @GET @Path("role") @Produces({MediaType.APPLICATION_JSON}) - public Response getRole(@QueryParam("rolename") String roleName) { - RoleWrapper roleWrapper = new RoleWrapper(); - try { - final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); - org.wso2.carbon.user.core.UserRealm userRealmCore = null; - if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { - userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; - } - - final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); - if (log.isDebugEnabled()) { - log.debug("Getting the list of user roles"); - } - if (userStoreManager.isExistingRole(roleName)) { - roleWrapper.setRoleName(roleName); - roleWrapper.setUsers(userStoreManager.getUserListOfRole(roleName)); - // Get the permission nodes and hand picking only device management and login perms - final UIPermissionNode rolePermissions = getUIPermissionNode(roleName, userRealmProxy); - ArrayList permList = new ArrayList<>(); - iteratePermissions(rolePermissions, permList); - roleWrapper.setPermissionList(rolePermissions); - String[] permListAr = new String[permList.size()]; - roleWrapper.setPermissions(permList.toArray(permListAr)); - } - } catch (UserStoreException | UserAdminException | MDMAPIException e) { - String msg = "Error occurred while retrieving the user role"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("All user roles were successfully retrieved."); - responsePayload.setResponseContent(roleWrapper); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getRole(@QueryParam("rolename") String roleName); - private UIPermissionNode getUIPermissionNode(String roleName, UserRealmProxy userRealmProxy) - throws UserAdminException { - final UIPermissionNode rolePermissions = - userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); - UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2]; - - for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) { - if (permissionNode.getResourcePath().equals("/permission/admin")) { - for (UIPermissionNode node : permissionNode.getNodeList()) { - if (node.getResourcePath().equals("/permission/admin/device-mgt")) { - deviceMgtPermissions[0] = node; - } else if (node.getResourcePath().equals("/permission/admin/login")) { - deviceMgtPermissions[1] = node; - } - } - } - } - rolePermissions.setNodeList(deviceMgtPermissions); - return rolePermissions; - } - - /** - * API is used to persist a new Role - * - * @param roleWrapper for role - * @return response - */ @POST @Produces({MediaType.APPLICATION_JSON}) - public Response addRole(RoleWrapper roleWrapper) { - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (log.isDebugEnabled()) { - log.debug("Persisting the role to user store"); - } - Permission[] permissions = null; - if (roleWrapper.getPermissions() != null && roleWrapper.getPermissions().length > 0) { - permissions = new Permission[roleWrapper.getPermissions().length]; + Response addRole(RoleWrapper roleWrapper); - for (int i = 0; i < permissions.length; i++) { - String permission = roleWrapper.getPermissions()[i]; - permissions[i] = new Permission(permission, CarbonConstants.UI_PERMISSION_ACTION); - } - } - userStoreManager.addRole(roleWrapper.getRoleName(), roleWrapper.getUsers(), permissions); - } catch (UserStoreException | MDMAPIException e) { - String msg = e.getMessage(); - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).build(); - } - - /** - * API is used to update a role Role - * - * @param roleWrapper for role - * @return response - */ @PUT @Produces({MediaType.APPLICATION_JSON}) - public Response updateRole(@QueryParam("rolename") String roleName, RoleWrapper roleWrapper) { - String newRoleName = roleWrapper.getRoleName(); - try { - final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); - if (log.isDebugEnabled()) { - log.debug("Updating the role to user store"); - } - if (newRoleName != null && !roleName.equals(newRoleName)) { - userStoreManager.updateRoleName(roleName, newRoleName); - } - if (roleWrapper.getUsers() != null) { - SetReferenceTransformer transformer = new SetReferenceTransformer<>(); - transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(newRoleName)), - Arrays.asList(roleWrapper.getUsers())); - final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer - .getObjectsToAdd().size()]); - final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer - .getObjectsToRemove().size()]); - userStoreManager.updateUserListOfRole(newRoleName, usersToDelete, usersToAdd); - } - if (roleWrapper.getPermissions() != null) { - // Delete all authorizations for the current role before authorizing the permission tree - authorizationManager.clearRoleAuthorization(roleName); - if (roleWrapper.getPermissions().length > 0) { - for (int i = 0; i < roleWrapper.getPermissions().length; i++) { - String permission = roleWrapper.getPermissions()[i]; - authorizationManager.authorizeRole(roleName, permission, CarbonConstants.UI_PERMISSION_ACTION); - } - } - } - } catch (UserStoreException | MDMAPIException e) { - String msg = e.getMessage(); - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).build(); - } + Response updateRole(@QueryParam("rolename") String roleName, RoleWrapper roleWrapper); - /** - * API is used to delete a role and authorizations - * - * @param roleName to delete - * @return response - */ @DELETE @Produces({MediaType.APPLICATION_JSON}) - public Response deleteRole(@QueryParam("rolename") String roleName) { - try { - final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); - if (log.isDebugEnabled()) { - log.debug("Deleting the role in user store"); - } - userStoreManager.deleteRole(roleName); - // Delete all authorizations for the current role before deleting - authorizationManager.clearRoleAuthorization(roleName); - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while deleting the role: " + roleName; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).build(); - } + Response deleteRole(@QueryParam("rolename") String roleName); - /** - * API is used to update users of a role - * - * @param roleName to update - * @param userList of the users - * @return response - */ @PUT @Path("users") @Produces({MediaType.APPLICATION_JSON}) - public Response updateUsers(@QueryParam("rolename") String roleName, List userList) { - try { - final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (log.isDebugEnabled()) { - log.debug("Updating the users of a role"); - } - SetReferenceTransformer transformer = new SetReferenceTransformer<>(); - transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(roleName)), - userList); - final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer - .getObjectsToAdd().size()]); - final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer - .getObjectsToRemove().size()]); - - userStoreManager.updateUserListOfRole(roleName, usersToDelete, usersToAdd); - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while saving the users of the role: " + roleName; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).build(); - } + Response updateUsers(@QueryParam("rolename") String roleName, List userList); - private ArrayList iteratePermissions(UIPermissionNode uiPermissionNode, ArrayList list) { - for (UIPermissionNode permissionNode : uiPermissionNode.getNodeList()) { - list.add(permissionNode.getResourcePath()); - if (permissionNode.getNodeList() != null && permissionNode.getNodeList().length > 0) { - iteratePermissions(permissionNode, list); - } - } - return list; - } - - /** - * This method is used to retrieve the role count of the system. - * - * @return returns the count. - */ @GET @Path("count") - public Response getRoleCount() { - try { - List filteredRoles = getRolesFromUserStore(); - Integer count = filteredRoles.size(); - return Response.status(Response.Status.OK).entity(count).build(); - } catch (MDMAPIException e) { - log.error(e.getErrorMessage(), e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); - } - } - - private List getRolesFromUserStore() throws MDMAPIException { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - String[] roles; - try { - if (log.isDebugEnabled()) { - log.debug("Getting the list of user roles"); - } - roles = userStoreManager.getRoleNames(); - - } catch (UserStoreException e) { - String msg = "Error occurred while retrieving the list of user roles."; - throw new MDMAPIException(msg, e); - } - // removing all internal roles and roles created for Service-providers - List filteredRoles = new ArrayList<>(); - for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { - filteredRoles.add(role); - } - } - return filteredRoles; - } + Response getRoleCount(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java index a64fae9cf3..c65eeb29d5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java @@ -18,27 +18,9 @@ package org.wso2.carbon.device.mgt.jaxrs.api; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.CarbonContext; -import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import io.swagger.annotations.Api; import org.wso2.carbon.device.mgt.jaxrs.beans.UserCredentialWrapper; import org.wso2.carbon.device.mgt.jaxrs.beans.UserWrapper; -import org.wso2.carbon.device.mgt.jaxrs.util.Constants; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.PaginationRequest; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo; -import org.wso2.carbon.device.mgt.jaxrs.api.util.CredentialManagementResponseBuilder; -import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; -import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; -import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.api.UserStoreManager; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -51,707 +33,84 @@ import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Random; -import java.util.TreeSet; /** - * This class represents the JAX-RS services of User related functionality. + * This represents the JAX-RS services of UserImpl related functionality. */ -@SuppressWarnings("NonJaxWsWebServices") -public class User { +@Api(value = "User") +public interface User { - private static final String ROLE_EVERYONE = "Internal/everyone"; - private static Log log = LogFactory.getLog(User.class); - - /** - * Method to add user to emm-user-store. - * - * @param userWrapper Wrapper object representing input json payload - * @return {Response} Status of the request wrapped inside Response object - */ @POST - @Consumes({MediaType.APPLICATION_JSON}) + @Consumes({ MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response addUser(UserWrapper userWrapper) { - ResponsePayload responsePayload = new ResponsePayload(); - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (userStoreManager.isExistingUser(userWrapper.getUsername())) { - // if user already exists - if (log.isDebugEnabled()) { - log.debug("User by username: " + userWrapper.getUsername() + - " already exists. Therefore, request made to add user was refused."); - } - // returning response with bad request state - responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); - responsePayload. - setMessageFromServer("User by username: " + userWrapper.getUsername() + - " already exists. Therefore, request made to add user was refused."); - return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); - } else { - String initialUserPassword = generateInitialUserPassword(); - Map defaultUserClaims = - buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(), - userWrapper.getEmailAddress()); - // calling addUser method of carbon user api - userStoreManager.addUser(userWrapper.getUsername(), initialUserPassword, - userWrapper.getRoles(), defaultUserClaims, null); - // invite newly added user to enroll device - inviteNewlyAddedUserToEnrollDevice(userWrapper.getUsername(), initialUserPassword); - // Outputting debug message upon successful addition of user - if (log.isDebugEnabled()) { - log.debug("User by username: " + userWrapper.getUsername() + " was successfully added."); - } - // returning response with success state - responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + - " was successfully added."); - return Response.status(Response.Status.CREATED).entity(responsePayload).build(); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Exception in trying to add user by username: " + userWrapper.getUsername(); - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response addUser(UserWrapper userWrapper); - /** - * Method to get user information from emm-user-store. - * - * @param username User-name of the user - * @return {Response} Status of the request wrapped inside Response object. - */ @GET @Path("view") @Produces({MediaType.APPLICATION_JSON}) - public Response getUser(@QueryParam("username") String username) { - ResponsePayload responsePayload = new ResponsePayload(); - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (userStoreManager.isExistingUser(username)) { - UserWrapper user = new UserWrapper(); - user.setUsername(username); - user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); - user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); - // Outputting debug message upon successful retrieval of user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " was found."); - } - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("User information was retrieved successfully."); - responsePayload.setResponseContent(user); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } else { - // Outputting debug message upon trying to remove non-existing user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " does not exist."); - } - // returning response with bad request state - responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer( - "User by username: " + username + " does not exist."); - return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Exception in trying to retrieve user by username: " + username; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getUser(@QueryParam("username") String username); - /** - * Update user in user store - * - * @param userWrapper Wrapper object representing input json payload - * @return {Response} Status of the request wrapped inside Response object. - */ @PUT @Consumes({MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_JSON}) - public Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username) { - ResponsePayload responsePayload = new ResponsePayload(); - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (userStoreManager.isExistingUser(userWrapper.getUsername())) { - Map defaultUserClaims = - buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(), - userWrapper.getEmailAddress()); - if (StringUtils.isNotEmpty(userWrapper.getPassword())) { - // Decoding Base64 encoded password - byte[] decodedBytes = Base64.decodeBase64(userWrapper.getPassword()); - userStoreManager.updateCredentialByAdmin(userWrapper.getUsername(), - new String(decodedBytes, "UTF-8")); - log.debug("User credential of username: " + userWrapper.getUsername() + " has been changed"); - } - List listofFilteredRoles = getFilteredRoles(userStoreManager, userWrapper.getUsername()); - final String[] existingRoles = listofFilteredRoles.toArray(new String[listofFilteredRoles.size()]); - - /* - Use the Set theory to find the roles to delete and roles to add - The difference of roles in existingRolesSet and newRolesSet needed to be deleted - new roles to add = newRolesSet - The intersection of roles in existingRolesSet and newRolesSet - */ - final TreeSet existingRolesSet = new TreeSet<>(); - Collections.addAll(existingRolesSet, existingRoles); - final TreeSet newRolesSet = new TreeSet<>(); - Collections.addAll(newRolesSet, userWrapper.getRoles()); - existingRolesSet.removeAll(newRolesSet); - // Now we have the roles to delete - String[] rolesToDelete = existingRolesSet.toArray(new String[existingRolesSet.size()]); - List roles = new ArrayList<>(Arrays.asList(rolesToDelete)); - roles.remove(ROLE_EVERYONE); - rolesToDelete = new String[0]; - // Clearing and re-initializing the set - existingRolesSet.clear(); - Collections.addAll(existingRolesSet, existingRoles); - newRolesSet.removeAll(existingRolesSet); - // Now we have the roles to add - String[] rolesToAdd = newRolesSet.toArray(new String[newRolesSet.size()]); - userStoreManager.updateRoleListOfUser(userWrapper.getUsername(), rolesToDelete, rolesToAdd); - userStoreManager.setUserClaimValues(userWrapper.getUsername(), defaultUserClaims, null); - // Outputting debug message upon successful addition of user - if (log.isDebugEnabled()) { - log.debug("User by username: " + userWrapper.getUsername() + " was successfully updated."); - } - // returning response with success state - responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + - " was successfully updated."); - return Response.status(Response.Status.CREATED).entity(responsePayload).build(); - } else { - if (log.isDebugEnabled()) { - log.debug("User by username: " + userWrapper.getUsername() + - " doesn't exists. Therefore, request made to update user was refused."); - } - // returning response with bad request state - responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); - responsePayload. - setMessageFromServer("User by username: " + userWrapper.getUsername() + - " doesn't exists. Therefore, request made to update user was refused."); - return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); - } - } catch (UserStoreException | UnsupportedEncodingException | MDMAPIException e) { - String msg = "Exception in trying to update user by username: " + userWrapper.getUsername(); - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } - - /** - * Private method to be used by addUser() to - * generate an initial user password for a user. - * This will be the password used by a user for his initial login to the system. - * - * @return {string} Initial User Password - */ - private String generateInitialUserPassword() { - int passwordLength = 6; - //defining the pool of characters to be used for initial password generation - String lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz"; - String upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String numericCharset = "0123456789"; - Random randomGenerator = new Random(); - String totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset; - int totalCharsetLength = totalCharset.length(); - StringBuilder initialUserPassword = new StringBuilder(); - for (int i = 0; i < passwordLength; i++) { - initialUserPassword - .append(totalCharset.charAt(randomGenerator.nextInt(totalCharsetLength))); - } - if (log.isDebugEnabled()) { - log.debug("Initial user password is created for new user: " + initialUserPassword); - } - return initialUserPassword.toString(); - } - - /** - * Method to build default user claims. - * - * @param firstname First name of the user - * @param lastname Last name of the user - * @param emailAddress Email address of the user - * @return {Object} Default user claims to be provided - */ - private Map buildDefaultUserClaims(String firstname, String lastname, String emailAddress) { - Map defaultUserClaims = new HashMap<>(); - defaultUserClaims.put(Constants.USER_CLAIM_FIRST_NAME, firstname); - defaultUserClaims.put(Constants.USER_CLAIM_LAST_NAME, lastname); - defaultUserClaims.put(Constants.USER_CLAIM_EMAIL_ADDRESS, emailAddress); - if (log.isDebugEnabled()) { - log.debug("Default claim map is created for new user: " + defaultUserClaims.toString()); - } - return defaultUserClaims; - } + Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username); - /** - * Method to remove user from emm-user-store. - * - * @param username Username of the user - * @return {Response} Status of the request wrapped inside Response object. - */ @DELETE @Produces({MediaType.APPLICATION_JSON}) - public Response removeUser(@QueryParam("username") String username) { - ResponsePayload responsePayload = new ResponsePayload(); - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (userStoreManager.isExistingUser(username)) { - // if user already exists, trying to remove user - userStoreManager.deleteUser(username); - // Outputting debug message upon successful removal of user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " was successfully removed."); - } - // returning response with success state - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer( - "User by username: " + username + " was successfully removed."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } else { - // Outputting debug message upon trying to remove non-existing user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " does not exist for removal."); - } - // returning response with bad request state - responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer( - "User by username: " + username + " does not exist for removal."); - return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Exception in trying to remove user by username: " + username; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response removeUser(@QueryParam("username") String username); - /** - * get all the roles except for the internal/xxx and application/xxx - * - * @param userStoreManager User Store Manager associated with the currently logged in user - * @param username Username of the currently logged in user - * @return the list of filtered roles - */ - private List getFilteredRoles(UserStoreManager userStoreManager, String username) { - String[] roleListOfUser = new String[0]; - try { - roleListOfUser = userStoreManager.getRoleListOfUser(username); - } catch (UserStoreException e) { - e.printStackTrace(); - } - List filteredRoles = new ArrayList<>(); - for (String role : roleListOfUser) { - if (!(role.startsWith("Internal/") || role.startsWith("Application/"))) { - filteredRoles.add(role); - } - } - return filteredRoles; - } - - /** - * Get user's roles by username - * - * @param username Username of the user - * @return {Response} Status of the request wrapped inside Response object. - */ @GET @Path("roles") @Produces({MediaType.APPLICATION_JSON}) - public Response getRoles(@QueryParam("username") String username) { - ResponsePayload responsePayload = new ResponsePayload(); - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (userStoreManager.isExistingUser(username)) { - responsePayload.setResponseContent(Collections.singletonList(getFilteredRoles(userStoreManager, username))); - // Outputting debug message upon successful removal of user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " was successfully removed."); - } - // returning response with success state - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer( - "User roles obtained for user " + username); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } else { - // Outputting debug message upon trying to remove non-existing user - if (log.isDebugEnabled()) { - log.debug("User by username: " + username + " does not exist for role retrieval."); - } - // returning response with bad request state - responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer( - "User by username: " + username + " does not exist for role retrieval."); - return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Exception in trying to retrieve roles for user by username: " + username; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getRoles(@QueryParam("username") String username); - /** - * Get the list of all users with all user-related info. - * - * @return A list of users - */ @GET @Produces({MediaType.APPLICATION_JSON}) - public Response getAllUsers() { - if (log.isDebugEnabled()) { - log.debug("Getting the list of users with all user-related information"); - } - List userList; - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - String[] users = userStoreManager.listUsers("*", -1); - userList = new ArrayList<>(users.length); - UserWrapper user; - for (String username : users) { - user = new UserWrapper(); - user.setUsername(username); - user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); - user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); - userList.add(user); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of users"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - int count; - count = userList.size(); - responsePayload.setMessageFromServer("All users were successfully retrieved. " + - "Obtained user count: " + count); - responsePayload.setResponseContent(userList); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getAllUsers(); - /** - * Get the list of all users with all user-related info. - * - * @return A list of users - */ @GET @Path("{filter}") @Produces({MediaType.APPLICATION_JSON}) - public Response getMatchingUsers(@PathParam("filter") String filter) { - if (log.isDebugEnabled()) { - log.debug("Getting the list of users with all user-related information using the filter : " + filter); - } - List userList; - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - String[] users = userStoreManager.listUsers(filter + "*", -1); - userList = new ArrayList<>(users.length); - UserWrapper user; - for (String username : users) { - user = new UserWrapper(); - user.setUsername(username); - user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); - user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); - userList.add(user); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of users using the filter : " + filter; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - int count; - count = userList.size(); - responsePayload.setMessageFromServer("All users were successfully retrieved. " + - "Obtained user count: " + count); - responsePayload.setResponseContent(userList); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getMatchingUsers(@PathParam("filter") String filter); - /** - * Get the list of user names in the system. - * - * @return A list of user names. - */ @GET @Path("view-users") - public Response getAllUsersByUsername(@QueryParam("username") String userName) { - if (log.isDebugEnabled()) { - log.debug("Getting the list of users by name"); - } - List userList; - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - String[] users = userStoreManager.listUsers("*" + userName + "*", -1); - userList = new ArrayList<>(users.length); - UserWrapper user; - for (String username : users) { - user = new UserWrapper(); - user.setUsername(username); - user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); - user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); - userList.add(user); - } - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of users"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - int count; - count = userList.size(); - responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + - "Obtained user count: " + count); - responsePayload.setResponseContent(userList); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response getAllUsersByUsername(@QueryParam("username") String userName); - /** - * Get the list of user names in the system. - * - * @return A list of user names. - */ @GET @Path("users-by-username") - public Response getAllUserNamesByUsername(@QueryParam("username") String userName) { - if (log.isDebugEnabled()) { - log.debug("Getting the list of users by name"); - } - List userList; - try { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - String[] users = userStoreManager.listUsers("*" + userName + "*", -1); - userList = new ArrayList<>(users.length); - Collections.addAll(userList, users); - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while retrieving the list of users"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - int count; - count = userList.size(); - responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + - "Obtained user count: " + count); - responsePayload.setResponseContent(userList); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } - - /** - * Gets a claim-value from user-store. - * - * @param username Username of the user - * @param claimUri required ClaimUri - * @return claim value - */ - private String getClaimValue(String username, String claimUri) throws MDMAPIException { - UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - try { - return userStoreManager.getUserClaimValue(username, claimUri, null); - } catch (UserStoreException e) { - throw new MDMAPIException("Error occurred while retrieving value assigned to the claim '" + - claimUri + "'", e); - } - } - - /** - * Method used to send an invitation email to a new user to enroll a device. - * - * @param username Username of the user - */ - private void inviteNewlyAddedUserToEnrollDevice(String username, String password) throws MDMAPIException { - if (log.isDebugEnabled()) { - log.debug("Sending invitation mail to user by username: " + username); - } - String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); - if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equalsIgnoreCase(tenantDomain)) { - tenantDomain = ""; - } - if (!username.contains("/")) { - username = "/" + username; - } - String[] usernameBits = username.split("/"); - DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); - - Properties props = new Properties(); - props.setProperty("username", usernameBits[1]); - props.setProperty("domain-name", tenantDomain); - props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - props.setProperty("password", password); - - String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS); + Response getAllUserNamesByUsername(@QueryParam("username") String userName); - EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); - try { - deviceManagementProviderService.sendRegistrationEmail(metaInfo); - } catch (DeviceManagementException e) { - String msg = "Error occurred while sending registration email to user '" + username + "'"; - log.error(msg, e); - throw new MDMAPIException(msg, e); - } - } - - /** - * Method used to send an invitation email to a existing user to enroll a device. - * - * @param usernames Username list of the users to be invited - */ @POST @Path("email-invitation") @Produces({MediaType.APPLICATION_JSON}) - public Response inviteExistingUsersToEnrollDevice(List usernames) { - if (log.isDebugEnabled()) { - log.debug("Sending enrollment invitation mail to existing user."); - } - DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); - try { - for (String username : usernames) { - String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS); - - Properties props = new Properties(); - props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); - props.setProperty("username", username); - - EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); - deviceManagementProviderService.sendEnrolmentInvitation(metaInfo); - } - } catch (DeviceManagementException | MDMAPIException e) { - String msg = "Error occurred while inviting user to enrol their device"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - ResponsePayload responsePayload = new ResponsePayload(); - responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("Email invitation was successfully sent to user."); - return Response.status(Response.Status.OK).entity(responsePayload).build(); - } + Response inviteExistingUsersToEnrollDevice(List usernames); - /** - * Get a list of devices based on the username. - * - * @param username Username of the device owner - * @return A list of devices - */ @GET @Produces({MediaType.APPLICATION_JSON}) @Path("devices") - public Response getAllDeviceOfUser(@QueryParam("username") String username, @QueryParam("start") int startIdx, - @QueryParam("length") int length) { - DeviceManagementProviderService dmService; - try { - dmService = DeviceMgtAPIUtils.getDeviceManagementService(); - if (length > 0) { - PaginationRequest request = new PaginationRequest(startIdx, length); - request.setOwner(username); - return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(request)).build(); - } - return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(username)).build(); - } catch (DeviceManagementException e) { - String msg = "Device management error"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + Response getAllDeviceOfUser(@QueryParam("username") String username, @QueryParam("start") int startIdx, + @QueryParam("length") int length); - /** - * This method is used to retrieve the user count of the system. - * - * @return returns the count. - * @ - */ @GET - @Path("count") - public Response getUserCount() { - try { - String[] users = DeviceMgtAPIUtils.getUserStoreManager().listUsers("*", -1); - Integer count = 0; - if (users != null) { - count = users.length; - } - return Response.status(Response.Status.OK).entity(count).build(); - } catch (UserStoreException | MDMAPIException e) { - String msg = - "Error occurred while retrieving the list of users that exist within the current tenant"; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } + @Path("count") + Response getUserCount(); - /** - * API is used to update roles of a user - * - * @param username - * @param userList - * @return - * @ - */ @PUT - @Path("{roleName}/users") - @Produces({MediaType.APPLICATION_JSON}) - public Response updateRoles(@PathParam("username") String username, List userList) { - try { - final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); - if (log.isDebugEnabled()) { - log.debug("Updating the roles of a user"); - } - SetReferenceTransformer transformer = new SetReferenceTransformer<>(); - transformer.transform(Arrays.asList(userStoreManager.getRoleListOfUser(username)), - userList); - final String[] rolesToAdd = transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); - final String[] rolesToDelete = transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); - - userStoreManager.updateRoleListOfUser(username, rolesToDelete, rolesToAdd); - } catch (UserStoreException | MDMAPIException e) { - String msg = "Error occurred while saving the roles for user: " + username; - log.error(msg, e); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - return Response.status(Response.Status.OK).build(); - } + @Path("{roleName}/users") + @Produces({MediaType.APPLICATION_JSON}) + Response updateRoles(@PathParam("username") String username, List userList); - /** - * Method to change the user password. - * - * @param credentials Wrapper object representing user credentials. - * @return {Response} Status of the request wrapped inside Response object. - * @ - */ @POST - @Path("change-password") - @Consumes({MediaType.APPLICATION_JSON}) - @Produces({MediaType.APPLICATION_JSON}) - public Response resetPassword(UserCredentialWrapper credentials) { - return CredentialManagementResponseBuilder.buildChangePasswordResponse(credentials); - } + @Path("change-password") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + Response resetPassword(UserCredentialWrapper credentials); - /** - * Method to change the user password. - * - * @param credentials Wrapper object representing user credentials. - * @return {Response} Status of the request wrapped inside Response object. - * @ - */ @POST - @Path("reset-password") - @Consumes({MediaType.APPLICATION_JSON}) - @Produces({MediaType.APPLICATION_JSON}) - public Response resetPasswordByAdmin(UserCredentialWrapper credentials) { - return CredentialManagementResponseBuilder.buildResetPasswordResponse(credentials); - } - -} \ No newline at end of file + @Path("reset-password") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + Response resetPasswordByAdmin(UserCredentialWrapper credentials); +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java new file mode 100644 index 0000000000..a78b863a79 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/AuthenticationImpl.java @@ -0,0 +1,36 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.ws.rs.Consumes; +import javax.ws.rs.Produces; + +/** + * AuthenticationImpl related REST-API implementation. + */ +@Produces({ "application/json", "application/xml" }) +@Consumes({ "application/json", "application/xml" }) +public class AuthenticationImpl { + + private static Log log = LogFactory.getLog(AuthenticationImpl.class); +} + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/CertificateImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/CertificateImpl.java new file mode 100644 index 0000000000..76689a3899 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/CertificateImpl.java @@ -0,0 +1,195 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.certificate.mgt.core.dao.CertificateManagementDAOException; +import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse; +import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; +import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.device.mgt.jaxrs.api.Certificate; +import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import org.wso2.carbon.device.mgt.common.PaginationRequest; +import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.beans.EnrollmentCertificate; +import org.wso2.carbon.device.mgt.jaxrs.exception.Message; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.List; + +/** + * All the certificate related tasks such as saving certificates, can be done through this endpoint. + */ +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) +@Consumes({ "application/json", "application/xml" }) +public class CertificateImpl implements Certificate{ + + private static Log log = LogFactory.getLog(OperationImpl.class); + + /** + * Save a list of certificates and relevant information in the database. + * + * @param enrollmentCertificates List of all the certificates which includes the tenant id, certificate as + * a pem and a serial number. + * @return Status of the data persist operation. + */ + @POST + @Path("saveCertificate") + public Response saveCertificate(@HeaderParam("Accept") String acceptHeader, + EnrollmentCertificate[] enrollmentCertificates) { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); + CertificateManagementService certificateService; + List certificates = new ArrayList<>(); + org.wso2.carbon.certificate.mgt.core.bean.Certificate certificate; + certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); + try { + for (EnrollmentCertificate enrollmentCertificate : enrollmentCertificates) { + certificate = new org.wso2.carbon.certificate.mgt.core.bean.Certificate(); + certificate.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId()); + certificate.setSerial(enrollmentCertificate.getSerial()); + certificate.setCertificate(certificateService.pemToX509Certificate(enrollmentCertificate.getPem())); + certificates.add(certificate); + } + certificateService.saveCertificate(certificates); + return Response.status(Response.Status.CREATED).entity("Added successfully."). + type(responseMediaType).build(); + } catch (KeystoreException e) { + String msg = "Error occurred while converting PEM file to X509Certificate."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); + } + } + + /** + * Get a certificate when the serial number is given. + * + * @param serialNumber serial of the certificate needed. + * @return certificate response. + */ + @GET + @Path("{serialNumber}") + public Response getCertificate(@HeaderParam("Accept") String acceptHeader, + @PathParam("serialNumber") String serialNumber) { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); + Message message = new Message(); + + if (serialNumber == null || serialNumber.isEmpty()) { + message.setErrorMessage("Invalid serial number"); + message.setDiscription("Serial number is missing or invalid."); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); + } + + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); + CertificateResponse certificateResponse; + try { + certificateResponse = certificateService.getCertificateBySerial(serialNumber); + if(certificateResponse != null) { + certificateResponse.setCertificate(null); //avoid sending byte array in response. + } + return Response.status(Response.Status.OK).entity(certificateResponse).type(responseMediaType).build(); + } catch (KeystoreException e) { + String msg = "Error occurred while converting PEM file to X509Certificate"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); + } + } + + /** + * Get all certificates in a paginated manner. + * + * @param startIndex index of the first record to be fetched + * @param length number of records to be fetched starting from the start index. + * @return paginated result of certificate. + * @throws MDMAPIException + */ + @GET + @Path("paginate") + public Response getAllCertificates(@HeaderParam("Accept") String acceptHeader, + @QueryParam("start") int startIndex, + @QueryParam("length") int length) + throws MDMAPIException { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); + Message message = new Message(); + + if (startIndex < 0) { + message.setErrorMessage("Invalid start index."); + message.setDiscription("Start index cannot be less that 0."); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); + } else if (length <= 0) { + message.setErrorMessage("Invalid length value."); + message.setDiscription("Length should be a positive integer."); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); + } + + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); + PaginationRequest paginationRequest = new PaginationRequest(startIndex, length); + try { + PaginationResult certificates = certificateService.getAllCertificates(paginationRequest); + return Response.status(Response.Status.OK).entity(certificates).type(responseMediaType).build(); + } catch (CertificateManagementDAOException e) { + String msg = "Error occurred while fetching all certificates."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); + } + } + + @DELETE + @Path("{serialNumber}") + public Response removeCertificate(@HeaderParam("Accept") String acceptHeader, + @PathParam("serialNumber") String serialNumber) throws MDMAPIException { + MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader); + Message message = new Message(); + + if (serialNumber == null || serialNumber.isEmpty()) { + message.setErrorMessage("Invalid serial number"); + message.setDiscription("Serial number is missing or invalid."); + return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build(); + } + + CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService(); + boolean deleted; + try { + deleted = certificateService.removeCertificate(serialNumber); + if(deleted){ + return Response.status(Response.Status.OK).entity(deleted).type(responseMediaType).build(); + } else { + return Response.status(Response.Status.GONE).entity(deleted).type(responseMediaType).build(); + } + } catch (CertificateManagementDAOException e) { + String msg = "Error occurred while converting PEM file to X509Certificate"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build(); + } + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ConfigurationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ConfigurationImpl.java new file mode 100644 index 0000000000..2fd37ea1c2 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ConfigurationImpl.java @@ -0,0 +1,113 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; +import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException; +import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration; +import org.wso2.carbon.device.mgt.jaxrs.api.Configuration; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAppConstants; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.List; + +/** + * General Tenant ConfigurationImpl REST-API implementation. + * All end points support JSON, XMl with content negotiation. + */ +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) +@Consumes({ "application/json", "application/xml" }) +public class ConfigurationImpl implements Configuration{ + + private static Log log = LogFactory.getLog(ConfigurationImpl.class); + + @POST + public Response saveTenantConfiguration(TenantConfiguration configuration) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, + MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + //Schedule the task service + DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); + responseMsg.setMessageFromServer("Tenant configuration saved successfully."); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ConfigurationManagementException e) { + String msg = "Error occurred while saving the tenant configuration."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @GET + public Response getConfiguration() { + String msg; + try { + TenantConfiguration tenantConfiguration = DeviceMgtAPIUtils.getTenantConfigurationManagementService(). + getConfiguration(MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + ConfigurationEntry configurationEntry = new ConfigurationEntry(); + configurationEntry.setContentType("text"); + configurationEntry.setName("notifierFrequency"); + configurationEntry.setValue(PolicyManagerUtil.getMonitoringFequency()); + List configList = tenantConfiguration.getConfiguration(); + if (configList == null) { + configList = new ArrayList<>(); + } + configList.add(configurationEntry); + tenantConfiguration.setConfiguration(configList); + return Response.status(Response.Status.OK).entity(tenantConfiguration).build(); + } catch (ConfigurationManagementException e) { + msg = "Error occurred while retrieving the tenant configuration."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @PUT + public Response updateConfiguration(TenantConfiguration configuration) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration, + MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH); + //Schedule the task service + DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration)); + responseMsg.setMessageFromServer("Tenant configuration updated successfully."); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ConfigurationManagementException e) { + String msg = "Error occurred while updating the tenant configuration."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java new file mode 100644 index 0000000000..3d3d10ac4e --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceImpl.java @@ -0,0 +1,285 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.Device; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +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.PaginationRequest; +import org.wso2.carbon.device.mgt.core.dto.DeviceType; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * DeviceImpl related operations + */ +@SuppressWarnings("NonJaxWsWebServices") +public class DeviceImpl implements Device{ + private static Log log = LogFactory.getLog(DeviceImpl.class); + + /** + * Get all devices. We have to use accept all the necessary query parameters sent by datatable. + * Hence had to put lot of query params here. + * + * @return DeviceImpl List + */ + @GET + public Response getAllDevices(@QueryParam("type") String type, @QueryParam("user") String user, + @QueryParam("role") String role, @QueryParam("status") EnrolmentInfo.Status status, + @QueryParam("start") int startIdx, @QueryParam("length") int length, + @QueryParam("device-name") String deviceName, + @QueryParam("ownership") EnrolmentInfo.OwnerShip ownership) { + try { + DeviceManagementProviderService service = DeviceMgtAPIUtils.getDeviceManagementService(); + //Length > 0 means this is a pagination request. + if (length > 0) { + PaginationRequest paginationRequest = new PaginationRequest(startIdx, length); + paginationRequest.setDeviceName(deviceName); + paginationRequest.setOwner(user); + if (ownership != null) { + paginationRequest.setOwnership(ownership.toString()); + } + if (status != null) { + paginationRequest.setStatus(status.toString()); + } + paginationRequest.setDeviceType(type); + return Response.status(Response.Status.OK).entity(service.getAllDevices(paginationRequest)).build(); + } + + List allDevices; + if ((type != null) && !type.isEmpty()) { + allDevices = service.getAllDevices(type); + } else if ((user != null) && !user.isEmpty()) { + allDevices = service.getDevicesOfUser(user); + } else if ((role != null) && !role.isEmpty()) { + allDevices = service.getAllDevicesOfRole(role); + } else if (status != null) { + allDevices = service.getDevicesByStatus(status); + } else if (deviceName != null) { + allDevices = service.getDevicesByName(deviceName); + } else { + allDevices = service.getAllDevices(); + } + return Response.status(Response.Status.OK).entity(allDevices).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the device list."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Fetch device details for a given device type and device Id. + * + * @return DeviceImpl wrapped inside Response + */ + @GET + @Path("view") + @Produces({MediaType.APPLICATION_JSON}) + public Response getDevice(@QueryParam("type") String type, + @QueryParam("id") String id) { + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); + org.wso2.carbon.device.mgt.common.Device device; + try { + device = deviceManagementProviderService.getDevice(deviceIdentifier); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the device information."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + if (device == null) { + responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); + responsePayload.setMessageFromServer("Requested device by type: " + + type + " and id: " + id + " does not exist."); + return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); + } else { + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Sending Requested device by type: " + type + " and id: " + id + "."); + responsePayload.setResponseContent(device); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + } + + /** + * Fetch device details of a given user. + * + * @param user UserImpl Name + * @return DeviceImpl + */ + @GET + @Path("user/{user}") + public Response getDevice(@PathParam("user") String user) { + List devices; + try { + devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesOfUser(user); + if (devices == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.status(Response.Status.OK).entity(devices).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the devices list of given user."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Fetch device count of a given user. + * + * @param user UserImpl Name + * @return DeviceImpl + */ + @GET + @Path("user/{user}/count") + public Response getDeviceCount(@PathParam("user") String user) { + try { + Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(user); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the devices list of given user."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Get current device count + * + * @return device count + */ + @GET + @Path("count") + public Response getDeviceCount() { + try { + Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the device count."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Get the list of devices that matches with the given name. + * + * @param deviceName DeviceImpl name + * @param tenantDomain Callee tenant domain + * @return list of devices. + */ + @GET + @Path("name/{name}/{tenantDomain}") + public Response getDevicesByName(@PathParam("name") String deviceName, + @PathParam("tenantDomain") String tenantDomain) { + List devices; + try { + devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesByName(deviceName); + return Response.status(Response.Status.OK).entity(devices).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the devices list of device name."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Get the list of available device types. + * + * @return list of device types. + */ + @GET + @Path("types") + public Response getDeviceTypes() { + List deviceTypes; + try { + deviceTypes = DeviceMgtAPIUtils.getDeviceManagementService().getAvailableDeviceTypes(); + return Response.status(Response.Status.OK).entity(deviceTypes).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the list of device types."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Update device. + * + * @return update status. + */ + @PUT + @Path("type/{type}/id/{deviceId}") + public Response updateDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId, + org.wso2.carbon.device.mgt.common.Device updatedDevice) { + try { + DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService(); + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setType(deviceType); + deviceIdentifier.setId(deviceId); + org.wso2.carbon.device.mgt.common.Device device = deviceManagementService.getDevice(deviceIdentifier); + device.setName(updatedDevice.getName()); + device.setDescription(updatedDevice.getDescription()); + Boolean response = deviceManagementService.modifyEnrollment(device); + return Response.status(Response.Status.OK).entity(response).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the list of device types."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * disenroll device. + * + * @return disenrollment status. + */ + @DELETE + @Path("type/{type}/id/{deviceId}") + public Response disenrollDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId) { + try { + DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService(); + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setType(deviceType); + deviceIdentifier.setId(deviceId); + Boolean response = deviceManagementService.disenrollDevice(deviceIdentifier); + return Response.status(Response.Status.OK).entity(response).build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while fetching the list of device types."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceInformationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceInformationImpl.java new file mode 100644 index 0000000000..17b59364f6 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceInformationImpl.java @@ -0,0 +1,81 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +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.device.details.mgt.DeviceDetailsMgtException; +import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; +import org.wso2.carbon.device.mgt.jaxrs.api.DeviceInformation; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +@SuppressWarnings("NonJaxWsWebServices") +public class DeviceInformationImpl implements DeviceInformation { + + private static Log log = LogFactory.getLog(DeviceInformationImpl.class); + + @GET + @Path("{type}/{id}") + public Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id) { + DeviceInformationManager informationManager; + DeviceInfo deviceInfo; + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(id); + deviceIdentifier.setType(type); + informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); + deviceInfo = informationManager.getDeviceInfo(deviceIdentifier); + } catch (DeviceDetailsMgtException e) { + String msg = "Error occurred while getting the device information."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(deviceInfo).build(); + } + + + @GET + @Path("location/{type}/{id}") + public Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id) { + DeviceInformationManager informationManager; + DeviceLocation deviceLocation; + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + deviceIdentifier.setId(id); + deviceIdentifier.setType(type); + informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService(); + deviceLocation = informationManager.getDeviceLocation(deviceIdentifier); + } catch (DeviceDetailsMgtException e) { + String msg = "Error occurred while getting the device location."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(deviceLocation).build(); + } +} + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceNotificationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceNotificationImpl.java new file mode 100644 index 0000000000..3fbf370117 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceNotificationImpl.java @@ -0,0 +1,110 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.DeviceNotification; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.common.notification.mgt.Notification; +import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * DeviceNotificationImpl management REST-API implementation. + * All end points support JSON, XMl with content negotiation. + */ +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) +@Consumes({ "application/json", "application/xml" }) +public class DeviceNotificationImpl implements DeviceNotification{ + + private static Log log = LogFactory.getLog(ConfigurationImpl.class); + + @GET + public Response getNotifications() { + String msg; + try { + List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getAllNotifications(); + return Response.status(Response.Status.OK).entity(notifications).build(); + } catch (NotificationManagementException e) { + msg = "Error occurred while retrieving the notification list."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @GET + @Path("{status}") + public Response getNotificationsByStatus(@PathParam("status") Notification.Status status) { + String msg; + try { + List notifications = DeviceMgtAPIUtils.getNotificationManagementService().getNotificationsByStatus(status); + return Response.status(Response.Status.OK).entity(notifications).build(); + } catch (NotificationManagementException e) { + msg = "Error occurred while retrieving the notification list."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @PUT + @Path("{id}/{status}") + public Response updateNotificationStatus(@PathParam("id") int id, + @PathParam("status") Notification.Status status) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getNotificationManagementService().updateNotificationStatus(id, status); + responseMsg.setMessageFromServer("Notification status updated successfully."); + responseMsg.setStatusCode(HttpStatus.SC_ACCEPTED); + return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build(); + } catch (NotificationManagementException e) { + String msg = "Error occurred while updating notification status."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @POST + public Response addNotification(Notification notification) { + ResponsePayload responseMsg = new ResponsePayload(); + try { + DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification); + responseMsg.setMessageFromServer("Notification has added successfully."); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (NotificationManagementException e) { + String msg = "Error occurred while updating notification status."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java new file mode 100644 index 0000000000..4582fa24d3 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/DeviceSearchImpl.java @@ -0,0 +1,56 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.common.device.details.DeviceWrapper; +import org.wso2.carbon.device.mgt.common.search.SearchContext; +import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService; +import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException; +import org.wso2.carbon.device.mgt.jaxrs.api.DeviceSearch; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; + +import javax.ws.rs.GET; +import javax.ws.rs.core.Response; +import java.util.List; + +@SuppressWarnings("NonJaxWsWebServices") +public class DeviceSearchImpl implements DeviceSearch { + + private static Log log = LogFactory.getLog(DeviceSearchImpl.class); + + @GET + public Response getDeviceInfo(SearchContext searchContext) { + SearchManagerService searchManagerService; + List devices; + try { + searchManagerService = DeviceMgtAPIUtils.getSearchManagerService(); + devices = searchManagerService.search(searchContext); + + } catch (SearchMgtException e) { + String msg = "Error occurred while searching the device information."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(devices).build(); + } +} + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/FeatureImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/FeatureImpl.java new file mode 100644 index 0000000000..924e59702e --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/FeatureImpl.java @@ -0,0 +1,66 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.Feature; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * Features + */ +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) +@Consumes({"application/json", "application/xml"}) +public class FeatureImpl implements Feature{ + private static Log log = LogFactory.getLog(FeatureImpl.class); + + /** + * Get all features for Mobile DeviceImpl Type + * + * @return FeatureImpl + */ + @GET + @Path("/{type}") + public Response getFeatures(@PathParam("type") String type) { + List features; + DeviceManagementProviderService dmService; + try { + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + features = dmService.getFeatureManager(type).getFeatures(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while retrieving the list of features"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(features).build(); + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/GroupImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/GroupImpl.java new file mode 100644 index 0000000000..52abdffdd0 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/GroupImpl.java @@ -0,0 +1,533 @@ +/* + * 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.api.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.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup; +import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException; +import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser; +import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService; +import org.wso2.carbon.device.mgt.jaxrs.api.Group; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.user.core.multiplecredentials.UserDoesNotExistException; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.FormParam; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import java.util.Date; +import java.util.List; + +@SuppressWarnings("NonJaxWsWebServices") +public class GroupImpl implements Group { + + private static Log log = LogFactory.getLog(GroupImpl.class); + + @Override + @POST + @Consumes("application/json") + public Response createGroup(DeviceGroup group) { + String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername(); + if (group == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + group.setOwner(owner); + group.setDateOfCreation(new Date().getTime()); + group.setDateOfLastUpdate(new Date().getTime()); + try { + GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); + groupManagementService.createGroup(group, DeviceGroupConstants.Roles.DEFAULT_ADMIN_ROLE, DeviceGroupConstants.Permissions.DEFAULT_ADMIN_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, + DeviceGroupConstants.Roles.DEFAULT_OPERATOR_ROLE, + DeviceGroupConstants.Permissions.DEFAULT_OPERATOR_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_STATS_MONITOR_ROLE, + DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_POLICIES, + DeviceGroupConstants.Permissions.DEFAULT_VIEW_POLICIES_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_MANAGE_POLICIES, + DeviceGroupConstants.Permissions.DEFAULT_MANAGE_POLICIES_PERMISSIONS); + groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_EVENTS, + DeviceGroupConstants.Permissions.DEFAULT_VIEW_EVENTS_PERMISSIONS); + return Response.status(Response.Status.CREATED).build(); + } catch (GroupAlreadyEixistException e) { + return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}") + @PUT + @Consumes("application/json") + @Produces("application/json") + public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + DeviceGroup deviceGroup) { + try { + DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner); + return Response.status(Response.Status.OK).build(); + } catch (GroupManagementException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}") + @DELETE + public Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + DeviceMgtAPIUtils.getGroupManagementProviderService().deleteGroup(groupName, owner); + return Response.status(Response.Status.OK).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage()); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Produces("application/json") + public Response getGroups(@QueryParam("start") int startIndex, @PathParam("length") int length) { + try { + PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getGroups(startIndex, length); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/all") + @GET + @Produces("application/json") + public Response getAllGroups() { + try { + GroupManagementProviderService groupManagementProviderService = DeviceMgtAPIUtils + .getGroupManagementProviderService(); + PaginationResult paginationResult = groupManagementProviderService + .getGroups(0, groupManagementProviderService.getGroupCount()); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult.getData()).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/user/{user}") + @GET + @Produces("application/json") + public Response getGroups(@PathParam("user") String userName, @QueryParam("start") int startIndex, + @QueryParam("length") int length) { + try { + PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getGroups(userName, startIndex, length); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/user/{user}/all") + @GET + @Produces("application/json") + public Response getGroups(@PathParam("user") String userName) { + try { + List deviceGroups = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getGroups(userName); + if (deviceGroups.size() > 0) { + return Response.status(Response.Status.OK).entity(deviceGroups).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}") + @GET + @Produces("application/json") + public Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + DeviceGroup deviceGroup = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroup(groupName, owner); + if (deviceGroup != null) { + return Response.status(Response.Status.OK).entity(deviceGroup).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/user/{user}/search") + @GET + @Produces("application/json") + public Response findGroups(@QueryParam("groupName") String groupName, @PathParam("user") String user) { + try { + List groups = DeviceMgtAPIUtils.getGroupManagementProviderService() + .findInGroups(groupName, user); + DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; + groups.toArray(deviceGroups); + return Response.status(Response.Status.OK).entity(deviceGroups).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/user/{user}/all") + @GET + @Produces("application/json") + public Response getGroups(@PathParam("user") String userName, @QueryParam("permission") String permission) { + try { + GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService(); + List groups; + if (permission != null) { + groups = groupManagementService.getGroups(userName, permission); + } else { + groups = groupManagementService.getGroups(userName); + } + DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()]; + groups.toArray(deviceGroups); + return Response.status(Response.Status.OK).entity(deviceGroups).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/count") + @GET + @Produces("application/json") + public Response getAllGroupCount() { + try { + int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/user/{user}/count") + @GET + @Produces("application/json") + public Response getGroupCount(@PathParam("user") String userName) { + try { + int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(userName); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}/share") + @PUT + @Produces("application/json") + public Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("shareUser") String shareUser, + @FormParam("roleName") String sharingRole) { + + try { + boolean isShared = DeviceMgtAPIUtils.getGroupManagementProviderService().shareGroup( + shareUser, groupName, owner, sharingRole); + if (isShared) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).entity("GroupImpl not found").build(); + } + } catch (UserDoesNotExistException e) { + return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}/unshare") + @PUT + @Produces("application/json") + public Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @FormParam("unShareUser") String unShareUser, + @FormParam("roleName") String sharingRole) { + try { + boolean isUnShared = DeviceMgtAPIUtils.getGroupManagementProviderService().unshareGroup( + unShareUser, groupName, owner, sharingRole); + if (isUnShared) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).entity("GroupImpl not found").build(); + } + } catch (UserDoesNotExistException e) { + return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions") + @PUT + @Produces("application/json") + public Response addSharing(@QueryParam("shareUser") String shareUser, + @PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("roleName") String roleName, + @FormParam("permissions") String[] permissions) { + + try { + boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addGroupSharingRole( + shareUser, groupName, owner, roleName, permissions); + if (isAdded) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @DELETE + @Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions") + @Produces("application/json") + public Response removeSharing(@QueryParam("userName") String userName, + @PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("roleName") String roleName) { + try { + boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeGroupSharingRole( + groupName, owner, roleName); + if (isRemoved) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Path("/owner/{owner}/name/{groupName}/share/roles") + @Produces("application/json") + public Response getRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @QueryParam("userName") String userName) { + try { + List roles; + if (userName != null && !userName.isEmpty()) { + roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(userName, groupName, owner); + } else { + roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner); + } + String[] rolesArray = new String[roles.size()]; + roles.toArray(rolesArray); + return Response.status(Response.Status.OK).entity(rolesArray).build(); + } catch (UserDoesNotExistException e) { + return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @PUT + @Path("/owner/{owner}/name/{groupName}/user/{userName}/share/roles") + @Produces("application/json") + public Response setRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("userName") String userName, List selectedRoles) { + try { + List allRoles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner); + for (String role : allRoles) { + if (selectedRoles.contains(role)) { + DeviceMgtAPIUtils.getGroupManagementProviderService() + .shareGroup(userName, groupName, owner, role); + } else { + DeviceMgtAPIUtils.getGroupManagementProviderService() + .unshareGroup(userName, groupName, owner, role); + } + } + return Response.status(Response.Status.OK).build(); + } catch (UserDoesNotExistException e) { + return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Path("/owner/{owner}/name/{groupName}/users") + @Produces("application/json") + public Response getUsers(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + List users = DeviceMgtAPIUtils.getGroupManagementProviderService().getUsers( + groupName, owner); + GroupUser[] usersArray = new GroupUser[users.size()]; + users.toArray(usersArray); + return Response.status(Response.Status.OK).entity(usersArray).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Path("/owner/{owner}/name/{groupName}/devices") + @Produces("application/json") + public Response getDevices(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @QueryParam("start") int startIdx, @QueryParam("length") int length) { + try { + PaginationResult paginationResult = DeviceMgtAPIUtils + .getGroupManagementProviderService().getDevices(groupName, owner, startIdx, length); + if (paginationResult.getRecordsTotal() > 0) { + return Response.status(Response.Status.OK).entity(paginationResult).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Path("/owner/{owner}/name/{groupName}/devices/count") + @Produces("application/json") + public Response getDeviceCount(@PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getDeviceCount(groupName, owner); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @POST + @Path("/owner/{owner}/name/{groupName}/devices") + @Produces("application/json") + public Response addDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + DeviceIdentifier deviceIdentifier) { + try { + boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addDevice( + deviceIdentifier, groupName, owner); + if (isAdded) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @DELETE + @Path("/owner/{owner}/name/{groupName}/devices/{deviceType}/{deviceId}") + @Produces("application/json") + public Response removeDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner, + @PathParam("deviceId") String deviceId, + @PathParam("deviceType") String deviceType) { + try { + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType); + boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeDevice( + deviceIdentifier, groupName, owner); + if (isRemoved) { + return Response.status(Response.Status.OK).build(); + } else { + return Response.status(Response.Status.NOT_FOUND).build(); + } + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + + @Override + @GET + @Path("/owner/{owner}/name/{groupName}/users/{userName}/permissions") + @Produces("application/json") + public Response getPermissions(@PathParam("userName") String userName, + @PathParam("groupName") String groupName, @PathParam("owner") String owner) { + try { + String[] permissions = DeviceMgtAPIUtils.getGroupManagementProviderService() + .getPermissions(userName, groupName, owner); + return Response.status(Response.Status.OK).entity(permissions).build(); + } catch (UserDoesNotExistException e) { + return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build(); + } catch (GroupManagementException e) { + log.error(e.getMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); + } + } + +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/LicenseImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/LicenseImpl.java new file mode 100644 index 0000000000..c63161d857 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/LicenseImpl.java @@ -0,0 +1,102 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.License; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; + +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +/** + * This class represents license related operations. + */ +@SuppressWarnings("NonJaxWsWebServices") +public class LicenseImpl implements License { + + private static Log log = LogFactory.getLog(LicenseImpl.class); + + /** + * This method returns the license text related to a given device type and language code. + * + * @param deviceType DeviceImpl type, ex: android, ios + * @param languageCode Language code, ex: en_US + * @return Returns the license text + */ + @GET + @Path ("{deviceType}/{languageCode}") + @Produces ({MediaType.APPLICATION_JSON}) + public Response getLicense(@PathParam ("deviceType") String deviceType, + @PathParam("languageCode") String languageCode) { + + org.wso2.carbon.device.mgt.common.license.mgt.License license; + ResponsePayload responsePayload; + try { + license = DeviceMgtAPIUtils.getDeviceManagementService().getLicense(deviceType, languageCode); + if (license == null) { + return Response.status(HttpStatus.SC_NOT_FOUND).build(); + } + responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK). + messageFromServer("LicenseImpl for '" + deviceType + "' was retrieved successfully"). + responseContent(license.getText()). + build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while retrieving the license configured for '" + deviceType + "' device type"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * This method is used to add license to a specific device type. + * + * @param deviceType DeviceImpl type, ex: android, ios + * @param license LicenseImpl object + * @return Returns the acknowledgement for the action + */ + @POST + @Path ("{deviceType}") + public Response addLicense(@PathParam ("deviceType") String deviceType, + org.wso2.carbon.device.mgt.common.license.mgt.License license) { + + ResponsePayload responsePayload; + try { + DeviceMgtAPIUtils.getDeviceManagementService().addLicense(deviceType, license); + responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK). + messageFromServer("LicenseImpl added successfully for '" + deviceType + "' device type"). + build(); + } catch (DeviceManagementException e) { + String msg = "Error occurred while adding license for '" + deviceType + "' device type"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java new file mode 100644 index 0000000000..89ccd6af36 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/OperationImpl.java @@ -0,0 +1,227 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import org.wso2.carbon.device.mgt.jaxrs.api.context.DeviceOperationContext; +import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMIOSOperationUtil; +import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper; +import org.wso2.carbon.device.mgt.jaxrs.beans.MobileApp; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.common.PaginationRequest; +import org.wso2.carbon.device.mgt.common.PaginationResult; +import org.wso2.carbon.device.mgt.common.Platform; +import org.wso2.carbon.device.mgt.common.app.mgt.Application; +import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException; +import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager; +import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; +import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAndroidOperationUtil; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * OperationImpl related REST-API implementation. + */ +@SuppressWarnings("NonJaxWsWebServices") +@Produces({"application/json", "application/xml"}) +@Consumes({"application/json", "application/xml"}) +public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Operation { + + private static Log log = LogFactory.getLog(OperationImpl.class); + + /* @deprecated */ + @Override + @GET + public Response getAllOperations() { + List operations; + DeviceManagementProviderService dmService; + try { + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + operations = dmService.getOperations(null); + } catch (OperationManagementException e) { + String msg = "Error occurred while fetching the operations for the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(operations).build(); + } + + @Override + @GET + @Path("paginate/{type}/{id}") + public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id, + @QueryParam("start") int startIdx, @QueryParam("length") int length, + @QueryParam("search") String search) { + PaginationResult operations; + DeviceManagementProviderService dmService; + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + PaginationRequest paginationRequest = new PaginationRequest(startIdx, length); + try { + deviceIdentifier.setType(type); + deviceIdentifier.setId(id); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + operations = dmService.getOperations(deviceIdentifier, paginationRequest); + } catch (OperationManagementException e) { + String msg = "Error occurred while fetching the operations for the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(operations).build(); + } + + @Override + @GET + @Path("{type}/{id}") + public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) { + List operations; + DeviceManagementProviderService dmService; + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + try { + deviceIdentifier.setType(type); + deviceIdentifier.setId(id); + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + operations = dmService.getOperations(deviceIdentifier); + } catch (OperationManagementException e) { + String msg = "Error occurred while fetching the operations for the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).entity(operations).build(); + } + + /* @deprecated */ + @Override + @POST + public Response addOperation(DeviceOperationContext operationContext) { + DeviceManagementProviderService dmService; + ResponsePayload responseMsg = new ResponsePayload(); + try { + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + int operationId = dmService.addOperation(operationContext.getOperation(), operationContext.getDevices()); + if (operationId > 0) { + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + responseMsg.setMessageFromServer("OperationImpl has added successfully."); + } + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (OperationManagementException e) { + String msg = "Error occurred while saving the operation"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @GET + @Path("{type}/{id}/apps") + public Response getInstalledApps(@PathParam("type") String type, @PathParam("id") String id) { + List applications; + ApplicationManagementProviderService appManagerConnector; + DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); + try { + deviceIdentifier.setType(type); + deviceIdentifier.setId(id); + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); + applications = appManagerConnector.getApplicationListForDevice(deviceIdentifier); + } catch (ApplicationManagementException e) { + String msg = "Error occurred while fetching the apps of the device."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.CREATED).entity(applications).build(); + } + + @Override + @POST + @Path("installApp/{tenantDomain}") + public Response installApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain) { + ResponsePayload responseMsg = new ResponsePayload(); + ApplicationManager appManagerConnector; + org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; + try { + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); + MobileApp mobileApp = applicationWrapper.getApplication(); + + if (applicationWrapper.getDeviceIdentifiers() != null) { + for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { + if (deviceIdentifier.getType().equals(Platform.android.toString())) { + operation = MDMAndroidOperationUtil.createInstallAppOperation(mobileApp); + } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { + operation = MDMIOSOperationUtil.createInstallAppOperation(mobileApp); + } + } + appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); + } + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + responseMsg.setMessageFromServer("AuthenticationImpl installation request has been sent to the device."); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ApplicationManagementException | MDMAPIException e) { + String msg = "Error occurred while saving the operation"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @POST + @Path("uninstallApp/{tenantDomain}") + public Response uninstallApplication(ApplicationWrapper applicationWrapper, + @PathParam("tenantDomain") String tenantDomain) { + ResponsePayload responseMsg = new ResponsePayload(); + ApplicationManager appManagerConnector; + org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null; + try { + appManagerConnector = DeviceMgtAPIUtils.getAppManagementService(); + MobileApp mobileApp = applicationWrapper.getApplication(); + + if (applicationWrapper.getDeviceIdentifiers() != null) { + for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) { + if (deviceIdentifier.getType().equals(Platform.android.toString())) { + operation = MDMAndroidOperationUtil.createAppUninstallOperation(mobileApp); + } else if (deviceIdentifier.getType().equals(Platform.ios.toString())) { + operation = MDMIOSOperationUtil.createAppUninstallOperation(mobileApp); + } + } + appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); + } + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + responseMsg.setMessageFromServer("AuthenticationImpl removal request has been sent to the device."); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (ApplicationManagementException | MDMAPIException e) { + String msg = "Error occurred while saving the operation"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java new file mode 100644 index 0000000000..2a3049a6b8 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java @@ -0,0 +1,445 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.beans.PriorityUpdatedPolicyWrapper; +import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil; +import org.wso2.carbon.device.mgt.common.DeviceIdentifier; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import org.wso2.carbon.device.mgt.jaxrs.beans.PolicyWrapper; +import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; +import org.wso2.carbon.policy.mgt.common.PolicyManagementException; +import org.wso2.carbon.policy.mgt.common.PolicyMonitoringTaskException; +import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData; +import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException; +import org.wso2.carbon.policy.mgt.core.PolicyManagerService; +import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.List; + +@SuppressWarnings("NonJaxWsWebServices") +public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { + private static Log log = LogFactory.getLog(PolicyImpl.class); + + @Override + @POST + @Path("inactive-policy") + public Response addPolicy(PolicyWrapper policyWrapper) { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); + org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); + policy.setPolicyName(policyWrapper.getPolicyName()); + policy.setProfileId(policyWrapper.getProfileId()); + policy.setDescription(policyWrapper.getDescription()); + policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); + policy.setOwnershipType(policyWrapper.getOwnershipType()); + policy.setRoles(policyWrapper.getRoles()); + policy.setUsers(policyWrapper.getUsers()); + policy.setTenantId(policyWrapper.getTenantId()); + policy.setCompliance(policyWrapper.getCompliance()); + + return addPolicy(policyManagementService, responseMsg, policy); + } + + @Override + @POST + @Path("active-policy") + public Response addActivePolicy(PolicyWrapper policyWrapper) { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); + org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); + policy.setPolicyName(policyWrapper.getPolicyName()); + policy.setProfileId(policyWrapper.getProfileId()); + policy.setDescription(policyWrapper.getDescription()); + policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); + policy.setOwnershipType(policyWrapper.getOwnershipType()); + policy.setRoles(policyWrapper.getRoles()); + policy.setUsers(policyWrapper.getUsers()); + policy.setTenantId(policyWrapper.getTenantId()); + policy.setCompliance(policyWrapper.getCompliance()); + policy.setActive(true); + + return addPolicy(policyManagementService, responseMsg, policy); + } + + private Response addPolicy(PolicyManagerService policyManagementService, ResponsePayload responseMsg, + org.wso2.carbon.policy.mgt.common.Policy policy) { + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + pap.addPolicy(policy); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + responseMsg.setMessageFromServer("PolicyImpl has been added successfully."); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @GET + @Produces({MediaType.APPLICATION_JSON}) + public Response getAllPolicies() { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + List policies; + try { + PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); + policies = policyAdministratorPoint.getPolicies(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Sending all retrieved device policies."); + responsePayload.setResponseContent(policies); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("{id}") + public Response getPolicy(@PathParam("id") int policyId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + final org.wso2.carbon.policy.mgt.common.Policy policy; + try { + PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); + policy = policyAdministratorPoint.getPolicy(policyId); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + if (policy == null){ + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); + responsePayload.setMessageFromServer("PolicyImpl for ID " + policyId + " not found."); + return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Sending all retrieved device policies."); + responsePayload.setResponseContent(policy); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Path("count") + public Response getPolicyCount() { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { + PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); + Integer count = policyAdministratorPoint.getPolicyCount(); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @PUT + @Path("{id}") + public Response updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId) { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); + org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy(); + policy.setPolicyName(policyWrapper.getPolicyName()); + policy.setId(policyId); + policy.setProfileId(policyWrapper.getProfileId()); + policy.setDescription(policyWrapper.getDescription()); + policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile())); + policy.setOwnershipType(policyWrapper.getOwnershipType()); + policy.setRoles(policyWrapper.getRoles()); + policy.setUsers(policyWrapper.getUsers()); + policy.setTenantId(policyWrapper.getTenantId()); + policy.setCompliance(policyWrapper.getCompliance()); + + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + pap.updatePolicy(policy); + responseMsg.setStatusCode(HttpStatus.SC_CREATED); + responseMsg.setMessageFromServer("PolicyImpl has been updated successfully."); + return Response.status(Response.Status.CREATED).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception in policy update."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @PUT + @Path("priorities") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response updatePolicyPriorities(List priorityUpdatedPolicies) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + List policiesToUpdate = + new ArrayList<>(priorityUpdatedPolicies.size()); + int i; + for (i = 0; i < priorityUpdatedPolicies.size(); i++) { + org.wso2.carbon.policy.mgt.common.Policy policyObj = new org.wso2.carbon.policy.mgt.common.Policy(); + policyObj.setId(priorityUpdatedPolicies.get(i).getId()); + policyObj.setPriorityId(priorityUpdatedPolicies.get(i).getPriority()); + policiesToUpdate.add(policyObj); + } + boolean policiesUpdated; + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + policiesUpdated = pap.updatePolicyPriorities(policiesToUpdate); + } catch (PolicyManagementException e) { + String msg = "Exception in updating policy priorities."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + if (policiesUpdated) { + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("PolicyImpl Priorities successfully updated."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } else { + responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); + responsePayload.setMessageFromServer("PolicyImpl priorities did not update. Bad Request."); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); + } + } + + @Override + @POST + @Path("bulk-remove") + @Consumes("application/json") + @Produces("application/json") + public Response bulkRemovePolicy(List policyIds) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + boolean policyDeleted = true; + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + for(int i : policyIds) { + org.wso2.carbon.policy.mgt.common.Policy policy = pap.getPolicy(i); + if(!pap.deletePolicy(policy)){ + policyDeleted = false; + } + } + } catch (PolicyManagementException e) { + String msg = "Exception in deleting policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + if (policyDeleted) { + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Policies have been successfully deleted."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } else { + responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); + responsePayload.setMessageFromServer("PolicyImpl does not exist."); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); + } + } + + @Override + @PUT + @Produces("application/json") + @Path("activate") + public Response activatePolicy(List policyIds) { + try { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + for(int i : policyIds) { + pap.activatePolicy(i); + } + } catch (PolicyManagementException e) { + String msg = "Exception in activating policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Selected policies have been successfully activated."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @PUT + @Produces("application/json") + @Path("inactivate") + public Response inactivatePolicy(List policyIds) throws MDMAPIException { + + try { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + for(int i : policyIds) { + pap.inactivatePolicy(i); + } + } catch (PolicyManagementException e) { + String msg = "Exception in inactivating policies."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Selected policies have been successfully inactivated."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @PUT + @Produces("application/json") + @Path("apply-changes") + public Response applyChanges() { + + try { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + pap.publishChanges(); + + + } catch (PolicyManagementException e) { + String msg = "Exception in applying changes."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Changes have been successfully updated."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Path("start-task/{milliseconds}") + public Response startTaskService(@PathParam("milliseconds") int monitoringFrequency) { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { + TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); + taskScheduleService.startTask(monitoringFrequency); + + + } catch (PolicyMonitoringTaskException e) { + String msg = "PolicyImpl Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("PolicyImpl monitoring service started successfully."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Path("update-task/{milliseconds}") + public Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency) { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { + TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); + taskScheduleService.updateTask(monitoringFrequency); + + } catch (PolicyMonitoringTaskException e) { + String msg = "PolicyImpl Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("PolicyImpl monitoring service updated successfully."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Path("stop-task") + public Response stopTaskService() { + + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { + TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService(); + taskScheduleService.stopTask(); + + } catch (PolicyMonitoringTaskException e) { + String msg = "PolicyImpl Management related exception."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("PolicyImpl monitoring service stopped successfully."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + @Override + @GET + @Path("{type}/{id}") + public Response getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id) { + try { + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ComplianceData complianceData = policyManagementService.getDeviceCompliance(deviceIdentifier); + return Response.status(Response.Status.OK).entity(complianceData).build(); + } catch (PolicyComplianceException e) { + String msg = "Error occurred while getting the compliance data."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + @Override + @GET + @Path("{type}/{id}/active-policy") + public Response getDeviceActivePolicy(@PathParam("type") String type, @PathParam("id") String id) { + try { + DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id); + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + org.wso2.carbon.policy.mgt.common.Policy policy = policyManagementService + .getAppliedPolicyToDevice(deviceIdentifier); + return Response.status(Response.Status.OK).entity(policy).build(); + } catch (PolicyManagementException e) { + String msg = "Error occurred while getting the current policy."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java new file mode 100644 index 0000000000..dff753e7d6 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java @@ -0,0 +1,87 @@ +/* + * 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.api.impl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.device.mgt.jaxrs.api.Profile; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint; +import org.wso2.carbon.policy.mgt.common.PolicyManagementException; +import org.wso2.carbon.policy.mgt.core.PolicyManagerService; + +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +@SuppressWarnings("NonJaxWsWebServices") +public class ProfileImpl implements Profile{ + private static Log log = LogFactory.getLog(ProfileImpl.class); + + @POST + public Response addProfile(org.wso2.carbon.policy.mgt.common.Profile profile) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + profile = pap.addProfile(profile); + return Response.status(Response.Status.OK).entity(profile).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + @POST + @Path("{id}") + public Response updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile, + @PathParam("id") String profileId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + pap.updateProfile(profile); + responseMsg.setMessageFromServer("ProfileImpl has been updated successfully."); + return Response.status(Response.Status.OK).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + @DELETE + @Path("{id}") + public Response deleteProfile(@PathParam("id") int profileId) { + PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService(); + ResponsePayload responseMsg = new ResponsePayload(); + try { + PolicyAdministratorPoint pap = policyManagementService.getPAP(); + org.wso2.carbon.policy.mgt.common.Profile profile = pap.getProfile(profileId); + pap.deleteProfile(profile); + responseMsg.setMessageFromServer("ProfileImpl has been deleted successfully."); + return Response.status(Response.Status.OK).entity(responseMsg).build(); + } catch (PolicyManagementException e) { + String msg = "PolicyImpl Management related exception"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java new file mode 100644 index 0000000000..0a187945fd --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java @@ -0,0 +1,450 @@ +/* + * 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.api.impl; + +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.CarbonConstants; +import org.wso2.carbon.base.MultitenantConstants; +import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import org.wso2.carbon.device.mgt.jaxrs.beans.RoleWrapper; +import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer; +import org.wso2.carbon.user.api.AuthorizationManager; +import org.wso2.carbon.user.api.Permission; +import org.wso2.carbon.user.api.UserRealm; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.user.core.common.AbstractUserStoreManager; +import org.wso2.carbon.user.mgt.UserRealmProxy; +import org.wso2.carbon.user.mgt.common.UIPermissionNode; +import org.wso2.carbon.user.mgt.common.UserAdminException; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@SuppressWarnings("NonJaxWsWebServices") +public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { + + private static Log log = LogFactory.getLog(RoleImpl.class); + + /** + * Get user roles (except all internal roles) from system. + * + * @return A list of users + */ + @Override + @GET + @Produces({MediaType.APPLICATION_JSON}) + public Response getRoles() { + List filteredRoles; + try { + filteredRoles = getRolesFromUserStore(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All user roles were successfully retrieved."); + responsePayload.setResponseContent(filteredRoles); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get user roles by user store(except all internal roles) from system. + * + * @return A list of users + */ + @Override + @GET + @Path("{userStore}") + @Produces({MediaType.APPLICATION_JSON}) + public Response getRoles(@PathParam("userStore") String userStore) { + String[] roles; + try { + AbstractUserStoreManager abstractUserStoreManager = + (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); + if (log.isDebugEnabled()) { + log.debug("Getting the list of user roles"); + } + roles = abstractUserStoreManager.getRoleNames(userStore + "/*", -1, false, true, true); + + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of user roles."; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + // removing all internal roles and roles created for Service-providers + List filteredRoles = new ArrayList<>(); + for (String role : roles) { + if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + filteredRoles.add(role); + } + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All user roles were successfully retrieved."); + responsePayload.setResponseContent(filteredRoles); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get user roles by providing a filtering criteria(except all internal roles & system roles) from system. + * + * @return A list of users + */ + @Override + @GET + @Path("search") + @Produces({MediaType.APPLICATION_JSON}) + public Response getMatchingRoles(@QueryParam("filter") String filter) { + String[] roles; + try { + AbstractUserStoreManager abstractUserStoreManager = + (AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager(); + if (log.isDebugEnabled()) { + log.debug("Getting the list of user roles using filter : " + filter); + } + roles = abstractUserStoreManager.getRoleNames("*" + filter + "*", -1, true, true, true); + + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of user roles using the filter : " + filter; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + // removing all internal roles and roles created for Service-providers + List filteredRoles = new ArrayList<>(); + for (String role : roles) { + if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + filteredRoles.add(role); + } + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All matching user roles were successfully retrieved."); + responsePayload.setResponseContent(filteredRoles); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get role permissions. + * + * @return list of permissions + */ + @Override + @GET + @Path("permissions") + @Produces({MediaType.APPLICATION_JSON}) + public Response getPermissions(@QueryParam("rolename") String roleName) { + try { + final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); + org.wso2.carbon.user.core.UserRealm userRealmCore = null; + final UIPermissionNode rolePermissions; + if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { + userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; + } + final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); + rolePermissions = getUIPermissionNode(roleName, userRealmProxy); + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All permissions retrieved"); + responsePayload.setResponseContent(rolePermissions); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } catch (UserAdminException | MDMAPIException e) { + String msg = "Error occurred while retrieving the user role"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Get user role of the system + * + * @return user role + */ + @Override + @GET + @Path("role") + @Produces({MediaType.APPLICATION_JSON}) + public Response getRole(@QueryParam("rolename") String roleName) { + RoleWrapper roleWrapper = new RoleWrapper(); + try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm(); + org.wso2.carbon.user.core.UserRealm userRealmCore = null; + if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) { + userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm; + } + + final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore); + if (log.isDebugEnabled()) { + log.debug("Getting the list of user roles"); + } + if (userStoreManager.isExistingRole(roleName)) { + roleWrapper.setRoleName(roleName); + roleWrapper.setUsers(userStoreManager.getUserListOfRole(roleName)); + // Get the permission nodes and hand picking only device management and login perms + final UIPermissionNode rolePermissions = getUIPermissionNode(roleName, userRealmProxy); + ArrayList permList = new ArrayList<>(); + iteratePermissions(rolePermissions, permList); + roleWrapper.setPermissionList(rolePermissions); + String[] permListAr = new String[permList.size()]; + roleWrapper.setPermissions(permList.toArray(permListAr)); + } + } catch (UserStoreException | UserAdminException | MDMAPIException e) { + String msg = "Error occurred while retrieving the user role"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("All user roles were successfully retrieved."); + responsePayload.setResponseContent(roleWrapper); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + private UIPermissionNode getUIPermissionNode(String roleName, UserRealmProxy userRealmProxy) + throws UserAdminException { + final UIPermissionNode rolePermissions = + userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID); + UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2]; + + for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) { + if (permissionNode.getResourcePath().equals("/permission/admin")) { + for (UIPermissionNode node : permissionNode.getNodeList()) { + if (node.getResourcePath().equals("/permission/admin/device-mgt")) { + deviceMgtPermissions[0] = node; + } else if (node.getResourcePath().equals("/permission/admin/login")) { + deviceMgtPermissions[1] = node; + } + } + } + } + rolePermissions.setNodeList(deviceMgtPermissions); + return rolePermissions; + } + + /** + * API is used to persist a new RoleImpl + * + * @param roleWrapper for role + * @return response + */ + @Override + @POST + @Produces({MediaType.APPLICATION_JSON}) + public Response addRole(RoleWrapper roleWrapper) { + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (log.isDebugEnabled()) { + log.debug("Persisting the role to user store"); + } + Permission[] permissions = null; + if (roleWrapper.getPermissions() != null && roleWrapper.getPermissions().length > 0) { + permissions = new Permission[roleWrapper.getPermissions().length]; + + for (int i = 0; i < permissions.length; i++) { + String permission = roleWrapper.getPermissions()[i]; + permissions[i] = new Permission(permission, CarbonConstants.UI_PERMISSION_ACTION); + } + } + userStoreManager.addRole(roleWrapper.getRoleName(), roleWrapper.getUsers(), permissions); + } catch (UserStoreException | MDMAPIException e) { + String msg = e.getMessage(); + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).build(); + } + + /** + * API is used to update a role RoleImpl + * + * @param roleWrapper for role + * @return response + */ + @Override + @PUT + @Produces({MediaType.APPLICATION_JSON}) + public Response updateRole(@QueryParam("rolename") String roleName, RoleWrapper roleWrapper) { + String newRoleName = roleWrapper.getRoleName(); + try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); + if (log.isDebugEnabled()) { + log.debug("Updating the role to user store"); + } + if (newRoleName != null && !roleName.equals(newRoleName)) { + userStoreManager.updateRoleName(roleName, newRoleName); + } + if (roleWrapper.getUsers() != null) { + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); + transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(newRoleName)), + Arrays.asList(roleWrapper.getUsers())); + final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer + .getObjectsToAdd().size()]); + final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer + .getObjectsToRemove().size()]); + userStoreManager.updateUserListOfRole(newRoleName, usersToDelete, usersToAdd); + } + if (roleWrapper.getPermissions() != null) { + // Delete all authorizations for the current role before authorizing the permission tree + authorizationManager.clearRoleAuthorization(roleName); + if (roleWrapper.getPermissions().length > 0) { + for (int i = 0; i < roleWrapper.getPermissions().length; i++) { + String permission = roleWrapper.getPermissions()[i]; + authorizationManager.authorizeRole(roleName, permission, CarbonConstants.UI_PERMISSION_ACTION); + } + } + } + } catch (UserStoreException | MDMAPIException e) { + String msg = e.getMessage(); + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).build(); + } + + /** + * API is used to delete a role and authorizations + * + * @param roleName to delete + * @return response + */ + @Override + @DELETE + @Produces({MediaType.APPLICATION_JSON}) + public Response deleteRole(@QueryParam("rolename") String roleName) { + try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager(); + if (log.isDebugEnabled()) { + log.debug("Deleting the role in user store"); + } + userStoreManager.deleteRole(roleName); + // Delete all authorizations for the current role before deleting + authorizationManager.clearRoleAuthorization(roleName); + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while deleting the role: " + roleName; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).build(); + } + + /** + * API is used to update users of a role + * + * @param roleName to update + * @param userList of the users + * @return response + */ + @Override + @PUT + @Path("users") + @Produces({MediaType.APPLICATION_JSON}) + public Response updateUsers(@QueryParam("rolename") String roleName, List userList) { + try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (log.isDebugEnabled()) { + log.debug("Updating the users of a role"); + } + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); + transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(roleName)), + userList); + final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer + .getObjectsToAdd().size()]); + final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer + .getObjectsToRemove().size()]); + + userStoreManager.updateUserListOfRole(roleName, usersToDelete, usersToAdd); + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while saving the users of the role: " + roleName; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).build(); + } + + private ArrayList iteratePermissions(UIPermissionNode uiPermissionNode, ArrayList list) { + for (UIPermissionNode permissionNode : uiPermissionNode.getNodeList()) { + list.add(permissionNode.getResourcePath()); + if (permissionNode.getNodeList() != null && permissionNode.getNodeList().length > 0) { + iteratePermissions(permissionNode, list); + } + } + return list; + } + + /** + * This method is used to retrieve the role count of the system. + * + * @return returns the count. + */ + @Override + @GET + @Path("count") + public Response getRoleCount() { + try { + List filteredRoles = getRolesFromUserStore(); + Integer count = filteredRoles.size(); + return Response.status(Response.Status.OK).entity(count).build(); + } catch (MDMAPIException e) { + log.error(e.getErrorMessage(), e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build(); + } + } + + private List getRolesFromUserStore() throws MDMAPIException { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + String[] roles; + try { + if (log.isDebugEnabled()) { + log.debug("Getting the list of user roles"); + } + roles = userStoreManager.getRoleNames(); + + } catch (UserStoreException e) { + String msg = "Error occurred while retrieving the list of user roles."; + throw new MDMAPIException(msg, e); + } + // removing all internal roles and roles created for Service-providers + List filteredRoles = new ArrayList<>(); + for (String role : roles) { + if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + filteredRoles.add(role); + } + } + return filteredRoles; + } +} diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java new file mode 100644 index 0000000000..136eebc7c0 --- /dev/null +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java @@ -0,0 +1,772 @@ +/* + * 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.api.impl; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.context.CarbonContext; +import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; +import org.wso2.carbon.device.mgt.jaxrs.beans.UserCredentialWrapper; +import org.wso2.carbon.device.mgt.jaxrs.beans.UserWrapper; +import org.wso2.carbon.device.mgt.jaxrs.util.Constants; +import org.wso2.carbon.device.mgt.common.DeviceManagementException; +import org.wso2.carbon.device.mgt.common.PaginationRequest; +import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; +import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo; +import org.wso2.carbon.device.mgt.jaxrs.api.util.CredentialManagementResponseBuilder; +import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils; +import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload; +import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer; +import org.wso2.carbon.user.api.UserStoreException; +import org.wso2.carbon.user.api.UserStoreManager; +import org.wso2.carbon.utils.multitenancy.MultitenantConstants; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Random; +import java.util.TreeSet; + +/** + * This class represents the JAX-RS services of UserImpl related functionality. + */ +@SuppressWarnings("NonJaxWsWebServices") +public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { + + private static final String ROLE_EVERYONE = "Internal/everyone"; + private static Log log = LogFactory.getLog(UserImpl.class); + + /** + * Method to add user to emm-user-store. + * + * @param userWrapper Wrapper object representing input json payload + * @return {Response} Status of the request wrapped inside Response object + */ + @Override + @POST + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response addUser(UserWrapper userWrapper) { + ResponsePayload responsePayload = new ResponsePayload(); + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (userStoreManager.isExistingUser(userWrapper.getUsername())) { + // if user already exists + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + userWrapper.getUsername() + + " already exists. Therefore, request made to add user was refused."); + } + // returning response with bad request state + responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); + responsePayload. + setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + " already exists. Therefore, request made to add user was refused."); + return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); + } else { + String initialUserPassword = generateInitialUserPassword(); + Map defaultUserClaims = + buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(), + userWrapper.getEmailAddress()); + // calling addUser method of carbon user api + userStoreManager.addUser(userWrapper.getUsername(), initialUserPassword, + userWrapper.getRoles(), defaultUserClaims, null); + // invite newly added user to enroll device + inviteNewlyAddedUserToEnrollDevice(userWrapper.getUsername(), initialUserPassword); + // Outputting debug message upon successful addition of user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + userWrapper.getUsername() + " was successfully added."); + } + // returning response with success state + responsePayload.setStatusCode(HttpStatus.SC_CREATED); + responsePayload.setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + " was successfully added."); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Exception in trying to add user by username: " + userWrapper.getUsername(); + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Method to get user information from emm-user-store. + * + * @param username UserImpl-name of the user + * @return {Response} Status of the request wrapped inside Response object. + */ + @Override + @GET + @Path("view") + @Produces({MediaType.APPLICATION_JSON}) + public Response getUser(@QueryParam("username") String username) { + ResponsePayload responsePayload = new ResponsePayload(); + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (userStoreManager.isExistingUser(username)) { + UserWrapper user = new UserWrapper(); + user.setUsername(username); + user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); + user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); + // Outputting debug message upon successful retrieval of user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " was found."); + } + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("UserImpl information was retrieved successfully."); + responsePayload.setResponseContent(user); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } else { + // Outputting debug message upon trying to remove non-existing user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " does not exist."); + } + // returning response with bad request state + responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); + responsePayload.setMessageFromServer( + "UserImpl by username: " + username + " does not exist."); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Exception in trying to retrieve user by username: " + username; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Update user in user store + * + * @param userWrapper Wrapper object representing input json payload + * @return {Response} Status of the request wrapped inside Response object. + */ + @Override + @PUT + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username) { + ResponsePayload responsePayload = new ResponsePayload(); + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (userStoreManager.isExistingUser(userWrapper.getUsername())) { + Map defaultUserClaims = + buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(), + userWrapper.getEmailAddress()); + if (StringUtils.isNotEmpty(userWrapper.getPassword())) { + // Decoding Base64 encoded password + byte[] decodedBytes = Base64.decodeBase64(userWrapper.getPassword()); + userStoreManager.updateCredentialByAdmin(userWrapper.getUsername(), + new String(decodedBytes, "UTF-8")); + log.debug("UserImpl credential of username: " + userWrapper.getUsername() + " has been changed"); + } + List listofFilteredRoles = getFilteredRoles(userStoreManager, userWrapper.getUsername()); + final String[] existingRoles = listofFilteredRoles.toArray(new String[listofFilteredRoles.size()]); + + /* + Use the Set theory to find the roles to delete and roles to add + The difference of roles in existingRolesSet and newRolesSet needed to be deleted + new roles to add = newRolesSet - The intersection of roles in existingRolesSet and newRolesSet + */ + final TreeSet existingRolesSet = new TreeSet<>(); + Collections.addAll(existingRolesSet, existingRoles); + final TreeSet newRolesSet = new TreeSet<>(); + Collections.addAll(newRolesSet, userWrapper.getRoles()); + existingRolesSet.removeAll(newRolesSet); + // Now we have the roles to delete + String[] rolesToDelete = existingRolesSet.toArray(new String[existingRolesSet.size()]); + List roles = new ArrayList<>(Arrays.asList(rolesToDelete)); + roles.remove(ROLE_EVERYONE); + rolesToDelete = new String[0]; + // Clearing and re-initializing the set + existingRolesSet.clear(); + Collections.addAll(existingRolesSet, existingRoles); + newRolesSet.removeAll(existingRolesSet); + // Now we have the roles to add + String[] rolesToAdd = newRolesSet.toArray(new String[newRolesSet.size()]); + userStoreManager.updateRoleListOfUser(userWrapper.getUsername(), rolesToDelete, rolesToAdd); + userStoreManager.setUserClaimValues(userWrapper.getUsername(), defaultUserClaims, null); + // Outputting debug message upon successful addition of user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + userWrapper.getUsername() + " was successfully updated."); + } + // returning response with success state + responsePayload.setStatusCode(HttpStatus.SC_CREATED); + responsePayload.setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + " was successfully updated."); + return Response.status(Response.Status.CREATED).entity(responsePayload).build(); + } else { + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + userWrapper.getUsername() + + " doesn't exists. Therefore, request made to update user was refused."); + } + // returning response with bad request state + responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); + responsePayload. + setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + " doesn't exists. Therefore, request made to update user was refused."); + return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); + } + } catch (UserStoreException | UnsupportedEncodingException | MDMAPIException e) { + String msg = "Exception in trying to update user by username: " + userWrapper.getUsername(); + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Private method to be used by addUser() to + * generate an initial user password for a user. + * This will be the password used by a user for his initial login to the system. + * + * @return {string} Initial UserImpl Password + */ + private String generateInitialUserPassword() { + int passwordLength = 6; + //defining the pool of characters to be used for initial password generation + String lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz"; + String upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String numericCharset = "0123456789"; + Random randomGenerator = new Random(); + String totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset; + int totalCharsetLength = totalCharset.length(); + StringBuilder initialUserPassword = new StringBuilder(); + for (int i = 0; i < passwordLength; i++) { + initialUserPassword + .append(totalCharset.charAt(randomGenerator.nextInt(totalCharsetLength))); + } + if (log.isDebugEnabled()) { + log.debug("Initial user password is created for new user: " + initialUserPassword); + } + return initialUserPassword.toString(); + } + + /** + * Method to build default user claims. + * + * @param firstname First name of the user + * @param lastname Last name of the user + * @param emailAddress Email address of the user + * @return {Object} Default user claims to be provided + */ + private Map buildDefaultUserClaims(String firstname, String lastname, String emailAddress) { + Map defaultUserClaims = new HashMap<>(); + defaultUserClaims.put(Constants.USER_CLAIM_FIRST_NAME, firstname); + defaultUserClaims.put(Constants.USER_CLAIM_LAST_NAME, lastname); + defaultUserClaims.put(Constants.USER_CLAIM_EMAIL_ADDRESS, emailAddress); + if (log.isDebugEnabled()) { + log.debug("Default claim map is created for new user: " + defaultUserClaims.toString()); + } + return defaultUserClaims; + } + + /** + * Method to remove user from emm-user-store. + * + * @param username Username of the user + * @return {Response} Status of the request wrapped inside Response object. + */ + @Override + @DELETE + @Produces({MediaType.APPLICATION_JSON}) + public Response removeUser(@QueryParam("username") String username) { + ResponsePayload responsePayload = new ResponsePayload(); + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (userStoreManager.isExistingUser(username)) { + // if user already exists, trying to remove user + userStoreManager.deleteUser(username); + // Outputting debug message upon successful removal of user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " was successfully removed."); + } + // returning response with success state + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer( + "UserImpl by username: " + username + " was successfully removed."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } else { + // Outputting debug message upon trying to remove non-existing user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " does not exist for removal."); + } + // returning response with bad request state + responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); + responsePayload.setMessageFromServer( + "UserImpl by username: " + username + " does not exist for removal."); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Exception in trying to remove user by username: " + username; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * get all the roles except for the internal/xxx and application/xxx + * + * @param userStoreManager UserImpl Store Manager associated with the currently logged in user + * @param username Username of the currently logged in user + * @return the list of filtered roles + */ + private List getFilteredRoles(UserStoreManager userStoreManager, String username) { + String[] roleListOfUser = new String[0]; + try { + roleListOfUser = userStoreManager.getRoleListOfUser(username); + } catch (UserStoreException e) { + e.printStackTrace(); + } + List filteredRoles = new ArrayList<>(); + for (String role : roleListOfUser) { + if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + filteredRoles.add(role); + } + } + return filteredRoles; + } + + /** + * Get user's roles by username + * + * @param username Username of the user + * @return {Response} Status of the request wrapped inside Response object. + */ + @Override + @GET + @Path("roles") + @Produces({MediaType.APPLICATION_JSON}) + public Response getRoles(@QueryParam("username") String username) { + ResponsePayload responsePayload = new ResponsePayload(); + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (userStoreManager.isExistingUser(username)) { + responsePayload.setResponseContent(Collections.singletonList(getFilteredRoles(userStoreManager, username))); + // Outputting debug message upon successful removal of user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " was successfully removed."); + } + // returning response with success state + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer( + "UserImpl roles obtained for user " + username); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } else { + // Outputting debug message upon trying to remove non-existing user + if (log.isDebugEnabled()) { + log.debug("UserImpl by username: " + username + " does not exist for role retrieval."); + } + // returning response with bad request state + responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); + responsePayload.setMessageFromServer( + "UserImpl by username: " + username + " does not exist for role retrieval."); + return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Exception in trying to retrieve roles for user by username: " + username; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * Get the list of all users with all user-related info. + * + * @return A list of users + */ + @Override + @GET + @Produces({MediaType.APPLICATION_JSON}) + public Response getAllUsers() { + if (log.isDebugEnabled()) { + log.debug("Getting the list of users with all user-related information"); + } + List userList; + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + String[] users = userStoreManager.listUsers("*", -1); + userList = new ArrayList<>(users.length); + UserWrapper user; + for (String username : users) { + user = new UserWrapper(); + user.setUsername(username); + user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); + user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); + userList.add(user); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of users"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + int count; + count = userList.size(); + responsePayload.setMessageFromServer("All users were successfully retrieved. " + + "Obtained user count: " + count); + responsePayload.setResponseContent(userList); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get the list of all users with all user-related info. + * + * @return A list of users + */ + @Override + @GET + @Path("{filter}") + @Produces({MediaType.APPLICATION_JSON}) + public Response getMatchingUsers(@PathParam("filter") String filter) { + if (log.isDebugEnabled()) { + log.debug("Getting the list of users with all user-related information using the filter : " + filter); + } + List userList; + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + String[] users = userStoreManager.listUsers(filter + "*", -1); + userList = new ArrayList<>(users.length); + UserWrapper user; + for (String username : users) { + user = new UserWrapper(); + user.setUsername(username); + user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); + user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); + userList.add(user); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of users using the filter : " + filter; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + int count; + count = userList.size(); + responsePayload.setMessageFromServer("All users were successfully retrieved. " + + "Obtained user count: " + count); + responsePayload.setResponseContent(userList); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get the list of user names in the system. + * + * @return A list of user names. + */ + @Override + @GET + @Path("view-users") + public Response getAllUsersByUsername(@QueryParam("username") String userName) { + if (log.isDebugEnabled()) { + log.debug("Getting the list of users by name"); + } + List userList; + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + String[] users = userStoreManager.listUsers("*" + userName + "*", -1); + userList = new ArrayList<>(users.length); + UserWrapper user; + for (String username : users) { + user = new UserWrapper(); + user.setUsername(username); + user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS)); + user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); + userList.add(user); + } + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of users"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + int count; + count = userList.size(); + responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + + "Obtained user count: " + count); + responsePayload.setResponseContent(userList); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get the list of user names in the system. + * + * @return A list of user names. + */ + @Override + @GET + @Path("users-by-username") + public Response getAllUserNamesByUsername(@QueryParam("username") String userName) { + if (log.isDebugEnabled()) { + log.debug("Getting the list of users by name"); + } + List userList; + try { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + String[] users = userStoreManager.listUsers("*" + userName + "*", -1); + userList = new ArrayList<>(users.length); + Collections.addAll(userList, users); + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while retrieving the list of users"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + int count; + count = userList.size(); + responsePayload.setMessageFromServer("All users by username were successfully retrieved. " + + "Obtained user count: " + count); + responsePayload.setResponseContent(userList); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Gets a claim-value from user-store. + * + * @param username Username of the user + * @param claimUri required ClaimUri + * @return claim value + */ + private String getClaimValue(String username, String claimUri) throws MDMAPIException { + UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + try { + return userStoreManager.getUserClaimValue(username, claimUri, null); + } catch (UserStoreException e) { + throw new MDMAPIException("Error occurred while retrieving value assigned to the claim '" + + claimUri + "'", e); + } + } + + /** + * Method used to send an invitation email to a new user to enroll a device. + * + * @param username Username of the user + */ + private void inviteNewlyAddedUserToEnrollDevice(String username, String password) throws MDMAPIException { + if (log.isDebugEnabled()) { + log.debug("Sending invitation mail to user by username: " + username); + } + String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain(); + if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equalsIgnoreCase(tenantDomain)) { + tenantDomain = ""; + } + if (!username.contains("/")) { + username = "/" + username; + } + String[] usernameBits = username.split("/"); + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); + + Properties props = new Properties(); + props.setProperty("username", usernameBits[1]); + props.setProperty("domain-name", tenantDomain); + props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + props.setProperty("password", password); + + String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS); + + EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); + try { + deviceManagementProviderService.sendRegistrationEmail(metaInfo); + } catch (DeviceManagementException e) { + String msg = "Error occurred while sending registration email to user '" + username + "'"; + log.error(msg, e); + throw new MDMAPIException(msg, e); + } + } + + /** + * Method used to send an invitation email to a existing user to enroll a device. + * + * @param usernames Username list of the users to be invited + */ + @Override + @POST + @Path("email-invitation") + @Produces({MediaType.APPLICATION_JSON}) + public Response inviteExistingUsersToEnrollDevice(List usernames) { + if (log.isDebugEnabled()) { + log.debug("Sending enrollment invitation mail to existing user."); + } + DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService(); + try { + for (String username : usernames) { + String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS); + + Properties props = new Properties(); + props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME)); + props.setProperty("username", username); + + EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props); + deviceManagementProviderService.sendEnrolmentInvitation(metaInfo); + } + } catch (DeviceManagementException | MDMAPIException e) { + String msg = "Error occurred while inviting user to enrol their device"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + ResponsePayload responsePayload = new ResponsePayload(); + responsePayload.setStatusCode(HttpStatus.SC_OK); + responsePayload.setMessageFromServer("Email invitation was successfully sent to user."); + return Response.status(Response.Status.OK).entity(responsePayload).build(); + } + + /** + * Get a list of devices based on the username. + * + * @param username Username of the device owner + * @return A list of devices + */ + @Override + @GET + @Produces({MediaType.APPLICATION_JSON}) + @Path("devices") + public Response getAllDeviceOfUser(@QueryParam("username") String username, + @QueryParam("start") int startIdx, @QueryParam("length") int length) { + DeviceManagementProviderService dmService; + try { + dmService = DeviceMgtAPIUtils.getDeviceManagementService(); + if (length > 0) { + PaginationRequest request = new PaginationRequest(startIdx, length); + request.setOwner(username); + return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(request)).build(); + } + return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(username)).build(); + } catch (DeviceManagementException e) { + String msg = "DeviceImpl management error"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * This method is used to retrieve the user count of the system. + * + * @return returns the count. + * @ + */ + @Override + @GET + @Path("count") + public Response getUserCount() { + try { + String[] users = DeviceMgtAPIUtils.getUserStoreManager().listUsers("*", -1); + Integer count = 0; + if (users != null) { + count = users.length; + } + return Response.status(Response.Status.OK).entity(count).build(); + } catch (UserStoreException | MDMAPIException e) { + String msg = + "Error occurred while retrieving the list of users that exist within the current tenant"; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + } + + /** + * API is used to update roles of a user + * + * @param username + * @param userList + * @return + * @ + */ + @Override + @PUT + @Path("{roleName}/users") + @Produces({MediaType.APPLICATION_JSON}) + public Response updateRoles(@PathParam("username") String username, List userList) { + try { + final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager(); + if (log.isDebugEnabled()) { + log.debug("Updating the roles of a user"); + } + SetReferenceTransformer transformer = new SetReferenceTransformer<>(); + transformer.transform(Arrays.asList(userStoreManager.getRoleListOfUser(username)), + userList); + final String[] rolesToAdd = transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]); + final String[] rolesToDelete = transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]); + + userStoreManager.updateRoleListOfUser(username, rolesToDelete, rolesToAdd); + } catch (UserStoreException | MDMAPIException e) { + String msg = "Error occurred while saving the roles for user: " + username; + log.error(msg, e); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); + } + return Response.status(Response.Status.OK).build(); + } + + /** + * Method to change the user password. + * + * @param credentials Wrapper object representing user credentials. + * @return {Response} Status of the request wrapped inside Response object. + * @ + */ + @Override + @POST + @Path("change-password") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response resetPassword(UserCredentialWrapper credentials) { + return CredentialManagementResponseBuilder.buildChangePasswordResponse(credentials); + } + + /** + * Method to change the user password. + * + * @param credentials Wrapper object representing user credentials. + * @return {Response} Status of the request wrapped inside Response object. + * @ + */ + @Override + @POST + @Path("reset-password") + @Consumes({MediaType.APPLICATION_JSON}) + @Produces({MediaType.APPLICATION_JSON}) + public Response resetPasswordByAdmin(UserCredentialWrapper credentials) { + return CredentialManagementResponseBuilder.buildResetPasswordResponse(credentials); + } + +} \ No newline at end of file diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java index d9097edb93..41b755e6b0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java @@ -39,7 +39,7 @@ public class CredentialManagementResponseBuilder { /** * Builds the response to change the password of a user - * @param credentials - User credentials + * @param credentials - UserImpl credentials * @return Response Object */ public static Response buildChangePasswordResponse(UserCredentialWrapper credentials) { @@ -52,7 +52,7 @@ public class CredentialManagementResponseBuilder { userStoreManager.updateCredential(credentials.getUsername(), new String( decodedNewPassword, "UTF-8"), new String(decodedOldPassword, "UTF-8")); responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("User password by username: " + credentials.getUsername() + + responsePayload.setMessageFromServer("UserImpl password by username: " + credentials.getUsername() + " was successfully changed."); return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } catch (UserStoreException e) { @@ -73,7 +73,7 @@ public class CredentialManagementResponseBuilder { /** * Builds the response to reset the password of a user - * @param credentials - User credentials + * @param credentials - UserImpl credentials * @return Response Object */ public static Response buildResetPasswordResponse(UserCredentialWrapper credentials) { @@ -84,7 +84,7 @@ public class CredentialManagementResponseBuilder { userStoreManager.updateCredentialByAdmin(credentials.getUsername(), new String( decodedNewPassword, "UTF-8")); responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("User password by username: " + credentials.getUsername() + + responsePayload.setMessageFromServer("UserImpl password by username: " + credentials.getUsername() + " was successfully changed."); return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } catch (UserStoreException e) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/DeviceMgtAPIUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/DeviceMgtAPIUtils.java index be97e21bd5..f1cdbe6e8d 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/DeviceMgtAPIUtils.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/DeviceMgtAPIUtils.java @@ -87,7 +87,7 @@ public class DeviceMgtAPIUtils { DeviceManagementProviderService deviceManagementProviderService = (DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null); if (deviceManagementProviderService == null) { - String msg = "Device Management provider service has not initialized."; + String msg = "DeviceImpl Management provider service has not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -99,7 +99,7 @@ public class DeviceMgtAPIUtils { GroupManagementProviderService groupManagementProviderService = (GroupManagementProviderService) ctx.getOSGiService(GroupManagementProviderService.class, null); if (groupManagementProviderService == null) { - String msg = "Group Management service has not initialized."; + String msg = "GroupImpl Management service has not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -213,7 +213,7 @@ public class DeviceMgtAPIUtils { ApplicationManagementProviderService applicationManagementProviderService = (ApplicationManagementProviderService) ctx.getOSGiService(ApplicationManagementProviderService.class, null); if (applicationManagementProviderService == null) { - String msg = "Application management service has not initialized."; + String msg = "AuthenticationImpl management service has not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -226,7 +226,7 @@ public class DeviceMgtAPIUtils { policyManagementService = (PolicyManagerService) ctx.getOSGiService(PolicyManagerService.class, null); if (policyManagementService == null) { - String msg = "Policy Management service not initialized."; + String msg = "PolicyImpl Management service not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -274,7 +274,7 @@ public class DeviceMgtAPIUtils { ctx.getOSGiService(CertificateManagementService.class, null); if (certificateManagementService == null) { - String msg = "Certificate Management service not initialized."; + String msg = "CertificateImpl Management service not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -299,7 +299,7 @@ public class DeviceMgtAPIUtils { DeviceInformationManager deviceInformationManager = (DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null); if (deviceInformationManager == null) { - String msg = "Device information Manager service has not initialized."; + String msg = "DeviceImpl information Manager service has not initialized."; log.error(msg); throw new IllegalStateException(msg); } @@ -313,7 +313,7 @@ public class DeviceMgtAPIUtils { SearchManagerService searchManagerService = (SearchManagerService) ctx.getOSGiService(SearchManagerService.class, null); if (searchManagerService == null) { - String msg = "Device search manager service has not initialized."; + String msg = "DeviceImpl search manager service has not initialized."; log.error(msg); throw new IllegalStateException(msg); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java index 9dcbec0a3c..9f159aef94 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java @@ -33,7 +33,7 @@ import org.wso2.carbon.device.mgt.jaxrs.beans.android.WebApplication; public class MDMAndroidOperationUtil { /** - * This method is used to create Install Application operation. + * This method is used to create Install AuthenticationImpl operation. * * @param application MobileApp application * @return operation @@ -76,7 +76,7 @@ public class MDMAndroidOperationUtil { } /** - * This method is used to create Uninstall Application operation. + * This method is used to create Uninstall AuthenticationImpl operation. * @param application MobileApp application * @return operation * @throws MDMAPIException diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java index 7014174801..af30ef8be1 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java @@ -35,7 +35,7 @@ import java.util.Properties; public class MDMIOSOperationUtil { /** - * This method is used to create Install Application operation. + * This method is used to create Install AuthenticationImpl operation. * * @param application MobileApp application * @return operation diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java index 220b1572c7..7338f6141c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/MobileApp.java @@ -21,7 +21,7 @@ package org.wso2.carbon.device.mgt.jaxrs.beans; import java.util.Properties; /** - * This class represents the generic mobile Application information + * This class represents the generic mobile AuthenticationImpl information * which is used by AppM. */ public class MobileApp { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java index a54b53b2c2..25ad8ab215 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/Profile.java @@ -53,11 +53,11 @@ public class Profile { this.tenantId = tenantId; } -/* public List getFeaturesList() { +/* public List getFeaturesList() { return featuresList; } - public void setFeaturesList(List featuresList) { + public void setFeaturesList(List featuresList) { this.featuresList = featuresList; }*/ @XmlElement diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/AppStoreApplication.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/AppStoreApplication.java index bc261e91a5..6d89673b85 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/AppStoreApplication.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/AppStoreApplication.java @@ -24,7 +24,7 @@ import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; import java.io.Serializable; /** - * This class represents the Appstore Application information. + * This class represents the Appstore AuthenticationImpl information. */ public class AppStoreApplication implements Serializable { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/EnterpriseApplication.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/EnterpriseApplication.java index 22d0544602..17592bc112 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/EnterpriseApplication.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/EnterpriseApplication.java @@ -24,7 +24,7 @@ import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; import java.io.Serializable; /** - * This class represents the Enterprise Application information. + * This class represents the Enterprise AuthenticationImpl information. */ public class EnterpriseApplication implements Serializable { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/WebApplication.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/WebApplication.java index 74a0665c3d..e646d5bba0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/WebApplication.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/beans/android/WebApplication.java @@ -24,7 +24,7 @@ import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException; import java.io.Serializable; /** - * This class represents the Web Application information. + * This class represents the Web AuthenticationImpl information. */ public class WebApplication implements Serializable { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java index 533d6964ab..f7bd1a47e6 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/Constants.java @@ -19,7 +19,7 @@ package org.wso2.carbon.device.mgt.jaxrs.util; /** - * Holds the constants used by Device Management Admin web application. + * Holds the constants used by DeviceImpl Management Admin web application. */ public class Constants { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml index 89aa3f02f2..54e0e96a4a 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml @@ -2,19 +2,19 @@ - + Device Management @@ -262,7 +262,7 @@ /devices/user/* GET - + @@ -373,7 +373,7 @@ - + @@ -381,7 +381,7 @@ - + List policies /device-mgt/admin/policies/list @@ -410,9 +410,9 @@ GET - + - + List roles /device-mgt/admin/roles/list @@ -504,9 +504,9 @@ /roles/count GET - + - + List users /device-mgt/admin/users/list @@ -660,9 +660,9 @@ /users/authorize POST - + - + Add Policy /device-mgt/admin/policies/add @@ -816,9 +816,9 @@ /policies/*/* GET - + - + Add policy /device-mgt/admin/policies/add @@ -839,7 +839,7 @@ /profiles/* DELETE - + @@ -860,7 +860,7 @@ - + @@ -875,9 +875,9 @@ - + - + View configuration /device-mgt/admin/platform-configs/view @@ -899,9 +899,9 @@ PUT - + - + Save certificate in the database /device-mgt/android/certificate/save @@ -920,7 +920,7 @@ /certificates/* DELETE - + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml index ed2ed21624..99ff01249f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml @@ -3,19 +3,19 @@ --> - - - - - - - - - - - - + + + + + + + + + + + + - - + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml index ab8d04cbe8..4ff777080f 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml @@ -2,19 +2,19 @@ Admin-Webapp From f5915cbf5db87957fbc08408188452d2bffa6189 Mon Sep 17 00:00:00 2001 From: Madhawa Date: Thu, 12 May 2016 10:32:49 +0530 Subject: [PATCH 14/21] created interfaces for the api classes in order add swagger definitions --- .../org.wso2.carbon.device.mgt.api/pom.xml | 14 ++--- .../jaxrs/api/impl/AuthenticationImpl.java | 2 +- .../mgt/jaxrs/api/impl/ConfigurationImpl.java | 2 +- .../device/mgt/jaxrs/api/impl/DeviceImpl.java | 16 +++--- .../api/impl/DeviceNotificationImpl.java | 2 +- .../mgt/jaxrs/api/impl/FeatureImpl.java | 4 +- .../device/mgt/jaxrs/api/impl/GroupImpl.java | 4 +- .../mgt/jaxrs/api/impl/LicenseImpl.java | 10 ++-- .../mgt/jaxrs/api/impl/OperationImpl.java | 8 +-- .../device/mgt/jaxrs/api/impl/PolicyImpl.java | 34 ++++++------ .../mgt/jaxrs/api/impl/ProfileImpl.java | 10 ++-- .../device/mgt/jaxrs/api/impl/RoleImpl.java | 10 ++-- .../device/mgt/jaxrs/api/impl/UserImpl.java | 54 +++++++++---------- .../CredentialManagementResponseBuilder.java | 4 +- .../api/util/MDMAndroidOperationUtil.java | 4 +- .../jaxrs/api/util/MDMIOSOperationUtil.java | 2 +- .../src/main/webapp/WEB-INF/cxf-servlet.xml | 14 ++--- .../src/main/webapp/WEB-INF/web.xml | 14 ++--- 18 files changed, 104 insertions(+), 104 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml index 139385635d..07ef52fde5 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml @@ -2,19 +2,19 @@ 0) { responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("OperationImpl has added successfully."); + responseMsg.setMessageFromServer("Operation has added successfully."); } return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (OperationManagementException e) { @@ -184,7 +184,7 @@ public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Opera appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); } responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("AuthenticationImpl installation request has been sent to the device."); + responseMsg.setMessageFromServer("Authentication installation request has been sent to the device."); return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (ApplicationManagementException | MDMAPIException e) { String msg = "Error occurred while saving the operation"; @@ -216,7 +216,7 @@ public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Opera appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers()); } responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("AuthenticationImpl removal request has been sent to the device."); + responseMsg.setMessageFromServer("Authentication removal request has been sent to the device."); return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (ApplicationManagementException | MDMAPIException e) { String msg = "Error occurred while saving the operation"; diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java index 2a3049a6b8..a1c84a0d05 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/PolicyImpl.java @@ -101,10 +101,10 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.addPolicy(policy); responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("PolicyImpl has been added successfully."); + responseMsg.setMessageFromServer("Policy has been added successfully."); return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -120,7 +120,7 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); policies = policyAdministratorPoint.getPolicies(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -142,14 +142,14 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP(); policy = policyAdministratorPoint.getPolicy(policyId); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } if (policy == null){ ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND); - responsePayload.setMessageFromServer("PolicyImpl for ID " + policyId + " not found."); + responsePayload.setMessageFromServer("Policy for ID " + policyId + " not found."); return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build(); } ResponsePayload responsePayload = new ResponsePayload(); @@ -169,7 +169,7 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { Integer count = policyAdministratorPoint.getPolicyCount(); return Response.status(Response.Status.OK).entity(count).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -198,10 +198,10 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.updatePolicy(policy); responseMsg.setStatusCode(HttpStatus.SC_CREATED); - responseMsg.setMessageFromServer("PolicyImpl has been updated successfully."); + responseMsg.setMessageFromServer("Policy has been updated successfully."); return Response.status(Response.Status.CREATED).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception in policy update."; + String msg = "Policy Management related exception in policy update."; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -235,11 +235,11 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { ResponsePayload responsePayload = new ResponsePayload(); if (policiesUpdated) { responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("PolicyImpl Priorities successfully updated."); + responsePayload.setMessageFromServer("Policy Priorities successfully updated."); return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer("PolicyImpl priorities did not update. Bad Request."); + responsePayload.setMessageFromServer("Policy priorities did not update. Bad Request."); return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } @@ -272,7 +272,7 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); - responsePayload.setMessageFromServer("PolicyImpl does not exist."); + responsePayload.setMessageFromServer("Policy does not exist."); return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } @@ -358,13 +358,13 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { } catch (PolicyMonitoringTaskException e) { - String msg = "PolicyImpl Management related exception."; + String msg = "Policy Management related exception."; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("PolicyImpl monitoring service started successfully."); + responsePayload.setMessageFromServer("Policy monitoring service started successfully."); return Response.status(Response.Status.OK).entity(responsePayload).build(); } @@ -379,13 +379,13 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { taskScheduleService.updateTask(monitoringFrequency); } catch (PolicyMonitoringTaskException e) { - String msg = "PolicyImpl Management related exception."; + String msg = "Policy Management related exception."; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("PolicyImpl monitoring service updated successfully."); + responsePayload.setMessageFromServer("Policy monitoring service updated successfully."); return Response.status(Response.Status.OK).entity(responsePayload).build(); } @@ -400,13 +400,13 @@ public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy { taskScheduleService.stopTask(); } catch (PolicyMonitoringTaskException e) { - String msg = "PolicyImpl Management related exception."; + String msg = "Policy Management related exception."; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } ResponsePayload responsePayload = new ResponsePayload(); responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("PolicyImpl monitoring service stopped successfully."); + responsePayload.setMessageFromServer("Policy monitoring service stopped successfully."); return Response.status(Response.Status.OK).entity(responsePayload).build(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java index dff753e7d6..80fa8c1349 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/ProfileImpl.java @@ -45,7 +45,7 @@ public class ProfileImpl implements Profile{ profile = pap.addProfile(profile); return Response.status(Response.Status.OK).entity(profile).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -59,10 +59,10 @@ public class ProfileImpl implements Profile{ try { PolicyAdministratorPoint pap = policyManagementService.getPAP(); pap.updateProfile(profile); - responseMsg.setMessageFromServer("ProfileImpl has been updated successfully."); + responseMsg.setMessageFromServer("Profile has been updated successfully."); return Response.status(Response.Status.OK).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } @@ -76,10 +76,10 @@ public class ProfileImpl implements Profile{ PolicyAdministratorPoint pap = policyManagementService.getPAP(); org.wso2.carbon.policy.mgt.common.Profile profile = pap.getProfile(profileId); pap.deleteProfile(profile); - responseMsg.setMessageFromServer("ProfileImpl has been deleted successfully."); + responseMsg.setMessageFromServer("Profile has been deleted successfully."); return Response.status(Response.Status.OK).entity(responseMsg).build(); } catch (PolicyManagementException e) { - String msg = "PolicyImpl Management related exception"; + String msg = "Policy Management related exception"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java index 0a187945fd..739f5f5678 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/RoleImpl.java @@ -107,7 +107,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { // removing all internal roles and roles created for Service-providers List filteredRoles = new ArrayList<>(); for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) { filteredRoles.add(role); } } @@ -145,7 +145,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { // removing all internal roles and roles created for Service-providers List filteredRoles = new ArrayList<>(); for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) { filteredRoles.add(role); } } @@ -255,7 +255,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { } /** - * API is used to persist a new RoleImpl + * API is used to persist a new Role * * @param roleWrapper for role * @return response @@ -288,7 +288,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { } /** - * API is used to update a role RoleImpl + * API is used to update a role Role * * @param roleWrapper for role * @return response @@ -441,7 +441,7 @@ public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role { // removing all internal roles and roles created for Service-providers List filteredRoles = new ArrayList<>(); for (String role : roles) { - if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) { filteredRoles.add(role); } } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java index 136eebc7c0..2b136e6131 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/impl/UserImpl.java @@ -63,7 +63,7 @@ import java.util.Random; import java.util.TreeSet; /** - * This class represents the JAX-RS services of UserImpl related functionality. + * This class represents the JAX-RS services of User related functionality. */ @SuppressWarnings("NonJaxWsWebServices") public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { @@ -88,13 +88,13 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { if (userStoreManager.isExistingUser(userWrapper.getUsername())) { // if user already exists if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + userWrapper.getUsername() + + log.debug("User by username: " + userWrapper.getUsername() + " already exists. Therefore, request made to add user was refused."); } // returning response with bad request state responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); responsePayload. - setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + setMessageFromServer("User by username: " + userWrapper.getUsername() + " already exists. Therefore, request made to add user was refused."); return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); } else { @@ -109,11 +109,11 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { inviteNewlyAddedUserToEnrollDevice(userWrapper.getUsername(), initialUserPassword); // Outputting debug message upon successful addition of user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + userWrapper.getUsername() + " was successfully added."); + log.debug("User by username: " + userWrapper.getUsername() + " was successfully added."); } // returning response with success state responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + " was successfully added."); return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } @@ -127,7 +127,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { /** * Method to get user information from emm-user-store. * - * @param username UserImpl-name of the user + * @param username User-name of the user * @return {Response} Status of the request wrapped inside Response object. */ @Override @@ -146,21 +146,21 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME)); // Outputting debug message upon successful retrieval of user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " was found."); + log.debug("User by username: " + username + " was found."); } responsePayload.setStatusCode(HttpStatus.SC_OK); - responsePayload.setMessageFromServer("UserImpl information was retrieved successfully."); + responsePayload.setMessageFromServer("User information was retrieved successfully."); responsePayload.setResponseContent(user); return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " does not exist."); + log.debug("User by username: " + username + " does not exist."); } // returning response with bad request state responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( - "UserImpl by username: " + username + " does not exist."); + "User by username: " + username + " does not exist."); return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } catch (UserStoreException | MDMAPIException e) { @@ -193,7 +193,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { byte[] decodedBytes = Base64.decodeBase64(userWrapper.getPassword()); userStoreManager.updateCredentialByAdmin(userWrapper.getUsername(), new String(decodedBytes, "UTF-8")); - log.debug("UserImpl credential of username: " + userWrapper.getUsername() + " has been changed"); + log.debug("User credential of username: " + userWrapper.getUsername() + " has been changed"); } List listofFilteredRoles = getFilteredRoles(userStoreManager, userWrapper.getUsername()); final String[] existingRoles = listofFilteredRoles.toArray(new String[listofFilteredRoles.size()]); @@ -223,22 +223,22 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { userStoreManager.setUserClaimValues(userWrapper.getUsername(), defaultUserClaims, null); // Outputting debug message upon successful addition of user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + userWrapper.getUsername() + " was successfully updated."); + log.debug("User by username: " + userWrapper.getUsername() + " was successfully updated."); } // returning response with success state responsePayload.setStatusCode(HttpStatus.SC_CREATED); - responsePayload.setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() + " was successfully updated."); return Response.status(Response.Status.CREATED).entity(responsePayload).build(); } else { if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + userWrapper.getUsername() + + log.debug("User by username: " + userWrapper.getUsername() + " doesn't exists. Therefore, request made to update user was refused."); } // returning response with bad request state responsePayload.setStatusCode(HttpStatus.SC_CONFLICT); responsePayload. - setMessageFromServer("UserImpl by username: " + userWrapper.getUsername() + + setMessageFromServer("User by username: " + userWrapper.getUsername() + " doesn't exists. Therefore, request made to update user was refused."); return Response.status(Response.Status.CONFLICT).entity(responsePayload).build(); } @@ -254,7 +254,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { * generate an initial user password for a user. * This will be the password used by a user for his initial login to the system. * - * @return {string} Initial UserImpl Password + * @return {string} Initial User Password */ private String generateInitialUserPassword() { int passwordLength = 6; @@ -313,22 +313,22 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { userStoreManager.deleteUser(username); // Outputting debug message upon successful removal of user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " was successfully removed."); + log.debug("User by username: " + username + " was successfully removed."); } // returning response with success state responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer( - "UserImpl by username: " + username + " was successfully removed."); + "User by username: " + username + " was successfully removed."); return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " does not exist for removal."); + log.debug("User by username: " + username + " does not exist for removal."); } // returning response with bad request state responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( - "UserImpl by username: " + username + " does not exist for removal."); + "User by username: " + username + " does not exist for removal."); return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } catch (UserStoreException | MDMAPIException e) { @@ -341,7 +341,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { /** * get all the roles except for the internal/xxx and application/xxx * - * @param userStoreManager UserImpl Store Manager associated with the currently logged in user + * @param userStoreManager User Store Manager associated with the currently logged in user * @param username Username of the currently logged in user * @return the list of filtered roles */ @@ -354,7 +354,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { } List filteredRoles = new ArrayList<>(); for (String role : roleListOfUser) { - if (!(role.startsWith("Internal/") || role.startsWith("AuthenticationImpl/"))) { + if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) { filteredRoles.add(role); } } @@ -379,22 +379,22 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { responsePayload.setResponseContent(Collections.singletonList(getFilteredRoles(userStoreManager, username))); // Outputting debug message upon successful removal of user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " was successfully removed."); + log.debug("User by username: " + username + " was successfully removed."); } // returning response with success state responsePayload.setStatusCode(HttpStatus.SC_OK); responsePayload.setMessageFromServer( - "UserImpl roles obtained for user " + username); + "User roles obtained for user " + username); return Response.status(Response.Status.OK).entity(responsePayload).build(); } else { // Outputting debug message upon trying to remove non-existing user if (log.isDebugEnabled()) { - log.debug("UserImpl by username: " + username + " does not exist for role retrieval."); + log.debug("User by username: " + username + " does not exist for role retrieval."); } // returning response with bad request state responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST); responsePayload.setMessageFromServer( - "UserImpl by username: " + username + " does not exist for role retrieval."); + "User by username: " + username + " does not exist for role retrieval."); return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build(); } } catch (UserStoreException | MDMAPIException e) { @@ -673,7 +673,7 @@ public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User { } return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(username)).build(); } catch (DeviceManagementException e) { - String msg = "DeviceImpl management error"; + String msg = "Device management error"; log.error(msg, e); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); } diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java index 41b755e6b0..16d0dc7823 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/CredentialManagementResponseBuilder.java @@ -39,7 +39,7 @@ public class CredentialManagementResponseBuilder { /** * Builds the response to change the password of a user - * @param credentials - UserImpl credentials + * @param credentials - User credentials * @return Response Object */ public static Response buildChangePasswordResponse(UserCredentialWrapper credentials) { @@ -73,7 +73,7 @@ public class CredentialManagementResponseBuilder { /** * Builds the response to reset the password of a user - * @param credentials - UserImpl credentials + * @param credentials - User credentials * @return Response Object */ public static Response buildResetPasswordResponse(UserCredentialWrapper credentials) { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java index 9f159aef94..643cf3a9bf 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMAndroidOperationUtil.java @@ -33,7 +33,7 @@ import org.wso2.carbon.device.mgt.jaxrs.beans.android.WebApplication; public class MDMAndroidOperationUtil { /** - * This method is used to create Install AuthenticationImpl operation. + * This method is used to create Install Authentication operation. * * @param application MobileApp application * @return operation @@ -76,7 +76,7 @@ public class MDMAndroidOperationUtil { } /** - * This method is used to create Uninstall AuthenticationImpl operation. + * This method is used to create Uninstall Authentication operation. * @param application MobileApp application * @return operation * @throws MDMAPIException diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java index af30ef8be1..0d9f031162 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/util/MDMIOSOperationUtil.java @@ -35,7 +35,7 @@ import java.util.Properties; public class MDMIOSOperationUtil { /** - * This method is used to create Install AuthenticationImpl operation. + * This method is used to create Install Authentication operation. * * @param application MobileApp application * @return operation diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml index 56a63ef35d..3f2159018c 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/cxf-servlet.xml @@ -2,19 +2,19 @@ Admin-Webapp From 67b210fe869910a530e01a35cc1a18b141107416 Mon Sep 17 00:00:00 2001 From: inosh-perera Date: Thu, 12 May 2016 10:37:58 +0530 Subject: [PATCH 15/21] adding mutual ssl support in clustered setup --- .../mgt/core/impl/CertificateGenerator.java | 13 ++++ .../service/CertificateManagementService.java | 2 + .../CertificateManagementServiceImpl.java | 4 ++ .../CertificateAuthenticator.java | 65 +++++++++++-------- 4 files changed, 58 insertions(+), 26 deletions(-) diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java index d1882b3096..f6c051ebc2 100755 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateGenerator.java @@ -288,6 +288,19 @@ public class CertificateGenerator { return lookUpCertificate; } + public CertificateResponse verifyCertificateDN(String distinguishedName) throws KeystoreException { + CertificateResponse lookUpCertificate = null; + KeyStoreReader keyStoreReader = new KeyStoreReader(); + if (distinguishedName != null && !distinguishedName.isEmpty()) { + String[] dnSplits = distinguishedName.split("/CN="); + if (dnSplits != null) { + String commonNameExtracted = dnSplits[dnSplits.length-1]; + lookUpCertificate = keyStoreReader.getCertificateBySerial(commonNameExtracted); + } + } + return lookUpCertificate; + } + public static String getCommonName(X509Certificate requestCertificate) { String distinguishedName = requestCertificate.getSubjectDN().getName(); if(distinguishedName != null && !distinguishedName.isEmpty()) { diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementService.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementService.java index c91f0f34d6..d294dbc224 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementService.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementService.java @@ -56,6 +56,8 @@ public interface CertificateManagementService { public CertificateResponse verifyPEMSignature(X509Certificate requestCertificate) throws KeystoreException; + public CertificateResponse verifySubjectDN(String requestDN) throws KeystoreException; + public X509Certificate extractCertificateFromSignature(String headerSignature) throws KeystoreException; String extractChallengeToken(X509Certificate certificate); diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementServiceImpl.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementServiceImpl.java index 7157d08e6b..89fd9b4827 100644 --- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementServiceImpl.java +++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/service/CertificateManagementServiceImpl.java @@ -108,6 +108,10 @@ public class CertificateManagementServiceImpl implements CertificateManagementSe return certificateGenerator.verifyPEMSignature(requestCertificate); } + @Override public CertificateResponse verifySubjectDN(String requestDN) throws KeystoreException { + return certificateGenerator.verifyCertificateDN(requestDN); + } + public X509Certificate extractCertificateFromSignature(String headerSignature) throws KeystoreException { return certificateGenerator.extractCertificateFromSignature(headerSignature); } diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java index 6b40e2022b..0f9026a3a4 100644 --- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java +++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/CertificateAuthenticator.java @@ -28,6 +28,7 @@ public class CertificateAuthenticator implements WebappAuthenticator { private static final Log log = LogFactory.getLog(CertificateAuthenticator.class); private static final String CERTIFICATE_AUTHENTICATOR = "CertificateAuth"; private static final String MUTUAL_AUTH_HEADER = "mutual-auth-header"; + private static final String PROXY_MUTUAL_AUTH_HEADER = "proxy-mutual-auth-header"; private static final String CERTIFICATE_VERIFICATION_HEADER = "certificate-verification-header"; private static final String CLIENT_CERTIFICATE_ATTRIBUTE = "javax.servlet.request.X509Certificate"; @@ -38,8 +39,8 @@ public class CertificateAuthenticator implements WebappAuthenticator { @Override public boolean canHandle(Request request) { - if (request.getHeader(CERTIFICATE_VERIFICATION_HEADER) != null || request.getHeader(MUTUAL_AUTH_HEADER) != - null) { + if (request.getHeader(CERTIFICATE_VERIFICATION_HEADER) != null || request.getHeader(MUTUAL_AUTH_HEADER) != null + || request.getHeader(PROXY_MUTUAL_AUTH_HEADER) != null) { return true; } return false; @@ -56,35 +57,20 @@ public class CertificateAuthenticator implements WebappAuthenticator { String certVerificationHeader = request.getContext().findParameter(CERTIFICATE_VERIFICATION_HEADER); try { - - if (request.getHeader(MUTUAL_AUTH_HEADER) != null) { + // When there is a load balancer terminating mutual SSL, it should pass this header along and + // as the value of this header, the client certificate subject dn should be passed. + if (request.getHeader(PROXY_MUTUAL_AUTH_HEADER) != null) { + CertificateResponse certificateResponse = AuthenticatorFrameworkDataHolder.getInstance(). + getCertificateManagementService().verifySubjectDN(request.getHeader(PROXY_MUTUAL_AUTH_HEADER)); + authenticationInfo = checkCertificateResponse(certificateResponse); + } + else if (request.getHeader(MUTUAL_AUTH_HEADER) != null) { X509Certificate[] clientCertificate = (X509Certificate[]) request. getAttribute(CLIENT_CERTIFICATE_ATTRIBUTE); if (clientCertificate != null && clientCertificate[0] != null) { CertificateResponse certificateResponse = AuthenticatorFrameworkDataHolder.getInstance(). getCertificateManagementService().verifyPEMSignature(clientCertificate[0]); - if (certificateResponse == null) { - authenticationInfo.setStatus(Status.FAILURE); - authenticationInfo.setMessage("Certificate sent doesn't match any certificate in the store." + - " Unauthorized access attempt."); - } else if (certificateResponse.getCommonName() != null && !certificateResponse.getCommonName(). - isEmpty()) { - authenticationInfo.setTenantId(certificateResponse.getTenantId()); - authenticationInfo.setStatus(Status.CONTINUE); - authenticationInfo.setUsername(certificateResponse.getCommonName()); - try { - authenticationInfo.setTenantDomain(Utils. - getTenantDomain( - certificateResponse.getTenantId())); - } catch (AuthenticationException e) { - authenticationInfo.setStatus(Status.FAILURE); - authenticationInfo.setMessage("Could not identify tenant domain."); - } - } else { - authenticationInfo.setStatus(Status.FAILURE); - authenticationInfo.setMessage("A matching certificate is found, " + - "but the serial number is missing in the database."); - } + authenticationInfo = checkCertificateResponse(certificateResponse); } else { authenticationInfo.setStatus(Status.FAILURE); @@ -133,6 +119,33 @@ public class CertificateAuthenticator implements WebappAuthenticator { return authenticationInfo; } + private AuthenticationInfo checkCertificateResponse(CertificateResponse certificateResponse) { + AuthenticationInfo authenticationInfo = new AuthenticationInfo(); + if (certificateResponse == null) { + authenticationInfo.setStatus(Status.FAILURE); + authenticationInfo.setMessage("Certificate sent doesn't match any certificate in the store." + + " Unauthorized access attempt."); + } else if (certificateResponse.getCommonName() != null && !certificateResponse.getCommonName(). + isEmpty()) { + authenticationInfo.setTenantId(certificateResponse.getTenantId()); + authenticationInfo.setStatus(Status.CONTINUE); + authenticationInfo.setUsername(certificateResponse.getCommonName()); + try { + authenticationInfo.setTenantDomain(Utils. + getTenantDomain( + certificateResponse.getTenantId())); + } catch (AuthenticationException e) { + authenticationInfo.setStatus(Status.FAILURE); + authenticationInfo.setMessage("Could not identify tenant domain."); + } + } else { + authenticationInfo.setStatus(Status.FAILURE); + authenticationInfo.setMessage("A matching certificate is found, " + + "but the serial number is missing in the database."); + } + return authenticationInfo; + } + @Override public String getName() { return CERTIFICATE_AUTHENTICATOR; From 36c3a057dc2cb1232193aa8df8926f068026abfa Mon Sep 17 00:00:00 2001 From: Madhawa Date: Thu, 12 May 2016 11:25:20 +0530 Subject: [PATCH 16/21] created interfaces for the api classes in order add swagger definitions --- .../device/mgt/jaxrs/api/Authentication.java | 2 +- .../device/mgt/jaxrs/api/Configuration.java | 2 +- .../carbon/device/mgt/jaxrs/api/Device.java | 14 ++--- .../mgt/jaxrs/api/DeviceNotification.java | 2 +- .../carbon/device/mgt/jaxrs/api/Feature.java | 4 +- .../carbon/device/mgt/jaxrs/api/License.java | 6 +-- .../carbon/device/mgt/jaxrs/api/User.java | 2 +- .../src/main/webapp/META-INF/permissions.xml | 52 +++++++++---------- .../webapp/META-INF/webapp-classloading.xml | 14 ++--- 9 files changed, 49 insertions(+), 49 deletions(-) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java index 23e03ccfda..e28de808a0 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Authentication.java @@ -24,7 +24,7 @@ import javax.ws.rs.Consumes; import javax.ws.rs.Produces; /** - * AuthenticationImpl related REST-API interface. + * Authentication related REST-API interface. */ @Api(value = "Authentication") @Produces({ "application/json", "application/xml" }) diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java index 115d86797c..a1602eada3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Configuration.java @@ -25,7 +25,7 @@ import javax.ws.rs.*; import javax.ws.rs.core.Response; /** - * General Tenant ConfigurationImpl REST-API implementation. + * General Tenant Configuration REST-API implementation. * All end points support JSON, XMl with content negotiation. */ @Api(value = "Configuration", description = "General Tenant Configuration implementation") diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java index 949f40e4b7..e3d3d9e745 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Device.java @@ -36,7 +36,7 @@ public interface Device { * Get all devices. We have to use accept all the necessary query parameters sent by datatable. * Hence had to put lot of query params here. * - * @return DeviceImpl List + * @return Device List */ @GET @ApiOperation( @@ -63,7 +63,7 @@ public interface Device { /** * Fetch device details for a given device type and device Id. * - * @return DeviceImpl wrapped inside Response + * @return Device wrapped inside Response */ @GET @ApiOperation( @@ -81,8 +81,8 @@ public interface Device { /** * Fetch device details of a given user. * - * @param user UserImpl Name - * @return DeviceImpl + * @param user User Name + * @return Device */ @GET @Path("user/{user}") @@ -91,8 +91,8 @@ public interface Device { /** * Fetch device count of a given user. * - * @param user UserImpl Name - * @return DeviceImpl + * @param user User Name + * @return Device */ @GET @Path("user/{user}/count") @@ -117,7 +117,7 @@ public interface Device { /** * Get the list of devices that matches with the given name. * - * @param deviceName DeviceImpl name + * @param deviceName Device name * @param tenantDomain Callee tenant domain * @return list of devices. */ diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java index a9dbc34587..62c2bcdaa3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/DeviceNotification.java @@ -31,7 +31,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Response; /** - * DeviceNotificationImpl management REST-API implementation. + * DeviceNotification management REST-API implementation. * All end points support JSON, XMl with content negotiation. */ @Api(value = "DeviceNotification") diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java index 37765cb377..cafd085015 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/Feature.java @@ -37,9 +37,9 @@ import javax.ws.rs.core.Response; public interface Feature { /** - * Get all features for Mobile DeviceImpl Type + * Get all features for Mobile Device Type * - * @return FeatureImpl + * @return Feature */ @GET @Path("/{type}") diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java index c5320703b5..fe07dce2e3 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/License.java @@ -34,7 +34,7 @@ public interface License { /** * This method returns the license text related to a given device type and language code. * - * @param deviceType DeviceImpl type, ex: android, ios + * @param deviceType Device type, ex: android, ios * @param languageCode Language code, ex: en_US * @return Returns the license text */ @@ -47,8 +47,8 @@ public interface License { /** * This method is used to add license to a specific device type. * - * @param deviceType DeviceImpl type, ex: android, ios - * @param license LicenseImpl object + * @param deviceType Device type, ex: android, ios + * @param license License object * @return Returns the acknowledgement for the action */ @POST diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java index c65eeb29d5..e55a2bcb32 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/api/User.java @@ -36,7 +36,7 @@ import javax.ws.rs.core.Response; import java.util.List; /** - * This represents the JAX-RS services of UserImpl related functionality. + * This represents the JAX-RS services of User related functionality. */ @Api(value = "User") public interface User { diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml index 54e0e96a4a..89aa3f02f2 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/permissions.xml @@ -2,19 +2,19 @@ - + Device Management @@ -262,7 +262,7 @@ /devices/user/* GET - + @@ -373,7 +373,7 @@ - + @@ -381,7 +381,7 @@ - + List policies /device-mgt/admin/policies/list @@ -410,9 +410,9 @@ GET - + - + List roles /device-mgt/admin/roles/list @@ -504,9 +504,9 @@ /roles/count GET - + - + List users /device-mgt/admin/users/list @@ -660,9 +660,9 @@ /users/authorize POST - + - + Add Policy /device-mgt/admin/policies/add @@ -816,9 +816,9 @@ /policies/*/* GET - + - + Add policy /device-mgt/admin/policies/add @@ -839,7 +839,7 @@ /profiles/* DELETE - + @@ -860,7 +860,7 @@ - + @@ -875,9 +875,9 @@ - + - + View configuration /device-mgt/admin/platform-configs/view @@ -899,9 +899,9 @@ PUT - + - + Save certificate in the database /device-mgt/android/certificate/save @@ -920,7 +920,7 @@ /certificates/* DELETE - + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml index 99ff01249f..ed2ed21624 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml +++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/META-INF/webapp-classloading.xml @@ -3,19 +3,19 @@ - + device-mgt org.wso2.carbon.devicemgt @@ -52,5 +53,11 @@ - + + + io.swagger + swagger-annotations + provided + + diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/configuration/mgt/TenantConfiguration.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/configuration/mgt/TenantConfiguration.java index ece6a23a78..df19ddf1dc 100644 --- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/configuration/mgt/TenantConfiguration.java +++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/configuration/mgt/TenantConfiguration.java @@ -18,6 +18,9 @@ package org.wso2.carbon.device.mgt.common.configuration.mgt; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -30,10 +33,16 @@ import java.util.List; */ @XmlRootElement(name = "tenantConfiguration") @XmlAccessorType(XmlAccessType.NONE) + +@ApiModel(value = "TenantConfiguration", + description = "This class carries all information related to a Tenant configuration") public class TenantConfiguration implements Serializable { @XmlElement(name = "type") + @ApiModelProperty(name = "type", value = "type of device", required = true) private String type; + + @ApiModelProperty(name = "configuration", value = "List of Configuration Entries", required = true) @XmlElement(name = "configuration") private List configuration;