diff --git a/server/src/main/java/com/objectcomputing/checkins/notifications/social_media/SlackSearch.java b/server/src/main/java/com/objectcomputing/checkins/notifications/social_media/SlackSearch.java index 526fdf6a0..a8952e7b1 100644 --- a/server/src/main/java/com/objectcomputing/checkins/notifications/social_media/SlackSearch.java +++ b/server/src/main/java/com/objectcomputing/checkins/notifications/social_media/SlackSearch.java @@ -10,6 +10,8 @@ import com.slack.api.methods.response.conversations.ConversationsListResponse; import com.slack.api.methods.request.users.UsersLookupByEmailRequest; import com.slack.api.methods.response.users.UsersLookupByEmailResponse; +import com.slack.api.methods.request.users.UsersInfoRequest; +import com.slack.api.methods.response.users.UsersInfoResponse; import jakarta.inject.Singleton; import jakarta.inject.Inject; @@ -76,5 +78,26 @@ public String findUserId(String userEmail) { } return null; } + + public String findUserEmail(String userId) { + String token = configuration.getApplication().getNotifications().getSlack().getBotToken(); + if (token != null) { + try { + MethodsClient client = Slack.getInstance().methods(token); + UsersInfoResponse response = client.usersInfo( + UsersInfoRequest.builder().user(userId).build() + ); + + if (response.isOk()) { + return response.getUser().getProfile().getEmail(); + } + } catch(IOException e) { + LOG.error("SlackSearch.findUserEmail: " + e.toString()); + } catch(SlackApiException e) { + LOG.error("SlackSearch.findUserEmail: " + e.toString()); + } + } + return null; + } } diff --git a/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/PulseResponseController.java b/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/PulseResponseController.java index 67bede39a..20c14c80d 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/PulseResponseController.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/PulseResponseController.java @@ -45,15 +45,18 @@ public class PulseResponseController { private final MemberProfileServices memberProfileServices; private final SlackSignatureVerifier slackSignatureVerifier; private final PulseSlackCommand pulseSlackCommand; + private final SlackPulseResponseConverter slackPulseResponseConverter; public PulseResponseController(PulseResponseService pulseResponseServices, MemberProfileServices memberProfileServices, SlackSignatureVerifier slackSignatureVerifier, - PulseSlackCommand pulseSlackCommand) { + PulseSlackCommand pulseSlackCommand, + SlackPulseResponseConverter slackPulseResponseConverter) { this.pulseResponseServices = pulseResponseServices; this.memberProfileServices = memberProfileServices; this.slackSignatureVerifier = slackSignatureVerifier; this.pulseSlackCommand = pulseSlackCommand; + this.slackPulseResponseConverter = slackPulseResponseConverter; } /** @@ -169,7 +172,7 @@ public HttpResponse externalPulseResponse( final String key = "payload"; if (body.containsKey(key)) { PulseResponseCreateDTO pulseResponseDTO = - SlackPulseResponseConverter.get(memberProfileServices, + slackPulseResponseConverter.get(memberProfileServices, (String)body.get(key)); // DEBUG Only diff --git a/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/SlackPulseResponseConverter.java b/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/SlackPulseResponseConverter.java index cbe2362ad..e2e6f5754 100644 --- a/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/SlackPulseResponseConverter.java +++ b/server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/SlackPulseResponseConverter.java @@ -3,6 +3,9 @@ import com.objectcomputing.checkins.exceptions.BadArgException; import com.objectcomputing.checkins.services.memberprofile.MemberProfile; import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices; +import com.objectcomputing.checkins.notifications.social_media.SlackSearch; + +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,10 +18,17 @@ import java.util.UUID; import java.time.LocalDate; +@Singleton public class SlackPulseResponseConverter { private static final Logger LOG = LoggerFactory.getLogger(SlackPulseResponseConverter.class); - public static PulseResponseCreateDTO get( + private final SlackSearch slackSearch; + + public SlackPulseResponseConverter(SlackSearch slackSearch) { + this.slackSearch = slackSearch; + } + + public PulseResponseCreateDTO get( MemberProfileServices memberProfileServices, String body) { try { // Get the map of values from the string body @@ -59,8 +69,8 @@ public static PulseResponseCreateDTO get( } } - private static String getMappedValue(Map map, - String key, boolean required) { + private String getMappedValue(Map map, + String key, boolean required) { final String valueKey = "value"; if (map.containsKey(key)) { final Map other = (Map)map.get(key); @@ -78,14 +88,16 @@ private static String getMappedValue(Map map, } } - private static UUID lookupUser(MemberProfileServices memberProfileServices, - Map map) { + private UUID lookupUser(MemberProfileServices memberProfileServices, + Map map) { // Get the user's profile map. Map user = (Map)map.get("user"); - Map profile = (Map)user.get("profile"); // Lookup the user based on the email address. - String email = (String)profile.get("email"); + String email = slackSearch.findUserEmail((String)user.get("id")); + if (email == null) { + throw new BadArgException("Unable to find the user email address"); + } MemberProfile member = memberProfileServices.findByWorkEmail(email); return member.getId(); }