Skip to content

Commit 6591105

Browse files
authored
Merge pull request #2879 from objectcomputing/release/0.8
Deploy v0.8.14 into Production
2 parents 4d8d305 + 413ea3a commit 6591105

File tree

203 files changed

+1849
-4309
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

203 files changed

+1849
-4309
lines changed

.github/workflows/gradle-build-production.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ jobs:
8787
--set-env-vars "^@^MICRONAUT_ENVIRONMENTS=cloud,google,gcp" \
8888
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
8989
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
90+
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
9091
--platform "managed" \
9192
--max-instances 8 \
9293
--allow-unauthenticated

.github/workflows/gradle-deploy-develop.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ jobs:
112112
--set-env-vars "^@^MICRONAUT_ENVIRONMENTS=dev,cloud,google,gcp" \
113113
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
114114
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
115+
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
115116
--platform "managed" \
116117
--max-instances 2 \
117118
--allow-unauthenticated

.github/workflows/gradle-deploy-native-develop.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ jobs:
111111
--set-env-vars "^@^MICRONAUT_ENVIRONMENTS=dev,cloud,google,gcp" \
112112
--set-env-vars "SLACK_WEBHOOK_URL=${{ secrets.SLACK_WEBHOOK_URL }}" \
113113
--set-env-vars "SLACK_BOT_TOKEN=${{ secrets.SLACK_BOT_TOKEN }}" \
114+
--set-env-vars "SLACK_SIGNING_SECRET=${{ secrets.SLACK_PULSE_SIGNING_SECRET }}" \
114115
--platform "managed" \
115116
--max-instances 2 \
116117
--allow-unauthenticated

docker-compose.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: '3'
22
services:
33
postgresql:
4-
image: postgres:11.6
4+
image: postgres:17.2
55
environment:
66
POSTGRES_DB: checkinsdb
77
POSTGRES_USER: postgres

server/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
id "jacoco"
88
}
99

10-
version "0.8.13"
10+
version "0.8.14"
1111
group "com.objectcomputing.checkins"
1212

1313
repositories {

server/src/main/java/com/objectcomputing/checkins/configuration/CheckInsConfiguration.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static class ApplicationConfig {
3232
private GoogleApiConfig googleApi;
3333

3434
@NotNull
35-
private NotificationsConfig notifications;
35+
private SlackConfig slack;
3636

3737
@Getter
3838
@Setter
@@ -72,22 +72,16 @@ public static class ScopeConfig {
7272

7373
@Getter
7474
@Setter
75-
@ConfigurationProperties("notifications")
76-
public static class NotificationsConfig {
77-
78-
@NotNull
79-
private SlackConfig slack;
75+
@ConfigurationProperties("slack")
76+
public static class SlackConfig {
77+
@NotBlank
78+
private String webhookUrl;
8079

81-
@Getter
82-
@Setter
83-
@ConfigurationProperties("slack")
84-
public static class SlackConfig {
85-
@NotBlank
86-
private String webhookUrl;
80+
@NotBlank
81+
private String botToken;
8782

88-
@NotBlank
89-
private String botToken;
90-
}
83+
@NotBlank
84+
private String signingSecret;
9185
}
9286
}
9387
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ public class SlackPoster {
2121
private CheckInsConfiguration configuration;
2222

2323
public HttpResponse post(String slackBlock) {
24-
// See if we can have a webhook URL.
25-
String slackWebHook = configuration.getApplication().getNotifications().getSlack().getWebhookUrl();
24+
// See if we have a webhook URL.
25+
String slackWebHook = configuration.getApplication()
26+
.getSlack().getWebhookUrl();
2627
if (slackWebHook != null) {
2728
// POST it to Slack.
2829
BlockingHttpClient client = slackClient.toBlocking();

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

Lines changed: 25 additions & 2 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;
@@ -32,7 +34,7 @@ public SlackSearch(CheckInsConfiguration checkInsConfiguration) {
3234
}
3335

3436
public String findChannelId(String channelName) {
35-
String token = configuration.getApplication().getNotifications().getSlack().getBotToken();
37+
String token = configuration.getApplication().getSlack().getBotToken();
3638
if (token != null) {
3739
try {
3840
MethodsClient client = Slack.getInstance().methods(token);
@@ -57,7 +59,7 @@ public String findChannelId(String channelName) {
5759
}
5860

5961
public String findUserId(String userEmail) {
60-
String token = configuration.getApplication().getNotifications().getSlack().getBotToken();
62+
String token = configuration.getApplication().getSlack().getBotToken();
6163
if (token != null) {
6264
try {
6365
MethodsClient client = Slack.getInstance().methods(token);
@@ -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().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/action_item/ActionItemController.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.objectcomputing.checkins.services.action_item;
22

3-
import com.objectcomputing.checkins.services.permissions.Permission;
4-
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
53
import io.micronaut.core.annotation.Nullable;
64
import io.micronaut.http.HttpRequest;
75
import io.micronaut.http.HttpResponse;
@@ -35,7 +33,6 @@ public ActionItemController(ActionItemServices actionItemServices) {
3533
* @return {@link HttpResponse <ActionItem>}
3634
*/
3735
@Post
38-
@RequiredPermission(Permission.CAN_CREATE_CHECKINS)
3936
public HttpResponse<ActionItem> createActionItem(@Body @Valid ActionItemCreateDTO actionItem,
4037
HttpRequest<?> request) {
4138
ActionItem newActionItem = actionItemServices.save(new ActionItem(actionItem.getCheckinid(),
@@ -53,7 +50,6 @@ public HttpResponse<ActionItem> createActionItem(@Body @Valid ActionItemCreateDT
5350
* @return {@link HttpResponse< ActionItem >}
5451
*/
5552
@Put
56-
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
5753
public HttpResponse<?> updateActionItem(@Body @Valid ActionItem actionItem, HttpRequest<?> request) {
5854
ActionItem updatedActionItem = actionItemServices.update(actionItem);
5955
return HttpResponse
@@ -70,7 +66,6 @@ public HttpResponse<?> updateActionItem(@Body @Valid ActionItem actionItem, Http
7066
* @param id, id of {@link ActionItem} to delete
7167
*/
7268
@Delete("/{id}")
73-
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
7469
public HttpResponse<?> deleteActionItem(UUID id) {
7570
actionItemServices.delete(id);
7671
return HttpResponse
@@ -84,7 +79,6 @@ public HttpResponse<?> deleteActionItem(UUID id) {
8479
* @return {@link ActionItem}
8580
*/
8681
@Get("/{id}")
87-
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
8882
public ActionItem readActionItem(UUID id) {
8983
return actionItemServices.read(id);
9084
}
@@ -97,7 +91,6 @@ public ActionItem readActionItem(UUID id) {
9791
* @return {@link List < CheckIn > list of checkins}
9892
*/
9993
@Get("/{?checkinid,createdbyid}")
100-
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
10194
public Set<ActionItem> findActionItems(@Nullable UUID checkinid,
10295
@Nullable UUID createdbyid) {
10396
return actionItemServices.findByFields(checkinid, createdbyid);

server/src/main/java/com/objectcomputing/checkins/services/action_item/ActionItemServicesImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.objectcomputing.checkins.services.action_item;
22

3+
import com.objectcomputing.checkins.services.permissions.Permission;
4+
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
35
import com.objectcomputing.checkins.services.validate.crud.CRUDValidator;
46
import jakarta.inject.Named;
57
import jakarta.inject.Singleton;
@@ -24,6 +26,7 @@ public ActionItemServicesImpl(ActionItemRepository actionItemRepo,
2426
this.crudValidator = crudValidator;
2527
}
2628

29+
@RequiredPermission(Permission.CAN_CREATE_CHECKINS)
2730
public ActionItem save(@Valid @NotNull ActionItem actionItem) {
2831
ActionItem actionItemRet;
2932

@@ -45,6 +48,7 @@ public ActionItem save(@Valid @NotNull ActionItem actionItem) {
4548

4649
}
4750

51+
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
4852
public ActionItem read(@NotNull UUID id) {
4953

5054
ActionItem actionItemResult = actionItemRepo.findById(id).orElse(null);
@@ -56,6 +60,7 @@ public ActionItem read(@NotNull UUID id) {
5660

5761
}
5862

63+
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
5964
public ActionItem update(@Valid @NotNull ActionItem actionItem) {
6065
ActionItem actionItemRet = null;
6166

@@ -68,6 +73,7 @@ public ActionItem update(@Valid @NotNull ActionItem actionItem) {
6873

6974
}
7075

76+
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
7177
public Set<ActionItem> findByFields(UUID checkinid, UUID createdbyid) {
7278

7379
crudValidator.validatePermissionsFindByFields(checkinid, createdbyid);
@@ -79,6 +85,7 @@ public Set<ActionItem> findByFields(UUID checkinid, UUID createdbyid) {
7985

8086
}
8187

88+
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
8289
public void delete(@NotNull UUID id) {
8390
ActionItem actionItemResult = actionItemRepo.findById(id).orElse(null);
8491

server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemController.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import com.objectcomputing.checkins.exceptions.NotFoundException;
44
import com.objectcomputing.checkins.services.checkins.CheckIn;
5-
import com.objectcomputing.checkins.services.permissions.Permission;
6-
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
75
import io.micronaut.core.annotation.Nullable;
86
import io.micronaut.http.HttpResponse;
97
import io.micronaut.http.HttpStatus;
@@ -46,7 +44,6 @@ class AgendaItemController {
4644
* @return {@link HttpResponse <AgendaItem>}
4745
*/
4846
@Post("/")
49-
@RequiredPermission(Permission.CAN_CREATE_CHECKINS)
5047
HttpResponse<AgendaItem> createAgendaItem(@Body @Valid AgendaItemCreateDTO agendaItem) {
5148
AgendaItem createAgendaItem = agendaItemServices.save(new AgendaItem(agendaItem.getCheckinid(), agendaItem.getCreatedbyid(), agendaItem.getDescription()));
5249
URI location = UriBuilder.of(PATH).path(createAgendaItem.getId().toString()).build();
@@ -61,7 +58,6 @@ HttpResponse<AgendaItem> createAgendaItem(@Body @Valid AgendaItemCreateDTO agend
6158
* @return {@link HttpResponse<AgendaItem>}
6259
*/
6360
@Put("/")
64-
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
6561
HttpResponse<?> updateAgendaItem(@Body @Valid AgendaItem agendaItem) {
6662
if (agendaItem == null) {
6763
return HttpResponse.ok();
@@ -81,7 +77,6 @@ HttpResponse<?> updateAgendaItem(@Body @Valid AgendaItem agendaItem) {
8177
* @return a Set of {@link CheckIn}
8278
*/
8379
@Get("/{?checkinid,createdbyid}")
84-
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
8580
Set<AgendaItem> findAgendaItems(@Nullable UUID checkinid, @Nullable UUID createdbyid) {
8681
return agendaItemServices.findByFields(checkinid, createdbyid);
8782
}
@@ -93,7 +88,6 @@ Set<AgendaItem> findAgendaItems(@Nullable UUID checkinid, @Nullable UUID created
9388
* @return {@link AgendaItem}
9489
*/
9590
@Get("/{id}")
96-
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
9791
AgendaItem readAgendaItem(UUID id) {
9892
AgendaItem read = agendaItemServices.read(id);
9993
if (read == null) {
@@ -112,4 +106,4 @@ AgendaItem readAgendaItem(UUID id) {
112106
void deleteAgendaItem(UUID id) {
113107
agendaItemServices.delete(id);
114108
}
115-
}
109+
}

server/src/main/java/com/objectcomputing/checkins/services/agenda_item/AgendaItemServicesImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.objectcomputing.checkins.services.agenda_item;
22

3+
import com.objectcomputing.checkins.services.permissions.Permission;
4+
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
35
import com.objectcomputing.checkins.exceptions.BadArgException;
46
import com.objectcomputing.checkins.exceptions.PermissionException;
57
import com.objectcomputing.checkins.services.checkins.CheckIn;
@@ -44,6 +46,7 @@ public AgendaItemServicesImpl(CheckInRepository checkinRepo,
4446
}
4547
// todo remove manual validations throughout class in favor of jakarta validations at api level.
4648
@Override
49+
@RequiredPermission(Permission.CAN_CREATE_CHECKINS)
4750
public AgendaItem save(AgendaItem agendaItem) {
4851
AgendaItem agendaItemRet = null;
4952
if (agendaItem != null) {
@@ -82,6 +85,7 @@ public AgendaItem save(AgendaItem agendaItem) {
8285
}
8386

8487
@Override
88+
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
8589
public AgendaItem read(@NotNull UUID id) {
8690
final UUID currentUserId = currentUserServices.getCurrentUser().getId();
8791
boolean canViewAllCheckins = checkInServices.canViewAllCheckins(currentUserId);
@@ -102,6 +106,7 @@ public AgendaItem read(@NotNull UUID id) {
102106

103107

104108
@Override
109+
@RequiredPermission(Permission.CAN_UPDATE_CHECKINS)
105110
public AgendaItem update(AgendaItem agendaItem) {
106111
AgendaItem agendaItemRet = null;
107112

@@ -138,6 +143,7 @@ public AgendaItem update(AgendaItem agendaItem) {
138143
}
139144

140145
@Override
146+
@RequiredPermission(Permission.CAN_VIEW_CHECKINS)
141147
public Set<AgendaItem> findByFields(@Nullable UUID checkinId, @Nullable UUID createdById) {
142148
MemberProfile currentUser = currentUserServices.getCurrentUser();
143149
if(!checkInServices.doesUserHaveViewAccess(currentUser.getId(), checkinId, createdById)){
@@ -174,4 +180,4 @@ private void validate(boolean isError, String message, Object... args) {
174180
throw new BadArgException(String.format(message, args));
175181
}
176182
}
177-
}
183+
}

server/src/main/java/com/objectcomputing/checkins/services/certification/CertificationController.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.objectcomputing.checkins.services.certification;
22

3-
import com.objectcomputing.checkins.services.permissions.Permission;
4-
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
53
import io.micronaut.http.HttpStatus;
64
import io.micronaut.http.annotation.Body;
75
import io.micronaut.http.annotation.Controller;
@@ -68,7 +66,6 @@ Certification create(@Body @Valid CertificationDTO certification) {
6866
* @return the updated {@link Certification}
6967
*/
7068
@Put("/{id}")
71-
@RequiredPermission(Permission.CAN_MANAGE_CERTIFICATIONS)
7269
Certification update(@NotNull UUID id, @Body @Valid CertificationDTO certification) {
7370
return certificationService.updateCertification(new Certification(
7471
id,
@@ -86,7 +83,6 @@ Certification update(@NotNull UUID id, @Body @Valid CertificationDTO certificati
8683
* @return the merged {@link Certification}
8784
*/
8885
@Post("/merge")
89-
@RequiredPermission(Permission.CAN_MANAGE_CERTIFICATIONS)
9086
Certification mergeCertifications(@Valid @Body CertificationMergeDTO certificationMergeDTO) {
9187
return certificationService.mergeCertifications(certificationMergeDTO.getSourceId(), certificationMergeDTO.getTargetId());
9288
}

server/src/main/java/com/objectcomputing/checkins/services/certification/CertificationServiceImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.objectcomputing.checkins.services.memberprofile.MemberProfileRepository;
55
import com.objectcomputing.checkins.services.memberprofile.currentuser.CurrentUserServices;
66
import com.objectcomputing.checkins.services.permissions.Permission;
7+
import com.objectcomputing.checkins.services.permissions.RequiredPermission;
78
import com.objectcomputing.checkins.services.role.role_permissions.RolePermissionServices;
89
import io.micronaut.core.annotation.Nullable;
910
import jakarta.transaction.Transactional;
@@ -59,6 +60,7 @@ public Certification saveCertification(Certification certification) {
5960
}
6061

6162
@Override
63+
@RequiredPermission(Permission.CAN_MANAGE_CERTIFICATIONS)
6264
public Certification updateCertification(Certification certification) {
6365
// Fail if a certification with the same name already exists (but it's not this one)
6466
validate(certificationRepository.getByName(certification.getName())
@@ -109,6 +111,7 @@ public void deleteEarnedCertification(UUID id) {
109111

110112
@Override
111113
@Transactional
114+
@RequiredPermission(Permission.CAN_MANAGE_CERTIFICATIONS)
112115
public Certification mergeCertifications(UUID sourceId, UUID targetId) {
113116
Optional<Certification> target = certificationRepository.findById(targetId);
114117
Optional<Certification> source = certificationRepository.findById(sourceId);

0 commit comments

Comments
 (0)