Merge pull request #1070 from warunalakshitha/remote-control

Remote control
revert-70aa11f8
Ruwan 7 years ago committed by GitHub
commit 8ebf3eb8fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,52 @@
/*
* Copyright (c) 2017, 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.beans;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import java.util.List;
@ApiModel(value = "RemoteSessionInfo", description = "Template of the remote session")
public class RemoteSessionInfo {
@ApiModelProperty(name = "Server Url", value = "Url of the remote session server.", required = true)
private String serverUrl;
@ApiModelProperty(name = "isEnabled", value = "Is remote session functionality enabled", required = true)
private Boolean isEnabled;
public String getServerUrl() {
return serverUrl;
}
public void setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
}
public Boolean getEnabled() {
return isEnabled;
}
public void setEnabled(Boolean enabled) {
isEnabled = enabled;
}
}

@ -0,0 +1,130 @@
/*
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.jaxrs.service.api;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.Extension;
import io.swagger.annotations.ExtensionProperty;
import io.swagger.annotations.Info;
import io.swagger.annotations.ResponseHeader;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Tag;
import org.wso2.carbon.apimgt.annotations.api.Scope;
import org.wso2.carbon.apimgt.annotations.api.Scopes;
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
import javax.validation.constraints.Size;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = "name", value = "remote_session_services"),
@ExtensionProperty(name = "context", value = "/api/device-mgt/v1.0/remote-session-services"),
})
}
),
tags = {
@Tag(name = "device_management", description = "")
}
)
@Scopes(
scopes = {
@Scope(
name = "Remote Session Connection",
description = "",
key = "perm:remote-session-service:connect",
permissions = {"/device-mgt/devices/owning-device/remote-session"}
)
}
)
@Path("/remote-session-services")
@Api(value = "Remote Session Service",
description = "This carries all the resources related to the remote session service functionality.")
public interface RemoteSessionService {
/**
* Retrieve Analytics for the device type
*/
@GET
@Path("connection/{deviceType}/{deviceId}")
@ApiOperation(
consumes = "application/json",
produces = "application/json",
httpMethod = "GET",
value = "Retrieve Connection Information for the device type",
notes = "",
response = Response.class,
tags = "Remote Session Service Management",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = Constants.SCOPE, value = "perm:remote-session-service:connect")
})
}
)
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "OK.",
response = Response.class,
responseHeaders = {
@ResponseHeader(
name = "Content-Type",
description = "The content type of the body"),
@ResponseHeader(
name = "Last-Modified",
description = "Date and time the resource was last modified.\n" +
"Used by caches, or in conditional requests."),
}),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid Device Identifiers found.",
response = Response.class),
@ApiResponse(
code = 401,
message = "Unauthorized. \n Unauthorized request."),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n Error on retrieving stats",
response = Response.class)
})
Response getRemoteSessionDeviceConnect(
@ApiParam(
name = "deviceId",
value = "The registered device Id.",
required = true)
@PathParam("deviceId") String deviceId,
@ApiParam(
name = "device-type",
value = "The device type, such as ios, android or windows.",
required = true)
@PathParam("deviceType")
@Size(max = 45)
String deviceType);
}

@ -0,0 +1,68 @@
/*
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.device.mgt.jaxrs.service.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.remote.session.RemoteSessionConfiguration;
import org.wso2.carbon.device.mgt.jaxrs.beans.RemoteSessionInfo;
import org.wso2.carbon.device.mgt.jaxrs.service.api.RemoteSessionService;
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;
/**
* The api for
*/
public class RemoteSessionServiceImpl implements RemoteSessionService {
private static Log log = LogFactory.getLog(RemoteSessionServiceImpl.class);
@Path("connect/{deviceType}/{deviceId}")
@GET
@Consumes("application/json")
@Produces("application/json")
public Response getRemoteSessionDeviceConnect(@PathParam("deviceId") String deviceId,
@PathParam("deviceType") String deviceType) {
//First, check whether the remote session is enabled.
RemoteSessionInfo sessionInfo = new RemoteSessionInfo();
sessionInfo.setEnabled(false);
DeviceManagementConfig deviceManagementConfig = DeviceConfigurationManager.getInstance()
.getDeviceManagementConfig();
if (deviceManagementConfig != null) {
RemoteSessionConfiguration remoteSessionConfiguration = deviceManagementConfig.getRemoteSessionConfiguration();
if (remoteSessionConfiguration != null) {
boolean isEnabled = remoteSessionConfiguration.isEnabled();
sessionInfo.setEnabled(isEnabled);
if (isEnabled) {
sessionInfo.setServerUrl(remoteSessionConfiguration.getRemoteSessionServerUrl());
}
return Response.ok().entity(sessionInfo).build();
}
}
return Response.ok().entity(sessionInfo).build();
}
}

@ -38,6 +38,7 @@
<ref bean="userManagementAdminService"/>
<ref bean="groupManagementService"/>
<ref bean="geoService"/>
<ref bean="remoteSessionService"/>
<ref bean="groupManagementAdminService"/>
<ref bean="applicationManagementAdminService"/>
<ref bean="deviceTypeManagementAdminService"/>
@ -81,6 +82,7 @@
<bean id="userManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.UserManagementServiceImpl"/>
<bean id="groupManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.GroupManagementServiceImpl"/>
<bean id="geoService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.GeoLocationBasedServiceImpl"/>
<bean id="remoteSessionService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.RemoteSessionServiceImpl"/>
<bean id="deviceManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.DeviceManagementAdminServiceImpl"/>
<bean id="applicationManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.ApplicationManagementAdminServiceImpl"/>
<bean id="groupManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.GroupManagementAdminServiceImpl"/>

@ -21,10 +21,12 @@ import org.wso2.carbon.device.mgt.core.config.cache.CertificateCacheConfiguratio
import org.wso2.carbon.device.mgt.core.config.geo.location.OperationAnalyticsConfiguration;
import org.wso2.carbon.device.mgt.core.config.cache.DeviceCacheConfiguration;
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
import org.wso2.carbon.device.mgt.core.config.keymanager.KeyManagerConfigurations;
import org.wso2.carbon.device.mgt.core.config.pagination.PaginationConfiguration;
import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
import org.wso2.carbon.device.mgt.core.config.pull.notification.PullNotificationConfiguration;
import org.wso2.carbon.device.mgt.core.config.push.notification.PushNotificationConfiguration;
import org.wso2.carbon.device.mgt.core.config.remote.session.RemoteSessionConfiguration;
import org.wso2.carbon.device.mgt.core.config.status.task.DeviceStatusTaskConfig;
import org.wso2.carbon.device.mgt.core.config.task.TaskConfiguration;
@ -41,6 +43,7 @@ public final class DeviceManagementConfig {
private DeviceManagementConfigRepository deviceManagementConfigRepository;
private TaskConfiguration taskConfiguration;
private IdentityConfigurations identityConfigurations;
private KeyManagerConfigurations keyManagerConfigurations;
private PolicyConfiguration policyConfiguration;
private PaginationConfiguration paginationConfiguration;
private PushNotificationConfiguration pushNotificationConfiguration;
@ -50,6 +53,8 @@ public final class DeviceManagementConfig {
private CertificateCacheConfiguration certificateCacheConfiguration;
private OperationAnalyticsConfiguration operationAnalyticsConfiguration;
private String defaultGroupsConfiguration;
private RemoteSessionConfiguration remoteSessionConfiguration;
@XmlElement(name = "ManagementRepository", required = true)
public DeviceManagementConfigRepository getDeviceManagementConfigRepository() {
@ -70,6 +75,15 @@ public final class DeviceManagementConfig {
this.identityConfigurations = identityConfigurations;
}
@XmlElement(name = "KeyManagerConfiguration", required = true)
public KeyManagerConfigurations getKeyManagerConfigurations() {
return keyManagerConfigurations;
}
public void setKeyManagerConfigurations(KeyManagerConfigurations keyManagerConfigurations) {
this.keyManagerConfigurations = keyManagerConfigurations;
}
@XmlElement(name = "PolicyConfiguration", required = true)
public PolicyConfiguration getPolicyConfiguration() {
return policyConfiguration;
@ -159,5 +173,13 @@ public final class DeviceManagementConfig {
public void setDefaultGroupsConfiguration(String defaultGroupsConfiguration) {
this.defaultGroupsConfiguration = defaultGroupsConfiguration;
}
@XmlElement(name = "RemoteSessionConfiguration", required = true)
public RemoteSessionConfiguration getRemoteSessionConfiguration() {
return remoteSessionConfiguration;
}
public void setRemoteSessionConfiguration(RemoteSessionConfiguration remoteSessionConfiguration) {
this.remoteSessionConfiguration = remoteSessionConfiguration;
}
}

@ -0,0 +1,59 @@
/*
* Copyright (c) 2017, 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.keymanager;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* Configurations related to key management.
*/
@XmlRootElement(name = "KeyManagerConfiguration")
public class KeyManagerConfigurations {
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,143 @@
/*
* Copyright (c) 2017, 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.remote.session;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* This class represents the information related to Remote Session configuration.
*/
@XmlRootElement(name = "RemoteSessionConfiguration")
public class RemoteSessionConfiguration {
private String remoteSessionServerUrl;
private boolean enabled;
private int maxHTTPConnectionPerHost;
private int maxTotalHTTPConnections;
private int maxMessagesPerSecond;
private int sessionIdleTimeOut;
private int maxSessionDuration;
private int sessionBufferSize;
public void setRemoteSessionServerUrl(String remoteSessionServerUrl) {
this.remoteSessionServerUrl = remoteSessionServerUrl;
}
/**
* Remote session server url
* @return
*/
@XmlElement(name = "RemoteSessionServerUrl", required = true)
public String getRemoteSessionServerUrl() {
return remoteSessionServerUrl;
}
/**
* Remote session enabled
* @return
*/
@XmlElement(name = "Enabled", required = true)
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* Maximum connections per host for external http invocations
* @return
*/
@XmlElement(name = "MaximumHTTPConnectionPerHost", required = true, defaultValue = "2")
public int getMaxHTTPConnectionPerHost() {
return maxHTTPConnectionPerHost;
}
public void setMaxHTTPConnectionPerHost(int maxHTTPConnectionPerHost) {
this.maxHTTPConnectionPerHost = maxHTTPConnectionPerHost;
}
/**
* Maximum total connections for external http invocation
*/
@XmlElement(name = "MaximumTotalHTTPConnections", required = true, defaultValue = "100")
public int getMaxTotalHTTPConnections() {
return maxTotalHTTPConnections;
}
public void setMaxTotalHTTPConnections(int maxTotalHTTPConnections) {
this.maxTotalHTTPConnections = maxTotalHTTPConnections;
}
/**
* This is for protect device from message spamming. Throttling limit in term of messages for device
* @return
*/
@XmlElement(name = "MaximumMessagesPerSecond", required = true, defaultValue = "10")
public int getMaxMessagesPerSession() {
return maxMessagesPerSecond;
}
public void setMaxMessagesPerSession(int maxMessagesPerSession) {
this.maxMessagesPerSecond = maxMessagesPerSession;
}
/**
* Maximum idle timeout in minutes
* @return
*/
@XmlElement(name = "SessionIdleTimeOut", required = true, defaultValue = "5")
public int getSessionIdleTimeOut() {
return sessionIdleTimeOut;
}
public void setSessionIdleTimeOut(int sessionIdleTimeOut) {
this.sessionIdleTimeOut = sessionIdleTimeOut;
}
/**
* Maximum session duration in minutes
* @return
*/
@XmlElement(name = "MaximumSessionDuration", required = true, defaultValue = "15")
public int getMaxSessionDuration() {
return maxSessionDuration;
}
public void setMaxSessionDuration(int maxSessionDuration) {
this.maxSessionDuration = maxSessionDuration;
}
/**
* Maximum session buffer size in kilo bytes
* @return
*/
@XmlElement(name = "SessionBufferSize", required = true, defaultValue = "640")
public int getSessionBufferSize() {
return sessionBufferSize;
}
public void setSessionBufferSize(int sessionBufferSize) {
this.sessionBufferSize = sessionBufferSize;
}
}

@ -32,6 +32,7 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
@ -45,6 +46,7 @@ public class ConfigOperationDAOImpl extends GenericOperationDAOImpl {
PreparedStatement stmt = null;
try {
operationId = super.addOperation(operation);
operation.setCreatedTimeStamp(new Timestamp(new java.util.Date().getTime()).toString());
Connection conn = OperationManagementDAOFactory.getConnection();
stmt = conn.prepareStatement("INSERT INTO DM_CONFIG_OPERATION(OPERATION_ID, OPERATION_CONFIG) VALUES(?, ?)");
stmt.setInt(1, operationId);

@ -22,7 +22,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationResponse;
import org.wso2.carbon.device.mgt.core.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.*;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.ConfigOperation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.PolicyOperation;
import org.wso2.carbon.device.mgt.core.dto.operation.mgt.ProfileOperation;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@ -32,6 +36,7 @@ import java.sql.SQLException;
public class OperationDAOUtil {
private static final Log log = LogFactory.getLog(OperationDAOUtil.class);
public static Operation convertOperation(org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation) {
Operation dtoOperation = null;
@ -70,6 +75,10 @@ public class OperationDAOUtil {
dtoOperation.setReceivedTimeStamp(operation.getReceivedTimeStamp());
dtoOperation.setProperties(operation.getProperties());
if (operation.getControl() != null) {
dtoOperation.setControl(Operation.Control.valueOf(operation.getControl().toString()));
}
return dtoOperation;
}

@ -6,6 +6,7 @@
"httpsURL": "https://%iot.gateway.host%:%iot.gateway.https.port%",
"httpURL": "http://%iot.gateway.host%:%iot.gateway.http.port%",
"wssURL": "https://%iot.analytics.host%:%iot.analytics.https.port%",
"remoteSessionWSURL": "https://%iot.core.host%:%iot.core.https.port%",
"portalURL": "https://%iot.analytics.host%:%iot.analytics.https.port%",
"dashboardServerURL": "%https.ip%",
"androidEnrollmentDir": "/android-web-agent/enrollment",

@ -46,6 +46,11 @@
<AdminUsername>admin</AdminUsername>
<AdminPassword>admin</AdminPassword>
</IdentityConfiguration>
<KeyManagerConfiguration>
<ServerUrl>https://localhost:9443</ServerUrl>
<AdminUsername>admin</AdminUsername>
<AdminPassword>admin</AdminPassword>
</KeyManagerConfiguration>
<PolicyConfiguration>
<MonitoringClass>org.wso2.carbon.policy.mgt</MonitoringClass>
<MonitoringEnable>true</MonitoringEnable>
@ -91,6 +96,16 @@
<isEnabled>false</isEnabled>
<PublishLocationOperationResponse>false</PublishLocationOperationResponse>
</GeoLocationConfiguration>
<RemoteSessionConfiguration>
<Enabled>true</Enabled>
<RemoteSessionServerUrl>wss://localhost:9443</RemoteSessionServerUrl>
<MaximumHTTPConnectionPerHost>2</MaximumHTTPConnectionPerHost>
<MaximumTotalHTTPConnections>100</MaximumTotalHTTPConnections>
<MaximumMessagesPerSecond>20</MaximumMessagesPerSecond>
<SessionIdleTimeOut>15</SessionIdleTimeOut>
<MaximumSessionDuration>60</MaximumSessionDuration>
<SessionBufferSize>640</SessionBufferSize>
</RemoteSessionConfiguration>
<DefaultGroupsConfiguration>BYOD,COPE</DefaultGroupsConfiguration>
</DeviceMgtConfiguration>

Loading…
Cancel
Save