forked from community/device-mgt-core
commit
e4dfe63548
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.Produces;
|
||||
|
||||
/**
|
||||
* Authentication related REST-API implementation.
|
||||
*/
|
||||
@Produces({ "application/json", "application/xml" })
|
||||
@Consumes({ "application/json", "application/xml" })
|
||||
public class AuthenticationImpl {
|
||||
|
||||
private static Log log = LogFactory.getLog(AuthenticationImpl.class);
|
||||
}
|
||||
|
@ -0,0 +1,195 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.certificate.mgt.core.dao.CertificateManagementDAOException;
|
||||
import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse;
|
||||
import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException;
|
||||
import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementService;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Certificate;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.EnrollmentCertificate;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.exception.Message;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.HeaderParam;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* All the certificate related tasks such as saving certificates, can be done through this endpoint.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
@Consumes({ "application/json", "application/xml" })
|
||||
public class CertificateImpl implements Certificate {
|
||||
|
||||
private static Log log = LogFactory.getLog(OperationImpl.class);
|
||||
|
||||
/**
|
||||
* Save a list of certificates and relevant information in the database.
|
||||
*
|
||||
* @param enrollmentCertificates List of all the certificates which includes the tenant id, certificate as
|
||||
* a pem and a serial number.
|
||||
* @return Status of the data persist operation.
|
||||
*/
|
||||
@POST
|
||||
@Path("saveCertificate")
|
||||
public Response saveCertificate(@HeaderParam("Accept") String acceptHeader,
|
||||
EnrollmentCertificate[] enrollmentCertificates) {
|
||||
MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader);
|
||||
CertificateManagementService certificateService;
|
||||
List<org.wso2.carbon.certificate.mgt.core.bean.Certificate> certificates = new ArrayList<>();
|
||||
org.wso2.carbon.certificate.mgt.core.bean.Certificate certificate;
|
||||
certificateService = DeviceMgtAPIUtils.getCertificateManagementService();
|
||||
try {
|
||||
for (EnrollmentCertificate enrollmentCertificate : enrollmentCertificates) {
|
||||
certificate = new org.wso2.carbon.certificate.mgt.core.bean.Certificate();
|
||||
certificate.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
|
||||
certificate.setSerial(enrollmentCertificate.getSerial());
|
||||
certificate.setCertificate(certificateService.pemToX509Certificate(enrollmentCertificate.getPem()));
|
||||
certificates.add(certificate);
|
||||
}
|
||||
certificateService.saveCertificate(certificates);
|
||||
return Response.status(Response.Status.CREATED).entity("Added successfully.").
|
||||
type(responseMediaType).build();
|
||||
} catch (KeystoreException e) {
|
||||
String msg = "Error occurred while converting PEM file to X509Certificate.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a certificate when the serial number is given.
|
||||
*
|
||||
* @param serialNumber serial of the certificate needed.
|
||||
* @return certificate response.
|
||||
*/
|
||||
@GET
|
||||
@Path("{serialNumber}")
|
||||
public Response getCertificate(@HeaderParam("Accept") String acceptHeader,
|
||||
@PathParam("serialNumber") String serialNumber) {
|
||||
MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader);
|
||||
Message message = new Message();
|
||||
|
||||
if (serialNumber == null || serialNumber.isEmpty()) {
|
||||
message.setErrorMessage("Invalid serial number");
|
||||
message.setDiscription("Serial number is missing or invalid.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build();
|
||||
}
|
||||
|
||||
CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService();
|
||||
CertificateResponse certificateResponse;
|
||||
try {
|
||||
certificateResponse = certificateService.getCertificateBySerial(serialNumber);
|
||||
if(certificateResponse != null) {
|
||||
certificateResponse.setCertificate(null); //avoid sending byte array in response.
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(certificateResponse).type(responseMediaType).build();
|
||||
} catch (KeystoreException e) {
|
||||
String msg = "Error occurred while converting PEM file to X509Certificate";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all certificates in a paginated manner.
|
||||
*
|
||||
* @param startIndex index of the first record to be fetched
|
||||
* @param length number of records to be fetched starting from the start index.
|
||||
* @return paginated result of certificate.
|
||||
* @throws MDMAPIException
|
||||
*/
|
||||
@GET
|
||||
@Path("paginate")
|
||||
public Response getAllCertificates(@HeaderParam("Accept") String acceptHeader,
|
||||
@QueryParam("start") int startIndex,
|
||||
@QueryParam("length") int length)
|
||||
throws MDMAPIException {
|
||||
MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader);
|
||||
Message message = new Message();
|
||||
|
||||
if (startIndex < 0) {
|
||||
message.setErrorMessage("Invalid start index.");
|
||||
message.setDiscription("Start index cannot be less that 0.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build();
|
||||
} else if (length <= 0) {
|
||||
message.setErrorMessage("Invalid length value.");
|
||||
message.setDiscription("Length should be a positive integer.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build();
|
||||
}
|
||||
|
||||
CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService();
|
||||
PaginationRequest paginationRequest = new PaginationRequest(startIndex, length);
|
||||
try {
|
||||
PaginationResult certificates = certificateService.getAllCertificates(paginationRequest);
|
||||
return Response.status(Response.Status.OK).entity(certificates).type(responseMediaType).build();
|
||||
} catch (CertificateManagementDAOException e) {
|
||||
String msg = "Error occurred while fetching all certificates.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build();
|
||||
}
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Path("{serialNumber}")
|
||||
public Response removeCertificate(@HeaderParam("Accept") String acceptHeader,
|
||||
@PathParam("serialNumber") String serialNumber) throws MDMAPIException {
|
||||
MediaType responseMediaType = DeviceMgtAPIUtils.getResponseMediaType(acceptHeader);
|
||||
Message message = new Message();
|
||||
|
||||
if (serialNumber == null || serialNumber.isEmpty()) {
|
||||
message.setErrorMessage("Invalid serial number");
|
||||
message.setDiscription("Serial number is missing or invalid.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(message).type(responseMediaType).build();
|
||||
}
|
||||
|
||||
CertificateManagementService certificateService = DeviceMgtAPIUtils.getCertificateManagementService();
|
||||
boolean deleted;
|
||||
try {
|
||||
deleted = certificateService.removeCertificate(serialNumber);
|
||||
if(deleted){
|
||||
return Response.status(Response.Status.OK).entity(deleted).type(responseMediaType).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.GONE).entity(deleted).type(responseMediaType).build();
|
||||
}
|
||||
} catch (CertificateManagementDAOException e) {
|
||||
String msg = "Error occurred while converting PEM file to X509Certificate";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).type(responseMediaType).build();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Configuration;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAppConstants;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.policy.mgt.core.util.PolicyManagerUtil;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* General Tenant Configuration REST-API implementation.
|
||||
* All end points support JSON, XMl with content negotiation.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
@Consumes({ "application/json", "application/xml" })
|
||||
public class ConfigurationImpl implements Configuration{
|
||||
|
||||
private static Log log = LogFactory.getLog(ConfigurationImpl.class);
|
||||
|
||||
@POST
|
||||
public Response saveTenantConfiguration(TenantConfiguration configuration) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration,
|
||||
MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH);
|
||||
//Schedule the task service
|
||||
DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration));
|
||||
responseMsg.setMessageFromServer("Tenant configuration saved successfully.");
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (ConfigurationManagementException e) {
|
||||
String msg = "Error occurred while saving the tenant configuration.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
public Response getConfiguration() {
|
||||
String msg;
|
||||
try {
|
||||
TenantConfiguration tenantConfiguration = DeviceMgtAPIUtils.getTenantConfigurationManagementService().
|
||||
getConfiguration(MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH);
|
||||
ConfigurationEntry configurationEntry = new ConfigurationEntry();
|
||||
configurationEntry.setContentType("text");
|
||||
configurationEntry.setName("notifierFrequency");
|
||||
configurationEntry.setValue(PolicyManagerUtil.getMonitoringFequency());
|
||||
List<ConfigurationEntry> configList = tenantConfiguration.getConfiguration();
|
||||
if (configList == null) {
|
||||
configList = new ArrayList<>();
|
||||
}
|
||||
configList.add(configurationEntry);
|
||||
tenantConfiguration.setConfiguration(configList);
|
||||
return Response.status(Response.Status.OK).entity(tenantConfiguration).build();
|
||||
} catch (ConfigurationManagementException e) {
|
||||
msg = "Error occurred while retrieving the tenant configuration.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
public Response updateConfiguration(TenantConfiguration configuration) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
DeviceMgtAPIUtils.getTenantConfigurationManagementService().saveConfiguration(configuration,
|
||||
MDMAppConstants.RegistryConstants.GENERAL_CONFIG_RESOURCE_PATH);
|
||||
//Schedule the task service
|
||||
DeviceMgtAPIUtils.scheduleTaskService(DeviceMgtAPIUtils.getNotifierFrequency(configuration));
|
||||
responseMsg.setMessageFromServer("Tenant configuration updated successfully.");
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (ConfigurationManagementException e) {
|
||||
String msg = "Error occurred while updating the tenant configuration.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,285 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Device;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Device related operations
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class DeviceImpl implements Device{
|
||||
private static Log log = LogFactory.getLog(DeviceImpl.class);
|
||||
|
||||
/**
|
||||
* Get all devices. We have to use accept all the necessary query parameters sent by datatable.
|
||||
* Hence had to put lot of query params here.
|
||||
*
|
||||
* @return Device List
|
||||
*/
|
||||
@GET
|
||||
public Response getAllDevices(@QueryParam("type") String type, @QueryParam("user") String user,
|
||||
@QueryParam("role") String role, @QueryParam("status") EnrolmentInfo.Status status,
|
||||
@QueryParam("start") int startIdx, @QueryParam("length") int length,
|
||||
@QueryParam("device-name") String deviceName,
|
||||
@QueryParam("ownership") EnrolmentInfo.OwnerShip ownership) {
|
||||
try {
|
||||
DeviceManagementProviderService service = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
//Length > 0 means this is a pagination request.
|
||||
if (length > 0) {
|
||||
PaginationRequest paginationRequest = new PaginationRequest(startIdx, length);
|
||||
paginationRequest.setDeviceName(deviceName);
|
||||
paginationRequest.setOwner(user);
|
||||
if (ownership != null) {
|
||||
paginationRequest.setOwnership(ownership.toString());
|
||||
}
|
||||
if (status != null) {
|
||||
paginationRequest.setStatus(status.toString());
|
||||
}
|
||||
paginationRequest.setDeviceType(type);
|
||||
return Response.status(Response.Status.OK).entity(service.getAllDevices(paginationRequest)).build();
|
||||
}
|
||||
|
||||
List<org.wso2.carbon.device.mgt.common.Device> allDevices;
|
||||
if ((type != null) && !type.isEmpty()) {
|
||||
allDevices = service.getAllDevices(type);
|
||||
} else if ((user != null) && !user.isEmpty()) {
|
||||
allDevices = service.getDevicesOfUser(user);
|
||||
} else if ((role != null) && !role.isEmpty()) {
|
||||
allDevices = service.getAllDevicesOfRole(role);
|
||||
} else if (status != null) {
|
||||
allDevices = service.getDevicesByStatus(status);
|
||||
} else if (deviceName != null) {
|
||||
allDevices = service.getDevicesByName(deviceName);
|
||||
} else {
|
||||
allDevices = service.getAllDevices();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(allDevices).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the device list.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch device details for a given device type and device Id.
|
||||
*
|
||||
* @return Device wrapped inside Response
|
||||
*/
|
||||
@GET
|
||||
@Path("view")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getDevice(@QueryParam("type") String type,
|
||||
@QueryParam("id") String id) {
|
||||
DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id);
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
org.wso2.carbon.device.mgt.common.Device device;
|
||||
try {
|
||||
device = deviceManagementProviderService.getDevice(deviceIdentifier);
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the device information.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
if (device == null) {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND);
|
||||
responsePayload.setMessageFromServer("Requested device by type: " +
|
||||
type + " and id: " + id + " does not exist.");
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build();
|
||||
} else {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Sending Requested device by type: " + type + " and id: " + id + ".");
|
||||
responsePayload.setResponseContent(device);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch device details of a given user.
|
||||
*
|
||||
* @param user User Name
|
||||
* @return Device
|
||||
*/
|
||||
@GET
|
||||
@Path("user/{user}")
|
||||
public Response getDevice(@PathParam("user") String user) {
|
||||
List<org.wso2.carbon.device.mgt.common.Device> devices;
|
||||
try {
|
||||
devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesOfUser(user);
|
||||
if (devices == null) {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(devices).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the devices list of given user.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch device count of a given user.
|
||||
*
|
||||
* @param user User Name
|
||||
* @return Device
|
||||
*/
|
||||
@GET
|
||||
@Path("user/{user}/count")
|
||||
public Response getDeviceCount(@PathParam("user") String user) {
|
||||
try {
|
||||
Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount(user);
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the devices list of given user.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get current device count
|
||||
*
|
||||
* @return device count
|
||||
*/
|
||||
@GET
|
||||
@Path("count")
|
||||
public Response getDeviceCount() {
|
||||
try {
|
||||
Integer count = DeviceMgtAPIUtils.getDeviceManagementService().getDeviceCount();
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the device count.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of devices that matches with the given name.
|
||||
*
|
||||
* @param deviceName Device name
|
||||
* @param tenantDomain Callee tenant domain
|
||||
* @return list of devices.
|
||||
*/
|
||||
@GET
|
||||
@Path("name/{name}/{tenantDomain}")
|
||||
public Response getDevicesByName(@PathParam("name") String deviceName,
|
||||
@PathParam("tenantDomain") String tenantDomain) {
|
||||
List<org.wso2.carbon.device.mgt.common.Device> devices;
|
||||
try {
|
||||
devices = DeviceMgtAPIUtils.getDeviceManagementService().getDevicesByName(deviceName);
|
||||
return Response.status(Response.Status.OK).entity(devices).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the devices list of device name.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of available device types.
|
||||
*
|
||||
* @return list of device types.
|
||||
*/
|
||||
@GET
|
||||
@Path("types")
|
||||
public Response getDeviceTypes() {
|
||||
List<DeviceType> deviceTypes;
|
||||
try {
|
||||
deviceTypes = DeviceMgtAPIUtils.getDeviceManagementService().getAvailableDeviceTypes();
|
||||
return Response.status(Response.Status.OK).entity(deviceTypes).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the list of device types.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update device.
|
||||
*
|
||||
* @return update status.
|
||||
*/
|
||||
@PUT
|
||||
@Path("type/{type}/id/{deviceId}")
|
||||
public Response updateDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId,
|
||||
org.wso2.carbon.device.mgt.common.Device updatedDevice) {
|
||||
try {
|
||||
DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(deviceType);
|
||||
deviceIdentifier.setId(deviceId);
|
||||
org.wso2.carbon.device.mgt.common.Device device = deviceManagementService.getDevice(deviceIdentifier);
|
||||
device.setName(updatedDevice.getName());
|
||||
device.setDescription(updatedDevice.getDescription());
|
||||
Boolean response = deviceManagementService.modifyEnrollment(device);
|
||||
return Response.status(Response.Status.OK).entity(response).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the list of device types.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* disenroll device.
|
||||
*
|
||||
* @return disenrollment status.
|
||||
*/
|
||||
@DELETE
|
||||
@Path("type/{type}/id/{deviceId}")
|
||||
public Response disenrollDevice(@PathParam("type") String deviceType, @PathParam("deviceId") String deviceId) {
|
||||
try {
|
||||
DeviceManagementProviderService deviceManagementService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setType(deviceType);
|
||||
deviceIdentifier.setId(deviceId);
|
||||
Boolean response = deviceManagementService.disenrollDevice(deviceIdentifier);
|
||||
return Response.status(Response.Status.OK).entity(response).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while fetching the list of device types.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
|
||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
|
||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
|
||||
import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.DeviceInformation;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class DeviceInformationImpl implements DeviceInformation {
|
||||
|
||||
private static Log log = LogFactory.getLog(DeviceInformationImpl.class);
|
||||
|
||||
@GET
|
||||
@Path("{type}/{id}")
|
||||
public Response getDeviceInfo(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
DeviceInformationManager informationManager;
|
||||
DeviceInfo deviceInfo;
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(id);
|
||||
deviceIdentifier.setType(type);
|
||||
informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService();
|
||||
deviceInfo = informationManager.getDeviceInfo(deviceIdentifier);
|
||||
} catch (DeviceDetailsMgtException e) {
|
||||
String msg = "Error occurred while getting the device information.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(deviceInfo).build();
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("location/{type}/{id}")
|
||||
public Response getDeviceLocation(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
DeviceInformationManager informationManager;
|
||||
DeviceLocation deviceLocation;
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
deviceIdentifier.setId(id);
|
||||
deviceIdentifier.setType(type);
|
||||
informationManager = DeviceMgtAPIUtils.getDeviceInformationManagerService();
|
||||
deviceLocation = informationManager.getDeviceLocation(deviceIdentifier);
|
||||
} catch (DeviceDetailsMgtException e) {
|
||||
String msg = "Error occurred while getting the device location.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(deviceLocation).build();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.DeviceNotification;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
|
||||
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* DeviceNotification management REST-API implementation.
|
||||
* All end points support JSON, XMl with content negotiation.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
@Consumes({ "application/json", "application/xml" })
|
||||
public class DeviceNotificationImpl implements DeviceNotification{
|
||||
|
||||
private static Log log = LogFactory.getLog(ConfigurationImpl.class);
|
||||
|
||||
@GET
|
||||
public Response getNotifications() {
|
||||
String msg;
|
||||
try {
|
||||
List<Notification> notifications = DeviceMgtAPIUtils.getNotificationManagementService().getAllNotifications();
|
||||
return Response.status(Response.Status.OK).entity(notifications).build();
|
||||
} catch (NotificationManagementException e) {
|
||||
msg = "Error occurred while retrieving the notification list.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("{status}")
|
||||
public Response getNotificationsByStatus(@PathParam("status") Notification.Status status) {
|
||||
String msg;
|
||||
try {
|
||||
List<Notification> notifications = DeviceMgtAPIUtils.getNotificationManagementService().getNotificationsByStatus(status);
|
||||
return Response.status(Response.Status.OK).entity(notifications).build();
|
||||
} catch (NotificationManagementException e) {
|
||||
msg = "Error occurred while retrieving the notification list.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@PUT
|
||||
@Path("{id}/{status}")
|
||||
public Response updateNotificationStatus(@PathParam("id") int id,
|
||||
@PathParam("status") Notification.Status status) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
DeviceMgtAPIUtils.getNotificationManagementService().updateNotificationStatus(id, status);
|
||||
responseMsg.setMessageFromServer("Notification status updated successfully.");
|
||||
responseMsg.setStatusCode(HttpStatus.SC_ACCEPTED);
|
||||
return Response.status(Response.Status.ACCEPTED).entity(responseMsg).build();
|
||||
} catch (NotificationManagementException e) {
|
||||
String msg = "Error occurred while updating notification status.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
public Response addNotification(Notification notification) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
DeviceMgtAPIUtils.getNotificationManagementService().addNotification(notification);
|
||||
responseMsg.setMessageFromServer("Notification has added successfully.");
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (NotificationManagementException e) {
|
||||
String msg = "Error occurred while updating notification status.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.common.device.details.DeviceWrapper;
|
||||
import org.wso2.carbon.device.mgt.common.search.SearchContext;
|
||||
import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService;
|
||||
import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.DeviceSearch;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class DeviceSearchImpl implements DeviceSearch {
|
||||
|
||||
private static Log log = LogFactory.getLog(DeviceSearchImpl.class);
|
||||
|
||||
@GET
|
||||
public Response getDeviceInfo(SearchContext searchContext) {
|
||||
SearchManagerService searchManagerService;
|
||||
List<DeviceWrapper> devices;
|
||||
try {
|
||||
searchManagerService = DeviceMgtAPIUtils.getSearchManagerService();
|
||||
devices = searchManagerService.search(searchContext);
|
||||
|
||||
} catch (SearchMgtException e) {
|
||||
String msg = "Error occurred while searching the device information.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(devices).build();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Feature;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Features
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
@Consumes({"application/json", "application/xml"})
|
||||
public class FeatureImpl implements Feature{
|
||||
private static Log log = LogFactory.getLog(FeatureImpl.class);
|
||||
|
||||
/**
|
||||
* Get all features for Mobile Device Type
|
||||
*
|
||||
* @return Feature
|
||||
*/
|
||||
@GET
|
||||
@Path("/{type}")
|
||||
public Response getFeatures(@PathParam("type") String type) {
|
||||
List<org.wso2.carbon.device.mgt.common.Feature> features;
|
||||
DeviceManagementProviderService dmService;
|
||||
try {
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
features = dmService.getFeatureManager(type).getFeatures();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while retrieving the list of features";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(features).build();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,533 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.PrivilegedCarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroupConstants;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyEixistException;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupUser;
|
||||
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Group;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.user.core.multiplecredentials.UserDoesNotExistException;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.FormParam;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class GroupImpl implements Group {
|
||||
|
||||
private static Log log = LogFactory.getLog(GroupImpl.class);
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Consumes("application/json")
|
||||
public Response createGroup(DeviceGroup group) {
|
||||
String owner = PrivilegedCarbonContext.getThreadLocalCarbonContext().getUsername();
|
||||
if (group == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST).build();
|
||||
}
|
||||
group.setOwner(owner);
|
||||
group.setDateOfCreation(new Date().getTime());
|
||||
group.setDateOfLastUpdate(new Date().getTime());
|
||||
try {
|
||||
GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService();
|
||||
groupManagementService.createGroup(group, DeviceGroupConstants.Roles.DEFAULT_ADMIN_ROLE, DeviceGroupConstants.Permissions.DEFAULT_ADMIN_PERMISSIONS);
|
||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner,
|
||||
DeviceGroupConstants.Roles.DEFAULT_OPERATOR_ROLE,
|
||||
DeviceGroupConstants.Permissions.DEFAULT_OPERATOR_PERMISSIONS);
|
||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_STATS_MONITOR_ROLE,
|
||||
DeviceGroupConstants.Permissions.DEFAULT_STATS_MONITOR_PERMISSIONS);
|
||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_POLICIES,
|
||||
DeviceGroupConstants.Permissions.DEFAULT_VIEW_POLICIES_PERMISSIONS);
|
||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_MANAGE_POLICIES,
|
||||
DeviceGroupConstants.Permissions.DEFAULT_MANAGE_POLICIES_PERMISSIONS);
|
||||
groupManagementService.addGroupSharingRole(owner, group.getName(), owner, DeviceGroupConstants.Roles.DEFAULT_VIEW_EVENTS,
|
||||
DeviceGroupConstants.Permissions.DEFAULT_VIEW_EVENTS_PERMISSIONS);
|
||||
return Response.status(Response.Status.CREATED).build();
|
||||
} catch (GroupAlreadyEixistException e) {
|
||||
return Response.status(Response.Status.CONFLICT).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getErrorMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}")
|
||||
@PUT
|
||||
@Consumes("application/json")
|
||||
@Produces("application/json")
|
||||
public Response updateGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
DeviceGroup deviceGroup) {
|
||||
try {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().updateGroup(deviceGroup, groupName, owner);
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getErrorMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}")
|
||||
@DELETE
|
||||
public Response deleteGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
|
||||
try {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService().deleteGroup(groupName, owner);
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage());
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroups(@QueryParam("start") int startIndex, @PathParam("length") int length) {
|
||||
try {
|
||||
PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.getGroups(startIndex, length);
|
||||
if (paginationResult.getRecordsTotal() > 0) {
|
||||
return Response.status(Response.Status.OK).entity(paginationResult).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/all")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getAllGroups() {
|
||||
try {
|
||||
GroupManagementProviderService groupManagementProviderService = DeviceMgtAPIUtils
|
||||
.getGroupManagementProviderService();
|
||||
PaginationResult paginationResult = groupManagementProviderService
|
||||
.getGroups(0, groupManagementProviderService.getGroupCount());
|
||||
if (paginationResult.getRecordsTotal() > 0) {
|
||||
return Response.status(Response.Status.OK).entity(paginationResult.getData()).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/user/{user}")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroups(@PathParam("user") String userName, @QueryParam("start") int startIndex,
|
||||
@QueryParam("length") int length) {
|
||||
try {
|
||||
PaginationResult paginationResult = DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.getGroups(userName, startIndex, length);
|
||||
if (paginationResult.getRecordsTotal() > 0) {
|
||||
return Response.status(Response.Status.OK).entity(paginationResult).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/user/{user}/all")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroups(@PathParam("user") String userName) {
|
||||
try {
|
||||
List<DeviceGroup> deviceGroups = DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.getGroups(userName);
|
||||
if (deviceGroups.size() > 0) {
|
||||
return Response.status(Response.Status.OK).entity(deviceGroups).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
|
||||
try {
|
||||
DeviceGroup deviceGroup = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroup(groupName, owner);
|
||||
if (deviceGroup != null) {
|
||||
return Response.status(Response.Status.OK).entity(deviceGroup).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/user/{user}/search")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response findGroups(@QueryParam("groupName") String groupName, @PathParam("user") String user) {
|
||||
try {
|
||||
List<DeviceGroup> groups = DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.findInGroups(groupName, user);
|
||||
DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()];
|
||||
groups.toArray(deviceGroups);
|
||||
return Response.status(Response.Status.OK).entity(deviceGroups).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/user/{user}/all")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroups(@PathParam("user") String userName, @QueryParam("permission") String permission) {
|
||||
try {
|
||||
GroupManagementProviderService groupManagementService = DeviceMgtAPIUtils.getGroupManagementProviderService();
|
||||
List<DeviceGroup> groups;
|
||||
if (permission != null) {
|
||||
groups = groupManagementService.getGroups(userName, permission);
|
||||
} else {
|
||||
groups = groupManagementService.getGroups(userName);
|
||||
}
|
||||
DeviceGroup[] deviceGroups = new DeviceGroup[groups.size()];
|
||||
groups.toArray(deviceGroups);
|
||||
return Response.status(Response.Status.OK).entity(deviceGroups).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/count")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getAllGroupCount() {
|
||||
try {
|
||||
int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount();
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/user/{user}/count")
|
||||
@GET
|
||||
@Produces("application/json")
|
||||
public Response getGroupCount(@PathParam("user") String userName) {
|
||||
try {
|
||||
int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getGroupCount(userName);
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}/share")
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
public Response shareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@FormParam("shareUser") String shareUser,
|
||||
@FormParam("roleName") String sharingRole) {
|
||||
|
||||
try {
|
||||
boolean isShared = DeviceMgtAPIUtils.getGroupManagementProviderService().shareGroup(
|
||||
shareUser, groupName, owner, sharingRole);
|
||||
if (isShared) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Group not found").build();
|
||||
}
|
||||
} catch (UserDoesNotExistException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}/unshare")
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
public Response unShareGroup(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@FormParam("unShareUser") String unShareUser,
|
||||
@FormParam("roleName") String sharingRole) {
|
||||
try {
|
||||
boolean isUnShared = DeviceMgtAPIUtils.getGroupManagementProviderService().unshareGroup(
|
||||
unShareUser, groupName, owner, sharingRole);
|
||||
if (isUnShared) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Group not found").build();
|
||||
}
|
||||
} catch (UserDoesNotExistException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions")
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
public Response addSharing(@QueryParam("shareUser") String shareUser,
|
||||
@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@PathParam("roleName") String roleName,
|
||||
@FormParam("permissions") String[] permissions) {
|
||||
|
||||
try {
|
||||
boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addGroupSharingRole(
|
||||
shareUser, groupName, owner, roleName, permissions);
|
||||
if (isAdded) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@DELETE
|
||||
@Path("/owner/{owner}/name/{groupName}/share/roles/{roleName}/permissions")
|
||||
@Produces("application/json")
|
||||
public Response removeSharing(@QueryParam("userName") String userName,
|
||||
@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@PathParam("roleName") String roleName) {
|
||||
try {
|
||||
boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeGroupSharingRole(
|
||||
groupName, owner, roleName);
|
||||
if (isRemoved) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/owner/{owner}/name/{groupName}/share/roles")
|
||||
@Produces("application/json")
|
||||
public Response getRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@QueryParam("userName") String userName) {
|
||||
try {
|
||||
List<String> roles;
|
||||
if (userName != null && !userName.isEmpty()) {
|
||||
roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(userName, groupName, owner);
|
||||
} else {
|
||||
roles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner);
|
||||
}
|
||||
String[] rolesArray = new String[roles.size()];
|
||||
roles.toArray(rolesArray);
|
||||
return Response.status(Response.Status.OK).entity(rolesArray).build();
|
||||
} catch (UserDoesNotExistException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Path("/owner/{owner}/name/{groupName}/user/{userName}/share/roles")
|
||||
@Produces("application/json")
|
||||
public Response setRoles(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@PathParam("userName") String userName, List<String> selectedRoles) {
|
||||
try {
|
||||
List<String> allRoles = DeviceMgtAPIUtils.getGroupManagementProviderService().getRoles(groupName, owner);
|
||||
for (String role : allRoles) {
|
||||
if (selectedRoles.contains(role)) {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.shareGroup(userName, groupName, owner, role);
|
||||
} else {
|
||||
DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.unshareGroup(userName, groupName, owner, role);
|
||||
}
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} catch (UserDoesNotExistException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/owner/{owner}/name/{groupName}/users")
|
||||
@Produces("application/json")
|
||||
public Response getUsers(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
|
||||
try {
|
||||
List<GroupUser> users = DeviceMgtAPIUtils.getGroupManagementProviderService().getUsers(
|
||||
groupName, owner);
|
||||
GroupUser[] usersArray = new GroupUser[users.size()];
|
||||
users.toArray(usersArray);
|
||||
return Response.status(Response.Status.OK).entity(usersArray).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/owner/{owner}/name/{groupName}/devices")
|
||||
@Produces("application/json")
|
||||
public Response getDevices(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@QueryParam("start") int startIdx, @QueryParam("length") int length) {
|
||||
try {
|
||||
PaginationResult paginationResult = DeviceMgtAPIUtils
|
||||
.getGroupManagementProviderService().getDevices(groupName, owner, startIdx, length);
|
||||
if (paginationResult.getRecordsTotal() > 0) {
|
||||
return Response.status(Response.Status.OK).entity(paginationResult).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/owner/{owner}/name/{groupName}/devices/count")
|
||||
@Produces("application/json")
|
||||
public Response getDeviceCount(@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
|
||||
try {
|
||||
int count = DeviceMgtAPIUtils.getGroupManagementProviderService().getDeviceCount(groupName, owner);
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("/owner/{owner}/name/{groupName}/devices")
|
||||
@Produces("application/json")
|
||||
public Response addDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
DeviceIdentifier deviceIdentifier) {
|
||||
try {
|
||||
boolean isAdded = DeviceMgtAPIUtils.getGroupManagementProviderService().addDevice(
|
||||
deviceIdentifier, groupName, owner);
|
||||
if (isAdded) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@DELETE
|
||||
@Path("/owner/{owner}/name/{groupName}/devices/{deviceType}/{deviceId}")
|
||||
@Produces("application/json")
|
||||
public Response removeDevice(@PathParam("groupName") String groupName, @PathParam("owner") String owner,
|
||||
@PathParam("deviceId") String deviceId,
|
||||
@PathParam("deviceType") String deviceType) {
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(deviceId, deviceType);
|
||||
boolean isRemoved = DeviceMgtAPIUtils.getGroupManagementProviderService().removeDevice(
|
||||
deviceIdentifier, groupName, owner);
|
||||
if (isRemoved) {
|
||||
return Response.status(Response.Status.OK).build();
|
||||
} else {
|
||||
return Response.status(Response.Status.NOT_FOUND).build();
|
||||
}
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("/owner/{owner}/name/{groupName}/users/{userName}/permissions")
|
||||
@Produces("application/json")
|
||||
public Response getPermissions(@PathParam("userName") String userName,
|
||||
@PathParam("groupName") String groupName, @PathParam("owner") String owner) {
|
||||
try {
|
||||
String[] permissions = DeviceMgtAPIUtils.getGroupManagementProviderService()
|
||||
.getPermissions(userName, groupName, owner);
|
||||
return Response.status(Response.Status.OK).entity(permissions).build();
|
||||
} catch (UserDoesNotExistException e) {
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(e.getMessage()).build();
|
||||
} catch (GroupManagementException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.License;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
/**
|
||||
* This class represents license related operations.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class LicenseImpl implements License {
|
||||
|
||||
private static Log log = LogFactory.getLog(LicenseImpl.class);
|
||||
|
||||
/**
|
||||
* This method returns the license text related to a given device type and language code.
|
||||
*
|
||||
* @param deviceType Device type, ex: android, ios
|
||||
* @param languageCode Language code, ex: en_US
|
||||
* @return Returns the license text
|
||||
*/
|
||||
@GET
|
||||
@Path ("{deviceType}/{languageCode}")
|
||||
@Produces ({MediaType.APPLICATION_JSON})
|
||||
public Response getLicense(@PathParam ("deviceType") String deviceType,
|
||||
@PathParam("languageCode") String languageCode) {
|
||||
|
||||
org.wso2.carbon.device.mgt.common.license.mgt.License license;
|
||||
ResponsePayload responsePayload;
|
||||
try {
|
||||
license = DeviceMgtAPIUtils.getDeviceManagementService().getLicense(deviceType, languageCode);
|
||||
if (license == null) {
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).build();
|
||||
}
|
||||
responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK).
|
||||
messageFromServer("License for '" + deviceType + "' was retrieved successfully").
|
||||
responseContent(license.getText()).
|
||||
build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while retrieving the license configured for '" + deviceType + "' device type";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used to add license to a specific device type.
|
||||
*
|
||||
* @param deviceType Device type, ex: android, ios
|
||||
* @param license License object
|
||||
* @return Returns the acknowledgement for the action
|
||||
*/
|
||||
@POST
|
||||
@Path ("{deviceType}")
|
||||
public Response addLicense(@PathParam ("deviceType") String deviceType,
|
||||
org.wso2.carbon.device.mgt.common.license.mgt.License license) {
|
||||
|
||||
ResponsePayload responsePayload;
|
||||
try {
|
||||
DeviceMgtAPIUtils.getDeviceManagementService().addLicense(deviceType, license);
|
||||
responsePayload = ResponsePayload.statusCode(HttpStatus.SC_OK).
|
||||
messageFromServer("License added successfully for '" + deviceType + "' device type").
|
||||
build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while adding license for '" + deviceType + "' device type";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
}
|
@ -0,0 +1,227 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.context.DeviceOperationContext;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMIOSOperationUtil;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.ApplicationWrapper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.MobileApp;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
||||
import org.wso2.carbon.device.mgt.common.Platform;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
|
||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||
import org.wso2.carbon.device.mgt.core.app.mgt.ApplicationManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.MDMAndroidOperationUtil;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Operation related REST-API implementation.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
@Consumes({"application/json", "application/xml"})
|
||||
public class OperationImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Operation {
|
||||
|
||||
private static Log log = LogFactory.getLog(OperationImpl.class);
|
||||
|
||||
/* @deprecated */
|
||||
@Override
|
||||
@GET
|
||||
public Response getAllOperations() {
|
||||
List<? extends org.wso2.carbon.device.mgt.common.operation.mgt.Operation> operations;
|
||||
DeviceManagementProviderService dmService;
|
||||
try {
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
operations = dmService.getOperations(null);
|
||||
} catch (OperationManagementException e) {
|
||||
String msg = "Error occurred while fetching the operations for the device.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(operations).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("paginate/{type}/{id}")
|
||||
public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id,
|
||||
@QueryParam("start") int startIdx, @QueryParam("length") int length,
|
||||
@QueryParam("search") String search) {
|
||||
PaginationResult operations;
|
||||
DeviceManagementProviderService dmService;
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
PaginationRequest paginationRequest = new PaginationRequest(startIdx, length);
|
||||
try {
|
||||
deviceIdentifier.setType(type);
|
||||
deviceIdentifier.setId(id);
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
operations = dmService.getOperations(deviceIdentifier, paginationRequest);
|
||||
} catch (OperationManagementException e) {
|
||||
String msg = "Error occurred while fetching the operations for the device.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(operations).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("{type}/{id}")
|
||||
public Response getDeviceOperations(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
List<? extends org.wso2.carbon.device.mgt.common.operation.mgt.Operation> operations;
|
||||
DeviceManagementProviderService dmService;
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
try {
|
||||
deviceIdentifier.setType(type);
|
||||
deviceIdentifier.setId(id);
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
operations = dmService.getOperations(deviceIdentifier);
|
||||
} catch (OperationManagementException e) {
|
||||
String msg = "Error occurred while fetching the operations for the device.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(operations).build();
|
||||
}
|
||||
|
||||
/* @deprecated */
|
||||
@Override
|
||||
@POST
|
||||
public Response addOperation(DeviceOperationContext operationContext) {
|
||||
DeviceManagementProviderService dmService;
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
int operationId = dmService.addOperation(operationContext.getOperation(), operationContext.getDevices());
|
||||
if (operationId > 0) {
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responseMsg.setMessageFromServer("Operation has added successfully.");
|
||||
}
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (OperationManagementException e) {
|
||||
String msg = "Error occurred while saving the operation";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("{type}/{id}/apps")
|
||||
public Response getInstalledApps(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
List<Application> applications;
|
||||
ApplicationManagementProviderService appManagerConnector;
|
||||
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
|
||||
try {
|
||||
deviceIdentifier.setType(type);
|
||||
deviceIdentifier.setId(id);
|
||||
appManagerConnector = DeviceMgtAPIUtils.getAppManagementService();
|
||||
applications = appManagerConnector.getApplicationListForDevice(deviceIdentifier);
|
||||
} catch (ApplicationManagementException e) {
|
||||
String msg = "Error occurred while fetching the apps of the device.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.CREATED).entity(applications).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("installApp/{tenantDomain}")
|
||||
public Response installApplication(ApplicationWrapper applicationWrapper,
|
||||
@PathParam("tenantDomain") String tenantDomain) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
ApplicationManager appManagerConnector;
|
||||
org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null;
|
||||
try {
|
||||
appManagerConnector = DeviceMgtAPIUtils.getAppManagementService();
|
||||
MobileApp mobileApp = applicationWrapper.getApplication();
|
||||
|
||||
if (applicationWrapper.getDeviceIdentifiers() != null) {
|
||||
for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) {
|
||||
if (deviceIdentifier.getType().equals(Platform.android.toString())) {
|
||||
operation = MDMAndroidOperationUtil.createInstallAppOperation(mobileApp);
|
||||
} else if (deviceIdentifier.getType().equals(Platform.ios.toString())) {
|
||||
operation = MDMIOSOperationUtil.createInstallAppOperation(mobileApp);
|
||||
}
|
||||
}
|
||||
appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers());
|
||||
}
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responseMsg.setMessageFromServer("Authentication installation request has been sent to the device.");
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (ApplicationManagementException | MDMAPIException e) {
|
||||
String msg = "Error occurred while saving the operation";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("uninstallApp/{tenantDomain}")
|
||||
public Response uninstallApplication(ApplicationWrapper applicationWrapper,
|
||||
@PathParam("tenantDomain") String tenantDomain) {
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
ApplicationManager appManagerConnector;
|
||||
org.wso2.carbon.device.mgt.common.operation.mgt.Operation operation = null;
|
||||
try {
|
||||
appManagerConnector = DeviceMgtAPIUtils.getAppManagementService();
|
||||
MobileApp mobileApp = applicationWrapper.getApplication();
|
||||
|
||||
if (applicationWrapper.getDeviceIdentifiers() != null) {
|
||||
for (DeviceIdentifier deviceIdentifier : applicationWrapper.getDeviceIdentifiers()) {
|
||||
if (deviceIdentifier.getType().equals(Platform.android.toString())) {
|
||||
operation = MDMAndroidOperationUtil.createAppUninstallOperation(mobileApp);
|
||||
} else if (deviceIdentifier.getType().equals(Platform.ios.toString())) {
|
||||
operation = MDMIOSOperationUtil.createAppUninstallOperation(mobileApp);
|
||||
}
|
||||
}
|
||||
appManagerConnector.installApplicationForDevices(operation, applicationWrapper.getDeviceIdentifiers());
|
||||
}
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responseMsg.setMessageFromServer("Authentication removal request has been sent to the device.");
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (ApplicationManagementException | MDMAPIException e) {
|
||||
String msg = "Error occurred while saving the operation";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,445 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.PriorityUpdatedPolicyWrapper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtUtil;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.PolicyWrapper;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyMonitoringTaskException;
|
||||
import org.wso2.carbon.policy.mgt.common.monitor.ComplianceData;
|
||||
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||
import org.wso2.carbon.policy.mgt.core.task.TaskScheduleService;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class PolicyImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Policy {
|
||||
private static Log log = LogFactory.getLog(PolicyImpl.class);
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("inactive-policy")
|
||||
public Response addPolicy(PolicyWrapper policyWrapper) {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy();
|
||||
policy.setPolicyName(policyWrapper.getPolicyName());
|
||||
policy.setProfileId(policyWrapper.getProfileId());
|
||||
policy.setDescription(policyWrapper.getDescription());
|
||||
policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile()));
|
||||
policy.setOwnershipType(policyWrapper.getOwnershipType());
|
||||
policy.setRoles(policyWrapper.getRoles());
|
||||
policy.setUsers(policyWrapper.getUsers());
|
||||
policy.setTenantId(policyWrapper.getTenantId());
|
||||
policy.setCompliance(policyWrapper.getCompliance());
|
||||
|
||||
return addPolicy(policyManagementService, responseMsg, policy);
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("active-policy")
|
||||
public Response addActivePolicy(PolicyWrapper policyWrapper) {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy();
|
||||
policy.setPolicyName(policyWrapper.getPolicyName());
|
||||
policy.setProfileId(policyWrapper.getProfileId());
|
||||
policy.setDescription(policyWrapper.getDescription());
|
||||
policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile()));
|
||||
policy.setOwnershipType(policyWrapper.getOwnershipType());
|
||||
policy.setRoles(policyWrapper.getRoles());
|
||||
policy.setUsers(policyWrapper.getUsers());
|
||||
policy.setTenantId(policyWrapper.getTenantId());
|
||||
policy.setCompliance(policyWrapper.getCompliance());
|
||||
policy.setActive(true);
|
||||
|
||||
return addPolicy(policyManagementService, responseMsg, policy);
|
||||
}
|
||||
|
||||
private Response addPolicy(PolicyManagerService policyManagementService, ResponsePayload responseMsg,
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy) {
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
pap.addPolicy(policy);
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responseMsg.setMessageFromServer("Policy has been added successfully.");
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getAllPolicies() {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
List<org.wso2.carbon.policy.mgt.common.Policy> policies;
|
||||
try {
|
||||
PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP();
|
||||
policies = policyAdministratorPoint.getPolicies();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Sending all retrieved device policies.");
|
||||
responsePayload.setResponseContent(policies);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
@Path("{id}")
|
||||
public Response getPolicy(@PathParam("id") int policyId) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
final org.wso2.carbon.policy.mgt.common.Policy policy;
|
||||
try {
|
||||
PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP();
|
||||
policy = policyAdministratorPoint.getPolicy(policyId);
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
if (policy == null){
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_NOT_FOUND);
|
||||
responsePayload.setMessageFromServer("Policy for ID " + policyId + " not found.");
|
||||
return Response.status(Response.Status.NOT_FOUND).entity(responsePayload).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Sending all retrieved device policies.");
|
||||
responsePayload.setResponseContent(policy);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("count")
|
||||
public Response getPolicyCount() {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
try {
|
||||
PolicyAdministratorPoint policyAdministratorPoint = policyManagementService.getPAP();
|
||||
Integer count = policyAdministratorPoint.getPolicyCount();
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Path("{id}")
|
||||
public Response updatePolicy(PolicyWrapper policyWrapper, @PathParam("id") int policyId) {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy = new org.wso2.carbon.policy.mgt.common.Policy();
|
||||
policy.setPolicyName(policyWrapper.getPolicyName());
|
||||
policy.setId(policyId);
|
||||
policy.setProfileId(policyWrapper.getProfileId());
|
||||
policy.setDescription(policyWrapper.getDescription());
|
||||
policy.setProfile(DeviceMgtUtil.convertProfile(policyWrapper.getProfile()));
|
||||
policy.setOwnershipType(policyWrapper.getOwnershipType());
|
||||
policy.setRoles(policyWrapper.getRoles());
|
||||
policy.setUsers(policyWrapper.getUsers());
|
||||
policy.setTenantId(policyWrapper.getTenantId());
|
||||
policy.setCompliance(policyWrapper.getCompliance());
|
||||
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
pap.updatePolicy(policy);
|
||||
responseMsg.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responseMsg.setMessageFromServer("Policy has been updated successfully.");
|
||||
return Response.status(Response.Status.CREATED).entity(responseMsg).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception in policy update.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Path("priorities")
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response updatePolicyPriorities(List<PriorityUpdatedPolicyWrapper> priorityUpdatedPolicies) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
List<org.wso2.carbon.policy.mgt.common.Policy> policiesToUpdate =
|
||||
new ArrayList<>(priorityUpdatedPolicies.size());
|
||||
int i;
|
||||
for (i = 0; i < priorityUpdatedPolicies.size(); i++) {
|
||||
org.wso2.carbon.policy.mgt.common.Policy policyObj = new org.wso2.carbon.policy.mgt.common.Policy();
|
||||
policyObj.setId(priorityUpdatedPolicies.get(i).getId());
|
||||
policyObj.setPriorityId(priorityUpdatedPolicies.get(i).getPriority());
|
||||
policiesToUpdate.add(policyObj);
|
||||
}
|
||||
boolean policiesUpdated;
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
policiesUpdated = pap.updatePolicyPriorities(policiesToUpdate);
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Exception in updating policy priorities.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
if (policiesUpdated) {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Policy Priorities successfully updated.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} else {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST);
|
||||
responsePayload.setMessageFromServer("Policy priorities did not update. Bad Request.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@POST
|
||||
@Path("bulk-remove")
|
||||
@Consumes("application/json")
|
||||
@Produces("application/json")
|
||||
public Response bulkRemovePolicy(List<Integer> policyIds) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
boolean policyDeleted = true;
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
for(int i : policyIds) {
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy = pap.getPolicy(i);
|
||||
if(!pap.deletePolicy(policy)){
|
||||
policyDeleted = false;
|
||||
}
|
||||
}
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Exception in deleting policies.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
if (policyDeleted) {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Policies have been successfully deleted.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} else {
|
||||
responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST);
|
||||
responsePayload.setMessageFromServer("Policy does not exist.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
@Path("activate")
|
||||
public Response activatePolicy(List<Integer> policyIds) {
|
||||
try {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
for(int i : policyIds) {
|
||||
pap.activatePolicy(i);
|
||||
}
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Exception in activating policies.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Selected policies have been successfully activated.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
@Path("inactivate")
|
||||
public Response inactivatePolicy(List<Integer> policyIds) throws MDMAPIException {
|
||||
|
||||
try {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
for(int i : policyIds) {
|
||||
pap.inactivatePolicy(i);
|
||||
}
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Exception in inactivating policies.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Selected policies have been successfully inactivated.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@PUT
|
||||
@Produces("application/json")
|
||||
@Path("apply-changes")
|
||||
public Response applyChanges() {
|
||||
|
||||
try {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
pap.publishChanges();
|
||||
|
||||
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Exception in applying changes.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Changes have been successfully updated.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("start-task/{milliseconds}")
|
||||
public Response startTaskService(@PathParam("milliseconds") int monitoringFrequency) {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
try {
|
||||
TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService();
|
||||
taskScheduleService.startTask(monitoringFrequency);
|
||||
|
||||
|
||||
} catch (PolicyMonitoringTaskException e) {
|
||||
String msg = "Policy Management related exception.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Policy monitoring service started successfully.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("update-task/{milliseconds}")
|
||||
public Response updateTaskService(@PathParam("milliseconds") int monitoringFrequency) {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
try {
|
||||
TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService();
|
||||
taskScheduleService.updateTask(monitoringFrequency);
|
||||
|
||||
} catch (PolicyMonitoringTaskException e) {
|
||||
String msg = "Policy Management related exception.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Policy monitoring service updated successfully.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("stop-task")
|
||||
public Response stopTaskService() {
|
||||
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
try {
|
||||
TaskScheduleService taskScheduleService = policyManagementService.getTaskScheduleService();
|
||||
taskScheduleService.stopTask();
|
||||
|
||||
} catch (PolicyMonitoringTaskException e) {
|
||||
String msg = "Policy Management related exception.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Policy monitoring service stopped successfully.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("{type}/{id}")
|
||||
public Response getComplianceDataOfDevice(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id);
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ComplianceData complianceData = policyManagementService.getDeviceCompliance(deviceIdentifier);
|
||||
return Response.status(Response.Status.OK).entity(complianceData).build();
|
||||
} catch (PolicyComplianceException e) {
|
||||
String msg = "Error occurred while getting the compliance data.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Path("{type}/{id}/active-policy")
|
||||
public Response getDeviceActivePolicy(@PathParam("type") String type, @PathParam("id") String id) {
|
||||
try {
|
||||
DeviceIdentifier deviceIdentifier = DeviceMgtAPIUtils.instantiateDeviceIdentifier(type, id);
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
org.wso2.carbon.policy.mgt.common.Policy policy = policyManagementService
|
||||
.getAppliedPolicyToDevice(deviceIdentifier);
|
||||
return Response.status(Response.Status.OK).entity(policy).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Error occurred while getting the current policy.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.Profile;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyAdministratorPoint;
|
||||
import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
|
||||
import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
|
||||
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class ProfileImpl implements Profile{
|
||||
private static Log log = LogFactory.getLog(ProfileImpl.class);
|
||||
|
||||
@POST
|
||||
public Response addProfile(org.wso2.carbon.policy.mgt.common.Profile profile) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
profile = pap.addProfile(profile);
|
||||
return Response.status(Response.Status.OK).entity(profile).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
@POST
|
||||
@Path("{id}")
|
||||
public Response updateProfile(org.wso2.carbon.policy.mgt.common.Profile profile,
|
||||
@PathParam("id") String profileId) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
pap.updateProfile(profile);
|
||||
responseMsg.setMessageFromServer("Profile has been updated successfully.");
|
||||
return Response.status(Response.Status.OK).entity(responseMsg).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
@DELETE
|
||||
@Path("{id}")
|
||||
public Response deleteProfile(@PathParam("id") int profileId) {
|
||||
PolicyManagerService policyManagementService = DeviceMgtAPIUtils.getPolicyManagementService();
|
||||
ResponsePayload responseMsg = new ResponsePayload();
|
||||
try {
|
||||
PolicyAdministratorPoint pap = policyManagementService.getPAP();
|
||||
org.wso2.carbon.policy.mgt.common.Profile profile = pap.getProfile(profileId);
|
||||
pap.deleteProfile(profile);
|
||||
responseMsg.setMessageFromServer("Profile has been deleted successfully.");
|
||||
return Response.status(Response.Status.OK).entity(responseMsg).build();
|
||||
} catch (PolicyManagementException e) {
|
||||
String msg = "Policy Management related exception";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,450 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.CarbonConstants;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.RoleWrapper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer;
|
||||
import org.wso2.carbon.user.api.AuthorizationManager;
|
||||
import org.wso2.carbon.user.api.Permission;
|
||||
import org.wso2.carbon.user.api.UserRealm;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.api.UserStoreManager;
|
||||
import org.wso2.carbon.user.core.common.AbstractUserStoreManager;
|
||||
import org.wso2.carbon.user.mgt.UserRealmProxy;
|
||||
import org.wso2.carbon.user.mgt.common.UIPermissionNode;
|
||||
import org.wso2.carbon.user.mgt.common.UserAdminException;
|
||||
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class RoleImpl implements org.wso2.carbon.device.mgt.jaxrs.api.Role {
|
||||
|
||||
private static Log log = LogFactory.getLog(RoleImpl.class);
|
||||
|
||||
/**
|
||||
* Get user roles (except all internal roles) from system.
|
||||
*
|
||||
* @return A list of users
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getRoles() {
|
||||
List<String> filteredRoles;
|
||||
try {
|
||||
filteredRoles = getRolesFromUserStore();
|
||||
} catch (MDMAPIException e) {
|
||||
log.error(e.getErrorMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("All user roles were successfully retrieved.");
|
||||
responsePayload.setResponseContent(filteredRoles);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user roles by user store(except all internal roles) from system.
|
||||
*
|
||||
* @return A list of users
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("{userStore}")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getRoles(@PathParam("userStore") String userStore) {
|
||||
String[] roles;
|
||||
try {
|
||||
AbstractUserStoreManager abstractUserStoreManager =
|
||||
(AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of user roles");
|
||||
}
|
||||
roles = abstractUserStoreManager.getRoleNames(userStore + "/*", -1, false, true, true);
|
||||
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of user roles.";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
// removing all internal roles and roles created for Service-providers
|
||||
List<String> filteredRoles = new ArrayList<>();
|
||||
for (String role : roles) {
|
||||
if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) {
|
||||
filteredRoles.add(role);
|
||||
}
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("All user roles were successfully retrieved.");
|
||||
responsePayload.setResponseContent(filteredRoles);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user roles by providing a filtering criteria(except all internal roles & system roles) from system.
|
||||
*
|
||||
* @return A list of users
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("search")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getMatchingRoles(@QueryParam("filter") String filter) {
|
||||
String[] roles;
|
||||
try {
|
||||
AbstractUserStoreManager abstractUserStoreManager =
|
||||
(AbstractUserStoreManager) DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of user roles using filter : " + filter);
|
||||
}
|
||||
roles = abstractUserStoreManager.getRoleNames("*" + filter + "*", -1, true, true, true);
|
||||
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of user roles using the filter : " + filter;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
// removing all internal roles and roles created for Service-providers
|
||||
List<String> filteredRoles = new ArrayList<>();
|
||||
for (String role : roles) {
|
||||
if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) {
|
||||
filteredRoles.add(role);
|
||||
}
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("All matching user roles were successfully retrieved.");
|
||||
responsePayload.setResponseContent(filteredRoles);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get role permissions.
|
||||
*
|
||||
* @return list of permissions
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("permissions")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getPermissions(@QueryParam("rolename") String roleName) {
|
||||
try {
|
||||
final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm();
|
||||
org.wso2.carbon.user.core.UserRealm userRealmCore = null;
|
||||
final UIPermissionNode rolePermissions;
|
||||
if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) {
|
||||
userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm;
|
||||
}
|
||||
final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore);
|
||||
rolePermissions = getUIPermissionNode(roleName, userRealmProxy);
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("All permissions retrieved");
|
||||
responsePayload.setResponseContent(rolePermissions);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} catch (UserAdminException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the user role";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user role of the system
|
||||
*
|
||||
* @return user role
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("role")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getRole(@QueryParam("rolename") String roleName) {
|
||||
RoleWrapper roleWrapper = new RoleWrapper();
|
||||
try {
|
||||
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
final UserRealm userRealm = DeviceMgtAPIUtils.getUserRealm();
|
||||
org.wso2.carbon.user.core.UserRealm userRealmCore = null;
|
||||
if (userRealm instanceof org.wso2.carbon.user.core.UserRealm) {
|
||||
userRealmCore = (org.wso2.carbon.user.core.UserRealm) userRealm;
|
||||
}
|
||||
|
||||
final UserRealmProxy userRealmProxy = new UserRealmProxy(userRealmCore);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of user roles");
|
||||
}
|
||||
if (userStoreManager.isExistingRole(roleName)) {
|
||||
roleWrapper.setRoleName(roleName);
|
||||
roleWrapper.setUsers(userStoreManager.getUserListOfRole(roleName));
|
||||
// Get the permission nodes and hand picking only device management and login perms
|
||||
final UIPermissionNode rolePermissions = getUIPermissionNode(roleName, userRealmProxy);
|
||||
ArrayList<String> permList = new ArrayList<>();
|
||||
iteratePermissions(rolePermissions, permList);
|
||||
roleWrapper.setPermissionList(rolePermissions);
|
||||
String[] permListAr = new String[permList.size()];
|
||||
roleWrapper.setPermissions(permList.toArray(permListAr));
|
||||
}
|
||||
} catch (UserStoreException | UserAdminException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the user role";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("All user roles were successfully retrieved.");
|
||||
responsePayload.setResponseContent(roleWrapper);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
private UIPermissionNode getUIPermissionNode(String roleName, UserRealmProxy userRealmProxy)
|
||||
throws UserAdminException {
|
||||
final UIPermissionNode rolePermissions =
|
||||
userRealmProxy.getRolePermissions(roleName, MultitenantConstants.SUPER_TENANT_ID);
|
||||
UIPermissionNode[] deviceMgtPermissions = new UIPermissionNode[2];
|
||||
|
||||
for (UIPermissionNode permissionNode : rolePermissions.getNodeList()) {
|
||||
if (permissionNode.getResourcePath().equals("/permission/admin")) {
|
||||
for (UIPermissionNode node : permissionNode.getNodeList()) {
|
||||
if (node.getResourcePath().equals("/permission/admin/device-mgt")) {
|
||||
deviceMgtPermissions[0] = node;
|
||||
} else if (node.getResourcePath().equals("/permission/admin/login")) {
|
||||
deviceMgtPermissions[1] = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
rolePermissions.setNodeList(deviceMgtPermissions);
|
||||
return rolePermissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* API is used to persist a new Role
|
||||
*
|
||||
* @param roleWrapper for role
|
||||
* @return response
|
||||
*/
|
||||
@Override
|
||||
@POST
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response addRole(RoleWrapper roleWrapper) {
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Persisting the role to user store");
|
||||
}
|
||||
Permission[] permissions = null;
|
||||
if (roleWrapper.getPermissions() != null && roleWrapper.getPermissions().length > 0) {
|
||||
permissions = new Permission[roleWrapper.getPermissions().length];
|
||||
|
||||
for (int i = 0; i < permissions.length; i++) {
|
||||
String permission = roleWrapper.getPermissions()[i];
|
||||
permissions[i] = new Permission(permission, CarbonConstants.UI_PERMISSION_ACTION);
|
||||
}
|
||||
}
|
||||
userStoreManager.addRole(roleWrapper.getRoleName(), roleWrapper.getUsers(), permissions);
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = e.getMessage();
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* API is used to update a role Role
|
||||
*
|
||||
* @param roleWrapper for role
|
||||
* @return response
|
||||
*/
|
||||
@Override
|
||||
@PUT
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response updateRole(@QueryParam("rolename") String roleName, RoleWrapper roleWrapper) {
|
||||
String newRoleName = roleWrapper.getRoleName();
|
||||
try {
|
||||
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Updating the role to user store");
|
||||
}
|
||||
if (newRoleName != null && !roleName.equals(newRoleName)) {
|
||||
userStoreManager.updateRoleName(roleName, newRoleName);
|
||||
}
|
||||
if (roleWrapper.getUsers() != null) {
|
||||
SetReferenceTransformer<String> transformer = new SetReferenceTransformer<>();
|
||||
transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(newRoleName)),
|
||||
Arrays.asList(roleWrapper.getUsers()));
|
||||
final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer
|
||||
.getObjectsToAdd().size()]);
|
||||
final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer
|
||||
.getObjectsToRemove().size()]);
|
||||
userStoreManager.updateUserListOfRole(newRoleName, usersToDelete, usersToAdd);
|
||||
}
|
||||
if (roleWrapper.getPermissions() != null) {
|
||||
// Delete all authorizations for the current role before authorizing the permission tree
|
||||
authorizationManager.clearRoleAuthorization(roleName);
|
||||
if (roleWrapper.getPermissions().length > 0) {
|
||||
for (int i = 0; i < roleWrapper.getPermissions().length; i++) {
|
||||
String permission = roleWrapper.getPermissions()[i];
|
||||
authorizationManager.authorizeRole(roleName, permission, CarbonConstants.UI_PERMISSION_ACTION);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = e.getMessage();
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* API is used to delete a role and authorizations
|
||||
*
|
||||
* @param roleName to delete
|
||||
* @return response
|
||||
*/
|
||||
@Override
|
||||
@DELETE
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response deleteRole(@QueryParam("rolename") String roleName) {
|
||||
try {
|
||||
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
final AuthorizationManager authorizationManager = DeviceMgtAPIUtils.getAuthorizationManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Deleting the role in user store");
|
||||
}
|
||||
userStoreManager.deleteRole(roleName);
|
||||
// Delete all authorizations for the current role before deleting
|
||||
authorizationManager.clearRoleAuthorization(roleName);
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while deleting the role: " + roleName;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* API is used to update users of a role
|
||||
*
|
||||
* @param roleName to update
|
||||
* @param userList of the users
|
||||
* @return response
|
||||
*/
|
||||
@Override
|
||||
@PUT
|
||||
@Path("users")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response updateUsers(@QueryParam("rolename") String roleName, List<String> userList) {
|
||||
try {
|
||||
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Updating the users of a role");
|
||||
}
|
||||
SetReferenceTransformer<String> transformer = new SetReferenceTransformer<>();
|
||||
transformer.transform(Arrays.asList(userStoreManager.getUserListOfRole(roleName)),
|
||||
userList);
|
||||
final String[] usersToAdd = transformer.getObjectsToAdd().toArray(new String[transformer
|
||||
.getObjectsToAdd().size()]);
|
||||
final String[] usersToDelete = transformer.getObjectsToRemove().toArray(new String[transformer
|
||||
.getObjectsToRemove().size()]);
|
||||
|
||||
userStoreManager.updateUserListOfRole(roleName, usersToDelete, usersToAdd);
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while saving the users of the role: " + roleName;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
}
|
||||
|
||||
private ArrayList<String> iteratePermissions(UIPermissionNode uiPermissionNode, ArrayList<String> list) {
|
||||
for (UIPermissionNode permissionNode : uiPermissionNode.getNodeList()) {
|
||||
list.add(permissionNode.getResourcePath());
|
||||
if (permissionNode.getNodeList() != null && permissionNode.getNodeList().length > 0) {
|
||||
iteratePermissions(permissionNode, list);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used to retrieve the role count of the system.
|
||||
*
|
||||
* @return returns the count.
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("count")
|
||||
public Response getRoleCount() {
|
||||
try {
|
||||
List<String> filteredRoles = getRolesFromUserStore();
|
||||
Integer count = filteredRoles.size();
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (MDMAPIException e) {
|
||||
log.error(e.getErrorMessage(), e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getErrorMessage()).build();
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> getRolesFromUserStore() throws MDMAPIException {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
String[] roles;
|
||||
try {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of user roles");
|
||||
}
|
||||
roles = userStoreManager.getRoleNames();
|
||||
|
||||
} catch (UserStoreException e) {
|
||||
String msg = "Error occurred while retrieving the list of user roles.";
|
||||
throw new MDMAPIException(msg, e);
|
||||
}
|
||||
// removing all internal roles and roles created for Service-providers
|
||||
List<String> filteredRoles = new ArrayList<>();
|
||||
for (String role : roles) {
|
||||
if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) {
|
||||
filteredRoles.add(role);
|
||||
}
|
||||
}
|
||||
return filteredRoles;
|
||||
}
|
||||
}
|
@ -0,0 +1,772 @@
|
||||
/*
|
||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.wso2.carbon.device.mgt.jaxrs.api.impl;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.common.MDMAPIException;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.UserCredentialWrapper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.beans.UserWrapper;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
|
||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.PaginationRequest;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.CredentialManagementResponseBuilder;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.DeviceMgtAPIUtils;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.api.util.ResponsePayload;
|
||||
import org.wso2.carbon.device.mgt.jaxrs.util.SetReferenceTransformer;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
import org.wso2.carbon.user.api.UserStoreManager;
|
||||
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.PUT;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.QueryParam;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Random;
|
||||
import java.util.TreeSet;
|
||||
|
||||
/**
|
||||
* This class represents the JAX-RS services of User related functionality.
|
||||
*/
|
||||
@SuppressWarnings("NonJaxWsWebServices")
|
||||
public class UserImpl implements org.wso2.carbon.device.mgt.jaxrs.api.User {
|
||||
|
||||
private static final String ROLE_EVERYONE = "Internal/everyone";
|
||||
private static Log log = LogFactory.getLog(UserImpl.class);
|
||||
|
||||
/**
|
||||
* Method to add user to emm-user-store.
|
||||
*
|
||||
* @param userWrapper Wrapper object representing input json payload
|
||||
* @return {Response} Status of the request wrapped inside Response object
|
||||
*/
|
||||
@Override
|
||||
@POST
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response addUser(UserWrapper userWrapper) {
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (userStoreManager.isExistingUser(userWrapper.getUsername())) {
|
||||
// if user already exists
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + userWrapper.getUsername() +
|
||||
" already exists. Therefore, request made to add user was refused.");
|
||||
}
|
||||
// returning response with bad request state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_CONFLICT);
|
||||
responsePayload.
|
||||
setMessageFromServer("User by username: " + userWrapper.getUsername() +
|
||||
" already exists. Therefore, request made to add user was refused.");
|
||||
return Response.status(Response.Status.CONFLICT).entity(responsePayload).build();
|
||||
} else {
|
||||
String initialUserPassword = generateInitialUserPassword();
|
||||
Map<String, String> defaultUserClaims =
|
||||
buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(),
|
||||
userWrapper.getEmailAddress());
|
||||
// calling addUser method of carbon user api
|
||||
userStoreManager.addUser(userWrapper.getUsername(), initialUserPassword,
|
||||
userWrapper.getRoles(), defaultUserClaims, null);
|
||||
// invite newly added user to enroll device
|
||||
inviteNewlyAddedUserToEnrollDevice(userWrapper.getUsername(), initialUserPassword);
|
||||
// Outputting debug message upon successful addition of user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + userWrapper.getUsername() + " was successfully added.");
|
||||
}
|
||||
// returning response with success state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() +
|
||||
" was successfully added.");
|
||||
return Response.status(Response.Status.CREATED).entity(responsePayload).build();
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Exception in trying to add user by username: " + userWrapper.getUsername();
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get user information from emm-user-store.
|
||||
*
|
||||
* @param username User-name of the user
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("view")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getUser(@QueryParam("username") String username) {
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (userStoreManager.isExistingUser(username)) {
|
||||
UserWrapper user = new UserWrapper();
|
||||
user.setUsername(username);
|
||||
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
// Outputting debug message upon successful retrieval of user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " was found.");
|
||||
}
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("User information was retrieved successfully.");
|
||||
responsePayload.setResponseContent(user);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} else {
|
||||
// Outputting debug message upon trying to remove non-existing user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " does not exist.");
|
||||
}
|
||||
// returning response with bad request state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST);
|
||||
responsePayload.setMessageFromServer(
|
||||
"User by username: " + username + " does not exist.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build();
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Exception in trying to retrieve user by username: " + username;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user in user store
|
||||
*
|
||||
* @param userWrapper Wrapper object representing input json payload
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
*/
|
||||
@Override
|
||||
@PUT
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response updateUser(UserWrapper userWrapper, @QueryParam("username") String username) {
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (userStoreManager.isExistingUser(userWrapper.getUsername())) {
|
||||
Map<String, String> defaultUserClaims =
|
||||
buildDefaultUserClaims(userWrapper.getFirstname(), userWrapper.getLastname(),
|
||||
userWrapper.getEmailAddress());
|
||||
if (StringUtils.isNotEmpty(userWrapper.getPassword())) {
|
||||
// Decoding Base64 encoded password
|
||||
byte[] decodedBytes = Base64.decodeBase64(userWrapper.getPassword());
|
||||
userStoreManager.updateCredentialByAdmin(userWrapper.getUsername(),
|
||||
new String(decodedBytes, "UTF-8"));
|
||||
log.debug("User credential of username: " + userWrapper.getUsername() + " has been changed");
|
||||
}
|
||||
List<String> listofFilteredRoles = getFilteredRoles(userStoreManager, userWrapper.getUsername());
|
||||
final String[] existingRoles = listofFilteredRoles.toArray(new String[listofFilteredRoles.size()]);
|
||||
|
||||
/*
|
||||
Use the Set theory to find the roles to delete and roles to add
|
||||
The difference of roles in existingRolesSet and newRolesSet needed to be deleted
|
||||
new roles to add = newRolesSet - The intersection of roles in existingRolesSet and newRolesSet
|
||||
*/
|
||||
final TreeSet<String> existingRolesSet = new TreeSet<>();
|
||||
Collections.addAll(existingRolesSet, existingRoles);
|
||||
final TreeSet<String> newRolesSet = new TreeSet<>();
|
||||
Collections.addAll(newRolesSet, userWrapper.getRoles());
|
||||
existingRolesSet.removeAll(newRolesSet);
|
||||
// Now we have the roles to delete
|
||||
String[] rolesToDelete = existingRolesSet.toArray(new String[existingRolesSet.size()]);
|
||||
List<String> roles = new ArrayList<>(Arrays.asList(rolesToDelete));
|
||||
roles.remove(ROLE_EVERYONE);
|
||||
rolesToDelete = new String[0];
|
||||
// Clearing and re-initializing the set
|
||||
existingRolesSet.clear();
|
||||
Collections.addAll(existingRolesSet, existingRoles);
|
||||
newRolesSet.removeAll(existingRolesSet);
|
||||
// Now we have the roles to add
|
||||
String[] rolesToAdd = newRolesSet.toArray(new String[newRolesSet.size()]);
|
||||
userStoreManager.updateRoleListOfUser(userWrapper.getUsername(), rolesToDelete, rolesToAdd);
|
||||
userStoreManager.setUserClaimValues(userWrapper.getUsername(), defaultUserClaims, null);
|
||||
// Outputting debug message upon successful addition of user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + userWrapper.getUsername() + " was successfully updated.");
|
||||
}
|
||||
// returning response with success state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_CREATED);
|
||||
responsePayload.setMessageFromServer("User by username: " + userWrapper.getUsername() +
|
||||
" was successfully updated.");
|
||||
return Response.status(Response.Status.CREATED).entity(responsePayload).build();
|
||||
} else {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + userWrapper.getUsername() +
|
||||
" doesn't exists. Therefore, request made to update user was refused.");
|
||||
}
|
||||
// returning response with bad request state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_CONFLICT);
|
||||
responsePayload.
|
||||
setMessageFromServer("User by username: " + userWrapper.getUsername() +
|
||||
" doesn't exists. Therefore, request made to update user was refused.");
|
||||
return Response.status(Response.Status.CONFLICT).entity(responsePayload).build();
|
||||
}
|
||||
} catch (UserStoreException | UnsupportedEncodingException | MDMAPIException e) {
|
||||
String msg = "Exception in trying to update user by username: " + userWrapper.getUsername();
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Private method to be used by addUser() to
|
||||
* generate an initial user password for a user.
|
||||
* This will be the password used by a user for his initial login to the system.
|
||||
*
|
||||
* @return {string} Initial User Password
|
||||
*/
|
||||
private String generateInitialUserPassword() {
|
||||
int passwordLength = 6;
|
||||
//defining the pool of characters to be used for initial password generation
|
||||
String lowerCaseCharset = "abcdefghijklmnopqrstuvwxyz";
|
||||
String upperCaseCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
String numericCharset = "0123456789";
|
||||
Random randomGenerator = new Random();
|
||||
String totalCharset = lowerCaseCharset + upperCaseCharset + numericCharset;
|
||||
int totalCharsetLength = totalCharset.length();
|
||||
StringBuilder initialUserPassword = new StringBuilder();
|
||||
for (int i = 0; i < passwordLength; i++) {
|
||||
initialUserPassword
|
||||
.append(totalCharset.charAt(randomGenerator.nextInt(totalCharsetLength)));
|
||||
}
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Initial user password is created for new user: " + initialUserPassword);
|
||||
}
|
||||
return initialUserPassword.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to build default user claims.
|
||||
*
|
||||
* @param firstname First name of the user
|
||||
* @param lastname Last name of the user
|
||||
* @param emailAddress Email address of the user
|
||||
* @return {Object} Default user claims to be provided
|
||||
*/
|
||||
private Map<String, String> buildDefaultUserClaims(String firstname, String lastname, String emailAddress) {
|
||||
Map<String, String> defaultUserClaims = new HashMap<>();
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_FIRST_NAME, firstname);
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_LAST_NAME, lastname);
|
||||
defaultUserClaims.put(Constants.USER_CLAIM_EMAIL_ADDRESS, emailAddress);
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Default claim map is created for new user: " + defaultUserClaims.toString());
|
||||
}
|
||||
return defaultUserClaims;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to remove user from emm-user-store.
|
||||
*
|
||||
* @param username Username of the user
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
*/
|
||||
@Override
|
||||
@DELETE
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response removeUser(@QueryParam("username") String username) {
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (userStoreManager.isExistingUser(username)) {
|
||||
// if user already exists, trying to remove user
|
||||
userStoreManager.deleteUser(username);
|
||||
// Outputting debug message upon successful removal of user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " was successfully removed.");
|
||||
}
|
||||
// returning response with success state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer(
|
||||
"User by username: " + username + " was successfully removed.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} else {
|
||||
// Outputting debug message upon trying to remove non-existing user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " does not exist for removal.");
|
||||
}
|
||||
// returning response with bad request state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST);
|
||||
responsePayload.setMessageFromServer(
|
||||
"User by username: " + username + " does not exist for removal.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build();
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Exception in trying to remove user by username: " + username;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get all the roles except for the internal/xxx and application/xxx
|
||||
*
|
||||
* @param userStoreManager User Store Manager associated with the currently logged in user
|
||||
* @param username Username of the currently logged in user
|
||||
* @return the list of filtered roles
|
||||
*/
|
||||
private List<String> getFilteredRoles(UserStoreManager userStoreManager, String username) {
|
||||
String[] roleListOfUser = new String[0];
|
||||
try {
|
||||
roleListOfUser = userStoreManager.getRoleListOfUser(username);
|
||||
} catch (UserStoreException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
List<String> filteredRoles = new ArrayList<>();
|
||||
for (String role : roleListOfUser) {
|
||||
if (!(role.startsWith("Internal/") || role.startsWith("Authentication/"))) {
|
||||
filteredRoles.add(role);
|
||||
}
|
||||
}
|
||||
return filteredRoles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user's roles by username
|
||||
*
|
||||
* @param username Username of the user
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("roles")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getRoles(@QueryParam("username") String username) {
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (userStoreManager.isExistingUser(username)) {
|
||||
responsePayload.setResponseContent(Collections.singletonList(getFilteredRoles(userStoreManager, username)));
|
||||
// Outputting debug message upon successful removal of user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " was successfully removed.");
|
||||
}
|
||||
// returning response with success state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer(
|
||||
"User roles obtained for user " + username);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
} else {
|
||||
// Outputting debug message upon trying to remove non-existing user
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("User by username: " + username + " does not exist for role retrieval.");
|
||||
}
|
||||
// returning response with bad request state
|
||||
responsePayload.setStatusCode(HttpStatus.SC_BAD_REQUEST);
|
||||
responsePayload.setMessageFromServer(
|
||||
"User by username: " + username + " does not exist for role retrieval.");
|
||||
return Response.status(Response.Status.BAD_REQUEST).entity(responsePayload).build();
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Exception in trying to retrieve roles for user by username: " + username;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of all users with all user-related info.
|
||||
*
|
||||
* @return A list of users
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getAllUsers() {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of users with all user-related information");
|
||||
}
|
||||
List<UserWrapper> userList;
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
String[] users = userStoreManager.listUsers("*", -1);
|
||||
userList = new ArrayList<>(users.length);
|
||||
UserWrapper user;
|
||||
for (String username : users) {
|
||||
user = new UserWrapper();
|
||||
user.setUsername(username);
|
||||
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
userList.add(user);
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of users";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
int count;
|
||||
count = userList.size();
|
||||
responsePayload.setMessageFromServer("All users were successfully retrieved. " +
|
||||
"Obtained user count: " + count);
|
||||
responsePayload.setResponseContent(userList);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of all users with all user-related info.
|
||||
*
|
||||
* @return A list of users
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("{filter}")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response getMatchingUsers(@PathParam("filter") String filter) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of users with all user-related information using the filter : " + filter);
|
||||
}
|
||||
List<UserWrapper> userList;
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
String[] users = userStoreManager.listUsers(filter + "*", -1);
|
||||
userList = new ArrayList<>(users.length);
|
||||
UserWrapper user;
|
||||
for (String username : users) {
|
||||
user = new UserWrapper();
|
||||
user.setUsername(username);
|
||||
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
userList.add(user);
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of users using the filter : " + filter;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
int count;
|
||||
count = userList.size();
|
||||
responsePayload.setMessageFromServer("All users were successfully retrieved. " +
|
||||
"Obtained user count: " + count);
|
||||
responsePayload.setResponseContent(userList);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of user names in the system.
|
||||
*
|
||||
* @return A list of user names.
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("view-users")
|
||||
public Response getAllUsersByUsername(@QueryParam("username") String userName) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of users by name");
|
||||
}
|
||||
List<UserWrapper> userList;
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
String[] users = userStoreManager.listUsers("*" + userName + "*", -1);
|
||||
userList = new ArrayList<>(users.length);
|
||||
UserWrapper user;
|
||||
for (String username : users) {
|
||||
user = new UserWrapper();
|
||||
user.setUsername(username);
|
||||
user.setEmailAddress(getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS));
|
||||
user.setFirstname(getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
user.setLastname(getClaimValue(username, Constants.USER_CLAIM_LAST_NAME));
|
||||
userList.add(user);
|
||||
}
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of users";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
int count;
|
||||
count = userList.size();
|
||||
responsePayload.setMessageFromServer("All users by username were successfully retrieved. " +
|
||||
"Obtained user count: " + count);
|
||||
responsePayload.setResponseContent(userList);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of user names in the system.
|
||||
*
|
||||
* @return A list of user names.
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("users-by-username")
|
||||
public Response getAllUserNamesByUsername(@QueryParam("username") String userName) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Getting the list of users by name");
|
||||
}
|
||||
List<String> userList;
|
||||
try {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
String[] users = userStoreManager.listUsers("*" + userName + "*", -1);
|
||||
userList = new ArrayList<>(users.length);
|
||||
Collections.addAll(userList, users);
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while retrieving the list of users";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
int count;
|
||||
count = userList.size();
|
||||
responsePayload.setMessageFromServer("All users by username were successfully retrieved. " +
|
||||
"Obtained user count: " + count);
|
||||
responsePayload.setResponseContent(userList);
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a claim-value from user-store.
|
||||
*
|
||||
* @param username Username of the user
|
||||
* @param claimUri required ClaimUri
|
||||
* @return claim value
|
||||
*/
|
||||
private String getClaimValue(String username, String claimUri) throws MDMAPIException {
|
||||
UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
try {
|
||||
return userStoreManager.getUserClaimValue(username, claimUri, null);
|
||||
} catch (UserStoreException e) {
|
||||
throw new MDMAPIException("Error occurred while retrieving value assigned to the claim '" +
|
||||
claimUri + "'", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to send an invitation email to a new user to enroll a device.
|
||||
*
|
||||
* @param username Username of the user
|
||||
*/
|
||||
private void inviteNewlyAddedUserToEnrollDevice(String username, String password) throws MDMAPIException {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Sending invitation mail to user by username: " + username);
|
||||
}
|
||||
String tenantDomain = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
|
||||
if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equalsIgnoreCase(tenantDomain)) {
|
||||
tenantDomain = "";
|
||||
}
|
||||
if (!username.contains("/")) {
|
||||
username = "/" + username;
|
||||
}
|
||||
String[] usernameBits = username.split("/");
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty("username", usernameBits[1]);
|
||||
props.setProperty("domain-name", tenantDomain);
|
||||
props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
props.setProperty("password", password);
|
||||
|
||||
String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS);
|
||||
|
||||
EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props);
|
||||
try {
|
||||
deviceManagementProviderService.sendRegistrationEmail(metaInfo);
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while sending registration email to user '" + username + "'";
|
||||
log.error(msg, e);
|
||||
throw new MDMAPIException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method used to send an invitation email to a existing user to enroll a device.
|
||||
*
|
||||
* @param usernames Username list of the users to be invited
|
||||
*/
|
||||
@Override
|
||||
@POST
|
||||
@Path("email-invitation")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response inviteExistingUsersToEnrollDevice(List<String> usernames) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Sending enrollment invitation mail to existing user.");
|
||||
}
|
||||
DeviceManagementProviderService deviceManagementProviderService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
try {
|
||||
for (String username : usernames) {
|
||||
String recipient = getClaimValue(username, Constants.USER_CLAIM_EMAIL_ADDRESS);
|
||||
|
||||
Properties props = new Properties();
|
||||
props.setProperty("first-name", getClaimValue(username, Constants.USER_CLAIM_FIRST_NAME));
|
||||
props.setProperty("username", username);
|
||||
|
||||
EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props);
|
||||
deviceManagementProviderService.sendEnrolmentInvitation(metaInfo);
|
||||
}
|
||||
} catch (DeviceManagementException | MDMAPIException e) {
|
||||
String msg = "Error occurred while inviting user to enrol their device";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
ResponsePayload responsePayload = new ResponsePayload();
|
||||
responsePayload.setStatusCode(HttpStatus.SC_OK);
|
||||
responsePayload.setMessageFromServer("Email invitation was successfully sent to user.");
|
||||
return Response.status(Response.Status.OK).entity(responsePayload).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of devices based on the username.
|
||||
*
|
||||
* @param username Username of the device owner
|
||||
* @return A list of devices
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
@Path("devices")
|
||||
public Response getAllDeviceOfUser(@QueryParam("username") String username,
|
||||
@QueryParam("start") int startIdx, @QueryParam("length") int length) {
|
||||
DeviceManagementProviderService dmService;
|
||||
try {
|
||||
dmService = DeviceMgtAPIUtils.getDeviceManagementService();
|
||||
if (length > 0) {
|
||||
PaginationRequest request = new PaginationRequest(startIdx, length);
|
||||
request.setOwner(username);
|
||||
return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(request)).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(dmService.getDevicesOfUser(username)).build();
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Device management error";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is used to retrieve the user count of the system.
|
||||
*
|
||||
* @return returns the count.
|
||||
* @
|
||||
*/
|
||||
@Override
|
||||
@GET
|
||||
@Path("count")
|
||||
public Response getUserCount() {
|
||||
try {
|
||||
String[] users = DeviceMgtAPIUtils.getUserStoreManager().listUsers("*", -1);
|
||||
Integer count = 0;
|
||||
if (users != null) {
|
||||
count = users.length;
|
||||
}
|
||||
return Response.status(Response.Status.OK).entity(count).build();
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg =
|
||||
"Error occurred while retrieving the list of users that exist within the current tenant";
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* API is used to update roles of a user
|
||||
*
|
||||
* @param username
|
||||
* @param userList
|
||||
* @return
|
||||
* @
|
||||
*/
|
||||
@Override
|
||||
@PUT
|
||||
@Path("{roleName}/users")
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response updateRoles(@PathParam("username") String username, List<String> userList) {
|
||||
try {
|
||||
final UserStoreManager userStoreManager = DeviceMgtAPIUtils.getUserStoreManager();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Updating the roles of a user");
|
||||
}
|
||||
SetReferenceTransformer<String> transformer = new SetReferenceTransformer<>();
|
||||
transformer.transform(Arrays.asList(userStoreManager.getRoleListOfUser(username)),
|
||||
userList);
|
||||
final String[] rolesToAdd = transformer.getObjectsToAdd().toArray(new String[transformer.getObjectsToAdd().size()]);
|
||||
final String[] rolesToDelete = transformer.getObjectsToRemove().toArray(new String[transformer.getObjectsToRemove().size()]);
|
||||
|
||||
userStoreManager.updateRoleListOfUser(username, rolesToDelete, rolesToAdd);
|
||||
} catch (UserStoreException | MDMAPIException e) {
|
||||
String msg = "Error occurred while saving the roles for user: " + username;
|
||||
log.error(msg, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
||||
}
|
||||
return Response.status(Response.Status.OK).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to change the user password.
|
||||
*
|
||||
* @param credentials Wrapper object representing user credentials.
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
* @
|
||||
*/
|
||||
@Override
|
||||
@POST
|
||||
@Path("change-password")
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response resetPassword(UserCredentialWrapper credentials) {
|
||||
return CredentialManagementResponseBuilder.buildChangePasswordResponse(credentials);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to change the user password.
|
||||
*
|
||||
* @param credentials Wrapper object representing user credentials.
|
||||
* @return {Response} Status of the request wrapped inside Response object.
|
||||
* @
|
||||
*/
|
||||
@Override
|
||||
@POST
|
||||
@Path("reset-password")
|
||||
@Consumes({MediaType.APPLICATION_JSON})
|
||||
@Produces({MediaType.APPLICATION_JSON})
|
||||
public Response resetPasswordByAdmin(UserCredentialWrapper credentials) {
|
||||
return CredentialManagementResponseBuilder.buildResetPasswordResponse(credentials);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue