mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Merge branch 'master' of https://github.com/wso2/carbon-device-mgt
This commit is contained in:
commit
24c38602b8
@ -17,8 +17,7 @@ import javax.ws.rs.core.Response;
|
|||||||
context = "api/certificate-mgt/v1.0/admin/certificates",
|
context = "api/certificate-mgt/v1.0/admin/certificates",
|
||||||
tags = {"devicemgt_admin"})
|
tags = {"devicemgt_admin"})
|
||||||
|
|
||||||
@Api(value = "Certificate Management", description = "This API carries all certificate management related operations " +
|
@Api(value = "Certificate Management", description = "This API includes all the certificate management related operations")
|
||||||
"such as get all the available devices, etc.")
|
|
||||||
@Path("/admin/certificates")
|
@Path("/admin/certificates")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
@Consumes(MediaType.APPLICATION_JSON)
|
||||||
@ -36,14 +35,14 @@ public interface CertificateManagementAdminService {
|
|||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "POST",
|
httpMethod = "POST",
|
||||||
value = "Add a SSL certificate",
|
value = "Adding a new SSL certificate",
|
||||||
notes = "Add a new SSL certificate",
|
notes = "Add a new SSL certificate to the client end database.\n",
|
||||||
tags = "Certificate Management")
|
tags = "Certificate Management")
|
||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
value = {
|
value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 201,
|
code = 201,
|
||||||
message = "Created. \n Certificates have successfully been added",
|
message = "Created. \n Successfully added the certificate.",
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Content-Location",
|
name = "Content-Location",
|
||||||
@ -57,11 +56,11 @@ public interface CertificateManagementAdminService {
|
|||||||
"Used by caches, or in conditional requests."),
|
"Used by caches, or in conditional requests."),
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Last-Modified",
|
name = "Last-Modified",
|
||||||
description = "Date and time the resource has been modified the last time.\n" +
|
description = "Date and time the resource was last modified.\n" +
|
||||||
"Used by caches, or in conditional requests.")}),
|
"Used by caches, or in conditional requests.")}),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 303,
|
code = 303,
|
||||||
message = "See Other. \n Source can be retrieved from the URL specified at the Location header.",
|
message = "See Other. \n The source can be retrieved from the URL specified in the location header.",
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Content-Location",
|
name = "Content-Location",
|
||||||
@ -72,7 +71,7 @@ public interface CertificateManagementAdminService {
|
|||||||
response = ErrorResponse.class),
|
response = ErrorResponse.class),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 415,
|
code = 415,
|
||||||
message = "Unsupported media type. \n The entity of the request was in a not supported format."),
|
message = "Unsupported Media Type. \n The format of the requested entity was not supported."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n Server error occurred while adding certificates.",
|
message = "Internal Server Error. \n Server error occurred while adding certificates.",
|
||||||
@ -82,8 +81,10 @@ public interface CertificateManagementAdminService {
|
|||||||
Response addCertificate(
|
Response addCertificate(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "enrollmentCertificates",
|
name = "enrollmentCertificates",
|
||||||
value = "certificate with serial, "
|
value = "The properties to add a new certificate. It includes the following:\n" +
|
||||||
+ "pem and tenant id",
|
"serial: The unique ID of the certificate.\n" +
|
||||||
|
"pem: Convert the OpenSSL certificate to the .pem format and base 64 encode the file.\n" +
|
||||||
|
"INFO: Upload the .pem file and base 64 encode it using a tool, such as the base64encode.in tool.",
|
||||||
required = true) EnrollmentCertificate[] enrollmentCertificates);
|
required = true) EnrollmentCertificate[] enrollmentCertificates);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -98,13 +99,13 @@ public interface CertificateManagementAdminService {
|
|||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "Getting Details of an SSL CertificateManagementAdminService",
|
value = "Getting Details of an SSL Certificate",
|
||||||
notes = "Get the client side SSL certificate details",
|
notes = "Get the client side SSL certificate details.",
|
||||||
tags = "Certificate Management")
|
tags = "Certificate Management")
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 200,
|
code = 200,
|
||||||
message = "OK. \n Successfully fetched information of the device.",
|
message = "OK. \n Successfully fetched the certificate details.",
|
||||||
response = CertificateResponse.class,
|
response = CertificateResponse.class,
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
@ -116,7 +117,7 @@ public interface CertificateManagementAdminService {
|
|||||||
"Used by caches, or in conditional requests."),
|
"Used by caches, or in conditional requests."),
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Last-Modified",
|
name = "Last-Modified",
|
||||||
description = "Date and time the resource has been modified the last time.\n" +
|
description = "Date and time the resource was last modified.\n" +
|
||||||
"Used by caches, or in conditional requests."),
|
"Used by caches, or in conditional requests."),
|
||||||
}),
|
}),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
@ -129,22 +130,25 @@ public interface CertificateManagementAdminService {
|
|||||||
response = ErrorResponse.class),
|
response = ErrorResponse.class),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 404,
|
code = 404,
|
||||||
message = "Not Found. \n No device is found under the provided type and id."),
|
message = "Not Found. \n The specified certificate does not exist."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n " +
|
message = "Internal Server Error. \n " +
|
||||||
"Server error occurred while retrieving information requested certificate.",
|
"Server error occurred while retrieving the requested certificate information.",
|
||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
@Permission(name = "View certificates", permission = "/device-mgt/certificates/view")
|
@Permission(name = "View certificates", permission = "/device-mgt/certificates/view")
|
||||||
Response getCertificate(
|
Response getCertificate(
|
||||||
@ApiParam(name = "serialNumber",
|
@ApiParam(name = "serialNumber",
|
||||||
value = "Provide the serial number of the certificate that you wish to get the details of",
|
value = "The serial number of the certificate.",
|
||||||
required = true)
|
required = true,
|
||||||
|
defaultValue = "124380353155528759302")
|
||||||
@PathParam("serialNumber") String serialNumber,
|
@PathParam("serialNumber") String serialNumber,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "If-Modified-Since",
|
name = "If-Modified-Since",
|
||||||
value = "Validates if the requested variant has not been modified since the time specified",
|
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
|
||||||
|
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
|
||||||
|
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
|
||||||
required = false)
|
required = false)
|
||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince
|
@HeaderParam("If-Modified-Since") String ifModifiedSince
|
||||||
);
|
);
|
||||||
@ -159,8 +163,8 @@ public interface CertificateManagementAdminService {
|
|||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "Get certificates",
|
value = "Getting Details of Certificates",
|
||||||
notes = "You will have many certificates used for mutual SSL. In a situation where you wish to "
|
notes = "Get all the details of the certificates you have used for mutual SSL. In a situation where you wish to "
|
||||||
+ "view all the certificate details, it is not feasible to show all the details on one "
|
+ "view all the certificate details, it is not feasible to show all the details on one "
|
||||||
+ "page therefore the details are paginated",
|
+ "page therefore the details are paginated",
|
||||||
tags = "Certificate Management"
|
tags = "Certificate Management"
|
||||||
@ -168,7 +172,7 @@ public interface CertificateManagementAdminService {
|
|||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 200,
|
code = 200,
|
||||||
message = "OK. \n List of certificates enrolled in the system",
|
message = "OK. \n Successfully fetched the list of certificates.",
|
||||||
response = CertificateList.class,
|
response = CertificateList.class,
|
||||||
responseContainer = "List",
|
responseContainer = "List",
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ -181,12 +185,12 @@ public interface CertificateManagementAdminService {
|
|||||||
"Used by caches, or in conditional requests."),
|
"Used by caches, or in conditional requests."),
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Last-Modified",
|
name = "Last-Modified",
|
||||||
description = "Date and time the resource has been modified the last time.\n" +
|
description = "Date and time the resource was last modified.\n" +
|
||||||
"Used by caches, or in conditional requests.")}),
|
"Used by caches, or in conditional requests.")}),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 303,
|
code = 303,
|
||||||
message = "See Other. \n " +
|
message = "See Other. \n " +
|
||||||
"Source can be retrieved from the URL specified at the Location header.",
|
"The source can be retrieved from the URL specified in the location header.\n",
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Content-Location",
|
name = "Content-Location",
|
||||||
@ -205,24 +209,28 @@ public interface CertificateManagementAdminService {
|
|||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n " +
|
message = "Internal Server Error. \n " +
|
||||||
"Server error occurred while retrieving all certificates enrolled in the system.",
|
"Server error occurred while retrieving the certificate details.",
|
||||||
response = ErrorResponse.class)
|
response = ErrorResponse.class)
|
||||||
})
|
})
|
||||||
@Permission(name = "View certificates", permission = "/device-mgt/certificates/view")
|
@Permission(name = "View certificates", permission = "/device-mgt/certificates/view")
|
||||||
Response getAllCertificates(
|
Response getAllCertificates(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "offset",
|
name = "offset",
|
||||||
value = "Starting point within the complete list of items qualified.",
|
value = "The starting pagination index for the complete list of qualified items",
|
||||||
required = false)
|
required = false,
|
||||||
|
defaultValue = "0")
|
||||||
@QueryParam("offset") int offset,
|
@QueryParam("offset") int offset,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "limit",
|
name = "limit",
|
||||||
value = "Maximum size of resource array to return.",
|
value = "Provide how many certificate details you require from the starting pagination index/offset.",
|
||||||
required = false)
|
required = false,
|
||||||
|
defaultValue = "5")
|
||||||
@QueryParam("limit") int limit,
|
@QueryParam("limit") int limit,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "If-Modified-Since",
|
name = "If-Modified-Since",
|
||||||
value = "Validates if the requested variant has not been modified since the time specified",
|
value = "Checks if the requested variant was modified, since the specified date-time.\n" +
|
||||||
|
"Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" +
|
||||||
|
"Example: Mon, 05 Jan 2014 15:10:00 +0200",
|
||||||
required = false)
|
required = false)
|
||||||
@HeaderParam("If-Modified-Since") String ifModifiedSince);
|
@HeaderParam("If-Modified-Since") String ifModifiedSince);
|
||||||
|
|
||||||
@ -232,20 +240,20 @@ public interface CertificateManagementAdminService {
|
|||||||
consumes = MediaType.APPLICATION_JSON,
|
consumes = MediaType.APPLICATION_JSON,
|
||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "DELETE",
|
httpMethod = "DELETE",
|
||||||
value = "Delete an SSL certificate",
|
value = "Deleting an SSL Certificate",
|
||||||
notes = "Delete an SSL certificate that's on the client end",
|
notes = "Delete an SSL certificate that's on the client end",
|
||||||
tags = "Certificate Management")
|
tags = "Certificate Management")
|
||||||
@ApiResponses(value = {
|
@ApiResponses(value = {
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 200,
|
code = 200,
|
||||||
message = "OK. \n Certificate has successfully been removed"),
|
message = "OK. \n Successfully removed the certificate."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 400,
|
code = 400,
|
||||||
message = "Bad Request. \n Invalid request or validation error.",
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
response = ErrorResponse.class),
|
response = ErrorResponse.class),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 404,
|
code = 404,
|
||||||
message = "Not Found. \n Resource to be deleted does not exist."),
|
message = "Not Found. \n The specified resource does not exist."),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 500,
|
code = 500,
|
||||||
message = "Internal Server Error. \n " +
|
message = "Internal Server Error. \n " +
|
||||||
@ -255,9 +263,10 @@ public interface CertificateManagementAdminService {
|
|||||||
Response removeCertificate(
|
Response removeCertificate(
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "serialNumber",
|
name = "serialNumber",
|
||||||
value = "Provide the serial number of the "
|
value = "The serial number of the certificate.\n" +
|
||||||
+ "certificate that you wish to delete",
|
"NOTE: Make sure that a certificate with the serial number you provide exists in the server. If no, first add a certificate.",
|
||||||
required = true)
|
required = true,
|
||||||
|
defaultValue = "12438035315552875930")
|
||||||
@PathParam("serialNumber") String serialNumber);
|
@PathParam("serialNumber") String serialNumber);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,7 +46,7 @@ public interface ConfigurationManagementService {
|
|||||||
httpMethod = "GET",
|
httpMethod = "GET",
|
||||||
value = "Getting General Platform Configurations",
|
value = "Getting General Platform Configurations",
|
||||||
notes = "WSO2 EMM monitors policies to verify that the devices comply with the policies enforced on them. " +
|
notes = "WSO2 EMM monitors policies to verify that the devices comply with the policies enforced on them. " +
|
||||||
"General platform configurations include the settings on how often the the device need to be monitored. " +
|
"General platform configurations include the settings on how often the device need to be monitored. " +
|
||||||
"Using this REST API you can get the general platform level configurations.",
|
"Using this REST API you can get the general platform level configurations.",
|
||||||
tags = "Configuration Management")
|
tags = "Configuration Management")
|
||||||
@ApiResponses(
|
@ApiResponses(
|
||||||
|
|||||||
@ -230,6 +230,72 @@ public interface DeviceManagementService {
|
|||||||
@HeaderParam("If-Modified-Since")
|
@HeaderParam("If-Modified-Since")
|
||||||
String ifModifiedSince);
|
String ifModifiedSince);
|
||||||
|
|
||||||
|
//device delete request would looks like follows
|
||||||
|
//DELETE devices/type/virtual_firealarm/id/us06ww93auzp
|
||||||
|
@DELETE
|
||||||
|
@Path("/type/{device-type}/id/{device-id}")
|
||||||
|
@ApiOperation(
|
||||||
|
produces = MediaType.APPLICATION_JSON,
|
||||||
|
httpMethod = "DELETE",
|
||||||
|
value = "Delete the device speccified by device id",
|
||||||
|
notes = "Returns the status of the deleted device operation.",
|
||||||
|
tags = "Device Management")
|
||||||
|
@ApiResponses(
|
||||||
|
value = {
|
||||||
|
@ApiResponse(
|
||||||
|
code = 200,
|
||||||
|
message = "OK. \n Successfully fetched information of the device.",
|
||||||
|
response = Device.class,
|
||||||
|
responseHeaders = {
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Content-Type",
|
||||||
|
description = "The content type of the body"),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "ETag",
|
||||||
|
description = "Entity Tag of the response resource.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
@ResponseHeader(
|
||||||
|
name = "Last-Modified",
|
||||||
|
description = "Date and time the resource has been modified the last time.\n" +
|
||||||
|
"Used by caches, or in conditional requests."),
|
||||||
|
}),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 304,
|
||||||
|
message = "Not Modified. Empty body because the client already has the latest " +
|
||||||
|
"version of the requested resource."),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 400,
|
||||||
|
message = "Bad Request. \n Invalid request or validation error.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 404,
|
||||||
|
message = "Not Found. \n No device is found under the provided type and id.",
|
||||||
|
response = ErrorResponse.class),
|
||||||
|
@ApiResponse(
|
||||||
|
code = 500,
|
||||||
|
message = "Internal Server Error. \n " +
|
||||||
|
"Server error occurred while retrieving information requested device.",
|
||||||
|
response = ErrorResponse.class)
|
||||||
|
})
|
||||||
|
//TODO need to introduce delete permission
|
||||||
|
@Permission(name = "View Devices", permission = "/device-mgt/devices/owning-device/view")
|
||||||
|
Response deleteDevice(
|
||||||
|
@ApiParam(
|
||||||
|
name = "device-type",
|
||||||
|
value = "The device type, such as ios, android or windows.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("device-type")
|
||||||
|
@Size(max = 45)
|
||||||
|
String deviceType,
|
||||||
|
@ApiParam(
|
||||||
|
name = "device-id",
|
||||||
|
value = "The device identifier of the device.",
|
||||||
|
required = true)
|
||||||
|
@PathParam("device-id")
|
||||||
|
@Size(max = 45)
|
||||||
|
String deviceId);
|
||||||
|
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/{type}/{id}/features")
|
@Path("/{type}/{id}/features")
|
||||||
@ApiOperation(
|
@ApiOperation(
|
||||||
|
|||||||
@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.api;
|
|
||||||
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.API;
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
|
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
@API(name = "GroupManagement", version = "1.0.0", context = "/api/device-mgt/v1.0/groups", tags = {"device_management"})
|
|
||||||
|
|
||||||
@Path("/groups")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
public interface GroupManagementService {
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Permission(name = "View Group", permission = "/permission/admin/device-mgt/user/groups/list")
|
|
||||||
Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset,
|
|
||||||
@QueryParam("limit") int limit);
|
|
||||||
|
|
||||||
@POST
|
|
||||||
@Permission(name = "Add Group", permission = "/permission/admin/device-mgt/user/groups/add")
|
|
||||||
Response createGroup(DeviceGroup group);
|
|
||||||
|
|
||||||
@Path("/{groupName}")
|
|
||||||
@GET
|
|
||||||
@Permission(name = "View Group", permission = "/permission/admin/device-mgt/user/groups/view")
|
|
||||||
Response getGroup(@PathParam("groupName") String groupName);
|
|
||||||
|
|
||||||
@Path("/{groupName}")
|
|
||||||
@PUT
|
|
||||||
@Permission(name = "Update Group", permission = "/permission/admin/device-mgt/user/groups/update")
|
|
||||||
Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup);
|
|
||||||
|
|
||||||
@Path("/{groupName}")
|
|
||||||
@DELETE
|
|
||||||
@Permission(name = "Remove Groups", permission = "/permission/admin/device-mgt/user/groups/remove")
|
|
||||||
Response deleteGroup(@PathParam("groupName") String groupName);
|
|
||||||
|
|
||||||
@Path("/{groupName}/share-with-user")
|
|
||||||
@POST
|
|
||||||
@Permission(name = "Share Group to a User", permission = "/permission/admin/device-mgt/user/groups/share")
|
|
||||||
Response shareGroupWithUser(@PathParam("groupName") String groupName, String targetUser);
|
|
||||||
|
|
||||||
@Path("/{groupName}/share-with-role")
|
|
||||||
@POST
|
|
||||||
@Permission(name = "Share Group to a Role", permission = "/permission/admin/device-mgt/user/groups/share")
|
|
||||||
Response shareGroupWithRole(@PathParam("groupName") String groupName, String targetRole);
|
|
||||||
|
|
||||||
@Path("/{groupName}/remove-share-with-user")
|
|
||||||
@POST
|
|
||||||
@Permission(name = "Unshare a Group", permission = "/permission/admin/device-mgt/user/groups/unshare")
|
|
||||||
Response removeShareWithUser(@PathParam("groupName") String groupName, String targetUser);
|
|
||||||
|
|
||||||
@Path("/{groupName}/remove-share-with-role")
|
|
||||||
@POST
|
|
||||||
@Permission(name = "Unshare a Group", permission = "/permission/admin/device-mgt/user/groups/unshare")
|
|
||||||
Response removeShareWithRole(@PathParam("groupName") String groupName, String targetUser);
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("/{groupName}/users")
|
|
||||||
@Permission(name = "Get Users of Group", permission = "/permission/admin/device-mgt/user/groups/list")
|
|
||||||
Response getUsersOfGroup(@PathParam("groupName") String groupName);
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Path("/{groupName}/devices")
|
|
||||||
@Permission(name = "Get Devices of Group", permission = "/permission/admin/device-mgt/groups/roles")
|
|
||||||
Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset,
|
|
||||||
@QueryParam("limit") int limit);
|
|
||||||
|
|
||||||
@POST
|
|
||||||
@Path("/{groupName}/devices")
|
|
||||||
@Produces("application/json")
|
|
||||||
@Permission(name = "Add Device to a Group", permission = "/permission/admin/device-mgt/user/groups/devices/add")
|
|
||||||
Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier);
|
|
||||||
|
|
||||||
@DELETE
|
|
||||||
@Path("/{groupName}/devices")
|
|
||||||
@Permission(name = "Remove Devices from Group",
|
|
||||||
permission = "/permission/admin/device-mgt/user/groups/devices/remove")
|
|
||||||
Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type,
|
|
||||||
@QueryParam("id") String id);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -79,7 +79,7 @@ public interface PolicyManagementService {
|
|||||||
),
|
),
|
||||||
@ApiResponse(
|
@ApiResponse(
|
||||||
code = 303,
|
code = 303,
|
||||||
message = "See Other. \n he source can be retrieved from the URL specified in the location header",
|
message = "See Other. \n The source can be retrieved from the URL specified in the location header",
|
||||||
responseHeaders = {
|
responseHeaders = {
|
||||||
@ResponseHeader(
|
@ResponseHeader(
|
||||||
name = "Content-Location",
|
name = "Content-Location",
|
||||||
@ -106,8 +106,7 @@ public interface PolicyManagementService {
|
|||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "policy",
|
name = "policy",
|
||||||
value = "The properties required to add a new policy.",
|
value = "The properties required to add a new policy.",
|
||||||
required = true,
|
required = true)
|
||||||
defaultValue = "{\"policyName\":\"test\",\"description\":\"test desc\",\"compliance\":\"ENFORCE\",\"ownershipType\":\"string\",\"active\":false,\"profile\":{\"profileId\":0,\"profileName\":\"string\",\"tenantId\":0,\"deviceType\":\"string\",\"createdDate\":\"2016-10-07T04:50:01.931Z\",\"updatedDate\":\"2016-10-07T04:50:01.931Z\",\"profileFeaturesList\":[{\"id\":0,\"featureCode\":\"string\",\"profileId\":0,\"deviceType\":\"string\",\"content\":{}}]},\"roles\":[\"string\"],\"deviceIdentifiers\":[{\"id\":\"string\",\"type\":\"string\"}],\"users\":[\"string\"]}")
|
|
||||||
@Valid PolicyWrapper policy);
|
@Valid PolicyWrapper policy);
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@ -174,7 +173,7 @@ public interface PolicyManagementService {
|
|||||||
int offset,
|
int offset,
|
||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "limit",
|
name = "limit",
|
||||||
value = "Maximum size of resource array to return.",
|
value = "Provide how many policy details you require from the starting pagination index/offset.",
|
||||||
required = false,
|
required = false,
|
||||||
defaultValue = "5")
|
defaultValue = "5")
|
||||||
@QueryParam("limit")
|
@QueryParam("limit")
|
||||||
@ -427,7 +426,7 @@ public interface PolicyManagementService {
|
|||||||
produces = MediaType.APPLICATION_JSON,
|
produces = MediaType.APPLICATION_JSON,
|
||||||
httpMethod = "PUT",
|
httpMethod = "PUT",
|
||||||
value = "Applying Changes on Policies",
|
value = "Applying Changes on Policies",
|
||||||
notes = "Policies in the active state will be applied to new device that register with WSO2 EMM based on" +
|
notes = "Policies in the active state will be applied to new devices that register with WSO2 EMM based on" +
|
||||||
" the policy enforcement criteria . In a situation where you need to make changes to existing" +
|
" the policy enforcement criteria . In a situation where you need to make changes to existing" +
|
||||||
" policies (removing, activating, deactivating and updating) or add new policies, the existing" +
|
" policies (removing, activating, deactivating and updating) or add new policies, the existing" +
|
||||||
" devices will not receive these changes immediately. Once all the required changes are made" +
|
" devices will not receive these changes immediately. Once all the required changes are made" +
|
||||||
@ -477,8 +476,7 @@ public interface PolicyManagementService {
|
|||||||
@ApiParam(
|
@ApiParam(
|
||||||
name = "priorityUpdatedPolicies",
|
name = "priorityUpdatedPolicies",
|
||||||
value = "List of policies with priorities",
|
value = "List of policies with priorities",
|
||||||
required = true,
|
required = true)
|
||||||
defaultValue = "[{id:1,priority:2}]")
|
|
||||||
List<PriorityUpdatedPolicyWrapper> priorityUpdatedPolicies);
|
List<PriorityUpdatedPolicyWrapper> priorityUpdatedPolicies);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,111 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.api.admin;
|
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import io.swagger.annotations.ApiParam;
|
|
||||||
import io.swagger.annotations.ApiResponse;
|
|
||||||
import io.swagger.annotations.ApiResponses;
|
|
||||||
import io.swagger.annotations.ResponseHeader;
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.API;
|
|
||||||
import org.wso2.carbon.apimgt.annotations.api.Permission;
|
|
||||||
import org.wso2.carbon.policy.mgt.common.DeviceGroupWrapper;
|
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
|
||||||
import javax.ws.rs.GET;
|
|
||||||
import javax.ws.rs.HeaderParam;
|
|
||||||
import javax.ws.rs.Path;
|
|
||||||
import javax.ws.rs.Produces;
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
|
|
||||||
@API(name = "GroupManagementAdmin", version = "1.0.0", context = "/api/device-mgt/v1.0/admin/groups", tags = {"device_management"})
|
|
||||||
|
|
||||||
@Path("/admin/groups")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
@Api(value = "Group Management Administrative Service", description = "This an API intended to be used by " +
|
|
||||||
"'internal' components to log in as an admin user and do a selected number of operations. " +
|
|
||||||
"Further, this is strictly restricted to admin users only ")
|
|
||||||
public interface GroupManagementAdminService {
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@ApiOperation(
|
|
||||||
produces = MediaType.APPLICATION_JSON,
|
|
||||||
httpMethod = "GET",
|
|
||||||
value = "Grouping Devices",
|
|
||||||
notes = "Many devices can be registered with WSO2 IoTS. In order to manage them in an efficient manner, " +
|
|
||||||
"you can group devices and view the data gathered by the devices or share the groups with users so that they can monitor the devices in the respective group.",
|
|
||||||
response = DeviceGroupWrapper.class,
|
|
||||||
responseContainer = "List",
|
|
||||||
tags = "Group Management Administrative Service")
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@ApiResponse(code = 200, message = "OK. \n Successfully fetched the list of groups.",
|
|
||||||
response = DeviceGroupWrapper.class,
|
|
||||||
responseContainer = "List",
|
|
||||||
responseHeaders = {
|
|
||||||
@ResponseHeader(
|
|
||||||
name = "Content-Type",
|
|
||||||
description = "The content type of the body"),
|
|
||||||
@ResponseHeader(
|
|
||||||
name = "ETag",
|
|
||||||
description = "Entity Tag of the response resource.\n" +
|
|
||||||
"Used by caches, or in conditional requests."),
|
|
||||||
@ResponseHeader(
|
|
||||||
name = "Last-Modified",
|
|
||||||
description = "Date and time the resource was last modified.\n" +
|
|
||||||
"Used by caches, or in conditional requests."),
|
|
||||||
}),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 304,
|
|
||||||
message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 406,
|
|
||||||
message = "Not Acceptable.\n The requested media type is not supported"),
|
|
||||||
@ApiResponse(
|
|
||||||
code = 500,
|
|
||||||
message = "Internal Server ErrorResponse. \n Server error occurred while fetching the list of device groups.")
|
|
||||||
})
|
|
||||||
@Permission(name = "View All Groups", permission = "/permission/admin/device-mgt/user/groups/list")
|
|
||||||
Response getGroupsOfUser(
|
|
||||||
@ApiParam(
|
|
||||||
name = "username",
|
|
||||||
value = "The sername of the user.",
|
|
||||||
required = true)
|
|
||||||
@QueryParam("username") String username,
|
|
||||||
@ApiParam(
|
|
||||||
name = "If-Modified-Since",
|
|
||||||
value = "Timestamp of the last modified date",
|
|
||||||
required = false)
|
|
||||||
@HeaderParam("If-Modified-Since") String timestamp,
|
|
||||||
@ApiParam(
|
|
||||||
name = "offset",
|
|
||||||
value = "Starting point within the complete list of items qualified.",
|
|
||||||
required = false,
|
|
||||||
defaultValue = "0")
|
|
||||||
@QueryParam("offset") int offset,
|
|
||||||
@ApiParam(
|
|
||||||
name = "limit",
|
|
||||||
value = "Maximum size of resource array to return.",
|
|
||||||
required = false,
|
|
||||||
defaultValue = "5")
|
|
||||||
@QueryParam("limit") int limit);
|
|
||||||
}
|
|
||||||
@ -216,6 +216,20 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Override
|
||||||
|
@Path("/type/{device-type}/id/{device-id}")
|
||||||
|
public Response deleteDevice(@PathParam("device-type") String deviceType, @PathParam("device-id") String deviceId) {
|
||||||
|
|
||||||
|
log.info("Deleting " + deviceType + " " + deviceId + "is not supported");
|
||||||
|
try {
|
||||||
|
return Response.status(Response.Status.BAD_REQUEST).entity("{Deleting device(s) is not supported}").build();
|
||||||
|
} catch (Exception e) {
|
||||||
|
String msg = "Error occurred while deleting device(s)";
|
||||||
|
log.error(msg, e);
|
||||||
|
return Response.serverError().entity(new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Path("/{type}/{id}")
|
@Path("/{type}/{id}")
|
||||||
|
|||||||
@ -1,136 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.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.group.mgt.DeviceGroup;
|
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.GroupManagementService;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
|
||||||
import org.wso2.carbon.policy.mgt.common.DeviceGroupWrapper;
|
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
|
||||||
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;
|
|
||||||
|
|
||||||
@Path("/groups")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
public class GroupManagementServiceImpl implements GroupManagementService {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GroupManagementServiceImpl.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response getGroups(@QueryParam("user") String user, @QueryParam("offset") int offset,
|
|
||||||
@QueryParam("limit") int limit) {
|
|
||||||
try {
|
|
||||||
List<DeviceGroupWrapper> groupWrappers = new ArrayList<>();
|
|
||||||
GroupManagementProviderService service = DeviceMgtAPIUtils.getGroupManagementProviderService();
|
|
||||||
List<DeviceGroup> deviceGroups = service.getGroups(user);
|
|
||||||
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
|
|
||||||
for (DeviceGroup dg : deviceGroups) {
|
|
||||||
DeviceGroupWrapper gw = new DeviceGroupWrapper();
|
|
||||||
gw.setId(dg.getId());
|
|
||||||
gw.setOwner(dg.getOwner());
|
|
||||||
gw.setName(dg.getName());
|
|
||||||
gw.setTenantId(tenantId);
|
|
||||||
groupWrappers.add(gw);
|
|
||||||
}
|
|
||||||
return Response.status(Response.Status.OK).entity(groupWrappers).build();
|
|
||||||
} catch (GroupManagementException e) {
|
|
||||||
String error = "ErrorResponse occurred while getting the groups related to users for policy.";
|
|
||||||
log.error(error, e);
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response createGroup(DeviceGroup group) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response getGroup(@PathParam("groupName") String groupName) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response updateGroup(@PathParam("groupName") String groupName, DeviceGroup deviceGroup) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response deleteGroup(@PathParam("groupName") String groupName) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response shareGroupWithUser(String groupName, String targetUser) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response shareGroupWithRole(String groupName, String targetRole) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response removeShareWithUser(@PathParam("groupName") String groupName,
|
|
||||||
@QueryParam("username") String targetUser) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response removeShareWithRole(@PathParam("groupName") String groupName,
|
|
||||||
@QueryParam("roleName") String targetUser) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response getUsersOfGroup(@PathParam("groupName") String groupName) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response getDevicesOfGroup(@PathParam("groupName") String groupName, @QueryParam("offset") int offset,
|
|
||||||
@QueryParam("limit") int limit) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response addDeviceToGroup(@PathParam("groupName") String groupName, DeviceIdentifier deviceIdentifier) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response removeDeviceFromGroup(@PathParam("groupName") String groupName, @QueryParam("type") String type,
|
|
||||||
@QueryParam("id") String id) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
*
|
|
||||||
* WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
* Version 2.0 (the "License"); you may not use this file except
|
|
||||||
* in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
package org.wso2.carbon.device.mgt.jaxrs.service.impl.admin;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.common.PaginationResult;
|
|
||||||
import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.service.api.admin.GroupManagementAdminService;
|
|
||||||
import org.wso2.carbon.device.mgt.jaxrs.util.DeviceMgtAPIUtils;
|
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
|
||||||
import javax.ws.rs.GET;
|
|
||||||
import javax.ws.rs.HeaderParam;
|
|
||||||
import javax.ws.rs.Path;
|
|
||||||
import javax.ws.rs.Produces;
|
|
||||||
import javax.ws.rs.QueryParam;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
|
|
||||||
@Path("/admin/groups")
|
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
|
||||||
@Consumes(MediaType.APPLICATION_JSON)
|
|
||||||
public class GroupManagementAdminServiceImpl implements GroupManagementAdminService {
|
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(GroupManagementAdminServiceImpl.class);
|
|
||||||
|
|
||||||
@GET
|
|
||||||
@Override
|
|
||||||
public Response getGroupsOfUser(
|
|
||||||
@QueryParam("username") String username,
|
|
||||||
@HeaderParam("If-Modified-Since") String timestamp,
|
|
||||||
@QueryParam("offset") int offset,
|
|
||||||
@QueryParam("limit") int limit) {
|
|
||||||
try {
|
|
||||||
PaginationResult result =
|
|
||||||
DeviceMgtAPIUtils.getGroupManagementProviderService().getGroups(username, offset, limit);
|
|
||||||
if (result != null && result.getRecordsTotal() > 0) {
|
|
||||||
return Response.status(Response.Status.OK).entity(result).build();
|
|
||||||
} else {
|
|
||||||
return Response.status(Response.Status.NOT_FOUND).build();
|
|
||||||
}
|
|
||||||
} catch (GroupManagementException e) {
|
|
||||||
String msg = "ErrorResponse occurred while retrieving the groups of user '" + username + "'";
|
|
||||||
log.error(msg, e);
|
|
||||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -35,7 +35,7 @@
|
|||||||
<ref bean="userManagementService"/>
|
<ref bean="userManagementService"/>
|
||||||
<ref bean="userManagementAdminService"/>
|
<ref bean="userManagementAdminService"/>
|
||||||
<!--<ref bean="groupManagementService"/>-->
|
<!--<ref bean="groupManagementService"/>-->
|
||||||
<ref bean="groupManagementAdminService"/>
|
<!--ref bean="groupManagementAdminService"/> -->
|
||||||
<ref bean="applicationManagementAdminService"/>
|
<ref bean="applicationManagementAdminService"/>
|
||||||
<ref bean="deviceTypeManagementAdminService"/>
|
<ref bean="deviceTypeManagementAdminService"/>
|
||||||
<ref bean="dashboardServiceBean"/>
|
<ref bean="dashboardServiceBean"/>
|
||||||
@ -73,10 +73,10 @@
|
|||||||
<bean id="policyManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.PolicyManagementServiceImpl"/>
|
<bean id="policyManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.PolicyManagementServiceImpl"/>
|
||||||
<bean id="roleManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.RoleManagementServiceImpl"/>
|
<bean id="roleManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.RoleManagementServiceImpl"/>
|
||||||
<bean id="userManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.UserManagementServiceImpl"/>
|
<bean id="userManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.UserManagementServiceImpl"/>
|
||||||
<bean id="groupManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.GroupManagementServiceImpl"/>
|
<!--bean id="groupManagementService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.GroupManagementServiceImpl"/>-->
|
||||||
<bean id="deviceManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.DeviceManagementAdminServiceImpl"/>
|
<bean id="deviceManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.DeviceManagementAdminServiceImpl"/>
|
||||||
<bean id="applicationManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.ApplicationManagementAdminServiceImpl"/>
|
<bean id="applicationManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.ApplicationManagementAdminServiceImpl"/>
|
||||||
<bean id="groupManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.GroupManagementAdminServiceImpl"/>
|
<!--bean id="groupManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.GroupManagementAdminServiceImpl"/>-->
|
||||||
<bean id="userManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.UserManagementAdminServiceImpl"/>
|
<bean id="userManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.admin.UserManagementAdminServiceImpl"/>
|
||||||
<bean id="dashboardServiceBean" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.DashboardImpl"/>
|
<bean id="dashboardServiceBean" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.DashboardImpl"/>
|
||||||
<bean id="deviceTypeManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.DeviceTypeManagementServiceImpl"/>
|
<bean id="deviceTypeManagementAdminService" class="org.wso2.carbon.device.mgt.jaxrs.service.impl.DeviceTypeManagementServiceImpl"/>
|
||||||
|
|||||||
@ -19,7 +19,9 @@
|
|||||||
package org.wso2.carbon.device.mgt.core.config.policy;
|
package org.wso2.carbon.device.mgt.core.config.policy;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@XmlRootElement(name = "PolicyConfiguration")
|
@XmlRootElement(name = "PolicyConfiguration")
|
||||||
public class PolicyConfiguration {
|
public class PolicyConfiguration {
|
||||||
@ -30,6 +32,7 @@ public class PolicyConfiguration {
|
|||||||
private int maxRetries;
|
private int maxRetries;
|
||||||
private int minRetriesToMarkUnreachable;
|
private int minRetriesToMarkUnreachable;
|
||||||
private int minRetriesToMarkInactive;
|
private int minRetriesToMarkInactive;
|
||||||
|
private List<String> platforms;
|
||||||
|
|
||||||
@XmlElement(name = "MonitoringClass", required = true)
|
@XmlElement(name = "MonitoringClass", required = true)
|
||||||
public String getMonitoringClass() {
|
public String getMonitoringClass() {
|
||||||
@ -85,4 +88,14 @@ public class PolicyConfiguration {
|
|||||||
this.monitoringFrequency = monitoringFrequency;
|
this.monitoringFrequency = monitoringFrequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@XmlElementWrapper(name = "Platforms", required = true)
|
||||||
|
@XmlElement(name = "Platform", required = true)
|
||||||
|
public List<String> getPlatforms() {
|
||||||
|
return platforms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlatforms(List<String> platforms) {
|
||||||
|
this.platforms = platforms;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,7 +39,7 @@ var userModule = function () {
|
|||||||
* Get the carbon user object from the session. If not found - it will throw a user not found error.
|
* Get the carbon user object from the session. If not found - it will throw a user not found error.
|
||||||
* @returns {object} carbon user object
|
* @returns {object} carbon user object
|
||||||
*/
|
*/
|
||||||
privateMethods.getCarbonUser = function () {
|
publicMethods.getCarbonUser = function () {
|
||||||
var carbon = require("carbon");
|
var carbon = require("carbon");
|
||||||
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
var carbonUser = session.get(constants["USER_SESSION_KEY"]);
|
||||||
var utility = require("/app/modules/utility.js")["utility"];
|
var utility = require("/app/modules/utility.js")["utility"];
|
||||||
@ -59,17 +59,17 @@ var userModule = function () {
|
|||||||
privateMethods.callBackend = function (url, method) {
|
privateMethods.callBackend = function (url, method) {
|
||||||
if (constants["HTTP_GET"] == method) {
|
if (constants["HTTP_GET"] == method) {
|
||||||
return serviceInvokers.XMLHttp.get(url,
|
return serviceInvokers.XMLHttp.get(url,
|
||||||
function (backendResponse) {
|
function (backendResponse) {
|
||||||
var response = {};
|
var response = {};
|
||||||
response.content = backendResponse.responseText;
|
response.content = backendResponse.responseText;
|
||||||
if (backendResponse.status == 200) {
|
if (backendResponse.status == 200) {
|
||||||
response.status = "success";
|
response.status = "success";
|
||||||
} else if (backendResponse.status == 400 || backendResponse.status == 401 ||
|
} else if (backendResponse.status == 400 || backendResponse.status == 401 ||
|
||||||
backendResponse.status == 404 || backendResponse.status == 500) {
|
backendResponse.status == 404 || backendResponse.status == 500) {
|
||||||
response.status = "error";
|
response.status = "error";
|
||||||
}
|
}
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
log.error("Runtime error : This method only support HTTP GET requests.");
|
log.error("Runtime error : This method only support HTTP GET requests.");
|
||||||
@ -176,7 +176,7 @@ var userModule = function () {
|
|||||||
* @returns {object} a response object with status and content on success.
|
* @returns {object} a response object with status and content on success.
|
||||||
*/
|
*/
|
||||||
publicMethods.getUser = function (username) {
|
publicMethods.getUser = function (username) {
|
||||||
var carbonUser = privateMethods.getCarbonUser();
|
var carbonUser = publicMethods.getCarbonUser();
|
||||||
var domain;
|
var domain;
|
||||||
if (username.indexOf('/') > 0) {
|
if (username.indexOf('/') > 0) {
|
||||||
domain = username.substr(0, username.indexOf('/'));
|
domain = username.substr(0, username.indexOf('/'));
|
||||||
@ -185,7 +185,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
||||||
encodeURIComponent(username);
|
encodeURIComponent(username);
|
||||||
if (domain) {
|
if (domain) {
|
||||||
url += '?domain=' + domain;
|
url += '?domain=' + domain;
|
||||||
}
|
}
|
||||||
@ -206,7 +206,7 @@ var userModule = function () {
|
|||||||
* @returns {object} a response object with status and content on success.
|
* @returns {object} a response object with status and content on success.
|
||||||
*/
|
*/
|
||||||
publicMethods.getRolesByUsername = function (username) {
|
publicMethods.getRolesByUsername = function (username) {
|
||||||
var carbonUser = privateMethods.getCarbonUser();
|
var carbonUser = publicMethods.getCarbonUser();
|
||||||
var domain;
|
var domain;
|
||||||
if (username.indexOf('/') > 0) {
|
if (username.indexOf('/') > 0) {
|
||||||
domain = username.substr(0, username.indexOf('/'));
|
domain = username.substr(0, username.indexOf('/'));
|
||||||
@ -215,7 +215,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" +
|
||||||
encodeURIComponent(username) + "/roles";
|
encodeURIComponent(username) + "/roles";
|
||||||
if (domain) {
|
if (domain) {
|
||||||
url += '?domain=' + domain;
|
url += '?domain=' + domain;
|
||||||
}
|
}
|
||||||
@ -268,7 +268,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
||||||
"/roles?offset=0&limit=100";
|
"/roles?offset=0&limit=100";
|
||||||
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
if (response.status == "success") {
|
if (response.status == "success") {
|
||||||
response.content = parse(response.content).roles;
|
response.content = parse(response.content).roles;
|
||||||
@ -294,7 +294,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
||||||
"/roles?offset=0&limit=1";
|
"/roles?offset=0&limit=1";
|
||||||
return serviceInvokers.XMLHttp.get(
|
return serviceInvokers.XMLHttp.get(
|
||||||
url, function (responsePayload) {
|
url, function (responsePayload) {
|
||||||
return parse(responsePayload["responseText"])["count"];
|
return parse(responsePayload["responseText"])["count"];
|
||||||
@ -328,7 +328,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
||||||
"/roles?user-store=" + userStore + "&limit=100";
|
"/roles?user-store=" + userStore + "&limit=100";
|
||||||
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
if (response.status == "success") {
|
if (response.status == "success") {
|
||||||
response.content = parse(response.content).roles;
|
response.content = parse(response.content).roles;
|
||||||
@ -381,7 +381,7 @@ var userModule = function () {
|
|||||||
try {
|
try {
|
||||||
utility.startTenantFlow(carbonUser);
|
utility.startTenantFlow(carbonUser);
|
||||||
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] +
|
||||||
"/roles/" + encodeURIComponent(roleName);
|
"/roles/" + encodeURIComponent(roleName);
|
||||||
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
var response = privateMethods.callBackend(url, constants["HTTP_GET"]);
|
||||||
if (response.status == "success") {
|
if (response.status == "success") {
|
||||||
response.content = parse(response.content);
|
response.content = parse(response.content);
|
||||||
|
|||||||
@ -39,9 +39,6 @@ $(function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
var apiBasePath = "/api/device-mgt/v1.0";
|
var apiBasePath = "/api/device-mgt/v1.0";
|
||||||
var modalPopup = ".modal";
|
|
||||||
var modalPopupContainer = modalPopup + " .modal-content";
|
|
||||||
var modalPopupContent = modalPopup + " .modal-content";
|
|
||||||
var body = "body";
|
var body = "body";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,31 +51,6 @@ $(document).on('draw.dt', function () {
|
|||||||
$(".icon .text").res_text(0.2);
|
$(".icon .text").res_text(0.2);
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
* set popup maximum height function.
|
|
||||||
*/
|
|
||||||
function setPopupMaxHeight() {
|
|
||||||
$(modalPopupContent).css('max-height', ($(body).height() - ($(body).height() / 100 * 30)));
|
|
||||||
$(modalPopupContainer).css('margin-top', (-($(modalPopupContainer).height() / 2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* show popup function.
|
|
||||||
*/
|
|
||||||
function showPopup() {
|
|
||||||
$(modalPopup).modal('show');
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* hide popup function.
|
|
||||||
*/
|
|
||||||
function hidePopup() {
|
|
||||||
$(modalPopupContent).html('');
|
|
||||||
$(modalPopup).modal('hide');
|
|
||||||
$('body').removeClass('modal-open').css('padding-right', '0px');
|
|
||||||
$('.modal-backdrop').remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Following click function would execute
|
* Following click function would execute
|
||||||
* when a user clicks on "Invite" link
|
* when a user clicks on "Invite" link
|
||||||
@ -89,34 +61,48 @@ $("a#invite-user-link").click(function () {
|
|||||||
var inviteUserAPI = apiBasePath + "/users/send-invitation";
|
var inviteUserAPI = apiBasePath + "/users/send-invitation";
|
||||||
|
|
||||||
if (usernameList.length == 0) {
|
if (usernameList.length == 0) {
|
||||||
$(modalPopupContent).html($("#errorUsers").html());
|
modalDialog.header("Operation cannot be performed !");
|
||||||
|
modalDialog.content("Please select a user or a list of users to send invitation emails.");
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="javascript:modalDialog.hide()" class="btn-operations">Ok' +
|
||||||
|
'</a> </div>');
|
||||||
|
modalDialog.showAsError();
|
||||||
} else {
|
} else {
|
||||||
$(modalPopupContent).html($('#invite-user-modal-content').html());
|
modalDialog.header("");
|
||||||
}
|
modalDialog.content("An invitation mail will be sent to the selected user(s) to initiate an enrolment process." +
|
||||||
|
" Do you wish to continue ?");
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="#" id="invite-user-yes-link" class="btn-operations">yes</a>' +
|
||||||
|
'<a href="#" id="invite-user-cancel-link" class="btn-operations btn-default">No</a> </div>');
|
||||||
|
modalDialog.show();
|
||||||
|
|
||||||
showPopup();
|
}
|
||||||
|
|
||||||
$("a#invite-user-yes-link").click(function () {
|
$("a#invite-user-yes-link").click(function () {
|
||||||
invokerUtil.post(
|
invokerUtil.post(
|
||||||
inviteUserAPI,
|
inviteUserAPI,
|
||||||
usernameList,
|
usernameList,
|
||||||
function () {
|
function () {
|
||||||
$(modalPopupContent).html($('#invite-user-success-content').html());
|
modalDialog.header("User invitation email for enrollment was successfully sent.");
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="#" id="invite-user-success-link" ' +
|
||||||
|
'class="btn-operations">Ok </a> </div>');
|
||||||
$("a#invite-user-success-link").click(function () {
|
$("a#invite-user-success-link").click(function () {
|
||||||
hidePopup();
|
modalPopup.hide();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
function () {
|
function () {
|
||||||
$(modalPopupContent).html($('#invite-user-error-content').html());
|
modalDialog.header('<span class="fw-stack"> <i class="fw fw-ring fw-stack-2x"></i> <i class="fw ' +
|
||||||
|
'fw-error fw-stack-1x"></i> </span> Unexpected Error !');
|
||||||
|
modalDialog.content('An unexpected error occurred. Try again later.');
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="#" id="invite-user-error-link" ' +
|
||||||
|
'class="btn-operations">Ok </a> </div>');
|
||||||
$("a#invite-user-error-link").click(function () {
|
$("a#invite-user-error-link").click(function () {
|
||||||
hidePopup();
|
modalPopup.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("a#invite-user-cancel-link").click(function () {
|
$("a#invite-user-cancel-link").click(function () {
|
||||||
hidePopup();
|
modalPopup.hide();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -138,13 +124,16 @@ function getSelectedUsernames() {
|
|||||||
* on User Listing page in WSO2 MDM Console.
|
* on User Listing page in WSO2 MDM Console.
|
||||||
*/
|
*/
|
||||||
function resetPassword(username) {
|
function resetPassword(username) {
|
||||||
$(modalPopupContent).html($('#reset-password-window').html());
|
modalDialog.header('<span class="fw-stack"> <i class="fw fw-ring fw-stack-2x"></i> <i class="fw fw-key ' +
|
||||||
showPopup();
|
'fw-stack-1x"></i> </span> Reset Password');
|
||||||
|
modalDialog.content($("#modal-content-reset-password").html());
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="#" id="reset-password-yes-link" class="btn-operations"> Save ' +
|
||||||
|
'</a> <a href="#" id="reset-password-cancel-link" class="btn-operations btn-default"> Cancel </a> </div>');
|
||||||
|
modalDialog.show();
|
||||||
|
|
||||||
$("a#reset-password-yes-link").click(function () {
|
$("a#reset-password-yes-link").click(function () {
|
||||||
var newPassword = $("#new-password").val();
|
var newPassword = $("#basic-modal-view .new-password").val();
|
||||||
var confirmedPassword = $("#confirmed-password").val();
|
var confirmedPassword = $("#basic-modal-view .confirmed-password").val();
|
||||||
|
|
||||||
var errorMsgWrapper = "#notification-error-msg";
|
var errorMsgWrapper = "#notification-error-msg";
|
||||||
var errorMsg = "#notification-error-msg span";
|
var errorMsg = "#notification-error-msg span";
|
||||||
if (!newPassword) {
|
if (!newPassword) {
|
||||||
@ -177,10 +166,10 @@ function resetPassword(username) {
|
|||||||
// The success callback
|
// The success callback
|
||||||
function (data, textStatus, jqXHR) {
|
function (data, textStatus, jqXHR) {
|
||||||
if (jqXHR.status == 200) {
|
if (jqXHR.status == 200) {
|
||||||
$(modalPopupContent).html($('#reset-password-success-content').html());
|
modalDialog.header("Password reset is successful.");
|
||||||
$("a#reset-password-success-link").click(function () {
|
modalDialog.content("");
|
||||||
hidePopup();
|
modalDialog.footer('<div class="buttons"> <a href="javascript:modalDialog.hide()" ' +
|
||||||
});
|
'class="btn-operations">Ok</a> </div>');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// The error callback
|
// The error callback
|
||||||
@ -194,7 +183,7 @@ function resetPassword(username) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("a#reset-password-cancel-link").click(function () {
|
$("a#reset-password-cancel-link").click(function () {
|
||||||
hidePopup();
|
modalDialog.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,8 +202,16 @@ function removeUser(username) {
|
|||||||
if (domain) {
|
if (domain) {
|
||||||
removeUserAPI += '?domain=' + domain;
|
removeUserAPI += '?domain=' + domain;
|
||||||
}
|
}
|
||||||
$(modalPopupContent).html($('#remove-user-modal-content').html());
|
|
||||||
showPopup();
|
modalDialog.header("Remove User");
|
||||||
|
modalDialog.content("Do you really want to remove this user ?");
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="#" id="remove-user-yes-link" class="btn-operations">Remove</a> ' +
|
||||||
|
'<a href="#" id="remove-user-cancel-link" class="btn-operations btn-default">Cancel</a> </div>');
|
||||||
|
modalDialog.showAsAWarning();
|
||||||
|
|
||||||
|
$("a#remove-user-cancel-link").click(function () {
|
||||||
|
modalDialog.hide();
|
||||||
|
});
|
||||||
|
|
||||||
$("a#remove-user-yes-link").click(function () {
|
$("a#remove-user-yes-link").click(function () {
|
||||||
invokerUtil.delete(
|
invokerUtil.delete(
|
||||||
@ -227,24 +224,24 @@ function removeUser(username) {
|
|||||||
$("#user-" + username).remove();
|
$("#user-" + username).remove();
|
||||||
}
|
}
|
||||||
// update modal-content with success message
|
// update modal-content with success message
|
||||||
$(modalPopupContent).html($('#remove-user-success-content').html());
|
modalDialog.header("User Removed.");
|
||||||
$("a#remove-user-success-link").click(function () {
|
modalDialog.content("Done. User was successfully removed.");
|
||||||
hidePopup();
|
modalDialog.footer('<div class="buttons"> <a href="javascript:modalDialog.hide()" ' +
|
||||||
});
|
'class="btn-operations">Ok</a> </div>');
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function () {
|
function () {
|
||||||
$(modalPopupContent).html($('#remove-user-error-content').html());
|
modalDialog.hide();
|
||||||
$("a#remove-user-error-link").click(function () {
|
modalDialog.header("Operation cannot be performed !");
|
||||||
hidePopup();
|
modalDialog.content("An unexpected error occurred. Please try again later.");
|
||||||
});
|
modalDialog.footer('<div class="buttons"> <a href="javascript:modalDialog.hide()" ' +
|
||||||
|
'class="btn-operations">Ok</a> </div>');
|
||||||
|
modalDialog.showAsError();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
$("a#remove-user-cancel-link").click(function () {
|
|
||||||
hidePopup();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -256,8 +253,10 @@ function InitiateViewOption() {
|
|||||||
if ($("#can-view").val()) {
|
if ($("#can-view").val()) {
|
||||||
$(location).attr('href', $(this).data("url"));
|
$(location).attr('href', $(this).data("url"));
|
||||||
} else {
|
} else {
|
||||||
$(modalPopupContent).html($('#errorUserView').html());
|
modalDialog.header("Unauthorized action!");
|
||||||
showPopup();
|
modalDialog.content("You don't have permissions to view users");
|
||||||
|
modalDialog.footer('<div class="buttons"> <a href="javascript:modalDialog.hide()" class="btn-operations">Ok</a> </div>');
|
||||||
|
modalDialog.showAsError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
{{unit "cdmf.unit.ui.title" pageTitle="User Management"}}
|
{{unit "cdmf.unit.ui.title" pageTitle="User Management"}}
|
||||||
{{unit "cdmf.unit.data-tables-extended"}}
|
{{unit "cdmf.unit.data-tables-extended"}}
|
||||||
|
{{unit "cdmf.unit.ui.modal"}}
|
||||||
|
|
||||||
{{#zone "breadcrumbs"}}
|
{{#zone "breadcrumbs"}}
|
||||||
<li>
|
<li>
|
||||||
@ -47,7 +48,7 @@
|
|||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|
||||||
{{#zone "content"}}
|
{{#zone "content"}}
|
||||||
|
<input type="hidden" id="user" value="{{user.username}}">
|
||||||
<!-- content -->
|
<!-- content -->
|
||||||
<div id="loading-content" class="col-centered">
|
<div id="loading-content" class="col-centered">
|
||||||
{{#if canManage}}
|
{{#if canManage}}
|
||||||
@ -99,226 +100,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="invite-user-modal-content" class="hide">
|
<div id="modal-content-reset-password" class="hide">
|
||||||
<div class="modal-header">
|
<div id="notification-error-msg" class="alert alert-danger hidden" role="alert">
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
<i class="icon fw fw-error"></i><span></span>
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
<h4>
|
||||||
<h4>
|
Enter new password
|
||||||
An invitation mail will be sent to the selected user(s) to initiate an enrolment process.
|
<br><br>
|
||||||
Do you wish to continue ?
|
<div>
|
||||||
</h4>
|
<input type="password" class="form-control modal-input operationDataKeys new-password"
|
||||||
</div>
|
data-key="message"/>
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="invite-user-yes-link" class="btn-operations">yes</a>
|
|
||||||
<a href="#" id="invite-user-cancel-link" class="btn-operations btn-default">No</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<br>
|
||||||
</div>
|
Retype new password
|
||||||
|
<br><br>
|
||||||
<div id="invite-user-success-content" class="hide">
|
<div>
|
||||||
<div class="modal-header">
|
<input type="password" class="form-control modal-input operationDataKeys confirmed-password"
|
||||||
<h3 class="pull-left modal-title">User invitation email for enrollment was successfully sent.</h3>
|
data-key="message"/>
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="invite-user-success-link" class="btn-operations">
|
|
||||||
Ok
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<br>
|
||||||
</div>
|
</h4>
|
||||||
|
|
||||||
<div id="invite-user-error-content" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
<span class="fw-stack">
|
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
|
||||||
<i class="fw fw-error fw-stack-1x"></i>
|
|
||||||
</span>
|
|
||||||
Unexpected Error
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<h4>
|
|
||||||
An unexpected error occurred. Try again later.
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="invite-user-error-link" class="btn-operations">Ok</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="remove-user-modal-content" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
Remove User
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<h4>
|
|
||||||
Do you really want to remove this user ?
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="remove-user-yes-link" class="btn-operations">Remove</a>
|
|
||||||
<a href="#" id="remove-user-cancel-link" class="btn-operations btn-default">Cancel</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="remove-user-success-content" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
User Removed.
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<h4>
|
|
||||||
Done. User was successfully removed.
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="remove-user-success-link" class="btn-operations">Ok</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="remove-user-error-content" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
<span class="fw-stack">
|
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
|
||||||
<i class="fw fw-error fw-stack-1x"></i>
|
|
||||||
</span>
|
|
||||||
Unexpected Error
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<h4>
|
|
||||||
An unexpected error occurred. Please try again later.
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="remove-user-error-link" class="btn-operations">Ok</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="errorUsers" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
<span class="fw-stack">
|
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
|
||||||
<i class="fw fw-error fw-stack-1x"></i>
|
|
||||||
</span>
|
|
||||||
Operation cannot be performed !
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<h4>
|
|
||||||
Please select a user or a list of users to send invitation emails.
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="javascript:hidePopup()" class="btn-operations">Ok</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="errorUserView" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
Unauthorized action!
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="reset-password-window" class="hide">
|
|
||||||
<input type="hidden" id="user" value="{{user.username}}">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
<span class="fw-stack">
|
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
|
||||||
<i class="fw fw-key fw-stack-1x"></i>
|
|
||||||
</span>
|
|
||||||
Reset Password
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body add-margin-top-2x add-margin-bottom-2x">
|
|
||||||
<div id="notification-error-msg" class="alert alert-danger hidden" role="alert">
|
|
||||||
<i class="icon fw fw-error"></i><span></span>
|
|
||||||
</div>
|
|
||||||
<h4>
|
|
||||||
Enter new password
|
|
||||||
<br><br>
|
|
||||||
<div>
|
|
||||||
<input type="password" class="form-control modal-input operationDataKeys" id="new-password"
|
|
||||||
data-key="message"/>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
Retype new password
|
|
||||||
<br><br>
|
|
||||||
<div>
|
|
||||||
<input type="password" class="form-control modal-input operationDataKeys" id="confirmed-password"
|
|
||||||
data-key="message"/>
|
|
||||||
</div>
|
|
||||||
<br>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="reset-password-yes-link" class="btn-operations">
|
|
||||||
Save
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a href="#" id="reset-password-cancel-link" class="btn-operations btn-default">
|
|
||||||
Cancel
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="reset-password-success-content" class="hide">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h3 class="pull-left modal-title">
|
|
||||||
Password reset is successful.
|
|
||||||
</h3>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fw fw-cancel"></i>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<div class="buttons">
|
|
||||||
<a href="#" id="reset-password-success-link" class="btn-operations">
|
|
||||||
Ok
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|||||||
@ -380,8 +380,11 @@ public class MonitoringManagerImpl implements MonitoringManager {
|
|||||||
|
|
||||||
List<String> deviceTypes = new ArrayList<>();
|
List<String> deviceTypes = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
|
//when shutdown, it sets DeviceManagementService to null, therefore need to have a null check
|
||||||
|
if (PolicyManagementDataHolder.getInstance().getDeviceManagementService() != null) {
|
||||||
deviceTypes =
|
deviceTypes =
|
||||||
PolicyManagementDataHolder.getInstance().getDeviceManagementService().getAvailableDeviceTypes();
|
PolicyManagementDataHolder.getInstance().getDeviceManagementService().getAvailableDeviceTypes();
|
||||||
|
}
|
||||||
} catch (DeviceManagementException e) {
|
} catch (DeviceManagementException e) {
|
||||||
throw new PolicyComplianceException("Error occurred while getting the device types.", e);
|
throw new PolicyComplianceException("Error occurred while getting the device types.", e);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,8 @@ import org.apache.commons.logging.Log;
|
|||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.device.mgt.common.Device;
|
import org.wso2.carbon.device.mgt.common.Device;
|
||||||
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
|
||||||
|
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
||||||
|
import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
import org.wso2.carbon.ntask.core.Task;
|
import org.wso2.carbon.ntask.core.Task;
|
||||||
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
|
import org.wso2.carbon.policy.mgt.common.monitor.PolicyComplianceException;
|
||||||
@ -59,8 +61,14 @@ public class MonitoringTask implements Task {
|
|||||||
|
|
||||||
MonitoringManager monitoringManager = PolicyManagementDataHolder.getInstance().getMonitoringManager();
|
MonitoringManager monitoringManager = PolicyManagementDataHolder.getInstance().getMonitoringManager();
|
||||||
List<String> deviceTypes = new ArrayList<>();
|
List<String> deviceTypes = new ArrayList<>();
|
||||||
|
List<String> configDeviceTypes = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
deviceTypes = monitoringManager.getDeviceTypes();
|
deviceTypes = monitoringManager.getDeviceTypes();
|
||||||
|
for (String deviceType : deviceTypes) {
|
||||||
|
if (isPlatformExist(deviceType)) {
|
||||||
|
configDeviceTypes.add(deviceType);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (PolicyComplianceException e) {
|
} catch (PolicyComplianceException e) {
|
||||||
log.error("Error occurred while getting the device types.");
|
log.error("Error occurred while getting the device types.");
|
||||||
}
|
}
|
||||||
@ -68,7 +76,7 @@ public class MonitoringTask implements Task {
|
|||||||
try {
|
try {
|
||||||
DeviceManagementProviderService deviceManagementProviderService =
|
DeviceManagementProviderService deviceManagementProviderService =
|
||||||
PolicyManagementDataHolder.getInstance().getDeviceManagementService();
|
PolicyManagementDataHolder.getInstance().getDeviceManagementService();
|
||||||
for (String deviceType : deviceTypes) {
|
for (String deviceType : configDeviceTypes) {
|
||||||
if (log.isDebugEnabled()) {
|
if (log.isDebugEnabled()) {
|
||||||
log.debug("Running task for device type : " + deviceType);
|
log.debug("Running task for device type : " + deviceType);
|
||||||
}
|
}
|
||||||
@ -82,6 +90,7 @@ public class MonitoringTask implements Task {
|
|||||||
deviceType);
|
deviceType);
|
||||||
}
|
}
|
||||||
for (Device device : devices) {
|
for (Device device : devices) {
|
||||||
|
|
||||||
EnrolmentInfo.Status status = device.getEnrolmentInfo().getStatus();
|
EnrolmentInfo.Status status = device.getEnrolmentInfo().getStatus();
|
||||||
if (status.equals(EnrolmentInfo.Status.BLOCKED) ||
|
if (status.equals(EnrolmentInfo.Status.BLOCKED) ||
|
||||||
status.equals(EnrolmentInfo.Status.REMOVED) ||
|
status.equals(EnrolmentInfo.Status.REMOVED) ||
|
||||||
@ -116,4 +125,18 @@ public class MonitoringTask implements Task {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether Device platform (ex: android) is exist in the cdm-config.xml file before adding a
|
||||||
|
* Monitoring operation to a specific device type.
|
||||||
|
*
|
||||||
|
* @param deviceType available device types.
|
||||||
|
* @return return platform is exist(true) or not (false).
|
||||||
|
*/
|
||||||
|
|
||||||
|
private boolean isPlatformExist(String deviceType) {
|
||||||
|
PolicyConfiguration policyConfiguration =
|
||||||
|
DeviceConfigurationManager.getInstance().getDeviceManagementConfig().getPolicyConfiguration();
|
||||||
|
return (policyConfiguration.getPlatforms().contains(deviceType));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,6 +42,11 @@
|
|||||||
<MaxRetries>5</MaxRetries>
|
<MaxRetries>5</MaxRetries>
|
||||||
<MinRetriesToMarkUnreachable>8</MinRetriesToMarkUnreachable>
|
<MinRetriesToMarkUnreachable>8</MinRetriesToMarkUnreachable>
|
||||||
<MinRetriesToMarkInactive>20</MinRetriesToMarkInactive>
|
<MinRetriesToMarkInactive>20</MinRetriesToMarkInactive>
|
||||||
|
<Platforms>
|
||||||
|
<Platform>android</Platform>
|
||||||
|
<Platform>ios</Platform>
|
||||||
|
<Platform>windows</Platform>
|
||||||
|
</Platforms>
|
||||||
</PolicyConfiguration>
|
</PolicyConfiguration>
|
||||||
<TaskConfiguration>
|
<TaskConfiguration>
|
||||||
<Enable>true</Enable>
|
<Enable>true</Enable>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user