Add api for self guide enrollment

fixes https://roadmap.entgra.net/issues/9939
try_it
osh 2 years ago
parent d715609b53
commit 66afe95fe9

@ -54,6 +54,7 @@ import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.Feature;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.geo.service.Alert;
import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
@ -66,6 +67,7 @@ import org.wso2.carbon.device.mgt.jaxrs.beans.ErrorResponse;
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationRequest;
import org.wso2.carbon.device.mgt.jaxrs.beans.OperationStatusBean;
import org.wso2.carbon.device.mgt.jaxrs.util.Constants;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.Size;
@ -802,6 +804,59 @@ public interface DeviceManagementService {
@QueryParam("requireDeviceInfo")
boolean requireDeviceInfo);
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/enrollment/guide")
@ApiOperation(
consumes = MediaType.MULTIPART_FORM_DATA,
produces = MediaType.APPLICATION_JSON,
httpMethod = "POST",
value = "Sending Enrollment Mode chosen by customer",
notes = "Enrollment mode selected and path is sent as parameters",
tags = "Device Management",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = Constants.SCOPE, value = "perm:devices:view")
})
}
)
@ApiResponses(
value = {
@ApiResponse(
code = 200,
message = "OK. \n Successfully mailed the Enrollment Guide of customer.",
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 was last modified.\n" +
"Used by caches, or in conditional requests."),
}),
@ApiResponse(
code = 400,
message = "Bad Request. \n Invalid request or validation error.",
response = ErrorResponse.class),
@ApiResponse(
code = 500,
message = "Internal Server Error. \n " +
"Server error occurred while sending mail of the Enrollment Guide.",
response = ErrorResponse.class)
})
Response sendEnrollmentGuide(
@ApiParam(
name = "enrolmentGuide",
value = "The details of the enrolment path suggested.",
required = true)
MultipartFile enrolmentGuide);
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/type/any/list")
@ -1940,6 +1995,7 @@ public interface DeviceManagementService {
@PathParam("id")
@Size(max = 45)
String id);
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{type}/{id}/getenrolmentstatushistory")

@ -68,6 +68,7 @@ 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.authorization.DeviceAccessAuthorizationException;
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
import org.wso2.carbon.device.mgt.common.device.details.DeviceData;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
@ -101,6 +102,7 @@ import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
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.core.service.DeviceManagementProviderService;
import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo;
import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
import org.wso2.carbon.device.mgt.core.traccar.api.service.DeviceAPIClientService;
import org.wso2.carbon.device.mgt.core.traccar.api.service.impl.DeviceAPIClientServiceImpl;
@ -130,6 +132,7 @@ import org.wso2.carbon.policy.mgt.core.PolicyManagerService;
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.user.core.service.RealmService;
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
@ -144,6 +147,7 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@ -816,6 +820,43 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
return Response.status(Response.Status.OK).entity(device).build();
}
@POST
@Path("/enrollment/guide")
@Override
public Response sendEnrollmentGuide(MultipartFile enrolmentGuide) {
if (log.isDebugEnabled()) {
log.debug("Sending enrollment invitation mail to existing user.");
}
DeviceManagementProviderService dms = DeviceMgtAPIUtils.getDeviceManagementService();
try {
// Set<String> recipients = new HashSet<>();
// recipients.add(email);
// Properties props = new Properties();
// props.setProperty("enrolment-guide", enrolmentGuide);
//
// EmailMetaInfo metaInfo = new EmailMetaInfo(recipients, props);
// dms.sendEnrolmentInvitation("enrolment-guide-template", metaInfo);
dms.sendEnrolmentGuide(enrolmentGuide);
return Response.status(Response.Status.OK).entity("Invitation mails have been sent.").build();
} catch (DeviceManagementException e) {
String msg = "Error occurred while inviting user to enrol their device";
log.error(msg, e);
return Response.serverError().entity(
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
} catch (ConfigurationManagementException e) {
String msg = "Error occurred while sending the email invitations. Mail server not configured.";
return Response.serverError().entity(
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
} catch (IOException e) {
e.printStackTrace();
String msg = "testtttt.";
return Response.serverError().entity(
new ErrorResponse.ErrorResponseBuilder().setMessage(msg).build()).build();
}
// return Response.status(Response.Status.OK).entity("Invitation mails have been sent.").build();
}
@POST
@Path("/type/any/list")
@Override

@ -66,7 +66,9 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.dto.DeviceTypeVersion;
import org.wso2.carbon.device.mgt.common.geo.service.GeoCluster;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
@ -645,6 +647,8 @@ public interface DeviceManagementProviderService {
void sendEnrolmentInvitation(String templateName, EmailMetaInfo metaInfo) throws DeviceManagementException,
ConfigurationManagementException;
void sendEnrolmentGuide(MultipartFile enrolmentGuide) throws DeviceManagementException, ConfigurationManagementException, IOException;
void sendRegistrationEmail(EmailMetaInfo metaInfo) throws DeviceManagementException, ConfigurationManagementException;
FeatureManager getFeatureManager(String deviceType) throws DeviceTypeNotFoundException;

@ -38,6 +38,7 @@ package org.wso2.carbon.device.mgt.core.service;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import org.apache.commons.collections.map.SingletonMap;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -160,12 +161,13 @@ import org.wso2.carbon.stratos.common.beans.TenantInfoBean;
import org.wso2.carbon.tenant.mgt.services.TenantMgtAdminService;
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
import org.springframework.web.multipart.MultipartFile;
import javax.mail.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.IOException;
import java.io.StringWriter;
import java.io.*;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.sql.Timestamp;
@ -185,6 +187,12 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMultipart;
import javax.ws.rs.core.MultivaluedMap;
public class DeviceManagementProviderServiceImpl implements DeviceManagementProviderService,
PluginInitializationListener {
@ -198,6 +206,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
private final ApplicationDAO applicationDAO;
private MetadataDAO metadataDAO;
private final DeviceStatusDAO deviceStatusDAO;
int count = 0;
public DeviceManagementProviderServiceImpl() {
this.pluginRepository = new DeviceManagementPluginRepository();
@ -1551,6 +1560,178 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
}
}
// save to somewhere
private void writeFile(byte[] content, String filename) throws IOException {
File file = new File(filename);
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fop = new FileOutputStream(file);
fop.write(content);
fop.flush();
fop.close();
}
@Override
public void sendEnrolmentGuide(MultipartFile enrolmentGuide) throws DeviceManagementException, ConfigurationManagementException, IOException {
// String fileName = "";
// MultivaluedMap<String, String> multivaluedMap = null;
// String fileName = null;
// InputStream inputStream = null;
// String uploadFilePath = null;
//
// Map<String, List<InputPart>> map = enrolmentGuide.getFormDataMap();
// List<InputPart> inputParts = map.get("file");
//
// for (InputPart inputPart : inputParts) {
//
// try {
//
// multivaluedMap = inputPart.getHeaders();
// fileName = getFileName(multivaluedMap);
//
// //convert the uploaded file to inputstream
// InputStream inputStream = inputPart.getBody(InputStream.class,null);
//
// byte [] bytes = IOUtils.toByteArray(inputStream);
//
// //constructs upload file path
// fileName = UPLOADED_FILE_PATH + fileName;
//
// writeFile(bytes,fileName);
//
// System.out.println("Done");
//
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// }
// Recipient's email ID needs to be mentioned.
// String charset = enrolmentGuide.getFormDataMap().get("_charset_").get(0).getBodyAsString();
// File file = (File) enrolmentGuide.getFormDataMap().get("file").get(0);
String to = "oshani@entgra.io";
// Sender's email ID needs to be mentioned
String from = "oshsilva1996@gmail.com";
// Assuming you are sending email from through gmails smtp
String host = "smtp.gmail.com";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.auth", "true");
// Get the Session object.// and pass username and password
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("oshsilva1996@gmail.com", "layzvxhcxlwzkgwf");
}
});
// Used to debug SMTP issues
session.setDebug(true);
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// // Set Subject: header field
message.setSubject("Enrollment Guide Triggered " + ++count);
// message.setText(enrolmentGuide);
// Multipart multipart = new MimeMultipart();
//
// MimeBodyPart attachmentPart = new MimeBodyPart();
//
// MimeBodyPart textPart = new MimeBodyPart();
//
// try {
//
//// String charset = enrolmentGuide.getFormDataMap().get("_charset_").get(0).getBodyAsString();
//// InputPart file = enrolmentGuide.getFormDataMap().get("file").get(0);
//// InputStream inputStream = file.getBody(InputStream.class, null);
//// BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, charset));
//// String line;
//// StringBuilder content = new StringBuilder();
//// while ((line = br.readLine()) != null) {
//// content.append(line);
//// }
////
//// writeFile(content, "test");
////
//// File f =new File("H:\\pepipost_tutorials\\javaemail1.PNG");
//
// attachmentPart.attachFile(file);
// textPart.setText("This is text");
// multipart.addBodyPart(textPart);
// multipart.addBodyPart(attachmentPart);
//
// } catch (IOException e) {
//
// e.printStackTrace();
//
// }
//
// message.setContent(multipart);
System.out.println("sending...");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
//
// try {
// // Create a default MimeMessage object.
// MimeMessage message = new MimeMessage(session);
//
// // Set From: header field of the header.
// message.setFrom(new InternetAddress(from));
//
// // Set To: header field of the header.
// message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
//
// // Set Subject: header field
// message.setSubject("Enrollment Guide Triggered " + ++count);
//
// // Now set the actual message
// message.setText("enrolmentGuide");
//
// System.out.println("sending...");
// // Send message
// Transport.send(message);
// System.out.println("Sent message successfully....");
// } catch (MessagingException mex) {
// mex.printStackTrace();
// }
}
@Override
public void sendRegistrationEmail(EmailMetaInfo metaInfo) throws DeviceManagementException,
ConfigurationManagementException {

Loading…
Cancel
Save