mirror of
https://repository.entgra.net/community/device-mgt-core.git
synced 2025-10-06 02:01:45 +00:00
Making email-sender a separate component and code cleanup
This commit is contained in:
parent
3772d54ea1
commit
3726a57d96
@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2014, 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.common;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class EmailMessageProperties {
|
|
||||||
|
|
||||||
private String messageBody;
|
|
||||||
private String[] mailTo;
|
|
||||||
private String[] ccList;
|
|
||||||
private String[] bccList;
|
|
||||||
private String subject;
|
|
||||||
private String firstName;
|
|
||||||
private String enrolmentUrl;
|
|
||||||
private String title;
|
|
||||||
private String password;
|
|
||||||
private String userName;
|
|
||||||
private String domainName;
|
|
||||||
|
|
||||||
public String getUserName() {
|
|
||||||
return userName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserName(String userName) {
|
|
||||||
this.userName = userName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDomainName() {
|
|
||||||
return domainName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDomainName(String domainName) {
|
|
||||||
this.domainName = domainName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMessageBody() {
|
|
||||||
return messageBody;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMessageBody(String messageBody) {
|
|
||||||
this.messageBody = messageBody;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getMailTo() {
|
|
||||||
return mailTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMailTo(String[] mailTo) {
|
|
||||||
this.mailTo = mailTo;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getCcList() {
|
|
||||||
return ccList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCcList(String[] ccList) {
|
|
||||||
this.ccList = ccList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getBccList() {
|
|
||||||
return bccList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setBccList(String[] bccList) {
|
|
||||||
this.bccList = bccList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSubject() {
|
|
||||||
return subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSubject(String subject) {
|
|
||||||
this.subject = subject;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getFirstName() {
|
|
||||||
return firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstName(String firstName) {
|
|
||||||
this.firstName = firstName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEnrolmentUrl() {
|
|
||||||
return enrolmentUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnrolmentUrl(String enrolmentUrl) {
|
|
||||||
this.enrolmentUrl = enrolmentUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTitle() {
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTitle(String title) {
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPassword() {
|
|
||||||
return password;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPassword(String password) {
|
|
||||||
this.password = password;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "EmailMessageProperties{" +
|
|
||||||
"messageBody='" + messageBody + '\'' +
|
|
||||||
", mailTo=" + Arrays.toString(mailTo) +
|
|
||||||
", ccList=" + Arrays.toString(ccList) +
|
|
||||||
", bccList=" + Arrays.toString(bccList) +
|
|
||||||
", subject='" + subject + '\'' +
|
|
||||||
", firstName='" + firstName + '\'' +
|
|
||||||
", enrolmentUrl='" + enrolmentUrl + '\'' +
|
|
||||||
", title='" + title + '\'' +
|
|
||||||
'}';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -81,17 +81,10 @@
|
|||||||
org.wso2.carbon.ndatasource.core,
|
org.wso2.carbon.ndatasource.core,
|
||||||
org.wso2.carbon.apimgt.impl,
|
org.wso2.carbon.apimgt.impl,
|
||||||
org.wso2.carbon.ndatasource.core,
|
org.wso2.carbon.ndatasource.core,
|
||||||
org.apache.axis2.transport.mail,
|
|
||||||
org.apache.catalina,
|
org.apache.catalina,
|
||||||
org.apache.catalina.core,
|
org.apache.catalina.core,
|
||||||
org.apache.commons.collections,
|
org.apache.commons.collections,
|
||||||
org.apache.velocity,
|
org.wso2.carbon.email.sender.*
|
||||||
org.apache.velocity.app,
|
|
||||||
org.apache.velocity.context,
|
|
||||||
org.apache.velocity.exception,
|
|
||||||
org.apache.velocity.runtime.resource,
|
|
||||||
org.apache.velocity.runtime.resource.loader,
|
|
||||||
org.apache.commons.io
|
|
||||||
</Import-Package>
|
</Import-Package>
|
||||||
<Export-Package>
|
<Export-Package>
|
||||||
!org.wso2.carbon.device.mgt.core.internal,
|
!org.wso2.carbon.device.mgt.core.internal,
|
||||||
@ -225,12 +218,12 @@
|
|||||||
<artifactId>tomcat-servlet-api</artifactId>
|
<artifactId>tomcat-servlet-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.velocity</groupId>
|
<groupId>commons-collections.wso2</groupId>
|
||||||
<artifactId>velocity</artifactId>
|
<artifactId>commons-collections</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io.wso2</groupId>
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>org.wso2.carbon.email.sender.core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@ -58,4 +58,21 @@ public final class DeviceManagementConstants {
|
|||||||
public static final String MONITOR_OPERATION_CODE = "MONITOR";
|
public static final String MONITOR_OPERATION_CODE = "MONITOR";
|
||||||
public static final String POLICY_OPERATION_CODE = PolicyOperation.POLICY_OPERATION_CODE;
|
public static final String POLICY_OPERATION_CODE = PolicyOperation.POLICY_OPERATION_CODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final class EmailAttributes {
|
||||||
|
private EmailAttributes() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String ENCODED_SCHEME = "UTF-8";
|
||||||
|
public static final String FIRST_NAME = "first-name";
|
||||||
|
public static final String USERNAME = "username";
|
||||||
|
public static final String PASSWORD = "password";
|
||||||
|
public static final String DOMAIN = "domain-name";
|
||||||
|
|
||||||
|
public static final String SERVER_BASE_URL_HTTPS = "base-url-https";
|
||||||
|
public static final String SERVER_BASE_URL_HTTP = "base-url-http";
|
||||||
|
public static final String DOWNLOAD_URL = "download-url";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,6 @@
|
|||||||
package org.wso2.carbon.device.mgt.core.config;
|
package org.wso2.carbon.device.mgt.core.config;
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
|
||||||
import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
|
import org.wso2.carbon.device.mgt.core.config.identity.IdentityConfigurations;
|
||||||
import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
|
import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
|
||||||
|
|
||||||
@ -32,7 +31,6 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||||||
public class DeviceManagementConfigRepository {
|
public class DeviceManagementConfigRepository {
|
||||||
|
|
||||||
private DataSourceConfig dataSourceConfig;
|
private DataSourceConfig dataSourceConfig;
|
||||||
private EmailConfigurations emailConfigurations;
|
|
||||||
private IdentityConfigurations identityConfigurations;
|
private IdentityConfigurations identityConfigurations;
|
||||||
private PolicyConfiguration policyConfiguration;
|
private PolicyConfiguration policyConfiguration;
|
||||||
|
|
||||||
@ -45,15 +43,6 @@ public class DeviceManagementConfigRepository {
|
|||||||
this.dataSourceConfig = dataSourceConfig;
|
this.dataSourceConfig = dataSourceConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@XmlElement(name = "EmailClientConfiguration", required = true)
|
|
||||||
public EmailConfigurations getEmailConfigurations() {
|
|
||||||
return emailConfigurations;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEmailConfigurations(EmailConfigurations emailConfigurations) {
|
|
||||||
this.emailConfigurations = emailConfigurations;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlElement(name = "IdentityConfiguration", required = true)
|
@XmlElement(name = "IdentityConfiguration", required = true)
|
||||||
public IdentityConfigurations getIdentityConfigurations() {
|
public IdentityConfigurations getIdentityConfigurations() {
|
||||||
return identityConfigurations;
|
return identityConfigurations;
|
||||||
|
|||||||
@ -1,85 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, 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.core.config.email;
|
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
|
||||||
|
|
||||||
@XmlRootElement(name = "EmailClientConfiguration")
|
|
||||||
public class EmailConfigurations {
|
|
||||||
|
|
||||||
private int minNumOfThread;
|
|
||||||
private int maxNumOfThread;
|
|
||||||
private int keepAliveTime;
|
|
||||||
private int threadQueueCapacity;
|
|
||||||
private String lBHostPortPrefix;
|
|
||||||
private String enrollmentContextPath;
|
|
||||||
|
|
||||||
@XmlElement(name = "minimumThread", required = true)
|
|
||||||
public int getMinNumOfThread() {
|
|
||||||
return minNumOfThread;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinNumOfThread(int minNumOfThread) {
|
|
||||||
this.minNumOfThread = minNumOfThread;
|
|
||||||
}
|
|
||||||
@XmlElement(name = "maximumThread", required = true)
|
|
||||||
public int getMaxNumOfThread() {
|
|
||||||
return maxNumOfThread;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxNumOfThread(int maxNumOfThread) {
|
|
||||||
this.maxNumOfThread = maxNumOfThread;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlElement(name = "keepAliveTime", required = true)
|
|
||||||
public int getKeepAliveTime() {
|
|
||||||
return keepAliveTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setKeepAliveTime(int keepAliveTime) {
|
|
||||||
this.keepAliveTime = keepAliveTime;
|
|
||||||
}
|
|
||||||
@XmlElement(name = "ThreadQueueCapacity", required = true)
|
|
||||||
public int getThreadQueueCapacity() {
|
|
||||||
return threadQueueCapacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setThreadQueueCapacity(int threadQueueCapacity) {
|
|
||||||
this.threadQueueCapacity = threadQueueCapacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlElement(name = "LBHostPortPrefix", required = true)
|
|
||||||
public String getlBHostPortPrefix() {
|
|
||||||
return lBHostPortPrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setlBHostPortPrefix(String lBHostPortPrefix) {
|
|
||||||
this.lBHostPortPrefix = lBHostPortPrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
@XmlElement(name = "enrollmentContextPath", required = true)
|
|
||||||
public String getEnrollmentContextPath() {
|
|
||||||
return enrollmentContextPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnrollmentContextPath(String enrollmentContextPath) {
|
|
||||||
this.enrollmentContextPath = enrollmentContextPath;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, 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.core.email;
|
|
||||||
|
|
||||||
public final class EmailConstants {
|
|
||||||
|
|
||||||
public static final String ENCODED_SCHEME = "UTF-8";
|
|
||||||
public static final String FIRST_NAME = "first-name";
|
|
||||||
public static final String USERNAME = "username";
|
|
||||||
public static final String PASSWORD = "password";
|
|
||||||
public static final String DOMAIN = "domain-name";
|
|
||||||
|
|
||||||
public static final String SERVER_BASE_URL_HTTPS = "base-url-https";
|
|
||||||
public static final String SERVER_BASE_URL_HTTP = "base-url-http";
|
|
||||||
public static final String DOWNLOAD_URL = "download-url";
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,65 +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.core.email;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
|
||||||
import org.wso2.carbon.utils.CarbonUtils;
|
|
||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
|
||||||
import org.wso2.carbon.utils.NetworkUtils;
|
|
||||||
|
|
||||||
public class EmailUtil {
|
|
||||||
|
|
||||||
public static String getServerBaseHttpsUrl() {
|
|
||||||
String hostName = "localhost";
|
|
||||||
try {
|
|
||||||
hostName = NetworkUtils.getMgtHostName();
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
String mgtConsoleTransport = CarbonUtils.getManagementTransport();
|
|
||||||
ConfigurationContextService configContextService =
|
|
||||||
DeviceManagementDataHolder.getInstance().getConfigurationContextService();
|
|
||||||
int port = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport);
|
|
||||||
int httpsProxyPort =
|
|
||||||
CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
|
|
||||||
mgtConsoleTransport);
|
|
||||||
if (httpsProxyPort > 0) {
|
|
||||||
port = httpsProxyPort;
|
|
||||||
}
|
|
||||||
return "https://" + hostName + ":" + port;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getServerBaseHttpUrl() {
|
|
||||||
String hostName = "localhost";
|
|
||||||
try {
|
|
||||||
hostName = NetworkUtils.getMgtHostName();
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
ConfigurationContextService configContextService =
|
|
||||||
DeviceManagementDataHolder.getInstance().getConfigurationContextService();
|
|
||||||
int port = CarbonUtils.getTransportPort(configContextService, "http");
|
|
||||||
int httpProxyPort =
|
|
||||||
CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
|
|
||||||
"http");
|
|
||||||
if (httpProxyPort > 0) {
|
|
||||||
port = httpProxyPort;
|
|
||||||
}
|
|
||||||
return "http://" + hostName + ":" + port;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,104 +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.core.email.sender;
|
|
||||||
|
|
||||||
import org.apache.axiom.om.OMAbstractFactory;
|
|
||||||
import org.apache.axiom.om.OMElement;
|
|
||||||
import org.apache.axis2.AxisFault;
|
|
||||||
import org.apache.axis2.Constants;
|
|
||||||
import org.apache.axis2.addressing.EndpointReference;
|
|
||||||
import org.apache.axis2.client.Options;
|
|
||||||
import org.apache.axis2.client.ServiceClient;
|
|
||||||
import org.apache.axis2.context.MessageContext;
|
|
||||||
import org.apache.axis2.transport.base.BaseConstants;
|
|
||||||
import org.apache.axis2.transport.mail.MailConstants;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations;
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailData;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
public class EmailSender {
|
|
||||||
|
|
||||||
private static ThreadPoolExecutor threadPoolExecutor;
|
|
||||||
|
|
||||||
static {
|
|
||||||
EmailConfigurations emailConfig =
|
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
|
|
||||||
getDeviceManagementConfigRepository().getEmailConfigurations();
|
|
||||||
|
|
||||||
threadPoolExecutor = new ThreadPoolExecutor(emailConfig.getMinNumOfThread(),
|
|
||||||
emailConfig.getMaxNumOfThread(), emailConfig.getKeepAliveTime(), TimeUnit.SECONDS,
|
|
||||||
new LinkedBlockingQueue<Runnable>(emailConfig.getThreadQueueCapacity()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String EMAIL_URI_SCHEME = "mailto:";
|
|
||||||
private static Log log = LogFactory.getLog(EmailSender.class);
|
|
||||||
|
|
||||||
public void sendEmail(EmailData emailData, String... recipients) throws DeviceManagementException {
|
|
||||||
for (String recipient : recipients) {
|
|
||||||
threadPoolExecutor
|
|
||||||
.submit(new EmailSenderTask(recipient, emailData));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class EmailSenderTask implements Runnable {
|
|
||||||
|
|
||||||
private String to;
|
|
||||||
private EmailData data;
|
|
||||||
|
|
||||||
EmailSenderTask(String to, EmailData data) {
|
|
||||||
this.to = to;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run() {
|
|
||||||
Map<String, String> headerMap = new HashMap<>();
|
|
||||||
headerMap.put(MailConstants.MAIL_HEADER_SUBJECT, data.getSubject());
|
|
||||||
OMElement payload = OMAbstractFactory.getOMFactory().createOMElement(
|
|
||||||
BaseConstants.DEFAULT_TEXT_WRAPPER, null);
|
|
||||||
payload.setText(data.getBody());
|
|
||||||
try {
|
|
||||||
ServiceClient serviceClient = new ServiceClient();
|
|
||||||
Options options = new Options();
|
|
||||||
options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
|
|
||||||
options.setProperty(MessageContext.TRANSPORT_HEADERS, headerMap);
|
|
||||||
options.setProperty(MailConstants.TRANSPORT_MAIL_FORMAT,
|
|
||||||
MailConstants.TRANSPORT_FORMAT_TEXT);
|
|
||||||
options.setTo(new EndpointReference(EMAIL_URI_SCHEME + to));
|
|
||||||
serviceClient.setOptions(options);
|
|
||||||
serviceClient.fireAndForget(payload);
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Email has been successfully sent to '" + to + "'");
|
|
||||||
}
|
|
||||||
} catch (AxisFault e) {
|
|
||||||
log.error("Error occurred while delivering the message, subject: '" + data.getSubject() +
|
|
||||||
"', to: '" + to + "'", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -61,49 +61,4 @@ public class DeviceManagementAxis2ConfigContextObserver implements Axis2Configur
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupEmailTemplates() throws DeviceManagementException {
|
|
||||||
File templateDir =
|
|
||||||
new File(CarbonUtils.getCarbonRepository() + "resources" + File.separator + "email-templates");
|
|
||||||
if (!templateDir.exists()) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("The directory that is expected to use as the container for all email templates is not " +
|
|
||||||
"available. Therefore, no template is uploaded to the registry");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (templateDir.canRead()) {
|
|
||||||
File[] templates = templateDir.listFiles(new FilenameFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean accept(File dir, String name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
return name.endsWith(".vm");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
Registry registry =
|
|
||||||
CarbonContext.getThreadLocalCarbonContext().getRegistry(RegistryType.SYSTEM_CONFIGURATION);
|
|
||||||
if (!registry.resourceExists(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH)) {
|
|
||||||
Collection collection = registry.newCollection();
|
|
||||||
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH, collection);
|
|
||||||
for (File template : templates) {
|
|
||||||
Resource resource = registry.newResource();
|
|
||||||
resource.setContent(template);
|
|
||||||
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (File template : templates) {
|
|
||||||
if (!registry.resourceExists(
|
|
||||||
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName())) {
|
|
||||||
Resource resource = registry.newResource();
|
|
||||||
resource.setContent(template);
|
|
||||||
registry.put(
|
|
||||||
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (RegistryException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while setting up email templates", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
|||||||
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
|
import org.wso2.carbon.device.mgt.core.app.mgt.config.AppManagementConfig;
|
||||||
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
|
import org.wso2.carbon.device.mgt.core.config.license.LicenseConfig;
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
|
import org.wso2.carbon.email.sender.core.service.EmailSenderService;
|
||||||
import org.wso2.carbon.registry.core.service.RegistryService;
|
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||||
import org.wso2.carbon.user.core.service.RealmService;
|
import org.wso2.carbon.user.core.service.RealmService;
|
||||||
import org.wso2.carbon.user.core.tenant.TenantManager;
|
import org.wso2.carbon.user.core.tenant.TenantManager;
|
||||||
@ -46,6 +47,7 @@ public class DeviceManagementDataHolder {
|
|||||||
private ConfigurationContextService configurationContextService;
|
private ConfigurationContextService configurationContextService;
|
||||||
private HashMap<String,Boolean> requireDeviceAuthorization = new HashMap<>();
|
private HashMap<String,Boolean> requireDeviceAuthorization = new HashMap<>();
|
||||||
private DeviceAccessAuthorizationService deviceAccessAuthorizationService;
|
private DeviceAccessAuthorizationService deviceAccessAuthorizationService;
|
||||||
|
private EmailSenderService emailSenderService;
|
||||||
|
|
||||||
private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder();
|
private static DeviceManagementDataHolder thisInstance = new DeviceManagementDataHolder();
|
||||||
|
|
||||||
@ -164,4 +166,13 @@ public class DeviceManagementDataHolder {
|
|||||||
DeviceAccessAuthorizationService deviceAccessAuthorizationService) {
|
DeviceAccessAuthorizationService deviceAccessAuthorizationService) {
|
||||||
this.deviceAccessAuthorizationService = deviceAccessAuthorizationService;
|
this.deviceAccessAuthorizationService = deviceAccessAuthorizationService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EmailSenderService getEmailSenderService() {
|
||||||
|
return emailSenderService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmailSenderService(EmailSenderService emailSenderService) {
|
||||||
|
this.emailSenderService = emailSenderService;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,13 +17,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.internal;
|
package org.wso2.carbon.device.mgt.core.internal;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
import org.osgi.service.component.ComponentContext;
|
import org.osgi.service.component.ComponentContext;
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.Element;
|
|
||||||
import org.wso2.carbon.apimgt.impl.APIManagerConfigurationService;
|
import org.wso2.carbon.apimgt.impl.APIManagerConfigurationService;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManagementException;
|
||||||
@ -54,21 +51,12 @@ import org.wso2.carbon.device.mgt.core.permission.mgt.PermissionManagerServiceIm
|
|||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
|
||||||
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
|
import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
|
||||||
import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer;
|
import org.wso2.carbon.device.mgt.core.util.DeviceManagementSchemaInitializer;
|
||||||
|
import org.wso2.carbon.email.sender.core.service.EmailSenderService;
|
||||||
import org.wso2.carbon.ndatasource.core.DataSourceService;
|
import org.wso2.carbon.ndatasource.core.DataSourceService;
|
||||||
import org.wso2.carbon.registry.api.Collection;
|
|
||||||
import org.wso2.carbon.registry.api.Registry;
|
|
||||||
import org.wso2.carbon.registry.api.RegistryException;
|
|
||||||
import org.wso2.carbon.registry.api.Resource;
|
|
||||||
import org.wso2.carbon.registry.core.service.RegistryService;
|
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||||
import org.wso2.carbon.user.core.service.RealmService;
|
import org.wso2.carbon.user.core.service.RealmService;
|
||||||
import org.wso2.carbon.utils.CarbonUtils;
|
|
||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import java.io.*;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -110,6 +98,12 @@ import java.util.List;
|
|||||||
* policy="dynamic"
|
* policy="dynamic"
|
||||||
* bind="setConfigurationContextService"
|
* bind="setConfigurationContextService"
|
||||||
* unbind="unsetConfigurationContextService"
|
* unbind="unsetConfigurationContextService"
|
||||||
|
* @scr.reference name="email.sender.service"
|
||||||
|
* interface="org.wso2.carbon.email.sender.core.service.EmailSenderService"
|
||||||
|
* cardinality="0..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setEmailSenderService"
|
||||||
|
* unbind="unsetEmailSenderService"
|
||||||
*/
|
*/
|
||||||
public class DeviceManagementServiceComponent {
|
public class DeviceManagementServiceComponent {
|
||||||
|
|
||||||
@ -152,9 +146,6 @@ public class DeviceManagementServiceComponent {
|
|||||||
this.setupDeviceManagementSchema(dsConfig);
|
this.setupDeviceManagementSchema(dsConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setting up email templates */
|
|
||||||
this.setupEmailTemplates();
|
|
||||||
|
|
||||||
/* Registering declarative service instances exposed by DeviceManagementServiceComponent */
|
/* Registering declarative service instances exposed by DeviceManagementServiceComponent */
|
||||||
this.registerServices(componentContext);
|
this.registerServices(componentContext);
|
||||||
|
|
||||||
@ -231,78 +222,6 @@ public class DeviceManagementServiceComponent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupEmailTemplates() throws DeviceManagementException {
|
|
||||||
File templateDir =
|
|
||||||
new File(CarbonUtils.getCarbonHome() + File.separator + "repository" + File.separator +
|
|
||||||
"resources" + File.separator + "email-templates");
|
|
||||||
if (!templateDir.exists()) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("The directory that is expected to use as the container for all email templates is not " +
|
|
||||||
"available. Therefore, no template is uploaded to the registry");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (templateDir.canRead()) {
|
|
||||||
File[] templates = templateDir.listFiles(new FilenameFilter() {
|
|
||||||
@Override
|
|
||||||
public boolean accept(File dir, String name) {
|
|
||||||
name = name.toLowerCase();
|
|
||||||
return name.endsWith(".vm");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
Registry registry =
|
|
||||||
DeviceManagementDataHolder.getInstance().getRegistryService().getConfigSystemRegistry();
|
|
||||||
if (!registry.resourceExists(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH)) {
|
|
||||||
Collection collection = registry.newCollection();
|
|
||||||
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH, collection);
|
|
||||||
for (File template : templates) {
|
|
||||||
Resource resource = registry.newResource();
|
|
||||||
String contents = FileUtils.readFileToString(template);
|
|
||||||
resource.setContent(contents.getBytes());
|
|
||||||
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* Existence of a given resource is not checked consciously, before performing registry.put() below.
|
|
||||||
* The rationale is that, the only less expensive way that one can check if a resource exists is
|
|
||||||
* that through registry.resourceExists(), which only checks if 'some' resource exists at the given
|
|
||||||
* registry path. However, this does not capture scenarios where there can be updated contents to
|
|
||||||
* the same resource of which the path hasn't changed after it has been initialized for the first
|
|
||||||
* time. Therefore, whenever the server starts-up, all email templates are updated just to avoid
|
|
||||||
* the aforementioned problem */
|
|
||||||
for (File template : templates) {
|
|
||||||
Resource resource = registry.newResource();
|
|
||||||
String contents = FileUtils.readFileToString(template);
|
|
||||||
resource.setContent(contents.getBytes());
|
|
||||||
registry.put(
|
|
||||||
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (RegistryException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while setting up email templates", e);
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while writing template file contents as an " +
|
|
||||||
"input stream of a resource", e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while serializing file contents to a string", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Element parseFile(File file) throws DeviceManagementException {
|
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
|
||||||
DocumentBuilder builder;
|
|
||||||
try {
|
|
||||||
builder = factory.newDocumentBuilder();
|
|
||||||
Document doc = builder.parse(file);
|
|
||||||
return doc.getDocumentElement();
|
|
||||||
} catch (ParserConfigurationException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while creating a document builder to parse file '" +
|
|
||||||
file.getName() + "'", e);
|
|
||||||
} catch (SAXException | IOException e) {
|
|
||||||
throw new DeviceManagementException("Error occurred while parsing file '" + file.getName() + "'", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setupDeviceManagementSchema(DataSourceConfig config) throws DeviceManagementException {
|
private void setupDeviceManagementSchema(DataSourceConfig config) throws DeviceManagementException {
|
||||||
DeviceManagementSchemaInitializer initializer = new DeviceManagementSchemaInitializer(config);
|
DeviceManagementSchemaInitializer initializer = new DeviceManagementSchemaInitializer(config);
|
||||||
log.info("Initializing device management repository database schema");
|
log.info("Initializing device management repository database schema");
|
||||||
@ -432,6 +351,20 @@ public class DeviceManagementServiceComponent {
|
|||||||
DeviceManagementDataHolder.getInstance().setConfigurationContextService(null);
|
DeviceManagementDataHolder.getInstance().setConfigurationContextService(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setEmailSenderService(EmailSenderService emailSenderService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Setting Email Sender Service");
|
||||||
|
}
|
||||||
|
DeviceManagementDataHolder.getInstance().setEmailSenderService(emailSenderService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unsetEmailSenderService(EmailSenderService emailSenderService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Un-setting Email Sender Service");
|
||||||
|
}
|
||||||
|
DeviceManagementDataHolder.getInstance().setEmailSenderService(null);
|
||||||
|
}
|
||||||
|
|
||||||
public static void registerStartupListener(DeviceManagerStartupListener startupListener) {
|
public static void registerStartupListener(DeviceManagerStartupListener startupListener) {
|
||||||
startupListeners.add(startupListener);
|
startupListeners.add(startupListener);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,86 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, 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.core.internal;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.osgi.framework.BundleContext;
|
|
||||||
import org.osgi.service.component.ComponentContext;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceManagementConfig;
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.sender.EmailServiceProviderImpl;
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.EmailService;
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.EmailServiceImpl;
|
|
||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @scr.component component.name="org.wso2.carbon.device.emailmanager" immediate="true"
|
|
||||||
* @scr.reference name="configurationcontext.service"
|
|
||||||
* interface="org.wso2.carbon.utils.ConfigurationContextService" cardinality="1..1"
|
|
||||||
* policy="dynamic" bind="setConfigurationContextService" unbind="unsetConfigurationContextService"
|
|
||||||
*/
|
|
||||||
public class EmailServiceComponent {
|
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(EmailServiceComponent.class);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* initialize the email service here service here.
|
|
||||||
*
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
protected void activate(ComponentContext context) {
|
|
||||||
try {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Initializing email service bundle");
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceConfigurationManager.getInstance().initConfig();
|
|
||||||
DeviceManagementConfig config =
|
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig();
|
|
||||||
/* Initializing Email Service Configurations */
|
|
||||||
|
|
||||||
EmailService emailServiceProvider = new EmailServiceProviderImpl();
|
|
||||||
EmailServiceDataHolder.getInstance().setEmailServiceProvider(emailServiceProvider); ;
|
|
||||||
|
|
||||||
this.registerServices(context);
|
|
||||||
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Email management core bundle has been successfully initialized");
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
log.error("Error occurred while initializing device management core bundle", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
protected void setConfigurationContextService(ConfigurationContextService configurationContextService) {
|
|
||||||
EmailServiceDataHolder.getInstance().setConfigurationContextService(configurationContextService);
|
|
||||||
}
|
|
||||||
protected void unsetConfigurationContextService(ConfigurationContextService configurationContextService) {
|
|
||||||
EmailServiceDataHolder.getInstance().setConfigurationContextService(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerServices(ComponentContext componentContext) {
|
|
||||||
if (log.isDebugEnabled()) {
|
|
||||||
log.debug("Registering OSGi service Email Service Impl");
|
|
||||||
}
|
|
||||||
/* Registering Email Service */
|
|
||||||
BundleContext bundleContext = componentContext.getBundleContext();
|
|
||||||
bundleContext.registerService(EmailService.class.getName(), new EmailServiceImpl(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, 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.core.internal;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.EmailService;
|
|
||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
|
||||||
|
|
||||||
public class EmailServiceDataHolder {
|
|
||||||
|
|
||||||
private static EmailServiceDataHolder thisInstance = new EmailServiceDataHolder();
|
|
||||||
private ConfigurationContextService configurationContextService;
|
|
||||||
private EmailService emailServiceProvider;
|
|
||||||
|
|
||||||
public static EmailServiceDataHolder getThisInstance() {
|
|
||||||
return thisInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setThisInstance(EmailServiceDataHolder thisInstance) {
|
|
||||||
EmailServiceDataHolder.thisInstance = thisInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private EmailServiceDataHolder() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EmailServiceDataHolder getInstance() {
|
|
||||||
return thisInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ConfigurationContextService getConfigurationContextService() {
|
|
||||||
if (configurationContextService == null) {
|
|
||||||
throw new IllegalStateException("ConfigurationContext service is not initialized properly");
|
|
||||||
}
|
|
||||||
return configurationContextService;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConfigurationContextService(ConfigurationContextService configurationContextService) {
|
|
||||||
this.configurationContextService = configurationContextService;
|
|
||||||
}
|
|
||||||
public EmailService getEmailServiceProvider() {
|
|
||||||
return emailServiceProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEmailServiceProvider(EmailService emailServiceProvider) {
|
|
||||||
this.emailServiceProvider = emailServiceProvider;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -18,15 +18,11 @@
|
|||||||
package org.wso2.carbon.device.mgt.core.service;
|
package org.wso2.carbon.device.mgt.core.service;
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.common.*;
|
import org.wso2.carbon.device.mgt.common.*;
|
||||||
import org.wso2.carbon.device.mgt.common.DeviceManager;
|
|
||||||
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
|
|
||||||
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
|
import org.wso2.carbon.device.mgt.common.configuration.mgt.TenantConfiguration;
|
||||||
import org.wso2.carbon.device.mgt.common.license.mgt.License;
|
import org.wso2.carbon.device.mgt.common.license.mgt.License;
|
||||||
import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManager;
|
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
|
||||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailContext;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -60,9 +56,9 @@ public interface DeviceManagementProviderService extends OperationManager {
|
|||||||
*/
|
*/
|
||||||
PaginationResult getAllDevices(PaginationRequest request) throws DeviceManagementException;
|
PaginationResult getAllDevices(PaginationRequest request) throws DeviceManagementException;
|
||||||
|
|
||||||
void sendEnrolmentInvitation(EmailContext emailContext) throws DeviceManagementException;
|
void sendEnrolmentInvitation(EmailMetaInfo metaInfo) throws DeviceManagementException;
|
||||||
|
|
||||||
void sendRegistrationEmail(EmailContext emailContext) throws DeviceManagementException;
|
void sendRegistrationEmail(EmailMetaInfo metaInfo) throws DeviceManagementException;
|
||||||
|
|
||||||
FeatureManager getFeatureManager(String deviceType) throws DeviceManagementException;
|
FeatureManager getFeatureManager(String deviceType) throws DeviceManagementException;
|
||||||
|
|
||||||
@ -118,6 +114,7 @@ public interface DeviceManagementProviderService extends OperationManager {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Method to get the count of all types of devices.
|
* Method to get the count of all types of devices.
|
||||||
|
*
|
||||||
* @return device count
|
* @return device count
|
||||||
* @throws DeviceManagementException If some unusual behaviour is observed while counting
|
* @throws DeviceManagementException If some unusual behaviour is observed while counting
|
||||||
* the devices
|
* the devices
|
||||||
@ -200,6 +197,6 @@ public interface DeviceManagementProviderService extends OperationManager {
|
|||||||
boolean setStatus(DeviceIdentifier deviceId, String currentOwner,
|
boolean setStatus(DeviceIdentifier deviceId, String currentOwner,
|
||||||
EnrolmentInfo.Status status) throws DeviceManagementException;
|
EnrolmentInfo.Status status) throws DeviceManagementException;
|
||||||
|
|
||||||
void notifyOperationToDevices(Operation operation, List<DeviceIdentifier> deviceIds)throws DeviceManagementException;
|
void notifyOperationToDevices(Operation operation, List<DeviceIdentifier> deviceIds) throws DeviceManagementException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,15 +28,16 @@ import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
|
|||||||
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
|
||||||
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
|
||||||
import org.wso2.carbon.device.mgt.core.DeviceManagementPluginRepository;
|
import org.wso2.carbon.device.mgt.core.DeviceManagementPluginRepository;
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
|
||||||
import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations;
|
|
||||||
import org.wso2.carbon.device.mgt.core.dao.*;
|
import org.wso2.carbon.device.mgt.core.dao.*;
|
||||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
import org.wso2.carbon.device.mgt.core.email.*;
|
|
||||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||||
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
|
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
|
||||||
import org.wso2.carbon.device.mgt.core.internal.EmailServiceDataHolder;
|
|
||||||
import org.wso2.carbon.device.mgt.core.internal.PluginInitializationListener;
|
import org.wso2.carbon.device.mgt.core.internal.PluginInitializationListener;
|
||||||
|
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
|
||||||
|
import org.wso2.carbon.email.sender.core.ContentProviderInfo;
|
||||||
|
import org.wso2.carbon.email.sender.core.EmailContext;
|
||||||
|
import org.wso2.carbon.email.sender.core.EmailSendingFailedException;
|
||||||
|
import org.wso2.carbon.email.sender.core.TypedValue;
|
||||||
import org.wso2.carbon.user.api.UserStoreException;
|
import org.wso2.carbon.user.api.UserStoreException;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -49,13 +50,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
private DeviceTypeDAO deviceTypeDAO;
|
private DeviceTypeDAO deviceTypeDAO;
|
||||||
private EnrollmentDAO enrollmentDAO;
|
private EnrollmentDAO enrollmentDAO;
|
||||||
private DeviceManagementPluginRepository pluginRepository;
|
private DeviceManagementPluginRepository pluginRepository;
|
||||||
private EmailContentProvider contentProvider;
|
|
||||||
|
|
||||||
private static Log log = LogFactory.getLog(DeviceManagementProviderServiceImpl.class);
|
private static Log log = LogFactory.getLog(DeviceManagementProviderServiceImpl.class);
|
||||||
|
|
||||||
public DeviceManagementProviderServiceImpl() {
|
public DeviceManagementProviderServiceImpl() {
|
||||||
this.pluginRepository = new DeviceManagementPluginRepository();
|
this.pluginRepository = new DeviceManagementPluginRepository();
|
||||||
this.contentProvider = EmailContentProviderFactory.getContentProvider();
|
|
||||||
initDataAccessObjects();
|
initDataAccessObjects();
|
||||||
/* Registering a listener to retrieve events when some device management service plugin is installed after
|
/* Registering a listener to retrieve events when some device management service plugin is installed after
|
||||||
* the component is done getting initialized */
|
* the component is done getting initialized */
|
||||||
@ -443,8 +442,8 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
allDevices = deviceDAO.getDevices(request, tenantId);
|
allDevices = deviceDAO.getDevices(request, tenantId);
|
||||||
count = deviceDAO.getDeviceCount(request, tenantId);
|
count = deviceDAO.getDeviceCount(request, tenantId);
|
||||||
} catch (DeviceManagementDAOException e) {
|
} catch (DeviceManagementDAOException e) {
|
||||||
throw new DeviceManagementException("Error occurred while retrieving device list pertaining to " +
|
throw new DeviceManagementException(
|
||||||
"the current tenant", e);
|
"Error occurred while retrieving device list pertaining to the current tenant", e);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
|
throw new DeviceManagementException("Error occurred while opening a connection to the data source", e);
|
||||||
} finally {
|
} finally {
|
||||||
@ -512,58 +511,44 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendEnrolmentInvitation(EmailContext emailCtx) throws DeviceManagementException {
|
public void sendEnrolmentInvitation(EmailMetaInfo metaInfo) throws DeviceManagementException {
|
||||||
Map<String, TypedValue<Class<?>, Object>> params = new HashMap<>();
|
Map<String, TypedValue<Class<?>, Object>> params = new HashMap<>();
|
||||||
EmailConfigurations emailConfig =
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.FIRST_NAME,
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
|
new TypedValue<Class<?>, Object>(String.class, metaInfo.getProperty("first-name")));
|
||||||
getDeviceManagementConfigRepository().getEmailConfigurations();
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.SERVER_BASE_URL_HTTPS,
|
||||||
params.put(EmailConstants.FIRST_NAME,
|
new TypedValue<Class<?>, Object>(String.class, DeviceManagerUtil.getServerBaseHttpsUrl()));
|
||||||
new TypedValue<Class<?>, Object>(String.class, emailCtx.getProperty("first-name")));
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.SERVER_BASE_URL_HTTP,
|
||||||
params.put(EmailConstants.DOWNLOAD_URL,
|
new TypedValue<Class<?>, Object>(String.class, DeviceManagerUtil.getServerBaseHttpUrl()));
|
||||||
new TypedValue<Class<?>, Object>(String.class,
|
|
||||||
emailConfig.getlBHostPortPrefix() + emailConfig.getEnrollmentContextPath()));
|
|
||||||
params.put(EmailConstants.SERVER_BASE_URL_HTTPS,
|
|
||||||
new TypedValue<Class<?>, Object>(String.class, EmailUtil.getServerBaseHttpsUrl()));
|
|
||||||
params.put(EmailConstants.SERVER_BASE_URL_HTTP,
|
|
||||||
new TypedValue<Class<?>, Object>(String.class, EmailUtil.getServerBaseHttpUrl()));
|
|
||||||
try {
|
try {
|
||||||
EmailData data = contentProvider.getContent("user-enrollment", params);
|
EmailContext ctx =
|
||||||
EmailServiceDataHolder.getInstance().getEmailServiceProvider().sendEmail(emailCtx.getRecipients(), data);
|
new EmailContext.EmailContextBuilder(new ContentProviderInfo("user-enrollment", params),
|
||||||
} catch (ContentProcessingInterruptedException e) {
|
metaInfo.getRecipients()).build();
|
||||||
throw new DeviceManagementException("Error occurred while processing contents of the " +
|
DeviceManagementDataHolder.getInstance().getEmailSenderService().sendEmail(ctx);
|
||||||
"enrollment invitation", e);
|
|
||||||
} catch (EmailSendingFailedException e) {
|
} catch (EmailSendingFailedException e) {
|
||||||
throw new DeviceManagementException("Error occurred while sending enrollment invitation", e);
|
throw new DeviceManagementException("Error occurred while sending enrollment invitation", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendRegistrationEmail(EmailContext emailCtx) throws DeviceManagementException {
|
public void sendRegistrationEmail(EmailMetaInfo metaInfo) throws DeviceManagementException {
|
||||||
Map<String, TypedValue<Class<?>, Object>> params = new HashMap<>();
|
Map<String, TypedValue<Class<?>, Object>> params = new HashMap<>();
|
||||||
EmailConfigurations emailConfig =
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.FIRST_NAME,
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
|
new TypedValue<Class<?>, Object>(String.class, metaInfo.getProperty("first-name")));
|
||||||
getDeviceManagementConfigRepository().getEmailConfigurations();
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.USERNAME,
|
||||||
params.put(EmailConstants.FIRST_NAME,
|
new TypedValue<Class<?>, Object>(String.class, metaInfo.getProperty("username")));
|
||||||
new TypedValue<Class<?>, Object>(String.class, emailCtx.getProperty("first-name")));
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.PASSWORD,
|
||||||
params.put(EmailConstants.DOWNLOAD_URL,
|
new TypedValue<Class<?>, Object>(String.class, metaInfo.getProperty("password")));
|
||||||
new TypedValue<Class<?>, Object>(String.class,
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.DOMAIN,
|
||||||
emailConfig.getlBHostPortPrefix() + emailConfig.getEnrollmentContextPath()));
|
new TypedValue<Class<?>, Object>(String.class, metaInfo.getProperty("domain")));
|
||||||
params.put(EmailConstants.USERNAME,
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.SERVER_BASE_URL_HTTPS,
|
||||||
new TypedValue<Class<?>, Object>(String.class, emailCtx.getProperty("username")));
|
new TypedValue<Class<?>, Object>(String.class, DeviceManagerUtil.getServerBaseHttpsUrl()));
|
||||||
params.put(EmailConstants.PASSWORD,
|
params.put(org.wso2.carbon.device.mgt.core.DeviceManagementConstants.EmailAttributes.SERVER_BASE_URL_HTTP,
|
||||||
new TypedValue<Class<?>, Object>(String.class, emailCtx.getProperty("password")));
|
new TypedValue<Class<?>, Object>(String.class, DeviceManagerUtil.getServerBaseHttpUrl()));
|
||||||
params.put(EmailConstants.DOMAIN,
|
|
||||||
new TypedValue<Class<?>, Object>(String.class, emailCtx.getProperty("domain")));
|
|
||||||
params.put(EmailConstants.SERVER_BASE_URL_HTTPS,
|
|
||||||
new TypedValue<Class<?>, Object>(String.class, EmailUtil.getServerBaseHttpsUrl()));
|
|
||||||
params.put(EmailConstants.SERVER_BASE_URL_HTTP,
|
|
||||||
new TypedValue<Class<?>, Object>(String.class, EmailUtil.getServerBaseHttpUrl()));
|
|
||||||
try {
|
try {
|
||||||
EmailData data = contentProvider.getContent("user-registration", params);
|
EmailContext ctx =
|
||||||
EmailServiceDataHolder.getInstance().getEmailServiceProvider().sendEmail(emailCtx.getRecipients(), data);
|
new EmailContext.EmailContextBuilder(new ContentProviderInfo("user-registration", params),
|
||||||
} catch (ContentProcessingInterruptedException e) {
|
metaInfo.getRecipients()).build();
|
||||||
throw new DeviceManagementException("Error occurred while processing contents of the " +
|
DeviceManagementDataHolder.getInstance().getEmailSenderService().sendEmail(ctx);
|
||||||
"enrollment invitation", e);
|
|
||||||
} catch (EmailSendingFailedException e) {
|
} catch (EmailSendingFailedException e) {
|
||||||
throw new DeviceManagementException("Error occurred while sending user registration notification", e);
|
throw new DeviceManagementException("Error occurred while sending user registration notification", e);
|
||||||
}
|
}
|
||||||
@ -647,11 +632,11 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
|
|||||||
Map<String, DeviceManagementService> registeredTypes = pluginRepository.getAllDeviceManagementServices();
|
Map<String, DeviceManagementService> registeredTypes = pluginRepository.getAllDeviceManagementServices();
|
||||||
DeviceType deviceType;
|
DeviceType deviceType;
|
||||||
if (registeredTypes != null && deviceTypesInDatabase != null) {
|
if (registeredTypes != null && deviceTypesInDatabase != null) {
|
||||||
for (int x = 0; x < deviceTypesInDatabase.size(); x++) {
|
for (DeviceType aDeviceTypesInDatabase : deviceTypesInDatabase) {
|
||||||
if (registeredTypes.get(deviceTypesInDatabase.get(x).getName()) != null) {
|
if (registeredTypes.get(aDeviceTypesInDatabase.getName()) != null) {
|
||||||
deviceType = new DeviceType();
|
deviceType = new DeviceType();
|
||||||
deviceType.setId(deviceTypesInDatabase.get(x).getId());
|
deviceType.setId(aDeviceTypesInDatabase.getId());
|
||||||
deviceType.setName(deviceTypesInDatabase.get(x).getName());
|
deviceType.setName(aDeviceTypesInDatabase.getName());
|
||||||
deviceTypesResponse.add(deviceType);
|
deviceTypesResponse.add(deviceType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,16 +16,18 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.device.mgt.core.service;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.HashSet;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class EmailContext {
|
public class EmailMetaInfo {
|
||||||
|
|
||||||
private Set<String> recipients;
|
private Set<String> recipients;
|
||||||
private Properties properties;
|
private Properties properties;
|
||||||
|
|
||||||
public EmailContext(final Set<String> recipients, final Properties properties) {
|
public EmailMetaInfo(final Set<String> recipients, final Properties properties) {
|
||||||
if (recipients == null) {
|
if (recipients == null) {
|
||||||
throw new IllegalArgumentException("Recipient list cannot be null");
|
throw new IllegalArgumentException("Recipient list cannot be null");
|
||||||
}
|
}
|
||||||
@ -40,7 +42,7 @@ public class EmailContext {
|
|||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EmailContext(final String recipient, final Properties properties) {
|
public EmailMetaInfo(final String recipient, final Properties properties) {
|
||||||
if (recipient == null || recipient.isEmpty()) {
|
if (recipient == null || recipient.isEmpty()) {
|
||||||
throw new IllegalArgumentException("Recipient can't be null or empty. Please specify a valid " +
|
throw new IllegalArgumentException("Recipient can't be null or empty. Please specify a valid " +
|
||||||
"recipient email address");
|
"recipient email address");
|
||||||
@ -54,10 +56,6 @@ public class EmailContext {
|
|||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EmailContext(final Set<String> recipients) {
|
|
||||||
this(recipients, new Properties());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<String> getRecipients() {
|
public Set<String> getRecipients() {
|
||||||
return recipients;
|
return recipients;
|
||||||
}
|
}
|
||||||
@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2015, 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.core.service;
|
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailData;
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailSendingFailedException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.internal.EmailServiceDataHolder;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class EmailServiceImpl implements EmailService {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendEmail(Set<String> recipients, EmailData emailData) throws EmailSendingFailedException {
|
|
||||||
EmailServiceDataHolder.getInstance().getEmailServiceProvider().sendEmail(recipients, emailData);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -31,12 +31,15 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
|
|||||||
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
|
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
|
||||||
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
|
||||||
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
|
||||||
|
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
|
||||||
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
import org.wso2.carbon.utils.NetworkUtils;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -167,4 +170,41 @@ public final class DeviceManagerUtil {
|
|||||||
return ctx.getTenantId();
|
return ctx.getTenantId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getServerBaseHttpsUrl() {
|
||||||
|
String hostName = "localhost";
|
||||||
|
try {
|
||||||
|
hostName = NetworkUtils.getMgtHostName();
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
String mgtConsoleTransport = CarbonUtils.getManagementTransport();
|
||||||
|
ConfigurationContextService configContextService =
|
||||||
|
DeviceManagementDataHolder.getInstance().getConfigurationContextService();
|
||||||
|
int port = CarbonUtils.getTransportPort(configContextService, mgtConsoleTransport);
|
||||||
|
int httpsProxyPort =
|
||||||
|
CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
|
||||||
|
mgtConsoleTransport);
|
||||||
|
if (httpsProxyPort > 0) {
|
||||||
|
port = httpsProxyPort;
|
||||||
|
}
|
||||||
|
return "https://" + hostName + ":" + port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getServerBaseHttpUrl() {
|
||||||
|
String hostName = "localhost";
|
||||||
|
try {
|
||||||
|
hostName = NetworkUtils.getMgtHostName();
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
ConfigurationContextService configContextService =
|
||||||
|
DeviceManagementDataHolder.getInstance().getConfigurationContextService();
|
||||||
|
int port = CarbonUtils.getTransportPort(configContextService, "http");
|
||||||
|
int httpProxyPort =
|
||||||
|
CarbonUtils.getTransportProxyPort(configContextService.getServerConfigContext(),
|
||||||
|
"http");
|
||||||
|
if (httpProxyPort > 0) {
|
||||||
|
port = httpProxyPort;
|
||||||
|
}
|
||||||
|
return "http://" + hostName + ":" + port;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>email-sender</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.email.sender.core</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
<name>WSO2 Carbon - Email Sender Core</name>
|
||||||
|
<description>WSO2 Carbon - Email Sender Core</description>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<version>1.4.0</version>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Bundle-Version>${carbon.device.mgt.version}</Bundle-Version>
|
||||||
|
<Bundle-Description>Email Management Core Bundle</Bundle-Description>
|
||||||
|
<Private-Package>org.wso2.carbon.email.sender.core.internal</Private-Package>
|
||||||
|
<Import-Package>
|
||||||
|
org.apache.axis2.*;version="${axis2.osgi.version.range}",
|
||||||
|
org.apache.axiom.*; version="${axiom.osgi.version.range}",
|
||||||
|
org.osgi.framework,
|
||||||
|
org.osgi.service.component,
|
||||||
|
org.apache.commons.logging,
|
||||||
|
javax.xml.*,
|
||||||
|
org.wso2.carbon.context,
|
||||||
|
org.wso2.carbon.utils.*,
|
||||||
|
org.wso2.carbon.registry.api,
|
||||||
|
org.w3c.dom,
|
||||||
|
org.apache.velocity,
|
||||||
|
org.apache.velocity.app,
|
||||||
|
org.apache.velocity.context,
|
||||||
|
org.apache.velocity.exception,
|
||||||
|
org.apache.velocity.runtime.resource,
|
||||||
|
org.apache.velocity.runtime.resource.loader,
|
||||||
|
org.apache.commons.io,
|
||||||
|
org.apache.axis2.transport.mail,
|
||||||
|
org.wso2.carbon.registry.core.service,
|
||||||
|
org.wso2.carbon.registry.core.session,
|
||||||
|
org.apache.commons.collections
|
||||||
|
</Import-Package>
|
||||||
|
<Export-Package>
|
||||||
|
!org.wso2.carbon.email.sender.core.internal,
|
||||||
|
org.wso2.carbon.email.sender.core.*
|
||||||
|
</Export-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.18</version>
|
||||||
|
<configuration>
|
||||||
|
<systemPropertyVariables>
|
||||||
|
<log4j.configuration>file:src/test/resources/log4j.properties</log4j.configuration>
|
||||||
|
</systemPropertyVariables>
|
||||||
|
<suiteXmlFiles>
|
||||||
|
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||||
|
</suiteXmlFiles>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
|
<artifactId>org.eclipse.osgi</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.osgi</groupId>
|
||||||
|
<artifactId>org.eclipse.osgi.services</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.logging</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.utils</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testng</groupId>
|
||||||
|
<artifactId>testng</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.base</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.axis2.wso2</groupId>
|
||||||
|
<artifactId>axis2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.velocity</groupId>
|
||||||
|
<artifactId>velocity</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io.wso2</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.axis2.transport</groupId>
|
||||||
|
<artifactId>axis2-transport-mail</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.registry.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-collections.wso2</groupId>
|
||||||
|
<artifactId>commons-collections</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
public class ContentProcessingInterruptedException extends Exception {
|
public class ContentProcessingInterruptedException extends Exception {
|
||||||
|
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* 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.email.sender.core;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ContentProviderInfo {
|
||||||
|
|
||||||
|
private String template;
|
||||||
|
private Map<String, TypedValue<Class<?>, Object>> params;
|
||||||
|
|
||||||
|
public ContentProviderInfo(final String template, final Map<String, TypedValue<Class<?>, Object>> params) {
|
||||||
|
if (template == null || template.isEmpty()) {
|
||||||
|
throw new IllegalArgumentException("Template name cannot be null or empty");
|
||||||
|
}
|
||||||
|
this.template = template;
|
||||||
|
if (params == null) {
|
||||||
|
throw new IllegalArgumentException("Place-holder parameter map cannot be null");
|
||||||
|
}
|
||||||
|
this.params = params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTemplate() {
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, TypedValue<Class<?>, Object>> getParams() {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addParam(String name, TypedValue<Class<?>, Object> param) {
|
||||||
|
params.put(name, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypedValue<Class<?>, Object> getParam(String name) {
|
||||||
|
return params.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
public class EmailContentProviderFactory {
|
public class EmailContentProviderFactory {
|
||||||
|
|
||||||
@ -0,0 +1,138 @@
|
|||||||
|
/*
|
||||||
|
* 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.email.sender.core;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class EmailContext {
|
||||||
|
|
||||||
|
private Set<String> recipients;
|
||||||
|
private Properties properties;
|
||||||
|
private ContentProviderInfo contentProviderInfo;
|
||||||
|
|
||||||
|
private EmailContext(final ContentProviderInfo contentProviderInfo, final Set<String> recipients, final Properties properties) {
|
||||||
|
if (contentProviderInfo == null) {
|
||||||
|
throw new IllegalArgumentException("Content provider information cannot be null");
|
||||||
|
}
|
||||||
|
this.contentProviderInfo = contentProviderInfo;
|
||||||
|
if (recipients == null) {
|
||||||
|
throw new IllegalArgumentException("Recipient list cannot be null");
|
||||||
|
}
|
||||||
|
if (recipients.size() == 0) {
|
||||||
|
throw new IllegalArgumentException("No recipient is configured. Recipient list should carry at " +
|
||||||
|
"least one recipient");
|
||||||
|
}
|
||||||
|
this.recipients = recipients;
|
||||||
|
if (properties == null) {
|
||||||
|
throw new IllegalArgumentException("Email Context property bag cannot be null");
|
||||||
|
}
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EmailContext(final ContentProviderInfo contentProviderInfo, final String recipient, final Properties properties) {
|
||||||
|
if (contentProviderInfo == null) {
|
||||||
|
throw new IllegalArgumentException("Content provider information cannot be null");
|
||||||
|
}
|
||||||
|
this.contentProviderInfo = contentProviderInfo;
|
||||||
|
if (recipient == null || recipient.isEmpty()) {
|
||||||
|
throw new IllegalArgumentException("Recipient can't be null or empty. Please specify a valid " +
|
||||||
|
"recipient email address");
|
||||||
|
}
|
||||||
|
this.recipients = new HashSet<String>() {{
|
||||||
|
add(recipient);
|
||||||
|
}};
|
||||||
|
if (properties == null) {
|
||||||
|
throw new IllegalArgumentException("Email Context property bag cannot be null");
|
||||||
|
}
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getRecipients() {
|
||||||
|
return recipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Properties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getProperty(String name) {
|
||||||
|
return (String) properties.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addProperty(String name, String value) {
|
||||||
|
properties.put(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ContentProviderInfo getContentProviderInfo() {
|
||||||
|
return contentProviderInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class EmailContextBuilder {
|
||||||
|
|
||||||
|
private Set<String> recipients;
|
||||||
|
private ContentProviderInfo contentProviderInfo;
|
||||||
|
private Properties properties;
|
||||||
|
|
||||||
|
public EmailContextBuilder(final ContentProviderInfo contentProviderInfo, Set<String> recipients) {
|
||||||
|
if (contentProviderInfo == null) {
|
||||||
|
throw new IllegalArgumentException("Content provider information cannot be null");
|
||||||
|
}
|
||||||
|
this.contentProviderInfo = contentProviderInfo;
|
||||||
|
if (recipients == null) {
|
||||||
|
throw new IllegalArgumentException("Recipient list cannot be null");
|
||||||
|
}
|
||||||
|
if (recipients.size() == 0) {
|
||||||
|
throw new IllegalArgumentException("No recipient is configured. Recipient list should carry at " +
|
||||||
|
"least one recipient");
|
||||||
|
}
|
||||||
|
this.recipients = recipients;
|
||||||
|
this.properties = new Properties();
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailContextBuilder(final ContentProviderInfo contentProviderInfo, final String recipient,
|
||||||
|
final Properties properties) {
|
||||||
|
if (contentProviderInfo == null) {
|
||||||
|
throw new IllegalArgumentException("Content provider information cannot be null");
|
||||||
|
}
|
||||||
|
this.contentProviderInfo = contentProviderInfo;
|
||||||
|
if (recipient == null || recipient.isEmpty()) {
|
||||||
|
throw new IllegalArgumentException("Recipient can't be null or empty. Please specify a valid " +
|
||||||
|
"recipient email address");
|
||||||
|
}
|
||||||
|
this.recipients = new HashSet<String>() {{
|
||||||
|
add(recipient);
|
||||||
|
}};
|
||||||
|
if (properties == null) {
|
||||||
|
throw new IllegalArgumentException("Email Context property bag cannot be null");
|
||||||
|
}
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailContextBuilder addProperty(String name, String value) {
|
||||||
|
properties.setProperty(name, value);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailContext build() {
|
||||||
|
return new EmailContext(contentProviderInfo, recipients, properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* 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.email.sender.core;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBContext;
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
import javax.xml.bind.Unmarshaller;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "EmailSenderConfig")
|
||||||
|
public class EmailSenderConfig {
|
||||||
|
|
||||||
|
private int minThreads;
|
||||||
|
private int maxThreads;
|
||||||
|
private int keepAliveDuration;
|
||||||
|
private int threadQueueCapacity;
|
||||||
|
|
||||||
|
private static EmailSenderConfig config;
|
||||||
|
|
||||||
|
private static final String EMAIL_SENDER_CONFIG_PATH =
|
||||||
|
CarbonUtils.getEtcCarbonConfigDirPath() + File.separator + "email-sender-config.xml";
|
||||||
|
|
||||||
|
private EmailSenderConfig() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static EmailSenderConfig getInstance() {
|
||||||
|
if (config == null) {
|
||||||
|
throw new InvalidConfigurationStateException("Webapp Authenticator Configuration is not " +
|
||||||
|
"initialized properly");
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "MinThreads", required = true)
|
||||||
|
public int getMinThreads() {
|
||||||
|
return minThreads;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinThreads(int minThreads) {
|
||||||
|
this.minThreads = minThreads;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "MaxThreads", required = true)
|
||||||
|
public int getMaxThreads() {
|
||||||
|
return maxThreads;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxThreads(int maxThreads) {
|
||||||
|
this.maxThreads = maxThreads;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "KeepAliveDuration", required = true)
|
||||||
|
public int getKeepAliveDuration() {
|
||||||
|
return keepAliveDuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeepAliveDuration(int keepAliveDuration) {
|
||||||
|
this.keepAliveDuration = keepAliveDuration;
|
||||||
|
}
|
||||||
|
@XmlElement(name = "ThreadQueueCapacity", required = true)
|
||||||
|
public int getThreadQueueCapacity() {
|
||||||
|
return threadQueueCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setThreadQueueCapacity(int threadQueueCapacity) {
|
||||||
|
this.threadQueueCapacity = threadQueueCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init() throws EmailSenderConfigurationFailedException {
|
||||||
|
try {
|
||||||
|
File emailSenderConfig = new File(EMAIL_SENDER_CONFIG_PATH);
|
||||||
|
Document doc = EmailSenderUtil.convertToDocument(emailSenderConfig);
|
||||||
|
|
||||||
|
/* Un-marshaling Email Sender configuration */
|
||||||
|
JAXBContext ctx = JAXBContext.newInstance(EmailSenderConfig.class);
|
||||||
|
Unmarshaller unmarshaller = ctx.createUnmarshaller();
|
||||||
|
//unmarshaller.setSchema(getSchema());
|
||||||
|
config = (EmailSenderConfig) unmarshaller.unmarshal(doc);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while un-marshalling Email " +
|
||||||
|
"Sender Config", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* 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.email.sender.core;
|
||||||
|
|
||||||
|
public class EmailSenderConfigurationFailedException extends Exception {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -3151279312929070298L;
|
||||||
|
|
||||||
|
public EmailSenderConfigurationFailedException(String msg, Exception nestedEx) {
|
||||||
|
super(msg, nestedEx);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailSenderConfigurationFailedException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailSenderConfigurationFailedException(String msg) {
|
||||||
|
super(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailSenderConfigurationFailedException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailSenderConfigurationFailedException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* 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.email.sender.core;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.wso2.carbon.email.sender.core.internal.EmailSenderDataHolder;
|
||||||
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
import org.wso2.carbon.utils.NetworkUtils;
|
||||||
|
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class EmailSenderUtil {
|
||||||
|
|
||||||
|
public static Document convertToDocument(File file) throws EmailSenderConfigurationFailedException {
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
factory.setNamespaceAware(true);
|
||||||
|
try {
|
||||||
|
DocumentBuilder docBuilder = factory.newDocumentBuilder();
|
||||||
|
return docBuilder.parse(file);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while parsing file, while converting " +
|
||||||
|
"to a org.w3c.dom.Document", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
public class EmailSendingFailedException extends Exception {
|
public class EmailSendingFailedException extends Exception {
|
||||||
|
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.email.sender.core;
|
||||||
|
|
||||||
|
public class InvalidConfigurationStateException extends RuntimeException {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -3151279311329070297L;
|
||||||
|
|
||||||
|
private String errorMessage;
|
||||||
|
private int errorCode;
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(int errorCode, String message) {
|
||||||
|
super(message);
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(int errorCode, String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getErrorCode() {
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getErrorMessage() {
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorMessage(String errorMessage) {
|
||||||
|
this.errorMessage = errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(String msg, Exception nestedEx) {
|
||||||
|
super(msg, nestedEx);
|
||||||
|
setErrorMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
setErrorMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(String msg) {
|
||||||
|
super(msg);
|
||||||
|
setErrorMessage(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public InvalidConfigurationStateException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
import org.apache.commons.collections.ExtendedProperties;
|
import org.apache.commons.collections.ExtendedProperties;
|
||||||
import org.apache.velocity.exception.ResourceNotFoundException;
|
import org.apache.velocity.exception.ResourceNotFoundException;
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
public class TypedValue<T, V> {
|
public class TypedValue<T, V> {
|
||||||
|
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.email;
|
package org.wso2.carbon.email.sender.core;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
@ -47,7 +47,7 @@ public class VelocityBasedEmailContentProvider implements EmailContentProvider {
|
|||||||
engine.setProperty("resource.loader", "registry");
|
engine.setProperty("resource.loader", "registry");
|
||||||
engine.setProperty("velocimacro.library", "");
|
engine.setProperty("velocimacro.library", "");
|
||||||
engine.setProperty("registry.resource.loader.class",
|
engine.setProperty("registry.resource.loader.class",
|
||||||
"org.wso2.carbon.device.mgt.core.email.RegistryBasedResourceLoader");
|
"org.wso2.carbon.email.sender.core.RegistryBasedResourceLoader");
|
||||||
engine.init();
|
engine.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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.email.sender.core.internal;
|
||||||
|
|
||||||
|
import org.apache.axis2.context.ConfigurationContext;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.context.CarbonContext;
|
||||||
|
import org.wso2.carbon.context.RegistryType;
|
||||||
|
import org.wso2.carbon.email.sender.core.EmailSenderConfigurationFailedException;
|
||||||
|
import org.wso2.carbon.registry.api.Collection;
|
||||||
|
import org.wso2.carbon.registry.api.Registry;
|
||||||
|
import org.wso2.carbon.registry.api.RegistryException;
|
||||||
|
import org.wso2.carbon.registry.api.Resource;
|
||||||
|
import org.wso2.carbon.utils.Axis2ConfigurationContextObserver;
|
||||||
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
|
||||||
|
public class EmailSenderAxis2ConfigContextObserver implements Axis2ConfigurationContextObserver {
|
||||||
|
|
||||||
|
private static final String EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH = "email-templates";
|
||||||
|
private static final Log log = LogFactory.getLog(EmailSenderAxis2ConfigContextObserver.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void creatingConfigurationContext(int tenantId) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createdConfigurationContext(ConfigurationContext configurationContext) {
|
||||||
|
try {
|
||||||
|
this.setupEmailTemplates();
|
||||||
|
} catch (EmailSenderConfigurationFailedException e) {
|
||||||
|
log.error("Error occurred while setting up email templates", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void terminatingConfigurationContext(ConfigurationContext configurationContext) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void terminatedConfigurationContext(ConfigurationContext configurationContext) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupEmailTemplates() throws EmailSenderConfigurationFailedException {
|
||||||
|
File templateDir =
|
||||||
|
new File(CarbonUtils.getCarbonRepository() + "resources" + File.separator + "email-templates");
|
||||||
|
if (!templateDir.exists()) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("The directory that is expected to use as the container for all email templates is not " +
|
||||||
|
"available. Therefore, no template is uploaded to the registry");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (templateDir.canRead()) {
|
||||||
|
File[] templates = templateDir.listFiles(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
name = name.toLowerCase();
|
||||||
|
return name.endsWith(".vm");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
Registry registry =
|
||||||
|
CarbonContext.getThreadLocalCarbonContext().getRegistry(RegistryType.SYSTEM_CONFIGURATION);
|
||||||
|
if (!registry.resourceExists(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH)) {
|
||||||
|
Collection collection = registry.newCollection();
|
||||||
|
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH, collection);
|
||||||
|
for (File template : templates) {
|
||||||
|
Resource resource = registry.newResource();
|
||||||
|
resource.setContent(template);
|
||||||
|
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (File template : templates) {
|
||||||
|
if (!registry.resourceExists(
|
||||||
|
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName())) {
|
||||||
|
Resource resource = registry.newResource();
|
||||||
|
resource.setContent(template);
|
||||||
|
registry.put(
|
||||||
|
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (RegistryException e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while setting up email templates", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, 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.email.sender.core.internal;
|
||||||
|
|
||||||
|
import org.wso2.carbon.email.sender.core.service.EmailSenderService;
|
||||||
|
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||||
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
|
||||||
|
public class EmailSenderDataHolder {
|
||||||
|
|
||||||
|
private RegistryService registryService;
|
||||||
|
private ConfigurationContextService configurationContextService;
|
||||||
|
private EmailSenderService emailServiceProvider;
|
||||||
|
|
||||||
|
private static EmailSenderDataHolder thisInstance = new EmailSenderDataHolder();
|
||||||
|
|
||||||
|
private EmailSenderDataHolder() {}
|
||||||
|
|
||||||
|
public static EmailSenderDataHolder getInstance() {
|
||||||
|
return thisInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegistryService getRegistryService() {
|
||||||
|
if (registryService == null) {
|
||||||
|
throw new IllegalStateException("Registry service is not initialized properly");
|
||||||
|
}
|
||||||
|
return registryService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRegistryService(RegistryService registryService) {
|
||||||
|
this.registryService = registryService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationContextService getConfigurationContextService() {
|
||||||
|
if (configurationContextService == null) {
|
||||||
|
throw new IllegalStateException("ConfigurationContext service is not initialized properly");
|
||||||
|
}
|
||||||
|
return configurationContextService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfigurationContextService(ConfigurationContextService configurationContextService) {
|
||||||
|
this.configurationContextService = configurationContextService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmailSenderService getEmailServiceProvider() {
|
||||||
|
return emailServiceProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmailServiceProvider(EmailSenderService emailServiceProvider) {
|
||||||
|
this.emailServiceProvider = emailServiceProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,195 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, 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.email.sender.core.internal;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
import org.wso2.carbon.email.sender.core.EmailSenderConfig;
|
||||||
|
import org.wso2.carbon.email.sender.core.EmailSenderConfigurationFailedException;
|
||||||
|
import org.wso2.carbon.email.sender.core.service.EmailSenderService;
|
||||||
|
import org.wso2.carbon.email.sender.core.service.EmailSenderServiceImpl;
|
||||||
|
import org.wso2.carbon.registry.api.Collection;
|
||||||
|
import org.wso2.carbon.registry.api.Registry;
|
||||||
|
import org.wso2.carbon.registry.api.RegistryException;
|
||||||
|
import org.wso2.carbon.registry.api.Resource;
|
||||||
|
import org.wso2.carbon.registry.core.service.RegistryService;
|
||||||
|
import org.wso2.carbon.utils.CarbonUtils;
|
||||||
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @scr.component name="org.wso2.carbon.email.sender.EmailSenderServiceComponent" immediate="true"
|
||||||
|
* @scr.reference name="registry.service"
|
||||||
|
* interface="org.wso2.carbon.registry.core.service.RegistryService"
|
||||||
|
* cardinality="1..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setRegistryService"
|
||||||
|
* unbind="unsetRegistryService"
|
||||||
|
* @scr.reference name="config.context.service"
|
||||||
|
* interface="org.wso2.carbon.utils.ConfigurationContextService"
|
||||||
|
* cardinality="0..1"
|
||||||
|
* policy="dynamic"
|
||||||
|
* bind="setConfigurationContextService"
|
||||||
|
* unbind="unsetConfigurationContextService"
|
||||||
|
*/
|
||||||
|
public class EmailSenderServiceComponent {
|
||||||
|
|
||||||
|
private static Log log = LogFactory.getLog(EmailSenderServiceComponent.class);
|
||||||
|
|
||||||
|
private static final String EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH = "/email-templates";
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
protected void activate(ComponentContext componentContext) {
|
||||||
|
try {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Initializing email sender core bundle");
|
||||||
|
}
|
||||||
|
/* Initializing email sende configuration */
|
||||||
|
EmailSenderConfig.init();
|
||||||
|
|
||||||
|
/* Setting up default email templates */
|
||||||
|
this.setupEmailTemplates();
|
||||||
|
|
||||||
|
/* Registering declarative service instances exposed by EmailSenderServiceComponent */
|
||||||
|
this.registerServices(componentContext);
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Email sender core bundle has been successfully initialized");
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("Error occurred while initializing email sender core bundle", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
protected void deactivate(ComponentContext componentContext) {
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerServices(ComponentContext componentContext) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Registering email sender service");
|
||||||
|
}
|
||||||
|
EmailSenderService emailServiceProvider = new EmailSenderServiceImpl();
|
||||||
|
EmailSenderDataHolder.getInstance().setEmailServiceProvider(emailServiceProvider);
|
||||||
|
componentContext.getBundleContext().registerService(EmailSenderService.class, emailServiceProvider, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setupEmailTemplates() throws EmailSenderConfigurationFailedException {
|
||||||
|
File templateDir =
|
||||||
|
new File(CarbonUtils.getCarbonHome() + File.separator + "repository" + File.separator +
|
||||||
|
"resources" + File.separator + "email-templates");
|
||||||
|
if (!templateDir.exists()) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("The directory that is expected to use as the container for all email templates is not " +
|
||||||
|
"available. Therefore, no template is uploaded to the registry");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (templateDir.canRead()) {
|
||||||
|
File[] templates = templateDir.listFiles(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
name = name.toLowerCase();
|
||||||
|
return name.endsWith(".vm");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
Registry registry =
|
||||||
|
EmailSenderDataHolder.getInstance().getRegistryService().getConfigSystemRegistry();
|
||||||
|
if (!registry.resourceExists(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH)) {
|
||||||
|
Collection collection = registry.newCollection();
|
||||||
|
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH, collection);
|
||||||
|
for (File template : templates) {
|
||||||
|
Resource resource = registry.newResource();
|
||||||
|
String contents = FileUtils.readFileToString(template);
|
||||||
|
resource.setContent(contents.getBytes());
|
||||||
|
registry.put(EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Existence of a given resource is not checked consciously, before performing registry.put() below.
|
||||||
|
* The rationale is that, the only less expensive way that one can check if a resource exists is
|
||||||
|
* that through registry.resourceExists(), which only checks if 'some' resource exists at the given
|
||||||
|
* registry path. However, this does not capture scenarios where there can be updated contents to
|
||||||
|
* the same resource of which the path hasn't changed after it has been initialized for the first
|
||||||
|
* time. Therefore, whenever the server starts-up, all email templates are updated just to avoid
|
||||||
|
* the aforementioned problem */
|
||||||
|
for (File template : templates) {
|
||||||
|
Resource resource = registry.newResource();
|
||||||
|
String contents = FileUtils.readFileToString(template);
|
||||||
|
resource.setContent(contents.getBytes());
|
||||||
|
registry.put(
|
||||||
|
EMAIL_TEMPLATE_DIR_RELATIVE_REGISTRY_PATH + "/" + template.getName(), resource);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (RegistryException e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while setting up email templates", e);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while writing template file " +
|
||||||
|
"contents as an input stream of a resource", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new EmailSenderConfigurationFailedException("Error occurred while serializing file " +
|
||||||
|
"contents to a string", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets Registry Service.
|
||||||
|
*
|
||||||
|
* @param registryService An instance of RegistryService
|
||||||
|
*/
|
||||||
|
protected void setRegistryService(RegistryService registryService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Setting Registry Service");
|
||||||
|
}
|
||||||
|
EmailSenderDataHolder.getInstance().setRegistryService(registryService);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsets Registry Service.
|
||||||
|
*
|
||||||
|
* @param registryService An instance of RegistryService
|
||||||
|
*/
|
||||||
|
protected void unsetRegistryService(RegistryService registryService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Un setting Registry Service");
|
||||||
|
}
|
||||||
|
EmailSenderDataHolder.getInstance().setRegistryService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setConfigurationContextService(ConfigurationContextService configurationContextService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Setting ConfigurationContextService");
|
||||||
|
}
|
||||||
|
EmailSenderDataHolder.getInstance().setConfigurationContextService(configurationContextService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unsetConfigurationContextService(ConfigurationContextService configurationContextService) {
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Un-setting ConfigurationContextService");
|
||||||
|
}
|
||||||
|
EmailSenderDataHolder.getInstance().setConfigurationContextService(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -15,15 +15,13 @@
|
|||||||
* specific language governing permissions and limitations
|
* specific language governing permissions and limitations
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
package org.wso2.carbon.device.mgt.core.service;
|
package org.wso2.carbon.email.sender.core.service;
|
||||||
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailData;
|
import org.wso2.carbon.email.sender.core.EmailContext;
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailSendingFailedException;
|
import org.wso2.carbon.email.sender.core.EmailSendingFailedException;
|
||||||
|
|
||||||
import java.util.Set;
|
public interface EmailSenderService {
|
||||||
|
|
||||||
public interface EmailService {
|
void sendEmail(EmailContext emailCtx) throws EmailSendingFailedException;
|
||||||
|
|
||||||
void sendEmail(Set<String> recipients, EmailData emailData) throws EmailSendingFailedException;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.wso2.carbon.device.mgt.core.email.sender;
|
package org.wso2.carbon.email.sender.core.service;
|
||||||
|
|
||||||
import org.apache.axiom.om.OMElement;
|
import org.apache.axiom.om.OMElement;
|
||||||
import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
|
import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
|
||||||
@ -30,42 +30,47 @@ import org.apache.axis2.context.MessageContext;
|
|||||||
import org.apache.axis2.transport.mail.MailConstants;
|
import org.apache.axis2.transport.mail.MailConstants;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
|
import org.wso2.carbon.email.sender.core.*;
|
||||||
import org.wso2.carbon.device.mgt.core.config.email.EmailConfigurations;
|
import org.wso2.carbon.email.sender.core.internal.EmailSenderDataHolder;
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailData;
|
|
||||||
import org.wso2.carbon.device.mgt.core.email.EmailSendingFailedException;
|
|
||||||
import org.wso2.carbon.device.mgt.core.internal.EmailServiceDataHolder;
|
|
||||||
import org.wso2.carbon.device.mgt.core.service.EmailService;
|
|
||||||
import org.wso2.carbon.utils.ConfigurationContextService;
|
import org.wso2.carbon.utils.ConfigurationContextService;
|
||||||
|
|
||||||
import javax.xml.stream.XMLStreamException;
|
import javax.xml.stream.XMLStreamException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class EmailServiceProviderImpl implements EmailService {
|
public class EmailSenderServiceImpl implements EmailSenderService {
|
||||||
|
|
||||||
private static ThreadPoolExecutor threadPoolExecutor;
|
private static ThreadPoolExecutor threadPoolExecutor;
|
||||||
|
private EmailContentProvider contentProvider;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
EmailConfigurations emailConfig =
|
EmailSenderConfig config = EmailSenderConfig.getInstance();
|
||||||
DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
|
threadPoolExecutor = new ThreadPoolExecutor(config.getMinThreads(), config.getMaxThreads(),
|
||||||
getDeviceManagementConfigRepository().getEmailConfigurations();
|
config.getKeepAliveDuration(), TimeUnit.SECONDS,
|
||||||
|
new LinkedBlockingQueue<Runnable>(config.getThreadQueueCapacity()));
|
||||||
threadPoolExecutor = new ThreadPoolExecutor(emailConfig.getMinNumOfThread(),
|
|
||||||
emailConfig.getMaxNumOfThread(), emailConfig.getKeepAliveTime(), TimeUnit.SECONDS,
|
|
||||||
new LinkedBlockingQueue<Runnable>(emailConfig.getThreadQueueCapacity()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String EMAIL_URI_SCHEME = "mailto:";
|
private static final String EMAIL_URI_SCHEME = "mailto:";
|
||||||
private static Log log = LogFactory.getLog(EmailServiceProviderImpl.class);
|
private static Log log = LogFactory.getLog(EmailSenderServiceImpl.class);
|
||||||
|
|
||||||
|
public EmailSenderServiceImpl() {
|
||||||
|
this.contentProvider = EmailContentProviderFactory.getContentProvider();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendEmail(Set<String> recipients, EmailData emailData) throws EmailSendingFailedException {
|
public void sendEmail(EmailContext emailCtx) throws EmailSendingFailedException {
|
||||||
for (String recipient : recipients) {
|
for (String recipient : emailCtx.getRecipients()) {
|
||||||
|
ContentProviderInfo info = emailCtx.getContentProviderInfo();
|
||||||
|
EmailData emailData;
|
||||||
|
try {
|
||||||
|
emailData = contentProvider.getContent(info.getTemplate(), info.getParams());
|
||||||
|
} catch (ContentProcessingInterruptedException e) {
|
||||||
|
throw new EmailSendingFailedException("Error occurred while retrieving email content to be " +
|
||||||
|
"sent for recipient '" + recipient + "'", e);
|
||||||
|
}
|
||||||
threadPoolExecutor.submit(new EmailSender(recipient, emailData.getSubject(), emailData.getBody()));
|
threadPoolExecutor.submit(new EmailSender(recipient, emailData.getSubject(), emailData.getBody()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,7 +96,7 @@ public class EmailServiceProviderImpl implements EmailService {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ConfigurationContextService configCtxService =
|
ConfigurationContextService configCtxService =
|
||||||
EmailServiceDataHolder.getInstance().getConfigurationContextService();
|
EmailSenderDataHolder.getInstance().getConfigurationContextService();
|
||||||
if (configCtxService == null) {
|
if (configCtxService == null) {
|
||||||
throw new IllegalStateException("Configuration Context Service is not available");
|
throw new IllegalStateException("Configuration Context Service is not available");
|
||||||
}
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2009 WSO2, Inc. (http://wso2.com)
|
||||||
|
#
|
||||||
|
# Licensed 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# This is the log4j configuration file used by WSO2 Carbon
|
||||||
|
#
|
||||||
|
# IMPORTANT : Please do not remove or change the names of any
|
||||||
|
# of the Appenders defined here. The layout pattern & log file
|
||||||
|
# can be changed using the WSO2 Carbon Management Console, and those
|
||||||
|
# settings will override the settings in this file.
|
||||||
|
#
|
||||||
|
|
||||||
|
log4j.rootLogger=INFO, STD_OUT
|
||||||
|
|
||||||
|
# Redirect log messages to console
|
||||||
|
log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.STD_OUT.Target=System.out
|
||||||
|
log4j.appender.STD_OUT.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.STD_OUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||||
|
|
||||||
|
<suite name="DeviceManagementCore">
|
||||||
|
<parameter name="useDefaultListeners" value="false"/>
|
||||||
|
|
||||||
|
<test name="EmailSenderTests" preserve-order="true">
|
||||||
|
<classes>
|
||||||
|
</classes>
|
||||||
|
</test>
|
||||||
|
</suite>
|
||||||
60
components/email-sender/pom.xml
Normal file
60
components/email-sender/pom.xml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>email-sender</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 Carbon - Email Sender Component</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>org.wso2.carbon.email.sender.core</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
<version>1.7.2</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generate-scr-scrdescriptor</id>
|
||||||
|
<goals>
|
||||||
|
<goal>scr</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@ -115,6 +115,7 @@
|
|||||||
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>
|
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>
|
||||||
<importFeatureDef>org.wso2.carbon.apimgt.core:${carbon.api.mgt.version}</importFeatureDef>
|
<importFeatureDef>org.wso2.carbon.apimgt.core:${carbon.api.mgt.version}</importFeatureDef>
|
||||||
<importFeatureDef>org.wso2.carbon.device.mgt.extensions:${carbon.device.mgt.version}</importFeatureDef>
|
<importFeatureDef>org.wso2.carbon.device.mgt.extensions:${carbon.device.mgt.version}</importFeatureDef>
|
||||||
|
<importFeatureDef>org.wso2.carbon.email.sender:${carbon.device.mgt.version}</importFeatureDef>
|
||||||
</importFeatures>
|
</importFeatures>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
|||||||
@ -24,14 +24,6 @@
|
|||||||
<Name>jdbc/DM_DS</Name>
|
<Name>jdbc/DM_DS</Name>
|
||||||
</JndiLookupDefinition>
|
</JndiLookupDefinition>
|
||||||
</DataSourceConfiguration>
|
</DataSourceConfiguration>
|
||||||
<EmailClientConfiguration>
|
|
||||||
<minimumThread>8</minimumThread>
|
|
||||||
<maximumThread>100</maximumThread>
|
|
||||||
<keepAliveTime>20</keepAliveTime>
|
|
||||||
<ThreadQueueCapacity>1000</ThreadQueueCapacity>
|
|
||||||
<LBHostPortPrefix>https://localhost:9443</LBHostPortPrefix>
|
|
||||||
<enrollmentContextPath>/emm-web-agent/enrollment</enrollmentContextPath>
|
|
||||||
</EmailClientConfiguration>
|
|
||||||
<IdentityConfiguration>
|
<IdentityConfiguration>
|
||||||
<ServerUrl>https://localhost:9443</ServerUrl>
|
<ServerUrl>https://localhost:9443</ServerUrl>
|
||||||
<AdminUsername>admin</AdminUsername>
|
<AdminUsername>admin</AdminUsername>
|
||||||
|
|||||||
@ -1,40 +0,0 @@
|
|||||||
<Notifications>
|
|
||||||
<NotificationMessage type="enrol">
|
|
||||||
<Subject>Enroll your Device with WSO2 MDM</Subject>
|
|
||||||
<Header>Dear {first-name},</Header>
|
|
||||||
<Body>
|
|
||||||
You have been registered to the WSO2 MDM. Below is the link to enroll.
|
|
||||||
</Body>
|
|
||||||
<Url>{downloadUrl}</Url>
|
|
||||||
<Footer1>
|
|
||||||
Best Regards,
|
|
||||||
</Footer1>
|
|
||||||
<Footer2>
|
|
||||||
WSO2 MDM Team.
|
|
||||||
</Footer2>
|
|
||||||
<Footer3>
|
|
||||||
http://www.wso2.com
|
|
||||||
</Footer3>
|
|
||||||
</NotificationMessage>
|
|
||||||
<NotificationMessage type="userRegistration">
|
|
||||||
<Subject>Enroll your Device with WSO2 MDM</Subject>
|
|
||||||
<Header>Dear {first-name},</Header>
|
|
||||||
<Body>
|
|
||||||
You have been registered to WSO2 MDM with following credentials.
|
|
||||||
Domain: {domain-name}
|
|
||||||
Username: {user-name}
|
|
||||||
Password: {password}
|
|
||||||
Below is the link to enroll.
|
|
||||||
</Body>
|
|
||||||
<Url>{downloadUrl}</Url>
|
|
||||||
<Footer1>
|
|
||||||
Best Regards,
|
|
||||||
</Footer1>
|
|
||||||
<Footer2>
|
|
||||||
WSO2 MDM Team.
|
|
||||||
</Footer2>
|
|
||||||
<Footer3>
|
|
||||||
http://www.wso2.com
|
|
||||||
</Footer3>
|
|
||||||
</NotificationMessage>
|
|
||||||
</Notifications>
|
|
||||||
@ -1,3 +1,20 @@
|
|||||||
|
#*
|
||||||
|
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.
|
||||||
|
*#
|
||||||
<EmailConfig>
|
<EmailConfig>
|
||||||
<Subject>You have been invited to enroll your device in WSO2 EMM</Subject>
|
<Subject>You have been invited to enroll your device in WSO2 EMM</Subject>
|
||||||
<Body>
|
<Body>
|
||||||
@ -22,7 +39,7 @@
|
|||||||
|
|
||||||
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
||||||
You have been invited to enrol your device in WSO2 Enterprise Mobility Manager.
|
You have been invited to enrol your device in WSO2 Enterprise Mobility Manager.
|
||||||
Click <a href="$download-url">here</a> to download the WSO2 EMM client application to begin device
|
Click <a href="$base-url-https/emm-web-agent/enrollment">here</a> to download the WSO2 EMM client application to begin device
|
||||||
enrolment.</p>
|
enrolment.</p>
|
||||||
|
|
||||||
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
||||||
|
|||||||
@ -1,3 +1,20 @@
|
|||||||
|
#*
|
||||||
|
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.
|
||||||
|
*#
|
||||||
<EmailConfig>
|
<EmailConfig>
|
||||||
<Subject>You have successfully been registered in WSO2 EMM</Subject>
|
<Subject>You have successfully been registered in WSO2 EMM</Subject>
|
||||||
<Body>
|
<Body>
|
||||||
@ -22,7 +39,7 @@
|
|||||||
|
|
||||||
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
||||||
You have been registered in WSO2 Enterprise Mobility Manager and invited to enrol your device.
|
You have been registered in WSO2 Enterprise Mobility Manager and invited to enrol your device.
|
||||||
Click <a href="$download-url">here</a> to download the WSO2 EMM client application to begin device
|
Click <a href="$base-url-https/emm-web-agent/enrollment">here</a> to download the WSO2 EMM client application to begin device
|
||||||
enrolment.</p>
|
enrolment.</p>
|
||||||
|
|
||||||
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
<p style="font-size: 1em; font-family: Arial, Helvetica; line-height: 170%; color: #666666; margin: 5px 0px;">
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
instructions.configure = \
|
instructions.configure = \
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/cdm-config.xml,target:${installFolder}/../../conf/cdm-config.xml,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/cdm-config.xml,target:${installFolder}/../../conf/cdm-config.xml,overwrite:true);\
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/notification-messages.xml,target:${installFolder}/../../conf/notification-messages.xml,overwrite:true);\
|
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/license-config.xml,target:${installFolder}/../../conf/etc/license-config.xml,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/license-config.xml,target:${installFolder}/../../conf/etc/license-config.xml,overwrite:true);\
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/remote-appmanager-config.xml,target:${installFolder}/../../conf/etc/remote-appmanager-config.xml,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/conf/remote-appmanager-config.xml,target:${installFolder}/../../conf/etc/remote-appmanager-config.xml,overwrite:true);\
|
||||||
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/dbscripts/cdm,target:${installFolder}/../../../dbscripts/cdm,overwrite:true);\
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.server_${feature.version}/dbscripts/cdm,target:${installFolder}/../../../dbscripts/cdm,overwrite:true);\
|
||||||
|
|||||||
@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>email-sender-feature</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.email.sender.feature</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<name>WSO2 Carbon - Email Sender Feature</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
<description>This feature contains the core bundles required for email sender related functionality
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.email.sender.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>copy-resources</id>
|
||||||
|
<phase>generate-resources</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>src/main/resources</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>resources</directory>
|
||||||
|
<includes>
|
||||||
|
<include>build.properties</include>
|
||||||
|
<include>p2.inf</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.wso2.maven</groupId>
|
||||||
|
<artifactId>carbon-p2-plugin</artifactId>
|
||||||
|
<version>${carbon.p2.plugin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>p2-feature-generation</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>p2-feature-gen</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<id>org.wso2.carbon.email.sender</id>
|
||||||
|
<propertiesFile>../../../features/etc/feature.properties</propertiesFile>
|
||||||
|
<adviceFile>
|
||||||
|
<properties>
|
||||||
|
<propertyDef>org.wso2.carbon.p2.category.type:server</propertyDef>
|
||||||
|
<propertyDef>org.eclipse.equinox.p2.type.group:false</propertyDef>
|
||||||
|
</properties>
|
||||||
|
</adviceFile>
|
||||||
|
<bundles>
|
||||||
|
<bundleDef>
|
||||||
|
org.wso2.carbon.devicemgt:org.wso2.carbon.email.sender.core:${carbon.device.mgt.version}
|
||||||
|
</bundleDef>
|
||||||
|
</bundles>
|
||||||
|
<importFeatures>
|
||||||
|
<importFeatureDef>org.wso2.carbon.core.server:${carbon.kernel.version}</importFeatureDef>
|
||||||
|
</importFeatures>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@ -0,0 +1 @@
|
|||||||
|
custom = true
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<EmailSenderConfig>
|
||||||
|
|
||||||
|
<MinThreads>8</MinThreads>
|
||||||
|
|
||||||
|
<MaxThreads>100</MaxThreads>
|
||||||
|
|
||||||
|
<KeepAliveDuration>20</KeepAliveDuration>
|
||||||
|
|
||||||
|
<ThreadQueueCapacity>1000</ThreadQueueCapacity>
|
||||||
|
|
||||||
|
</EmailSenderConfig>
|
||||||
|
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
#*
|
||||||
|
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.
|
||||||
|
*#
|
||||||
|
<EmailConfig>
|
||||||
|
<Subject>Hi There!</Subject>
|
||||||
|
<Body>
|
||||||
|
<![CDATA[
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Default Email Sender Template</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<b>This template has to be customized to fit into any target context</b>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
]]>
|
||||||
|
</Body>
|
||||||
|
</EmailConfig>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
instructions.configure = \
|
||||||
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.email.sender_${feature.version}/conf/email-sender-config.xml,target:${installFolder}/../../conf/etc/email-sender-config.xml,overwrite:true);\
|
||||||
|
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.email.sender_${feature.version}/email/templates,target:${installFolder}/../../../repository/resources/email-templates,overwrite:true);\
|
||||||
41
features/email-sender/pom.xml
Normal file
41
features/email-sender/pom.xml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>carbon-devicemgt</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>email-sender-feature</artifactId>
|
||||||
|
<version>1.0.4-SNAPSHOT</version>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 Carbon - Email Sender Feature</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>org.wso2.carbon.email.sender.feature</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
||||||
18
pom.xml
18
pom.xml
@ -41,6 +41,7 @@
|
|||||||
<module>components/certificate-mgt</module>
|
<module>components/certificate-mgt</module>
|
||||||
<module>components/webapp-authenticator-framework</module>
|
<module>components/webapp-authenticator-framework</module>
|
||||||
<module>components/identity-extensions</module>
|
<module>components/identity-extensions</module>
|
||||||
|
<module>components/email-sender</module>
|
||||||
<module>features/device-mgt</module>
|
<module>features/device-mgt</module>
|
||||||
<module>features/apimgt-extensions</module>
|
<module>features/apimgt-extensions</module>
|
||||||
<module>features/policy-mgt</module>
|
<module>features/policy-mgt</module>
|
||||||
@ -48,6 +49,7 @@
|
|||||||
<module>features/certificate-mgt</module>
|
<module>features/certificate-mgt</module>
|
||||||
<module>features/dynamic-client-registration</module>
|
<module>features/dynamic-client-registration</module>
|
||||||
<module>features/oauth-extensions</module>
|
<module>features/oauth-extensions</module>
|
||||||
|
<module>features/email-sender</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
@ -251,6 +253,11 @@
|
|||||||
<artifactId>org.wso2.carbon.identity.authenticator.backend.oauth</artifactId>
|
<artifactId>org.wso2.carbon.identity.authenticator.backend.oauth</artifactId>
|
||||||
<version>${carbon.device.mgt.version}</version>
|
<version>${carbon.device.mgt.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.email.sender.core</artifactId>
|
||||||
|
<version>${carbon.device.mgt.version}</version>
|
||||||
|
</dependency>
|
||||||
<!-- Device Management dependencies -->
|
<!-- Device Management dependencies -->
|
||||||
|
|
||||||
<!-- Governance dependencies -->
|
<!-- Governance dependencies -->
|
||||||
@ -1282,6 +1289,11 @@
|
|||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>${commons-io.version}</version>
|
<version>${commons-io.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-collections.wso2</groupId>
|
||||||
|
<artifactId>commons-collections</artifactId>
|
||||||
|
<version>${commons-collections.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
@ -1398,6 +1410,11 @@
|
|||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>2.18</version>
|
<version>2.18</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
</build>
|
</build>
|
||||||
@ -1586,6 +1603,7 @@
|
|||||||
<commons.httpclient.version>3.1.0.wso2v2</commons.httpclient.version>
|
<commons.httpclient.version>3.1.0.wso2v2</commons.httpclient.version>
|
||||||
<velocity.version>1.7</velocity.version>
|
<velocity.version>1.7</velocity.version>
|
||||||
<commons-io.version>2.4.0.wso2v1</commons-io.version>
|
<commons-io.version>2.4.0.wso2v1</commons-io.version>
|
||||||
|
<commons-collections.version>3.2.0.wso2v1</commons-collections.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user