adding App management integeration related code

revert-70aa11f8
inosh-perera 10 years ago
parent 3070488adf
commit 4a061e7be2

@ -78,7 +78,9 @@
org.wso2.carbon.governance.api.generic.dataobjects, org.wso2.carbon.governance.api.generic.dataobjects,
org.wso2.carbon.apimgt.api, org.wso2.carbon.apimgt.api,
org.wso2.carbon.apimgt.api.model, org.wso2.carbon.apimgt.api.model,
org.wso2.carbon.apimgt.impl org.wso2.carbon.apimgt.impl,
org.wso2.carbon.identity.oauth.stub,
org.wso2.carbon.identity.oauth.stub.dto
</Import-Package> </Import-Package>
<Export-Package> <Export-Package>
!org.wso2.carbon.device.mgt.core.internal, !org.wso2.carbon.device.mgt.core.internal,
@ -195,6 +197,10 @@
<groupId>org.apache.axis2.wso2</groupId> <groupId>org.apache.axis2.wso2</groupId>
<artifactId>axis2</artifactId> <artifactId>axis2</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.wso2.carbon.identity</groupId>
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

@ -28,4 +28,15 @@ public final class DeviceManagementConstants {
public static final String DEFAULT_LICENSE_CONFIG_XML_NAME = "license-config.xml"; public static final String DEFAULT_LICENSE_CONFIG_XML_NAME = "license-config.xml";
} }
public static final class AppManagement {
private AppManagement() {
throw new AssertionError();
}
public static final String OAUTH_APPLICATION_NAME = "app_management_application";
public static final String OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS = "client_credentials";
public final static String OAUTH_VERSION_2 = "oauth-2.0";
public final static String OAUTH_ADMIN_SERVICE = "/services/OAuthAdminService";
}
} }

@ -77,7 +77,7 @@ public class APIPublisherConfig {
Document doc = DeviceManagerUtil.convertToDocument(publisherConfig); Document doc = DeviceManagerUtil.convertToDocument(publisherConfig);
/* Un-marshaling Device Management configuration */ /* Un-marshaling Device Management configuration */
JAXBContext ctx = JAXBContext.newInstance(DeviceManagementConfig.class); JAXBContext ctx = JAXBContext.newInstance(APIPublisherConfig.class);
Unmarshaller unmarshaller = ctx.createUnmarshaller(); Unmarshaller unmarshaller = ctx.createUnmarshaller();
config = (APIPublisherConfig) unmarshaller.unmarshal(doc); config = (APIPublisherConfig) unmarshaller.unmarshal(doc);
} catch (JAXBException e) { } catch (JAXBException e) {

@ -0,0 +1,60 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt;
/**
* Handles the exceptions related to Application management.
*/
public class AppManagementException extends Exception {
private static final long serialVersionUID = -8933142342423122660L;
private String errorMessage;
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public AppManagementException(String msg, Exception nestedEx) {
super(msg, nestedEx);
setErrorMessage(msg);
}
public AppManagementException(String message, Throwable cause) {
super(message, cause);
setErrorMessage(message);
}
public AppManagementException(String msg) {
super(msg);
setErrorMessage(msg);
}
public AppManagementException() {
super();
}
public AppManagementException(Throwable cause) {
super(cause);
}
}

@ -0,0 +1,132 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
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.core.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.ServiceAuthenticator;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
import org.wso2.carbon.device.mgt.core.dto.Application;
import org.wso2.carbon.device.mgt.core.service.AppManager;
import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceException;
import org.wso2.carbon.identity.oauth.stub.OAuthAdminServiceStub;
import org.wso2.carbon.identity.oauth.stub.dto.OAuthConsumerAppDTO;
import java.rmi.RemoteException;
/**
* Implements AppManager interface
*/
public class AppManagerImplHttp implements AppManager {
private static Log log = LogFactory.getLog(AppManagerImplHttp.class);
private static AppManagementConfig appManagementConfig;
private static final String GET_APP_LIST_URL =
"store/apis/assets/mobileapp?domain=carbon.super&page=1";
private static String appManagerUrl;
private static String consumerKey;
private static String consumerSecret;
public AppManagerImplHttp(AppManagementConfig appManagementConfig) {
this.appManagementConfig = appManagementConfig;
this.appManagerUrl = appManagementConfig.getAppManagerUrl();
this.consumerKey = appManagementConfig.getConsumerKey();
this.consumerSecret = appManagementConfig.getConsumerSecret();
}
@Override
public Application[] getApplicationList(String domain, int pageNumber, int size)
throws AppManagementException {
return new Application[0];
}
@Override public void updateApplicationStatusOnDevice(DeviceIdentifier deviceId,
Application application, String status) {
}
@Override public String getApplicationStatusOnDevice(DeviceIdentifier deviceId,
Application application) {
return null;
}
@Override public Credential getClientCredentials() throws AppManagementException {
OAuthAdminServiceStub oAuthAdminServiceStub;
OAuthConsumerAppDTO appDTO = new OAuthConsumerAppDTO();
appDTO.setApplicationName(DeviceManagementConstants.AppManagement.OAUTH_APPLICATION_NAME);
appDTO.setGrantTypes(
DeviceManagementConstants.AppManagement.OAUTH2_GRANT_TYPE_CLIENT_CREDENTIALS);
appDTO.setOAuthVersion(DeviceManagementConstants.AppManagement.OAUTH_VERSION_2);
IdentityConfigurations identityConfigurations =
DeviceConfigurationManager.getInstance().getDeviceManagementConfig()
.getDeviceManagementConfigRepository()
.getIdentityConfigurations();
String serverUrl = identityConfigurations.getServerUrl();
String username = identityConfigurations.getAdminUsername();
String password = identityConfigurations.getAdminPassword();
String oauthAdminServiceUrl = serverUrl +
DeviceManagementConstants.AppManagement.OAUTH_ADMIN_SERVICE;
try {
ConfigurationContext configContext = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(null, null);
oAuthAdminServiceStub = new OAuthAdminServiceStub(configContext, oauthAdminServiceUrl);
ServiceAuthenticator authenticator = ServiceAuthenticator.getInstance();
authenticator.setAccessUsername(username);
authenticator.setAccessPassword(password);
authenticator.authenticate(oAuthAdminServiceStub._getServiceClient());
OAuthConsumerAppDTO createdAppData = null;
try {
createdAppData = oAuthAdminServiceStub.getOAuthApplicationDataByAppName(
DeviceManagementConstants.AppManagement.OAUTH_APPLICATION_NAME);
}
//application doesn't exist. Due to the way getOAuthApplicationDataByAppName has been
//implemented, it throws an AxisFault if the App doesn't exist. Hence the catch.
catch (AxisFault fault) {
oAuthAdminServiceStub.registerOAuthApplicationData(appDTO);
createdAppData = oAuthAdminServiceStub.getOAuthApplicationDataByAppName(
DeviceManagementConstants.AppManagement.OAUTH_APPLICATION_NAME);
}
Credential credential = new Credential();
credential.setConsumerKey(createdAppData.getOauthConsumerKey());
credential.setConsumerSecret(createdAppData.getOauthConsumerSecret());
return credential;
} catch (RemoteException e) {
String msg = "Error while registering a new application.";
log.error(msg, e);
throw new AppManagementException(msg, e);
} catch (OAuthAdminServiceException e) {
String msg = "Error while working with oauth admin services stub.";
log.error(msg, e);
throw new AppManagementException(msg, e);
}
}
}

@ -0,0 +1,68 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt.config;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "AppManagementConfig")
public class AppManagementConfig {
private boolean enabled;
private String appManagerUrl;
private String consumerKey;
private String consumerSecret;
@XmlElement(name = "ConsumerKey", required = true)
public String getConsumerKey() {
return consumerKey;
}
public void setConsumerKey(String consumerKey) {
this.consumerKey = consumerKey;
}
@XmlElement(name = "ConsumerSecret", required = true)
public String getConsumerSecret() {
return consumerSecret;
}
public void setConsumerSecret(String consumerSecret) {
this.consumerSecret = consumerSecret;
}
@XmlElement(name = "Enabled", required = true)
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
@XmlElement(name = "AppManagerUrl", required = false)
public String getAppManagerUrl() {
return appManagerUrl;
}
public void setAppManagerUrl(String appManagerUrl) {
this.appManagerUrl = appManagerUrl;
}
}

@ -0,0 +1,72 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt.config;
import org.w3c.dom.Document;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementException;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
import org.wso2.carbon.utils.CarbonUtils;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.File;
public class AppManagementConfigurationManager {
private AppManagementConfig appManagementConfig;
private static AppManagementConfigurationManager appManagementConfigManager;
private static final String APP_MANAGER_CONFIG_FILE = "app-management-config.xml";
private static final String APP_MANAGER_CONFIG_PATH =
CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + APP_MANAGER_CONFIG_FILE;
public static AppManagementConfigurationManager getInstance() {
if (appManagementConfigManager == null) {
synchronized (AppManagementConfigurationManager.class) {
if (appManagementConfigManager == null) {
appManagementConfigManager = new AppManagementConfigurationManager();
}
}
}
return appManagementConfigManager;
}
public synchronized void initConfig() throws AppManagementException {
try {
File appManagementConfig =
new File(AppManagementConfigurationManager.APP_MANAGER_CONFIG_PATH);
Document doc = DeviceManagerUtil.convertToDocument(appManagementConfig);
/* Un-marshaling App Management configuration */
JAXBContext cdmContext = JAXBContext.newInstance(AppManagementConfig.class);
Unmarshaller unmarshaller = cdmContext.createUnmarshaller();
this.appManagementConfig = (AppManagementConfig) unmarshaller.unmarshal(doc);
} catch (Exception e) {
/* Catches generic exception as there's no specific task to be carried out catching a particular
exception */
throw new AppManagementException(
"Error occurred while initializing application management Configurations", e);
}
}
public AppManagementConfig getAppManagementConfig() {
return appManagementConfig;
}
}

@ -0,0 +1,74 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt.oauth;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HttpTransportProperties;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementException;
/**
* Authenticate a given service client.
*/
public class ServiceAuthenticator {
private static ServiceAuthenticator instance = null;
private String accessUsername = null;
private String accessPassword = null;
private ServiceAuthenticator() {
}
public static ServiceAuthenticator getInstance() {
if (instance != null) {
return instance;
} else {
instance = new ServiceAuthenticator();
return instance;
}
}
public void authenticate(ServiceClient client) throws AppManagementException {
if (accessUsername != null && accessPassword != null) {
Options option = client.getOptions();
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
auth.setUsername(accessUsername);
auth.setPassword(accessPassword);
auth.setPreemptiveAuthentication(true);
option.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
option.setManageSession(true);
} else {
throw new AppManagementException("Authentication username or password not set");
}
}
public void setAccessUsername(String accessUsername) {
this.accessUsername = accessUsername;
}
public void setAccessPassword(String accessPassword) {
this.accessPassword = accessPassword;
}
}

@ -0,0 +1,43 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto;
/**
* DTO of the consumer key and secret
*/
public class Credential {
String consumerKey;
String consumerSecret;
public String getConsumerKey() {
return consumerKey;
}
public void setConsumerKey(String consumerKey) {
this.consumerKey = consumerKey;
}
public String getConsumerSecret() {
return consumerSecret;
}
public void setConsumerSecret(String consumerSecret) {
this.consumerSecret = consumerSecret;
}
}

@ -19,6 +19,7 @@ package org.wso2.carbon.device.mgt.core.config;
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations; import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations;
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
@ -29,8 +30,9 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "ManagementRepository") @XmlRootElement(name = "ManagementRepository")
public class DeviceManagementConfigRepository { public class DeviceManagementConfigRepository {
private DataSourceConfig dataSourceConfig; private DataSourceConfig dataSourceConfig;
private EmailConfigurations emailConfigurations; private EmailConfigurations emailConfigurations;
private IdentityConfigurations identityConfigurations;
@XmlElement(name = "DataSourceConfiguration", required = true) @XmlElement(name = "DataSourceConfiguration", required = true)
public DataSourceConfig getDataSourceConfig() { public DataSourceConfig getDataSourceConfig() {
@ -40,13 +42,22 @@ public class DeviceManagementConfigRepository {
public void setDataSourceConfig(DataSourceConfig dataSourceConfig) { public void setDataSourceConfig(DataSourceConfig dataSourceConfig) {
this.dataSourceConfig = dataSourceConfig; this.dataSourceConfig = dataSourceConfig;
} }
@XmlElement(name = "EmailClientConfiguration", required = true) @XmlElement(name = "EmailClientConfiguration", required = true)
public EmailConfigurations getEmailConfigurations() { public EmailConfigurations getEmailConfigurations() {
return emailConfigurations; return emailConfigurations;
} }
public void setEmailConfigurations(EmailConfigurations emailConfigurations) { public void setEmailConfigurations(EmailConfigurations emailConfigurations) {
this.emailConfigurations = emailConfigurations; this.emailConfigurations = emailConfigurations;
} }
@XmlElement(name = "IdentityConfiguration", required = true)
public IdentityConfigurations getIdentityConfigurations() {
return identityConfigurations;
}
public void setIdentityConfigurations(IdentityConfigurations identityConfigurations) {
this.identityConfigurations = identityConfigurations;
}
} }

@ -0,0 +1,59 @@
/*
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.config.identity;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* Configurations related to identity management.
*/
@XmlRootElement(name = "IdentityConfiguration")
public class IdentityConfigurations {
private String serverUrl;
private String adminUsername;
private String adminPassword;
@XmlElement(name = "AdminUsername", required = true)
public String getAdminUsername() {
return adminUsername;
}
public void setAdminUsername(String adminUsername) {
this.adminUsername = adminUsername;
}
@XmlElement(name = "AdminPassword", required = true)
public String getAdminPassword() {
return adminPassword;
}
public void setAdminPassword(String adminPassword) {
this.adminPassword = adminPassword;
}
@XmlElement(name = "ServerUrl", required = true)
public String getServerUrl() {
return serverUrl;
}
public void setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
}
}

@ -0,0 +1,101 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.dto;
import java.io.Serializable;
/**
* Holds data about an application that can be installed on a device.
*/
public class Application implements Serializable {
private static final long serialVersionUID = -81011063453453455L;
String id;
String name;
String packageName;
String platform;
String fileUrl;
String applicationType;
String category;
public String getApplicationType() {
return applicationType;
}
public void setApplicationType(String applicationType) {
this.applicationType = applicationType;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public String getPlatform() {
return platform;
}
public void setPlatform(String platform) {
this.platform = platform;
}
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
String type;
}

@ -21,7 +21,9 @@ package org.wso2.carbon.device.mgt.core.internal;
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager; import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService; import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig; import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
import org.wso2.carbon.device.mgt.core.service.AppManager;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
import org.wso2.carbon.registry.core.service.RegistryService; import org.wso2.carbon.registry.core.service.RegistryService;
import org.wso2.carbon.user.core.service.RealmService; import org.wso2.carbon.user.core.service.RealmService;
@ -36,6 +38,8 @@ public class DeviceManagementDataHolder {
private RegistryService registryService; private RegistryService registryService;
private LicenseConfig licenseConfig; private LicenseConfig licenseConfig;
private APIPublisherService apiPublisherService; private APIPublisherService apiPublisherService;
private AppManager appManager;
private AppManagementConfig appManagerConfig;
private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder(); private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder();
@ -106,4 +110,20 @@ public class DeviceManagementDataHolder {
this.apiPublisherService = apiPublisherService; this.apiPublisherService = apiPublisherService;
} }
public AppManager getAppManager() {
return appManager;
}
public void setAppManager(AppManager appManager) {
this.appManager = appManager;
}
public AppManagementConfig getAppManagerConfig() {
return appManagerConfig;
}
public void setAppManagerConfig(AppManagementConfig appManagerConfig) {
this.appManagerConfig = appManagerConfig;
}
} }

@ -34,14 +34,19 @@ import org.wso2.carbon.device.mgt.core.DeviceManagementServiceProviderImpl;
import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService; import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherService;
import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherServiceImpl; import org.wso2.carbon.device.mgt.core.api.mgt.APIPublisherServiceImpl;
import org.wso2.carbon.device.mgt.core.api.mgt.APIRegistrationStartupObserver; import org.wso2.carbon.device.mgt.core.api.mgt.APIRegistrationStartupObserver;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagerImplHttp;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager; import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig; import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig; import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig; import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfigurationManager; import org.wso2.carbon.device.mgt.core.config.license.LicenseConfigurationManager;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory; import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.license.mgt.LicenseManagerImpl; import org.wso2.carbon.device.mgt.core.license.mgt.LicenseManagerImpl;
import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory; import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.service.AppManagementServiceImpl;
import org.wso2.carbon.device.mgt.core.service.AppManager;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementService; import org.wso2.carbon.device.mgt.core.service.DeviceManagementService;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementServiceImpl; import org.wso2.carbon.device.mgt.core.service.DeviceManagementServiceImpl;
import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer; import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer;
@ -106,6 +111,13 @@ public class DeviceManagementServiceComponent {
DeviceManagementDataHolder.getInstance().setLicenseManager(licenseManager); DeviceManagementDataHolder.getInstance().setLicenseManager(licenseManager);
DeviceManagementDataHolder.getInstance().setLicenseConfig(licenseConfig); DeviceManagementDataHolder.getInstance().setLicenseConfig(licenseConfig);
AppManagementConfigurationManager.getInstance().initConfig();
AppManagementConfig appConfig =
AppManagementConfigurationManager.getInstance().getAppManagementConfig();
DeviceManagementDataHolder.getInstance().setAppManagerConfig(appConfig);
AppManagerImplHttp appManager = new AppManagerImplHttp(appConfig);
DeviceManagementDataHolder.getInstance().setAppManager(appManager);
OperationManagementDAOFactory.init(dsConfig); OperationManagementDAOFactory.init(dsConfig);
/* If -Dsetup option enabled then create device management database schema */ /* If -Dsetup option enabled then create device management database schema */
@ -146,6 +158,11 @@ public class DeviceManagementServiceComponent {
bundleContext.registerService(APIPublisherService.class, publisher, null); bundleContext.registerService(APIPublisherService.class, publisher, null);
bundleContext.registerService(ServerStartupObserver.class, new APIRegistrationStartupObserver(), null); bundleContext.registerService(ServerStartupObserver.class, new APIRegistrationStartupObserver(), null);
/* Registering App Management service */
bundleContext.registerService(AppManager.class.getName(),
new AppManagementServiceImpl(), null);
} }
private void setupDeviceManagementSchema(DataSourceConfig config) private void setupDeviceManagementSchema(DataSourceConfig config)

@ -0,0 +1,48 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.service;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementException;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential;
import org.wso2.carbon.device.mgt.core.dto.Application;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
public class AppManagementServiceImpl implements AppManager {
@Override public Application[] getApplicationList(String domain, int pageNumber, int size)
throws AppManagementException {
return DeviceManagementDataHolder.getInstance().getAppManager()
.getApplicationList(domain, pageNumber, size);
}
@Override public void updateApplicationStatusOnDevice(DeviceIdentifier deviceId,
Application application, String status) {
DeviceManagementDataHolder.getInstance().getAppManager()
.updateApplicationStatusOnDevice(deviceId, application, status);
}
@Override public String getApplicationStatusOnDevice(DeviceIdentifier deviceId,
Application application) {
return null;
}
@Override public Credential getClientCredentials() throws AppManagementException{
return DeviceManagementDataHolder.getInstance().getAppManager().getClientCredentials();
}
}

@ -0,0 +1,69 @@
/*
* Copyright (c) 2015 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.core.service;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.core.app.mgt.oauth.dto.Credential;
import org.wso2.carbon.device.mgt.core.dto.Application;
import org.wso2.carbon.device.mgt.core.app.mgt.AppManagementException;
/**
* This will handle the Application management side of MDM by acting a bridge between
* MDM and App manager product.
*/
public interface AppManager {
/**
* This will communicate with App manager and retrieve the list of apps in the store, when
* the domain is given. The list is broken down into pages and retrieved.
* @param domain Tenant domain of the app list to be retrieved.
* @param pageNumber Page number of the list.
* @param size Number of items in one page.
* @return The list of applications belongs to a domain.
* @throws AppManagementException
*/
Application [] getApplicationList(String domain, int pageNumber, int size)
throws AppManagementException;
/**
* Updates the application, install/uninstall status of the a certain application, on a device.
* @param deviceId Device id of the device that the status belongs to.
* @param application Application details of the app being updated.
* @param status Installed/Uninstalled
*/
void updateApplicationStatusOnDevice(DeviceIdentifier deviceId, Application application,
String status);
/**
* Retrieve the status of an application on a device. Whether it is installed or not.
* @param deviceId Device id of the device that the status belongs to.
* @param application Application details of the app being searched.
* @return Status of the application on the device.
*/
String getApplicationStatusOnDevice(DeviceIdentifier deviceId, Application application);
/**
* Create a new application and return client Id and secret.
* @return consumer Id and consumer key.
* * @throws AppManagementException
*/
Credential getClientCredentials() throws AppManagementException;
}

@ -105,6 +105,8 @@
<bundleDef> <bundleDef>
org.wso2.carbon.commons:org.wso2.carbon.email.verification org.wso2.carbon.commons:org.wso2.carbon.email.verification
</bundleDef> </bundleDef>
<bundleDef>org.wso2.carbon.identity:org.wso2.carbon.identity.oauth.stub:${carbon.identity.version}
</bundleDef>
</bundles> </bundles>
<importFeatures> <importFeatures>
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef> <importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
~
~ WSO2 Inc. licenses this file to you under the Apache License,
~ Version 2.0 (the "License"); you may not use this file except
~ in compliance with the License.
~ you may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<AppManagementConfig>
<Enabled>true</Enabled>
<AppManagerUrl>http:/www.google.com</AppManagerUrl>
</AppManagementConfig>

@ -30,6 +30,11 @@
<keepAliveTime>20</keepAliveTime> <keepAliveTime>20</keepAliveTime>
<ThreadQueueCapacity>1000</ThreadQueueCapacity> <ThreadQueueCapacity>1000</ThreadQueueCapacity>
</EmailClientConfiguration> </EmailClientConfiguration>
<IdentityConfiguration>
<ServerUrl>https://localhost:9443</ServerUrl>
<AdminUsername>admin</AdminUsername>
<AdminPassword>admin</AdminPassword>
</IdentityConfiguration>
</ManagementRepository> </ManagementRepository>
</DeviceMgtConfiguration> </DeviceMgtConfiguration>

@ -154,6 +154,12 @@
<artifactId>org.wso2.carbon.device.mgt.user.common</artifactId> <artifactId>org.wso2.carbon.device.mgt.user.common</artifactId>
<version>${carbon.device.mgt.version}</version> <version>${carbon.device.mgt.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.wso2.carbon.identity</groupId>
<artifactId>org.wso2.carbon.identity.oauth.stub</artifactId>
<version>${carbon.identity.version}</version>
</dependency>
<!-- Device Management dependencies --> <!-- Device Management dependencies -->
<!-- Governance dependencies --> <!-- Governance dependencies -->
@ -1056,6 +1062,7 @@
<!-- Identity --> <!-- Identity -->
<carbon.identity.version>4.3.3</carbon.identity.version> <carbon.identity.version>4.3.3</carbon.identity.version>
<!-- Multi-tenancy --> <!-- Multi-tenancy -->
<carbon.multitenancy.version>4.3.3</carbon.multitenancy.version> <carbon.multitenancy.version>4.3.3</carbon.multitenancy.version>

Loading…
Cancel
Save