mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Implement service to create OTP and to send device enrollment invitation
This commit is contained in:
parent
f0dbc4100e
commit
58217ac77a
@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.common.spi;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.BadRequestException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.OTPManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.invitation.mgt.DeviceEnrollmentInvitation;
|
||||
import org.wso2.carbon.device.mgt.common.otp.mgt.dto.OneTimePinDTO;
|
||||
import org.wso2.carbon.device.mgt.common.otp.mgt.wrapper.OTPWrapper;
|
||||
|
||||
@ -48,4 +49,12 @@ public interface OTPManagementService {
|
||||
* @throws OTPManagementException If error occurred while invalidating the OTP
|
||||
*/
|
||||
void invalidateOTP(String oneTimeToken) throws OTPManagementException;
|
||||
|
||||
/**
|
||||
* Create OTP token and send device enrollment invitation
|
||||
* @param deviceEnrollmentInvitation object which contains device enrollment invitation related details
|
||||
* @throws OTPManagementException if error occurred while creating OTP token &/ sending mail
|
||||
*/
|
||||
void sendDeviceEnrollmentInvitationMail(DeviceEnrollmentInvitation deviceEnrollmentInvitation)
|
||||
throws OTPManagementException;
|
||||
}
|
||||
|
||||
@ -143,6 +143,9 @@ public final class DeviceManagementConstants {
|
||||
public static final String DEFAULT_DEVICE_USER = "Internal/devicemgt-user";
|
||||
public static final String DEFAULT_DEVICE_ADMIN = "Internal/devicemgt-admin";
|
||||
|
||||
public static final String CLAIM_EMAIL_ADDRESS = "http://wso2.org/claims/emailaddress";
|
||||
public static final String CLAIM_FIRST_NAME = "http://wso2.org/claims/givenname";
|
||||
|
||||
// Permissions that are given for a normal device user.
|
||||
public static final Permission[] PERMISSIONS_FOR_DEVICE_USER = {
|
||||
new Permission("/permission/admin/Login", "ui.execute"),
|
||||
|
||||
@ -21,6 +21,7 @@ import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.wso2.carbon.base.MultitenantConstants;
|
||||
import org.wso2.carbon.context.CarbonContext;
|
||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.BadRequestException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.DBConnectionException;
|
||||
@ -28,6 +29,9 @@ import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.OTPManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException;
|
||||
import org.wso2.carbon.device.mgt.common.exceptions.UnAuthorizedException;
|
||||
import org.wso2.carbon.device.mgt.common.invitation.mgt.DeviceEnrollmentInvitation;
|
||||
import org.wso2.carbon.device.mgt.common.invitation.mgt.DeviceEnrollmentInvitationDetails;
|
||||
import org.wso2.carbon.device.mgt.common.invitation.mgt.DeviceEnrollmentType;
|
||||
import org.wso2.carbon.device.mgt.common.metadata.mgt.Metadata;
|
||||
import org.wso2.carbon.device.mgt.common.otp.mgt.dto.OneTimePinDTO;
|
||||
import org.wso2.carbon.device.mgt.common.spi.OTPManagementService;
|
||||
@ -41,9 +45,12 @@ import org.wso2.carbon.device.mgt.common.otp.mgt.wrapper.OTPWrapper;
|
||||
import org.wso2.carbon.device.mgt.core.otp.mgt.dao.OTPManagementDAOFactory;
|
||||
import org.wso2.carbon.device.mgt.core.otp.mgt.exception.OTPManagementDAOException;
|
||||
import org.wso2.carbon.device.mgt.core.otp.mgt.util.ConnectionManagerUtil;
|
||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||
import org.wso2.carbon.device.mgt.core.service.EmailMetaInfo;
|
||||
import org.apache.commons.validator.routines.EmailValidator;
|
||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||
import org.wso2.carbon.user.api.Tenant;
|
||||
import org.wso2.carbon.user.api.UserStoreException;
|
||||
|
||||
import static org.wso2.carbon.device.mgt.common.DeviceManagementConstants.OTPProperties;
|
||||
|
||||
@ -82,7 +89,7 @@ public class OTPManagementServiceImpl implements OTPManagementService {
|
||||
Properties props = new Properties();
|
||||
props.setProperty("first-name", tenant.getAdminFirstName());
|
||||
props.setProperty("otp-token", oneTimePinDTO.getOtpToken());
|
||||
sendMail(props, tenant.getEmail());
|
||||
sendMail(props, tenant.getEmail(), DeviceManagementConstants.EmailAttributes.USER_VERIFY_TEMPLATE);
|
||||
ConnectionManagerUtil.commitDBTransaction();
|
||||
} catch (TransactionManagementException e) {
|
||||
String msg = "Error occurred while disabling AutoCommit.";
|
||||
@ -135,7 +142,7 @@ public class OTPManagementServiceImpl implements OTPManagementService {
|
||||
Properties props = new Properties();
|
||||
props.setProperty("first-name", tenant.getAdminFirstName());
|
||||
props.setProperty("otp-token", renewedOTP);
|
||||
sendMail(props, oneTimePinDTO.getEmail());
|
||||
sendMail(props, oneTimePinDTO.getEmail(), DeviceManagementConstants.EmailAttributes.USER_VERIFY_TEMPLATE);
|
||||
return null;
|
||||
}
|
||||
return oneTimePinDTO;
|
||||
@ -171,6 +178,47 @@ public class OTPManagementServiceImpl implements OTPManagementService {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendDeviceEnrollmentInvitationMail(DeviceEnrollmentInvitation deviceEnrollmentInvitation)
|
||||
throws OTPManagementException {
|
||||
DeviceManagementProviderService dms = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider();
|
||||
StringBuilder enrollmentSteps = new StringBuilder();
|
||||
DeviceEnrollmentInvitationDetails deviceEnrollmentInvitationDetails;
|
||||
for (DeviceEnrollmentType deviceEnrollmentType : deviceEnrollmentInvitation.getDeviceEnrollmentTypes()) {
|
||||
deviceEnrollmentInvitationDetails = dms.getDeviceEnrollmentInvitationDetails(
|
||||
deviceEnrollmentType.getDeviceType());
|
||||
if (deviceEnrollmentInvitationDetails != null &&
|
||||
deviceEnrollmentInvitationDetails.getEnrollmentDetails() != null) {
|
||||
for (String enrollmentType : deviceEnrollmentType.getEnrollmentType()) {
|
||||
deviceEnrollmentInvitationDetails.getEnrollmentDetails().stream()
|
||||
.filter(details -> enrollmentType.equals(details.getEnrollmentType())).findFirst()
|
||||
.ifPresent(details -> enrollmentSteps.append(details.getEnrollmentSteps()));
|
||||
}
|
||||
}
|
||||
}
|
||||
int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
|
||||
OneTimePinDTO oneTimePinDTO;
|
||||
Properties props = new Properties();
|
||||
props.setProperty("enrollment-steps", enrollmentSteps.toString());
|
||||
try {
|
||||
for (String username : deviceEnrollmentInvitation.getUsernames()) {
|
||||
String emailAddress = DeviceManagerUtil.getUserClaimValue(
|
||||
username, DeviceManagementConstants.User.CLAIM_EMAIL_ADDRESS);
|
||||
oneTimePinDTO = createOneTimePin(emailAddress, "test-type", username, null, tenantId);
|
||||
props.setProperty("first-name", DeviceManagerUtil.
|
||||
getUserClaimValue(username, DeviceManagementConstants.User.CLAIM_FIRST_NAME));
|
||||
props.setProperty("username", username);
|
||||
props.setProperty("otp-token", oneTimePinDTO.getOtpToken());
|
||||
sendMail(props, emailAddress, DeviceManagementConstants.EmailAttributes.USER_ENROLLMENT_TEMPLATE);
|
||||
}
|
||||
} catch (UserStoreException e) {
|
||||
String msg = "Error occurred while getting claim values to invite user";
|
||||
log.error(msg, e);
|
||||
throw new OTPManagementException(msg, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create One Time Token
|
||||
* @param email email
|
||||
@ -341,15 +389,16 @@ public class OTPManagementServiceImpl implements OTPManagementService {
|
||||
* If OTP expired, resend the user verifying mail with renewed OTP
|
||||
* @param props Mail body properties
|
||||
* @param mailAddress Mail Address of the User
|
||||
* @param template Mail template to be used
|
||||
* @throws OTPManagementException if error occurred while resend the user verifying mail
|
||||
*/
|
||||
private void sendMail(Properties props, String mailAddress) throws OTPManagementException {
|
||||
private void sendMail(Properties props, String mailAddress, String template) throws OTPManagementException {
|
||||
try {
|
||||
EmailMetaInfo metaInfo = new EmailMetaInfo(mailAddress, props);
|
||||
DeviceManagementDataHolder.getInstance().getDeviceManagementProvider()
|
||||
.sendEnrolmentInvitation(DeviceManagementConstants.EmailAttributes.USER_VERIFY_TEMPLATE, metaInfo);
|
||||
.sendEnrolmentInvitation(template, metaInfo);
|
||||
} catch (DeviceManagementException e) {
|
||||
String msg = "Error occurred while inviting user to enrol their device";
|
||||
String msg = "Error occurred while sending email using email template '" + template + "'.";
|
||||
log.error(msg, e);
|
||||
throw new OTPManagementException(msg, e);
|
||||
} catch (ConfigurationManagementException e) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user