package org.apereo.cas.util.io;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.authentication.principal.Principal;
import org.apereo.cas.util.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.internet.MimeMessage;
/**
* This is {@link CommunicationsManager}.
*
* @author Misagh Moayyed
* @since 5.1.0
*/
public class CommunicationsManager {
private static final Logger LOGGER = LoggerFactory.getLogger(CommunicationsManager.class);
@Autowired(required = false)
@Qualifier("smsSender")
private SmsSender smsSender;
@Autowired(required = false)
@Qualifier("mailSender")
private JavaMailSender mailSender;
public boolean isMailSenderDefined() {
return this.mailSender != null;
}
public boolean isSmsSenderDefined() {
return this.smsSender != null;
}
/**
* Email boolean.
*
* @param principal the principal
* @param attribute the email attribute
* @param text the text
* @param from the from
* @param subject the subject
* @param cc the cc
* @param bcc the bcc
* @return true/false
*/
public boolean email(final Principal principal,
final String attribute,
final String text, final String from,
final String subject,
final String cc, final String bcc) {
if (StringUtils.isNotBlank(attribute) && principal.getAttributes().containsKey(attribute) && isMailSenderDefined()) {
final String to = CollectionUtils.toCollection(principal.getAttributes().get(attribute)).iterator().next().toString();
return email(text, from, subject, to, cc, bcc);
}
return false;
}
/**
* Sms.
*
* @param principal the principal
* @param attribute the attribute
* @param text the text
* @param from the from
* @return the boolean
*/
public boolean sms(final Principal principal,
final String attribute,
final String text, final String from) {
if (StringUtils.isNotBlank(attribute) && principal.getAttributes().containsKey(attribute) && isSmsSenderDefined()) {
final String to = CollectionUtils.toCollection(principal.getAttributes().get(attribute)).iterator().next().toString();
return sms(from, to, text);
}
return false;
}
/**
* Email.
*
* @param text the text
* @param from the from
* @param subject the subject
* @param to the to
* @param cc the cc
* @param bcc the bcc
* @return the boolean
*/
public boolean email(final String text, final String from,
final String subject, final String to,
final String cc, final String bcc) {
try {
if (!isMailSenderDefined() || StringUtils.isBlank(text) || StringUtils.isBlank(from)
|| StringUtils.isBlank(subject) || StringUtils.isBlank(to)) {
LOGGER.warn("Could not send email to [{}] because either no address/subject/text is found or email settings are not configured.", to);
return false;
}
final MimeMessage message = this.mailSender.createMimeMessage();
final MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo(to);
helper.setText(text);
helper.setSubject(subject);
helper.setFrom(from);
helper.setPriority(1);
if (StringUtils.isNotBlank(cc)) {
helper.setCc(cc);
}
if (StringUtils.isNotBlank(bcc)) {
helper.setBcc(bcc);
}
this.mailSender.send(message);
return true;
} catch (final Exception ex) {
LOGGER.error(ex.getMessage(), ex);
}
return false;
}
/**
* Sms.
*
* @param from the from
* @param to the to
* @param text the text
* @return the boolean
*/
public boolean sms(final String from, final String to, final String text) {
if (!isSmsSenderDefined() || StringUtils.isBlank(text) || StringUtils.isBlank(from)) {
LOGGER.warn("Could not send email to [{}] because either no address/subject/text is found or email settings are not configured.", to);
return false;
}
return this.smsSender.send(from, to, text);
}
}