package hudson.plugins.jira; import hudson.Extension; import hudson.model.User; import hudson.tasks.MailAddressResolver; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; /** * Resolve user email by searching his userId as username in JIRA. * * @author Honza Brázdil jbrazdil@redhat.com */ @Extension public class JiraMailAddressResolver extends MailAddressResolver { private static final Logger LOGGER = Logger.getLogger(JiraMailAddressResolver.class.getName()); /** * Boolean to disable the Jira mail address resolver. * * To disable set the System property "-Dhudson.plugins.jira.JiraMailAddressResolver.disabled=true" */ public static boolean disabled = Boolean.getBoolean(JiraMailAddressResolver.class.getName() + ".disabled"); @Override public String findMailAddressFor(User u) { if (disabled) return null; String username = u.getId(); for (JiraSite site : JiraProjectProperty.DESCRIPTOR.getSites()) { try { JiraSession session = site.getSession(); if (session != null) { com.atlassian.jira.rest.client.api.domain.User user = session.service.getUser(username); if (user != null) { String email = user.getEmailAddress(); if (email != null) { email = unmaskEmail(email); return email; } } } } catch (IOException ex) { LOGGER.log(Level.WARNING, "Unable to create session with " + site.getName(), ex); } } return null; } private static final String PRE = "[( \\[<_{\"=]+"; private static final String POST = "[) \\]>_}\"=]+"; private static final Pattern AT = Pattern.compile(PRE + "[aA][tT]" + POST); private static final Pattern DOT = Pattern.compile(PRE + "[dD][oO0][tT]" + POST); // unmask emails like "john dot doe at example dot com" to john.doe@example.com static String unmaskEmail(String email) { email = AT.matcher(email).replaceAll("@"); email = DOT.matcher(email).replaceAll("."); return email; } }