Merge pull request #263 from hasuniea/master

add swagger annotations to windows plugin
revert-dabc3590
Hasunie 9 years ago
commit f47d465d81

@ -142,6 +142,7 @@ public interface DeviceManagementService {
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Licence agreement"),
@ApiResponse(code = 500, message = "Error occurred while retrieving the license configured for Android " +
"device enrolment")})
"device enrolment")
})
String getLicense() throws AndroidAgentException;
}

@ -305,5 +305,10 @@
<artifactId>json</artifactId>
<version>2.0.0.wso2v1</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

@ -18,12 +18,21 @@
package org.wso2.carbon.mdm.mobileservices.windows.common.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Class for java CacheEntry
*/
@ApiModel(value = "CacheEntry",
description = "This class carries all information related to token cache")
public class CacheEntry {
@ApiModelProperty(name = "deviceID", value = "Windows deviceIdentifier", required = true)
private String deviceID;
@ApiModelProperty(name = "username", value = "Enrolled User", required = true)
private String username;
@ApiModelProperty(name = "ownership", value = "Enrollment ownership(BYOD/COPE)", required = true)
private String ownership;
public String getOwnership() {

@ -18,10 +18,17 @@
package org.wso2.carbon.mdm.mobileservices.windows.common.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Class for challenge token
*/
@ApiModel(value = "Token", description = "Details related device encryption.")
public class Token {
@ApiModelProperty(name = "challengeToken",
value = "Enrollment Binary security token", required = true)
private String challengeToken;
public String getChallengeToken() {

@ -18,17 +18,28 @@
package org.wso2.carbon.mdm.mobileservices.windows.common.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Bean class for storing Windows plugin properties after reading the property file.
*/
@ApiModel(value = "WindowsPluginProperties", description = "Windows plugin related properties.")
public class WindowsPluginProperties {
@ApiModelProperty(name = "keyStorePassword", value = "Password of the keyStore.", required = true)
private String keyStorePassword;
@ApiModelProperty(name = "privateKeyPassword", value = "password of the privateKey.", required = true)
private String privateKeyPassword;
@ApiModelProperty(name = "commonName", value = "Common Name of the certificate.", required = true)
private String commonName;
@ApiModelProperty(name = "authPolicy", value = "Windows enrollment authentication policy(Federated/on-premise).", required = true)
private String authPolicy;
@ApiModelProperty(name = "domain", value = "Domain of the given Email.", required = true)
private String domain;
@ApiModelProperty(name = "notBeforeDays", value = "Number of days to before the certificate expire.", required = true)
private int notBeforeDays;
@ApiModelProperty(name = "notAfterDays", value = "Number of days to after the certificate has been expired.", required = true)
private int notAfterDays;
public String getKeyStorePassword() {

@ -18,13 +18,23 @@
package org.wso2.carbon.mdm.mobileservices.windows.common.util;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* DTO class to hold the information of authenticated user.
*/
@ApiModel(value = "ApplicationInstallation",
description = "This class carries all information related to install application")
public class AuthenticationInfo {
@ApiModelProperty(name = "message", value = "Authentication info message.", required = true)
private String message;
@ApiModelProperty(name = "username", value = "Username of the enrolled user.", required = true)
private String username;
@ApiModelProperty(name = "tenantDomain", value = "Enrolled user's tenant domain.", required = true)
private String tenantDomain;
@ApiModelProperty(name = "tenantId", value = "Enrolled user's tenant ID)", required = true)
private int tenantId = -1;
public String getUsername() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.common.util;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import java.util.List;
@ -25,9 +27,12 @@ import java.util.List;
/**
* Class for holding device ids.
*/
@ApiModel(value = "DeviceIDHolder", description = "This class carries all information related to DeviceIDs")
public class DeviceIDHolder {
@ApiModelProperty(name = "errorDeviceIdList", value = "Error occurred DeviceIds.)", required = true)
private List<String> errorDeviceIdList;
@ApiModelProperty(name = "validDeviceIDList", value = "Valid DeviceIDs.)", required = true)
private List<DeviceIdentifier> validDeviceIDList;
public List<String> getErrorDeviceIdList() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,8 +30,11 @@ import java.util.List;
/**
* Configurations that needs to be added on the device.
*/
@ApiModel(value = "AddTag", description = "This class carries all information related to Syncml AddTag.")
public class AddTag {
@ApiModelProperty(name = "commandId", value = "CommandID of the AddTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "items", value = "List of items of the AddTag.", required = true)
List<Item> items;
public int getCommandId() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -25,9 +27,12 @@ import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Inform an event occurred from device to server.
*/
@ApiModel(value = "Alert",
description = "This class carries all information related to Syncml alert.")
public class Alert {
@ApiModelProperty(name = "commandId", value = "CommandId of The Syncml Alert.", required = true)
int commandId = -1;
@ApiModelProperty(name = "data", value = "Data of the AlertTag.", required = true)
String data;
public int getCommandId() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,9 +30,13 @@ import java.util.List;
/**
* Wrapper for other SyncML elements.
*/
@ApiModel(value = "AtomicTag", description = "This class carries all information related to syncml Engine Atomic tag")
public class AtomicTag {
@ApiModelProperty(name = "commandId", value = "Syncml Atomic tag CommandId", required = true)
int commandId = -1;
@ApiModelProperty(name = "adds", value = "List of addtags", required = true)
List<AddTag> adds;
@ApiModelProperty(name = "replaces", value = "List of replace tags", required = true)
List<Replace> replaces;
public List<Replace> getReplaces() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -25,7 +27,10 @@ import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Challenge data pass through the device and Device Management server for the security purpose.
*/
@ApiModel(value = "ChallengeTag",
description = "This class carries all information related to install application")
public class ChallengeTag {
@ApiModelProperty(name = "meta", value = "Syncml MetaTag", required = true)
MetaTag meta;
public MetaTag getMeta() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -25,8 +27,12 @@ import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Credentials passed between the device and the server for security purposes.
*/
@ApiModel(value = "Credential",
description = "This class carries all information related to syncml credentials")
public class Credential {
@ApiModelProperty(name = "meta", value = "Syncml credential's MetaTag reference.)", required = true)
MetaTag meta;
@ApiModelProperty(name = "data", value = "Data of the Credential Tag.)", required = true)
String data;
public MetaTag getMeta() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,8 +30,12 @@ import java.util.List;
/**
* Configurations that need to be delete on Device.
*/
@ApiModel(value = "DeleteTag",
description = "This class carries all information related to Syncml DeleteTag.")
public class DeleteTag {
@ApiModelProperty(name = "commandId", value = "CommandId of the Syncl DeleteTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "items", value = "List of items of the syncml DeleteTag. ", required = true)
List<Item> items;
public int getCommandId() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,8 +30,12 @@ import java.util.List;
/**
* Commands that needs to be executed on the device.
*/
@ApiModel(value = "ExecuteTag",
description = "This class carries all information related to Syncml ExecuteTag.")
public class ExecuteTag {
@ApiModelProperty(name = "type", value = "CommandId of the syncml ExecuteTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "type", value = "List of items of the Syncml ExecuteTag.", required = true)
List<Item> items;
public int getCommandId() {

@ -18,9 +18,11 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import java.util.Iterator;
import java.util.List;
@ -28,8 +30,12 @@ import java.util.List;
/**
* Data that needs to be retrieved from the device.
*/
@ApiModel(value = "Get",
description = "This class carries all information related to syncml GetTag.")
public class Get {
@ApiModelProperty(name = "commandId", value = "CommandId of the syncml GetTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "items", value = "List of items of the Syncml GetTag.", required = true)
List<Item> items;
public int getCommandId() {

@ -18,18 +18,25 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Represents an items that should be retrieved from the device or a command.
*/
@ApiModel(value = "Item",
description = "This class carries all information related to Syncml Item.")
public class Item {
@ApiModelProperty(name = "target", value = "Target reference value of the Syncml Message(ex:Device).", required = true)
Target target;
@ApiModelProperty(name = "source", value = "Source reference of the syncml message.(Ex:EMM Server).", required = true)
Source source;
@ApiModelProperty(name = "data", value = "Content of the syncml message.", required = true)
String data;
@ApiModelProperty(name = "meta", value = "Meta data of the syncml messsage.", required = true)
MetaTag meta;
public MetaTag getMeta() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@ -26,10 +28,13 @@ import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* MetaTag data related to credentials.
*/
@ApiModel(value = "MetaTag", description = "This class carries all information related to MetaTag")
public class MetaTag {
@ApiModelProperty(name = "format", value = "MetaTag format.)", required = true)
String format;
@ApiModelProperty(name = "type", value = "MetaTag type)", required = true)
String type;
@ApiModelProperty(name = "nextNonce", value = "Syncml Nextnonce)", required = true)
String nextNonce;
public String getNextNonce() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,8 +30,12 @@ import java.util.List;
/**
* Commands sent from the device.
*/
@ApiModel(value = "Replace",
description = "This class carries all information related to Syncml ReplaceTag.")
public class Replace {
@ApiModelProperty(name = "commandId", value = "CommandId of the syncml ReplaceTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "items", value = "List of items of the syncml ReplaceTag.", required = true)
List<Item> items;
public int getCommandId() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,10 +30,16 @@ import java.util.List;
/**
* Results sent for the requests made to the device.
*/
@ApiModel(value = "Results",
description = "This class carries all information related to Syncml Item.")
public class Results {
@ApiModelProperty(name = "commandId", value = "CommandID of the Syncml Results Tag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "messageReference", value = "MessageReference of the Syncml Results Tag.", required = true)
int messageReference = -1;
@ApiModelProperty(name = "commandReference", value = "CommandReference of the Syncml Results Tag.", required = true)
int commandReference = -1;
@ApiModelProperty(name = "item", value = "List of Items in Syncml ResultTag.", required = true)
List<Item> item;
public int getCommandId() {

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,13 +30,20 @@ import java.util.List;
/**
* Sequence data that use to execute tag list
*/
@ApiModel(value = "SequenceTag",
description = "This class carries all information related to Syncml SequenceTag.")
public class SequenceTag {
@ApiModelProperty(name = "commandId", value = "CommandId of the Syncml SequenceTag", required = true)
int commandId;
@ApiModelProperty(name = "exec", value = "ExcecuteTag sequence of the Syncml SequenceTag", required = true)
ExecuteTag exec;
@ApiModelProperty(name = "get", value = "GetTag of the syncml SequenceTag.", required = true)
Get get;
@ApiModelProperty(name = "deleteTag", value = "DeleteTag of the syncml SequenceTag.", required = true)
DeleteTag deleteTag;
@ApiModelProperty(name = "atomicTag", value = "AtomicTag sequence of the syncml SequenceTag.", required = true)
AtomicTag atomicTag;
@ApiModelProperty(name = "replaces", value = "ReplaceTag of the syncml SequenceTag.", required = true)
List<Replace> replaces;
public DeleteTag getDeleteTag() {

@ -18,16 +18,21 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Source details of syncml header's.
*/
@ApiModel(value = "Source",
description = "This class carries all information related to Syncml source.")
public class Source {
@ApiModelProperty(name = "LocURI", value = "Location URI.(Source Location:Device)", required = true)
private String LocURI;
@ApiModelProperty(name = "LocName", value = "Name of the location", required = true)
private String LocName;
public String getLocURI() {

@ -18,20 +18,31 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Status of a previously sent message to device;
*/
@ApiModel(value = "Status",
description = "This class carries all information related to Syncml Device statuses.")
public class Status {
@ApiModelProperty(name = "commandId", value = "CommandId of the Syncml StatusTag.", required = true)
int commandId = -1;
@ApiModelProperty(name = "messageReference", value = "Message referenceId.", required = true)
int messageReference = -1;
@ApiModelProperty(name = "commandReference", value = "Command referenceId.", required = true)
int commandReference = -1;
@ApiModelProperty(name = "command", value = "Command String.", required = true)
String command;
@ApiModelProperty(name = "targetReference", value = "Target reference of the status message.", required = true)
String targetReference;
@ApiModelProperty(name = "data", value = "Status data of the message.(ex:200,404,500...)", required = true)
String data;
@ApiModelProperty(name = "challenge", value = "Challenge value.", required = true)
ChallengeTag challenge;
public Status(int commandId, int messageReference, int commandReference, String command,

@ -18,6 +18,8 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
@ -28,14 +30,23 @@ import java.util.List;
/**
* Represents the body details of a syncml.
*/
@ApiModel(value = "SyncmlBody", description = "This class carries all information related to SyncmlBody.")
public class SyncmlBody {
@ApiModelProperty(name = "getCommands", value = "Get value of the syncmlBody.", required = true)
Get getCommands;
@ApiModelProperty(name = "exec", value = "List of executeTags in syncmlBody.", required = true)
List<ExecuteTag> exec;
@ApiModelProperty(name = "status", value = "List of statusTags in syncmlBody.", required = true)
List<Status> status;
@ApiModelProperty(name = "alert", value = "Alert tag in syncmlBody.", required = true)
Alert alert;
@ApiModelProperty(name = "replace", value = "replace tag in syncmlBody.", required = true)
Replace replace;
@ApiModelProperty(name = "results", value = "Results tag in syncmlBody.", required = true)
Results results;
@ApiModelProperty(name = "sequence", value = "Sequence tag in syncmlBody.", required = true)
SequenceTag sequence;
@ApiModelProperty(name = "atomicTag", value = "Atomic tag in syncmlBody.", required = true)
AtomicTag atomicTag;
public AtomicTag getAtomicTag() {

@ -18,14 +18,19 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* Represents a base format of a syncml document
*/
@ApiModel(value = "SyncmlDocument", description = "This class carries all information related to SyncmlDocument.")
public class SyncmlDocument {
@ApiModelProperty(name = "header", value = "Header of the syncmlDocument.", required = true)
SyncmlHeader header;
@ApiModelProperty(name = "body", value = "Body of the SyncmlDocument.", required = true)
SyncmlBody body;
public SyncmlHeader getHeader() {

@ -18,19 +18,28 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Represents the header details of a syncml.
*/
@ApiModel(value = "SyncmlHeader", description = "This class carries all information related to SyncmlHeader.")
public class SyncmlHeader {
@ApiModelProperty(name = "sessionId", value = "SessionId of the syncml Message.", required = true)
private int sessionId = -1;
@ApiModelProperty(name = "MsgID", value = "MessageId of the syncml Session.", required = true)
private int MsgID = -1;
@ApiModelProperty(name = "target", value = "Target of the syncml Message.(Ex:Device/Server.)", required = true)
private Target target;
@ApiModelProperty(name = "source", value = "Source of the Syncml Message.(Ex:Server/Device.)", required = true)
private Source source;
@ApiModelProperty(name = "credential", value = "Credentials of the Syncml header.", required = true)
private Credential credential;
@ApiModelProperty(name = "hexadecimalSessionId", value = "HexaDecimal SessionId of the syncmlHeader.", required = true)
private String hexadecimalSessionId;
public String getHexadecimalSessionId() {

@ -18,16 +18,20 @@
package org.wso2.carbon.mdm.mobileservices.windows.operations;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.wso2.carbon.mdm.mobileservices.windows.operations.util.Constants;
/**
* Target details of syncml header's.
*/
@ApiModel(value = "Target", description = "This class carries all information related to Syncml Target.")
public class Target {
@ApiModelProperty(name = "LocURI", value = "Location URI of the target.", required = true)
private String LocURI;
@ApiModelProperty(name = "LocName", value = "Location Name of the target.", required = true)
private String LocName;
public String getLocURI() {

@ -18,6 +18,10 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsDeviceEnrolmentException;
import javax.ws.rs.*;
@ -28,6 +32,8 @@ import java.util.List;
/**
* Interface for Admin operations persisting. This interface accepts operations added via UI.
*/
@Api(value = "Operations", description = "Windows Device Management REST-API implementation.")
@Path("/operation")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@ -36,22 +42,72 @@ public interface Operations {
@POST
@Path("/devicelock")
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Adding a Device Lock on Windows Devices via the REST API",
notes = "Adding a Device lock operation to the windows device"
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response lock(@HeaderParam("Accept") String headerParam, List<String> deviceids) throws WindowsDeviceEnrolmentException;
@POST
@Path("/devicedisenroll")
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Disenrolling Windows Devices via the REST API",
notes = "Enforcing Disenrolling operation to the windows device"
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response disenroll(@HeaderParam("Accept") String headerParam, List<String> deviceids) throws WindowsDeviceEnrolmentException;
@POST
@Path("/devicewipe")
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Wiping Information off Windows Devices via the REST API",
notes = "Enforce wipe operation to the windows device"
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response wipe(@HeaderParam("Accept") String headerParam, List<String> deviceids) throws WindowsDeviceEnrolmentException;
@POST
@Path("/devicering")
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Ringing Windows Devices via the Rest API",
notes = "Adding a Device ring operation to the windows device."
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response ring(@HeaderParam("Accept") String headerParam, List<String> deviceids) throws WindowsDeviceEnrolmentException;
@POST
@Path("/lockreset")
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Resetting the Lock of Windows Devices via the REST API",
notes = "Adding a Device lock re-test operation to the windows device."
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response lockReset(@HeaderParam("Accept") String acceptHeader, List<String> deviceids)
throws WindowsDeviceEnrolmentException;
}

@ -18,11 +18,15 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Class for get device IDS.
*/
@ApiModel(value = "Device", description = "This class carries all information related to Device.")
public class Device {
@ApiModelProperty(name = "id", value = "DeviceIDs.", required = true)
private String id;
public String getID() {

@ -1,42 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans;
import java.io.Serializable;
/**
* Class for dis-enrollment operation
*/
public class Disenrollment implements Serializable {
private boolean enabled;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
private boolean isEnable() {
return enabled;
}
}

@ -1,49 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans;
import org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans.BasicOperation;
import java.util.List;
/**
* Class for set basic operations.
*/
public class OperationRequest {
private List<Device> deviceList;
private BasicOperation basicOperation;
public BasicOperation getBasicOperation() {
return basicOperation;
}
public void setBasicOperation(BasicOperation basicOperation) {
this.basicOperation = basicOperation;
}
public List<Device> getDeviceList() {
return deviceList;
}
public void setDeviceList(List<Device> deviceList) {
this.deviceList = deviceList;
}
}

@ -1,48 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans;
/**
* This bean class is for credentials coming from wab page at federated authentication step.
*/
public class OperationResponse {
private String errorCode;
private String statusCode;
public OperationResponse() {
}
public String getErrorCode() {
return errorCode;
}
public String getStatusCode() {
return statusCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
public void setStatusCode(String statusCode) {
this.statusCode = statusCode;
}
}

@ -1,36 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans;
import java.io.Serializable;
/**
* This class represents the information of encrypt operation.
*/
public class StorageEncryption implements Serializable {
private boolean encrypted;
public boolean isEncrypted() {
return encrypted;
}
public void setEncrypted(boolean encrypted) {
this.encrypted = encrypted;
}
}

@ -1,50 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.wrapper;
import org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.Disenrollment;
import java.util.List;
/**
* Class is used to wrap dis-enrollment bean with the device
*/
public class DisenrollmentBeanWrapper {
private Disenrollment operation;
private List<String> deviceId;
public Disenrollment getOperation() {
return operation;
}
public void setOperation(Disenrollment operation) {
this.operation = operation;
}
public List<String> getDeviceId() {
return deviceId;
}
public void setDeviceId(List<String> deviceId) {
this.deviceId = deviceId;
}
}

@ -1,48 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.wrapper;
import org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.StorageEncryption;
import java.util.List;
/**
* This class is used to wrap the Encrypt bean with devices.
*/
public class EncryptBeanWrapper {
private StorageEncryption operation;
private List<String> deviceIDs;
public StorageEncryption getOperation() {
return operation;
}
public void setOperation(StorageEncryption operation) {
this.operation = operation;
}
public List<String> getDeviceIDs() {
return deviceIDs;
}
public void setDeviceIDs(List<String> deviceIDs) {
this.deviceIDs = deviceIDs;
}
}

@ -1,112 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.util;
import com.google.gson.Gson;
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.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
import org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
import org.wso2.carbon.mdm.mobileservices.windows.common.SyncmlCommandType;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsDeviceEnrolmentException;
import org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.Device;
import org.wso2.carbon.mdm.mobileservices.windows.services.adminoperations.beans.OperationRequest;
import org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans.Wifi;
import java.util.ArrayList;
import java.util.List;
public class OperationStore {
private static Log log = LogFactory.getLog(OperationStore.class);
public static boolean storeOperation(OperationRequest operationRequest, Operation.Type type,
String commandType) throws
WindowsDeviceEnrolmentException {
List<Device> devices = operationRequest.getDeviceList();
List<DeviceIdentifier> deviceIdentifiers = new ArrayList<DeviceIdentifier>();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
Operation operation = transformBasicOperation(operationRequest, type, commandType);
for (int i = 0; i < devices.size(); i++) {
try {
deviceIdentifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
deviceIdentifier.setId(devices.get(i).getID());
deviceIdentifiers.add(deviceIdentifier);
getDeviceManagementServiceProvider().getDevice(deviceIdentifier);
} catch (DeviceManagementException e) {
log.error("Cannot validate device ID: " + devices.get(i).getID());
deviceIdentifiers.remove(i);
}
}
try {
getDeviceManagementServiceProvider().addOperation(operation, deviceIdentifiers);
} catch (OperationManagementException e) {
String msg = "Failure occurred while storing command operation.";
log.error(msg);
return false;
}
return true;
}
private static DeviceManagementProviderService getDeviceManagementServiceProvider() {
DeviceManagementProviderService deviceManager;
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
deviceManager =
(DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null);
if (deviceManager == null) {
String msg = "Device management service is not initialized.";
log.error(msg);
}
return deviceManager;
}
private static Operation transformBasicOperation(OperationRequest operationRequest, Operation.Type type,
String commandType) throws WindowsDeviceEnrolmentException {
Operation operation = new Operation();
operation.setCode(commandType);
operation.setType(type);
Gson gson = new Gson();
if (commandType == SyncmlCommandType.WIFI.getValue()) {
operation = new ConfigOperation();
operation.setCode(commandType);
operation.setType(type);
Wifi wifiObject = (Wifi) operationRequest.getBasicOperation();
operation.setPayLoad(gson.toJson(wifiObject));
} else {
// no operation.....
}
return operation;
}
}

@ -18,6 +18,9 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.authbst;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsDeviceEnrolmentException;
import org.wso2.carbon.mdm.mobileservices.windows.services.authbst.beans.Credentials;
@ -36,5 +39,16 @@ public interface BSTProvider {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/authentication")
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Getting Binary security token via the Rest API",
notes = "Getting binary security token to call next certificate endpoints.",
response = String.class
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Internal Server error")
})
Response getBST(Credentials credentials) throws WindowsDeviceEnrolmentException;
}

@ -18,6 +18,9 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.authbst.beans;
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;
@ -26,18 +29,28 @@ import javax.xml.bind.annotation.XmlRootElement;
/**
* This bean class is for credentials coming from wab page at federated authentication step.
*/
@ApiModel(value = "Credentials", description = "This class carries all information related to Credentials.")
@XmlRootElement(name = "credentials")
@XmlAccessorType(XmlAccessType.FIELD)
public class Credentials {
@ApiModelProperty(name = "username", value = "User name", required = true)
@XmlElement(required = true, name = "username")
private String username;
@ApiModelProperty(name = "email", value = "Email Address of the user.", required = true)
@XmlElement(required = true, name = "email")
private String email;
@ApiModelProperty(name = "password", value = "password of the user.", required = true)
@XmlElement(required = true, name = "password")
private String password;
@ApiModelProperty(name = "ownership", value = "ownership of the user.(BYOD/COPE).", required = true)
@XmlElement(required = true, name = "ownership")
private String ownership;
@ApiModelProperty(name = "usertoken", value = "User Token.", required = true)
@XmlElement(required = true, name = "token")
private String usertoken;

@ -18,22 +18,16 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.configurationmgtservice;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.mdm.mobileservices.windows.common.PluginConstants;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.List;
import javax.ws.rs.core.MediaType;
/**
* Windows Platform Configuration REST-API implementation.
@ -42,9 +36,7 @@ import java.util.List;
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class ConfigurationMgtService {
private static Log log = LogFactory.getLog(ConfigurationMgtService.class);
public interface ConfigurationMgtService {
/**
* Save Tenant configurations.
@ -54,50 +46,17 @@ public class ConfigurationMgtService {
* @throws WindowsConfigurationException
*/
@POST
public Message ConfigureSettings(TenantConfiguration configuration) throws WindowsConfigurationException {
Message responseMsg = new Message();
ConfigurationEntry licenseEntry = null;
String message;
try {
configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
if (!configuration.getConfiguration().isEmpty()) {
List<ConfigurationEntry> configs = configuration.getConfiguration();
for (ConfigurationEntry entry : configs) {
if (PluginConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) {
License license = new License();
license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
license.setLanguage(PluginConstants.TenantConfigProperties.LANGUAGE_US);
license.setVersion("1.0.0");
license.setText(entry.getValue().toString());
WindowsAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants.
MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, license);
licenseEntry = entry;
}
}
if (licenseEntry != null) {
configs.remove(licenseEntry);
}
configuration.setConfiguration(configs);
WindowsAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
Response.status(Response.Status.CREATED);
responseMsg.setResponseMessage("Windows platform configuration saved successfully.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
return responseMsg;
}
else {
Response.status(Response.Status.BAD_REQUEST);
responseMsg.setResponseMessage("Windows platform configuration can not be saved.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
}
} catch (DeviceManagementException e) {
message = "Error Occurred in while configuring Windows Platform.";
log.error(message, e);
throw new WindowsConfigurationException(message, e);
}
return responseMsg;
}
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Configuring Windows Platform Settings",
notes = "Configure the Windows platform settings using this REST API"
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Windows platform configuration saved successfully"),
@ApiResponse(code = 500, message = "Internal Server Error")
})
Message ConfigureSettings(TenantConfiguration configuration) throws WindowsConfigurationException;
/**
* Retrieve Tenant configurations according to the device type.
@ -106,34 +65,17 @@ public class ConfigurationMgtService {
* @throws WindowsConfigurationException
*/
@GET
public TenantConfiguration getConfiguration() throws WindowsConfigurationException {
String msg;
TenantConfiguration tenantConfiguration = null;
try {
if (WindowsAPIUtils.getDeviceManagementService().
getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS) != null) {
tenantConfiguration = WindowsAPIUtils.getDeviceManagementService().
getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
List<ConfigurationEntry> configs = tenantConfiguration.getConfiguration();
ConfigurationEntry entry = new ConfigurationEntry();
License license = WindowsAPIUtils.getDeviceManagementService().getLicense(
DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, PluginConstants.
TenantConfigProperties.LANGUAGE_US);
if(license != null) {
entry.setContentType(PluginConstants.TenantConfigProperties.CONTENT_TYPE_TEXT);
entry.setName(PluginConstants.TenantConfigProperties.LICENSE_KEY);
entry.setValue(license.getText());
configs.add(entry);
tenantConfiguration.setConfiguration(configs);
}
}
} catch (DeviceManagementException e) {
msg = "Error occurred while retrieving the Windows tenant configuration";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return tenantConfiguration;
}
@ApiOperation(
httpMethod = "GET",
value = "Getting Windows Platform Configurations",
notes = "Get the Windows platform configuration details using this REST API",
response = TenantConfiguration.class
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Get Windows Configurations"),
@ApiResponse(code = 500, message = "Server Error")
})
TenantConfiguration getConfiguration() throws WindowsConfigurationException;
/**
* Update Tenant Configurations for the specific Device type.
@ -143,39 +85,17 @@ public class ConfigurationMgtService {
* @throws WindowsConfigurationException
*/
@PUT
public Message updateConfiguration(TenantConfiguration configuration) throws WindowsConfigurationException {
String message;
Message responseMsg = new Message();
ConfigurationEntry licenseEntry = null;
try {
configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
List<ConfigurationEntry> configs = configuration.getConfiguration();
for (ConfigurationEntry entry : configs) {
if (PluginConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) {
License license = new License();
license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
license.setLanguage(PluginConstants.TenantConfigProperties.LANGUAGE_US);
license.setVersion("1.0.0");
license.setText(entry.getValue().toString());
WindowsAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants.
MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, license);
licenseEntry = entry;
}
}
if (licenseEntry != null) {
configs.remove(licenseEntry);
}
configuration.setConfiguration(configs);
WindowsAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
Response.status(Response.Status.CREATED);
responseMsg.setResponseMessage("Windows platform configuration succeeded.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
} catch (DeviceManagementException e) {
message = "Error occurred while modifying configuration settings of Windows platform.";
log.error(message, e);
throw new WindowsConfigurationException(message, e);
}
return responseMsg;
}
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
produces = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Updating Windows Platform Configurations",
notes = "Update the Windows platform configurations using this REST API"
)
@ApiResponses(value = {
@ApiResponse(code = 201, message = "Created"),
@ApiResponse(code = 500, message = "Error occurred while modifying configuration settings of " +
"windows platform")
})
Message updateConfiguration(TenantConfiguration configuration) throws WindowsConfigurationException;
}

@ -0,0 +1,181 @@
/*
* 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.mdm.mobileservices.windows.services.configurationmgtservice.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.mdm.mobileservices.windows.common.PluginConstants;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.List;
/**
* Windows Platform Configuration REST-API implementation.
* All end points supports JSON, XMl with content negotiation.
*/
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class ConfigurationMgtServiceImpl {
private static Log log = LogFactory.getLog(ConfigurationMgtServiceImpl.class);
/**
* Save Tenant configurations.
*
* @param configuration Tenant Configurations to be saved.
* @return Message type object for the provide save status.
* @throws WindowsConfigurationException
*/
@POST
public Message ConfigureSettings(TenantConfiguration configuration) throws WindowsConfigurationException {
Message responseMsg = new Message();
ConfigurationEntry licenseEntry = null;
String message;
try {
configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
if (!configuration.getConfiguration().isEmpty()) {
List<ConfigurationEntry> configs = configuration.getConfiguration();
for (ConfigurationEntry entry : configs) {
if (PluginConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) {
License license = new License();
license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
license.setLanguage(PluginConstants.TenantConfigProperties.LANGUAGE_US);
license.setVersion("1.0.0");
license.setText(entry.getValue().toString());
WindowsAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants.
MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, license);
licenseEntry = entry;
}
}
if (licenseEntry != null) {
configs.remove(licenseEntry);
}
configuration.setConfiguration(configs);
WindowsAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
Response.status(Response.Status.CREATED);
responseMsg.setResponseMessage("Windows platform configuration saved successfully.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
return responseMsg;
}
else {
Response.status(Response.Status.BAD_REQUEST);
responseMsg.setResponseMessage("Windows platform configuration can not be saved.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
}
} catch (DeviceManagementException e) {
message = "Error Occurred in while configuring Windows Platform.";
log.error(message, e);
throw new WindowsConfigurationException(message, e);
}
return responseMsg;
}
/**
* Retrieve Tenant configurations according to the device type.
*
* @return Tenant configuration object contains specific tenant configurations.
* @throws WindowsConfigurationException
*/
@GET
public TenantConfiguration getConfiguration() throws WindowsConfigurationException {
String msg;
TenantConfiguration tenantConfiguration = null;
try {
if (WindowsAPIUtils.getDeviceManagementService().
getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS) != null) {
tenantConfiguration = WindowsAPIUtils.getDeviceManagementService().
getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
List<ConfigurationEntry> configs = tenantConfiguration.getConfiguration();
ConfigurationEntry entry = new ConfigurationEntry();
License license = WindowsAPIUtils.getDeviceManagementService().getLicense(
DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, PluginConstants.
TenantConfigProperties.LANGUAGE_US);
if(license != null) {
entry.setContentType(PluginConstants.TenantConfigProperties.CONTENT_TYPE_TEXT);
entry.setName(PluginConstants.TenantConfigProperties.LICENSE_KEY);
entry.setValue(license.getText());
configs.add(entry);
tenantConfiguration.setConfiguration(configs);
}
}
} catch (DeviceManagementException e) {
msg = "Error occurred while retrieving the Windows tenant configuration";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return tenantConfiguration;
}
/**
* Update Tenant Configurations for the specific Device type.
*
* @param configuration Tenant configurations to be updated.
* @return Response message.
* @throws WindowsConfigurationException
*/
@PUT
public Message updateConfiguration(TenantConfiguration configuration) throws WindowsConfigurationException {
String message;
Message responseMsg = new Message();
ConfigurationEntry licenseEntry = null;
try {
configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
List<ConfigurationEntry> configs = configuration.getConfiguration();
for (ConfigurationEntry entry : configs) {
if (PluginConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) {
License license = new License();
license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
license.setLanguage(PluginConstants.TenantConfigProperties.LANGUAGE_US);
license.setVersion("1.0.0");
license.setText(entry.getValue().toString());
WindowsAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants.
MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, license);
licenseEntry = entry;
}
}
if (licenseEntry != null) {
configs.remove(licenseEntry);
}
configuration.setConfiguration(configs);
WindowsAPIUtils.getDeviceManagementService().saveConfiguration(configuration);
Response.status(Response.Status.CREATED);
responseMsg.setResponseMessage("Windows platform configuration succeeded.");
responseMsg.setResponseCode(Response.Status.CREATED.toString());
} catch (DeviceManagementException e) {
message = "Error occurred while modifying configuration settings of Windows platform.";
log.error(message, e);
throw new WindowsConfigurationException(message, e);
}
return responseMsg;
}
}

@ -18,32 +18,29 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.devicemgtservice;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
import java.util.List;
/**
* Windows Device Management REST-API implementation.
* All end points supports JSON, XMl with content negotiation.
*/
@Api(value = "DeviceManagementService", description = "Windows Device Management REST-API implementation.")
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class DeviceManagementService {
private static Log log = LogFactory.getLog(DeviceManagementService.class);
public interface DeviceManagementService {
/**
* Get all devices.Returns list of Windows devices registered in MDM.
@ -52,21 +49,21 @@ public class DeviceManagementService {
* @throws WindowsConfigurationException
*/
@GET
public List<Device> getAllDevices()
throws WindowsConfigurationException {
String msg;
List<org.wso2.carbon.device.mgt.common.Device> devices;
try {
devices = WindowsAPIUtils.getDeviceManagementService().
getAllDevices(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
} catch (DeviceManagementException e) {
msg = "Error occurred while fetching the device list.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return devices;
}
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting Details of All Windows Devices",
notes = "Use this REST API to retrieve the details " +
"(e.g., the Android device type, serial number, International Mobile Station Equipment Identity " +
"(IMEI), owner, version, model etc.) of all Windows devices that are registered with WSO2 EMM.",
response = Device.class,
responseContainer = "List"
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "List of Devices"),
@ApiResponse(code = 500, message = "Error occurred while fetching the device list")
})
List<Device> getAllDevices() throws WindowsConfigurationException;
/**
* Fetch Windows device details of a given device Id.
@ -77,25 +74,21 @@ public class DeviceManagementService {
*/
@GET
@Path("{id}")
public org.wso2.carbon.device.mgt.common.Device getDevice(@PathParam("id") String id)
throws WindowsConfigurationException {
String msg;
org.wso2.carbon.device.mgt.common.Device device;
try {
DeviceIdentifier deviceIdentifier = WindowsAPIUtils.convertToDeviceIdentifierObject(id);
device = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier);
if (device == null) {
Response.status(Response.Status.NOT_FOUND);
}
} catch (DeviceManagementException deviceMgtEx) {
msg = "Error occurred while fetching the device information.";
log.error(msg, deviceMgtEx);
throw new WindowsConfigurationException(msg, deviceMgtEx);
}
return device;
}
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting Details of an Windows Device",
notes = "Use this REST API to retrieve the details " +
"(e.g., the Android device type, serial number, International Mobile Station Equipment Identity " +
"(IMEI), owner, version, model etc.) of a specific Windows device that is registered with WSO2 EMM",
response = Device.class
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Information of the given device"),
@ApiResponse(code = 500, message = "Error occurred while fetching the device information")
})
org.wso2.carbon.device.mgt.common.Device getDevice(@PathParam("id") String id)
throws WindowsConfigurationException;
/**
* Update Windows device details of given device id.
@ -106,53 +99,35 @@ public class DeviceManagementService {
* @throws WindowsConfigurationException
*/
@PUT
@ApiOperation(
consumes = MediaType.APPLICATION_JSON,
httpMethod = "PUT",
value = "Updating the Details of an Windows Device",
notes = "Use this REST API to update the details of an Windows device"
)
@ApiResponses(value = {
@ApiResponse(code = 202, message = "The device enrollment details has been updated successfully"),
@ApiResponse(code = 500, message = "Error occurred while modifying the device information"),
@ApiResponse(code = 304, message = "Device not found for the update")
})
@Path("{id}")
public Message updateDevice(@PathParam("id") String id, Device device)
throws WindowsConfigurationException {
String msg;
Message responseMessage = new Message();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(id);
deviceIdentifier
.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
boolean result;
try {
device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
result = WindowsAPIUtils.getDeviceManagementService()
.updateDeviceInfo(deviceIdentifier, device);
if (result) {
Response.status(Response.Status.ACCEPTED);
responseMessage.setResponseMessage("Device information has modified successfully.");
} else {
Response.status(Response.Status.NOT_MODIFIED);
responseMessage.setResponseMessage("Device not found for the update.");
}
} catch (DeviceManagementException e) {
msg = "Error occurred while modifying the device information.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return responseMessage;
}
Message updateDevice(@PathParam("id") String id, Device device) throws WindowsConfigurationException;
@GET
@Path("license")
@Produces("application/json")
public License getLicense() throws WindowsConfigurationException {
License license;
try {
license =
WindowsAPIUtils.getDeviceManagementService().getLicense(
DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS,
DeviceManagementConstants.LanguageCodes.LANGUAGE_CODE_ENGLISH_US);
} catch (DeviceManagementException e) {
String msg = "Error occurred while retrieving the license configured for Windows device enrollment";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return license;
}
@ApiOperation(
produces = MediaType.APPLICATION_JSON,
httpMethod = "GET",
value = "Getting the License Agreement for Windows Device Registration",
notes = "Use this REST API to retrieve the license agreement that is used for the Windows device " +
"registration process",
response = String.class)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Licence agreement"),
@ApiResponse(code = 500, message = "Error occurred while retrieving the license configured for Windows " +
"device enrolment")
})
License getLicense() throws WindowsConfigurationException;
}

@ -0,0 +1,158 @@
/*
* 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.mdm.mobileservices.windows.services.devicemgtservice.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.util.List;
/**
* Windows Device Management REST-API implementation.
* All end points supports JSON, XMl with content negotiation.
*/
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class DeviceManagementServiceImpl {
private static Log log = LogFactory.getLog(DeviceManagementServiceImpl.class);
/**
* Get all devices.Returns list of Windows devices registered in MDM.
*
* @return Device List
* @throws WindowsConfigurationException
*/
@GET
public List<Device> getAllDevices()
throws WindowsConfigurationException {
String msg;
List<Device> devices;
try {
devices = WindowsAPIUtils.getDeviceManagementService().
getAllDevices(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
} catch (DeviceManagementException e) {
msg = "Error occurred while fetching the device list.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return devices;
}
/**
* Fetch Windows device details of a given device Id.
*
* @param id Device Id
* @return Device
* @throws WindowsConfigurationException
*/
@GET
@Path("{id}")
public Device getDevice(@PathParam("id") String id)
throws WindowsConfigurationException {
String msg;
Device device;
try {
DeviceIdentifier deviceIdentifier = WindowsAPIUtils.convertToDeviceIdentifierObject(id);
device = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier);
if (device == null) {
Response.status(Response.Status.NOT_FOUND);
}
} catch (DeviceManagementException deviceMgtEx) {
msg = "Error occurred while fetching the device information.";
log.error(msg, deviceMgtEx);
throw new WindowsConfigurationException(msg, deviceMgtEx);
}
return device;
}
/**
* Update Windows device details of given device id.
*
* @param id Device Id
* @param device Device Details
* @return Message
* @throws WindowsConfigurationException
*/
@PUT
@Path("{id}")
public Message updateDevice(@PathParam("id") String id, Device device)
throws WindowsConfigurationException {
String msg;
Message responseMessage = new Message();
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
deviceIdentifier.setId(id);
deviceIdentifier
.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
boolean result;
try {
device.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS);
result = WindowsAPIUtils.getDeviceManagementService()
.updateDeviceInfo(deviceIdentifier, device);
if (result) {
Response.status(Response.Status.ACCEPTED);
responseMessage.setResponseMessage("Device information has modified successfully.");
} else {
Response.status(Response.Status.NOT_MODIFIED);
responseMessage.setResponseMessage("Device not found for the update.");
}
} catch (DeviceManagementException e) {
msg = "Error occurred while modifying the device information.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return responseMessage;
}
@GET
@Path("license")
@Produces("application/json")
public License getLicense() throws WindowsConfigurationException {
License license;
try {
license =
WindowsAPIUtils.getDeviceManagementService().getLicense(
DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS,
DeviceManagementConstants.LanguageCodes.LANGUAGE_CODE_ENGLISH_US);
} catch (DeviceManagementException e) {
String msg = "Error occurred while retrieving the license configured for Windows device enrollment";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
return license;
}
}

@ -18,6 +18,9 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.discovery;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.mdm.mobileservices.windows.common.PluginConstants;
import org.wso2.carbon.mdm.mobileservices.windows.services.discovery.beans.DiscoveryRequest;
import org.wso2.carbon.mdm.mobileservices.windows.services.discovery.beans.DiscoveryResponse;
@ -46,6 +49,17 @@ public interface DiscoveryService {
@RequestWrapper(localName = "Discover", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE)
@WebMethod(operationName = "Discover")
@ResponseWrapper(localName = "DiscoverResponse", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE)
@ApiOperation(
httpMethod = "POST",
value = "Discover the EMM server via REST API.",
notes = "Request the server endpoints.",
response = DiscoveryResponse.class
)
@ApiResponses(value = {
@ApiResponse(code = 200,
message = "Windows policy, policy endpoints, enrollment endpoints and authentication endpoint."),
@ApiResponse(code = 500, message = "Internal server error")
})
void discover(
@WebParam(name = "request", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE)
DiscoveryRequest request,
@ -57,6 +71,15 @@ public interface DiscoveryService {
@GET
@WebMethod
@WebResult()
@ApiOperation(
httpMethod = "GET",
value = "Discover the EMM server via REST API.",
notes = "Check the server availability."
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Ok."),
@ApiResponse(code = 500, message = "Internal server error.")
})
Response discoverGet();
}

@ -18,21 +18,32 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.discovery.beans;
import javax.xml.bind.annotation.*;
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;
import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DiscoveryRequest")
@SuppressWarnings("unused")
@ApiModel(value = "DiscoveryRequest",
description = "This class carries all information related to Discovery request.")
public class DiscoveryRequest implements Serializable {
@XmlElement(name = "EmailAddress", required = true)
@ApiModelProperty(name = "emailId", value = "Email ID.", required = true)
private String emailId;
@XmlElement(name = "RequestVersion")
@ApiModelProperty(name = "version", value = "Request Version.", required = true)
private String version;
@XmlElement(name = "DeviceType")
@ApiModelProperty(name = "deviceType", value = "Type of the Device.", required = true)
private String deviceType;
public String getEmailId() {

@ -18,24 +18,40 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.discovery.beans;
import javax.xml.bind.annotation.*;
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;
import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DiscoveryResponse")
@SuppressWarnings("unused")
@ApiModel(value = "DiscoveryResponse",
description = "This class carries all information related to DiscoverResponse.")
public class DiscoveryResponse implements Serializable {
@XmlElement(name = "AuthPolicy")
@ApiModelProperty(name = "authPolicy",
value = "Authentication policy(On-premise/Federated)", required = true)
private String authPolicy;
@XmlElement(name = "EnrollmentPolicyServiceUrl")
@ApiModelProperty(name = "enrollmentPolicyServiceUrl",
value = "Enrollment policy(XCEP) endpoint URL.", required = true)
private String enrollmentPolicyServiceUrl;
@XmlElement(name = "EnrollmentServiceUrl")
@ApiModelProperty(name = "enrollmentServiceUrl",
value = "Enrollment Service(WSTEP) endpoint URL.", required = true)
private String enrollmentServiceUrl;
@XmlElement(name = "AuthenticationServiceUrl")
@ApiModelProperty(name = "authenticationServiceUrl",
value = "SOAP request authentication service URL", required = true)
private String authenticationServiceUrl;
public void setAuthenticationServiceUrl(String authenticationServiceUrl) {

@ -18,54 +18,38 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.policymgtservice;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
/**
* Endpoint for Enforce Effective Policy.
*/
@Api(value = "PolicyMgtService", description = "Windows Device Management REST-API implementation.")
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class PolicyMgtService {
private static Log log = LogFactory.getLog(PolicyMgtService.class);
public interface PolicyMgtService {
@GET
@Path("{id}")
public Message getEffectivePolicy(@HeaderParam("Accept") String acceptHeader,
@PathParam("id") String id) throws WindowsConfigurationException {
DeviceIdentifier deviceIdentifier = WindowsAPIUtils.convertToDeviceIdentifierObject(id);
Message responseMessage = new Message();
Policy policy;
try {
PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
policy = policyManagerService.getEffectivePolicy(deviceIdentifier);
if (policy == null) {
responseMessage.setResponseCode(Response.Status.NO_CONTENT.toString());
responseMessage.setResponseMessage("No effective policy found");
return responseMessage;
} else {
responseMessage.setResponseCode(Response.Status.OK.toString());
responseMessage.setResponseMessage("Effective policy added to operation");
return responseMessage;
}
} catch (PolicyManagementException e) {
String msg = "Error occurred while getting the policy.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
}
@ApiOperation(
httpMethod = "GET",
value = "Identifying whether a Policy is Enforced on an Windows Device",
notes = "When a device registers with WSO2 EMM, a policy is enforced on the device based on the policy " +
"enforcement criteria. Using this API you are able to identify if a specific device has a policy " +
"enforced or if no policy is enforced on the device."
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Effective policy added to operation"),
@ApiResponse(code = 204, message = "No effective policy found")
})
Message getEffectivePolicy(@HeaderParam("Accept") String acceptHeader,
@PathParam("id") String id) throws WindowsConfigurationException;
}

@ -0,0 +1,72 @@
/*
* 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.mdm.mobileservices.windows.services.policymgtservice.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.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.Message;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import org.wso2.carbon.mdm.mobileservices.windows.services.policymgtservice.PolicyMgtService;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import javax.jws.WebService;
import javax.ws.rs.*;
import javax.ws.rs.core.Response;
/**
* Endpoint for Enforce Effective Policy.
*/
@WebService
@Produces({"application/json", "application/xml"})
@Consumes({"application/json", "application/xml"})
public class PolicyMgtServiceImpl implements PolicyMgtService {
private static Log log = LogFactory.getLog(PolicyMgtServiceImpl.class);
@GET
public Message getEffectivePolicy(@HeaderParam("Accept") String acceptHeader,
@PathParam("id") String id) throws WindowsConfigurationException {
DeviceIdentifier deviceIdentifier = WindowsAPIUtils.convertToDeviceIdentifierObject(id);
Message responseMessage = new Message();
Policy policy;
try {
PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
policy = policyManagerService.getEffectivePolicy(deviceIdentifier);
if (policy == null) {
responseMessage.setResponseCode(Response.Status.NO_CONTENT.toString());
responseMessage.setResponseMessage("No effective policy found");
return responseMessage;
} else {
responseMessage.setResponseCode(Response.Status.OK.toString());
responseMessage.setResponseMessage("Effective policy added to operation");
return responseMessage;
}
} catch (PolicyManagementException e) {
String msg = "Error occurred while getting the policy.";
log.error(msg, e);
throw new WindowsConfigurationException(msg, e);
}
}
}

@ -18,6 +18,10 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.w3c.dom.Document;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
import org.wso2.carbon.mdm.mobileservices.windows.common.PluginConstants;
@ -35,6 +39,7 @@ import javax.ws.rs.core.Response;
/**
* Interface for Syncml message flow.
*/
@Api(value = "SyncmlService", description = "Windows Device Management REST-API implementation.")
@Path("/devicemanagement")
public interface SyncmlService {
@ -42,6 +47,17 @@ public interface SyncmlService {
@POST
@Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML})
@Produces(PluginConstants.SYNCML_MEDIA_TYPE)
@ApiOperation(
consumes = "application/vnd.syncml.dm+xml;charset=utf-8",
produces = "application/vnd.syncml.dm+xml;charset=utf-8",
httpMethod = "POST",
value = "Windows Device Management service REST API",
notes = "Windows device management session"
)
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Successfully completed syncml session"),
@ApiResponse(code = 500, message = "Internal server error")
})
Response getResponse(Document request) throws WindowsDeviceEnrolmentException, WindowsOperationException,
NotificationManagementException, WindowsConfigurationException;

@ -18,11 +18,16 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Bean for get basic operations.
*/
@ApiModel(value = "BasicOperation",
description = "This class carries all information related to Basic operation.")
public class BasicOperation {
@ApiModelProperty(name = "name", value = "Name of the basic operation.", required = true)
private String name;
public String getName() {

@ -18,19 +18,38 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Bean for device lockOperationUpdate screen passcode policy.
*/
@ApiModel(value = "PasscodePolicy",
description = "This class carries all information related to Passcode Policy.")
public class PasscodePolicy extends BasicOperation {
@ApiModelProperty(name = "maxFailedAttempts", value = "No of Max fail attempts.", required = true)
private int maxFailedAttempts;
@ApiModelProperty(name = "minLength", value = "Minimum length of the Passcode.", required = true)
private int minLength;
@ApiModelProperty(name = "pinHistory",
value = "The number of passwords Windows 10 Mobile remembers in the password history.", required = true)
private int pinHistory;
@ApiModelProperty(name = "minComplexChars",
value = "The number of password element types (in other words, uppercase letters, lowercase letters, " +
"numbers, or punctuation) required to create strong passwords.", required = true)
private int minComplexChars;
@ApiModelProperty(name = "maxPINAgeInDays",
value = "Number of Maximum days to expire the passcode.", required = true)
private int maxPINAgeInDays;
@ApiModelProperty(name = "requireAlphanumeric",
value = "An integer value that specifies the complexity of the password or PIN allowed.", required = true)
private boolean requireAlphanumeric;
@ApiModelProperty(name = "allowSimple", value = "Set boolean value to allow simple password.", required = true)
private boolean allowSimple;
@ApiModelProperty(name = "enablePassword", value = "Set boolean value enable password.", required = true)
private boolean enablePassword;
@ApiModelProperty(name = "maxInactiveTime", value = "Maximum Inactive time.", required = true)
private int maxInactiveTime;
public int getMaxInactiveTime() {

@ -18,14 +18,23 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Class for contains device active policy.
*/
@ApiModel(value = "Profile",
description = "This class carries all information related to Profile features.")
public class Profile {
@ApiModelProperty(name = "featureCode", value = "Profile type operation feature code.", required = true)
String featureCode;
@ApiModelProperty(name = "data", value = "Profile type operation data content..", required = true)
String data;
@ApiModelProperty(name = "enable", value = "Status of the Profile operation.", required = true)
boolean enable;
@ApiModelProperty(name = "compliance", value = "Status of the operation compliance.", required = true)
boolean compliance;
public boolean isCompliance() {

@ -18,19 +18,33 @@
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.beans;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* Bean for WIFI configurations.
*/
@ApiModel(value = "Wifi",
description = "This class carries all information related to Wifi policy.")
public class Wifi extends BasicOperation {
@ApiModelProperty(name = "networkName", value = "Name of the Wifi Network.", required = true)
private String networkName;
@ApiModelProperty(name = "ssid", value = "SSID.", required = true)
private String ssid;
@ApiModelProperty(name = "connectionType", value = "Type of the connection.", required = true)
private String connectionType;
@ApiModelProperty(name = "connectionMode", value = "Connection mode.", required = true)
private String connectionMode;
@ApiModelProperty(name = "authentication", value = "Authentication type.", required = true)
private String authentication;
@ApiModelProperty(name = "encryption", value = "Encryption type.", required = true)
private String encryption;
@ApiModelProperty(name = "keyType", value = "Key type.", required = true)
private String keyType;
@ApiModelProperty(name = "protection", value = "Protection.", required = true)
private String protection;
@ApiModelProperty(name = "keyMaterial", value = "Key Material.", required = true)
private String keyMaterial;
public String getNetworkName() {

@ -1,54 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.mdm.mobileservices.windows.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.mdm.mobileservices.windows.common.util.WindowsAPIUtils;
import org.wso2.carbon.policy.mgt.common.Policy;
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
/**
* implementation for PolicyManager
*/
public class PolicyManager {
private static Log log = LogFactory.getLog(PolicyManager.class);
public Policy getEffectivePolicy(DeviceIdentifier deviceIdentifier) throws WindowsConfigurationException {
Policy policy;
PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService();
try {
policy = policyManagerService.getEffectivePolicy(deviceIdentifier);
if (policy != null) {
return policy;
} else {
return null;
}
} catch (PolicyManagementException e) {
String msg = "Error occurred while getting policy.";
log.error(msg, e);
throw new WindowsConfigurationException();
}
}
}

@ -1,49 +0,0 @@
/*
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.mdm.mobileservices.windows.services.syncml.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
/**
* Class for generate Device object from the received data.
*/
public class SyncmlUtils {
private static Log log = LogFactory.getLog(SyncmlUtils.class);
/**
* This method returns Device Management Object for certain tasks such as Device enrollment etc.
*
* @return DeviceManagementServiceObject
*/
public static DeviceManagementProviderService getDeviceManagementService() {
try {
PrivilegedCarbonContext context = PrivilegedCarbonContext.getThreadLocalCarbonContext();
return (DeviceManagementProviderService) context.getOSGiService(DeviceManagementProviderService.class,
null);
} finally {
PrivilegedCarbonContext.endTenantFlow();
}
}
}

@ -197,11 +197,11 @@
class="org.wso2.carbon.mdm.mobileservices.windows.services.wstep.util.MessageHandler"/>
<bean id="jsonProvider" class="org.wso2.carbon.mdm.mobileservices.windows.common.util.GsonMessageBodyHandler"/>
<bean id="configurationServiceBean"
class="org.wso2.carbon.mdm.mobileservices.windows.services.configurationmgtservice.ConfigurationMgtService"/>
class="org.wso2.carbon.mdm.mobileservices.windows.services.configurationmgtservice.ConfigurationMgtServiceImpl"/>
<bean id="policyServiceBean"
class="org.wso2.carbon.mdm.mobileservices.windows.services.policymgtservice.PolicyMgtService"/>
class="org.wso2.carbon.mdm.mobileservices.windows.services.policymgtservice.PolicyMgtServiceImpl"/>
<bean id="errorHandler" class="org.wso2.carbon.mdm.mobileservices.windows.common.util.ErrorHandler"/>
<bean id="deviceMgtServiceBean"
class="org.wso2.carbon.mdm.mobileservices.windows.services.devicemgtservice.DeviceManagementService"/>
class="org.wso2.carbon.mdm.mobileservices.windows.services.devicemgtservice.DeviceManagementServiceImpl"/>
</beans>

Loading…
Cancel
Save