Skip to content

Commit f73d257

Browse files
authored
Merge pull request #2860 from objectcomputing/bugfix-2814/lookup-email-by-userid
The user data provided does not have the email address, so we need to…
2 parents fddb388 + 5ea0291 commit f73d257

File tree

3 files changed

+47
-9
lines changed

3 files changed

+47
-9
lines changed

server/src/main/java/com/objectcomputing/checkins/notifications/social_media/SlackSearch.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import com.slack.api.methods.response.conversations.ConversationsListResponse;
1111
import com.slack.api.methods.request.users.UsersLookupByEmailRequest;
1212
import com.slack.api.methods.response.users.UsersLookupByEmailResponse;
13+
import com.slack.api.methods.request.users.UsersInfoRequest;
14+
import com.slack.api.methods.response.users.UsersInfoResponse;
1315

1416
import jakarta.inject.Singleton;
1517
import jakarta.inject.Inject;
@@ -76,5 +78,26 @@ public String findUserId(String userEmail) {
7678
}
7779
return null;
7880
}
81+
82+
public String findUserEmail(String userId) {
83+
String token = configuration.getApplication().getNotifications().getSlack().getBotToken();
84+
if (token != null) {
85+
try {
86+
MethodsClient client = Slack.getInstance().methods(token);
87+
UsersInfoResponse response = client.usersInfo(
88+
UsersInfoRequest.builder().user(userId).build()
89+
);
90+
91+
if (response.isOk()) {
92+
return response.getUser().getProfile().getEmail();
93+
}
94+
} catch(IOException e) {
95+
LOG.error("SlackSearch.findUserEmail: " + e.toString());
96+
} catch(SlackApiException e) {
97+
LOG.error("SlackSearch.findUserEmail: " + e.toString());
98+
}
99+
}
100+
return null;
101+
}
79102
}
80103

server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/PulseResponseController.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,18 @@ public class PulseResponseController {
4545
private final MemberProfileServices memberProfileServices;
4646
private final SlackSignatureVerifier slackSignatureVerifier;
4747
private final PulseSlackCommand pulseSlackCommand;
48+
private final SlackPulseResponseConverter slackPulseResponseConverter;
4849

4950
public PulseResponseController(PulseResponseService pulseResponseServices,
5051
MemberProfileServices memberProfileServices,
5152
SlackSignatureVerifier slackSignatureVerifier,
52-
PulseSlackCommand pulseSlackCommand) {
53+
PulseSlackCommand pulseSlackCommand,
54+
SlackPulseResponseConverter slackPulseResponseConverter) {
5355
this.pulseResponseServices = pulseResponseServices;
5456
this.memberProfileServices = memberProfileServices;
5557
this.slackSignatureVerifier = slackSignatureVerifier;
5658
this.pulseSlackCommand = pulseSlackCommand;
59+
this.slackPulseResponseConverter = slackPulseResponseConverter;
5760
}
5861

5962
/**
@@ -169,7 +172,7 @@ public HttpResponse<PulseResponse> externalPulseResponse(
169172
final String key = "payload";
170173
if (body.containsKey(key)) {
171174
PulseResponseCreateDTO pulseResponseDTO =
172-
SlackPulseResponseConverter.get(memberProfileServices,
175+
slackPulseResponseConverter.get(memberProfileServices,
173176
(String)body.get(key));
174177

175178
// DEBUG Only

server/src/main/java/com/objectcomputing/checkins/services/pulseresponse/SlackPulseResponseConverter.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import com.objectcomputing.checkins.exceptions.BadArgException;
44
import com.objectcomputing.checkins.services.memberprofile.MemberProfile;
55
import com.objectcomputing.checkins.services.memberprofile.MemberProfileServices;
6+
import com.objectcomputing.checkins.notifications.social_media.SlackSearch;
7+
8+
import jakarta.inject.Singleton;
69

710
import org.slf4j.Logger;
811
import org.slf4j.LoggerFactory;
@@ -15,10 +18,17 @@
1518
import java.util.UUID;
1619
import java.time.LocalDate;
1720

21+
@Singleton
1822
public class SlackPulseResponseConverter {
1923
private static final Logger LOG = LoggerFactory.getLogger(SlackPulseResponseConverter.class);
2024

21-
public static PulseResponseCreateDTO get(
25+
private final SlackSearch slackSearch;
26+
27+
public SlackPulseResponseConverter(SlackSearch slackSearch) {
28+
this.slackSearch = slackSearch;
29+
}
30+
31+
public PulseResponseCreateDTO get(
2232
MemberProfileServices memberProfileServices, String body) {
2333
try {
2434
// Get the map of values from the string body
@@ -59,8 +69,8 @@ public static PulseResponseCreateDTO get(
5969
}
6070
}
6171

62-
private static String getMappedValue(Map<String, Object> map,
63-
String key, boolean required) {
72+
private String getMappedValue(Map<String, Object> map,
73+
String key, boolean required) {
6474
final String valueKey = "value";
6575
if (map.containsKey(key)) {
6676
final Map<String, Object> other = (Map<String, Object>)map.get(key);
@@ -78,14 +88,16 @@ private static String getMappedValue(Map<String, Object> map,
7888
}
7989
}
8090

81-
private static UUID lookupUser(MemberProfileServices memberProfileServices,
82-
Map<String, Object> map) {
91+
private UUID lookupUser(MemberProfileServices memberProfileServices,
92+
Map<String, Object> map) {
8393
// Get the user's profile map.
8494
Map<String, Object> user = (Map<String, Object>)map.get("user");
85-
Map<String, Object> profile = (Map<String, Object>)user.get("profile");
8695

8796
// Lookup the user based on the email address.
88-
String email = (String)profile.get("email");
97+
String email = slackSearch.findUserEmail((String)user.get("id"));
98+
if (email == null) {
99+
throw new BadArgException("Unable to find the user email address");
100+
}
89101
MemberProfile member = memberProfileServices.findByWorkEmail(email);
90102
return member.getId();
91103
}

0 commit comments

Comments
 (0)