Skip to content

Commit 21d9722

Browse files
authored
Feature/9272/automatic secret refresh from azure (#9286)
* 9272/added properties classes and refresh-interval * 9272/change jwt tool * 9272/change RestClient * 9272/change UserRemoteClientConfig * 9272/change ManagmentEventController * 9272/change ManagmentController * 9272/change NotificationServiceImpl * 9272/change OpenAIServiceImpl * 9272/change GoogleApiConfiguration * 9272/change CommentServiceImpl * 9272/change HabbitAssignController * 9272/change EcoNewsController * 9272/change DatabaseBackupServiceImpl * 9272/formatting * 9272/added tests to properties class * 9272/fix CodeRabbit and Sonar issues
1 parent d04181c commit 21d9722

35 files changed

+1100
-159
lines changed

core/src/main/java/greencity/controller/EcoNewsController.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import greencity.dto.user.UserVO;
2828
import greencity.exception.exceptions.NotFoundException;
2929
import greencity.exception.exceptions.WrongIdException;
30+
import greencity.properties.OpenAiProperties;
3031
import greencity.service.EcoNewsRelevanceService;
3132
import greencity.service.EcoNewsService;
3233
import greencity.service.TagsService;
@@ -42,7 +43,6 @@
4243
import java.util.List;
4344
import java.util.Locale;
4445
import lombok.RequiredArgsConstructor;
45-
import org.springframework.beans.factory.annotation.Value;
4646
import org.springframework.data.domain.Pageable;
4747
import org.springframework.http.HttpStatus;
4848
import org.springframework.http.MediaType;
@@ -67,9 +67,7 @@ public class EcoNewsController {
6767
private final EcoNewsService ecoNewsService;
6868
private final TagsService tagService;
6969
private final EcoNewsRelevanceService ecoNewsRelevanceService;
70-
71-
@Value("${greencity.relevance.enabled}")
72-
private String relevanceServiceStatus;
70+
private final OpenAiProperties openAiProperties;
7371

7472
/**
7573
* Method for creating {@link EcoNewsVO}.
@@ -225,7 +223,7 @@ public ResponseEntity<PageableAdvancedDto<EcoNewsGenericDto>> findAll(
225223
})
226224
@GetMapping("/relevance-enabled")
227225
public ResponseEntity<Boolean> isRelevanceEnabled() {
228-
boolean isRelevanceEnabled = relevanceServiceStatus.equals("enabled");
226+
boolean isRelevanceEnabled = openAiProperties.getRelevance().equals("enabled");
229227
return ResponseEntity.status(HttpStatus.OK).body(isRelevanceEnabled);
230228
}
231229

core/src/main/java/greencity/controller/HabitAssignController.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import greencity.dto.habit.HabitWorkingDaysDto;
2222
import greencity.dto.habitstatuscalendar.HabitStatusCalendarDto;
2323
import greencity.dto.user.UserVO;
24+
import greencity.properties.RemoteWebClientProperties;
2425
import greencity.service.HabitAssignService;
2526
import io.swagger.v3.oas.annotations.Operation;
2627
import io.swagger.v3.oas.annotations.Parameter;
@@ -38,7 +39,6 @@
3839
import java.util.List;
3940
import java.util.Locale;
4041
import lombok.RequiredArgsConstructor;
41-
import org.springframework.beans.factory.annotation.Value;
4242
import org.springframework.data.domain.Pageable;
4343
import org.springframework.format.annotation.DateTimeFormat;
4444
import org.springframework.http.HttpStatus;
@@ -63,8 +63,7 @@
6363
public class HabitAssignController {
6464
private final HabitAssignService habitAssignService;
6565

66-
@Value("${client.address}")
67-
private String redirectUrl;
66+
private final RemoteWebClientProperties remoteWebClientProperties;
6867

6968
/**
7069
* Method which assigns habit for {@link UserVO} with default props.
@@ -747,7 +746,7 @@ public ResponseEntity<ResponseEntity.BodyBuilder> inviteFriendRequest(@PathVaria
747746
public ResponseEntity<Void> confirmInvitation(@PathVariable Long habitAssignId) {
748747
habitAssignService.confirmHabitInvitation(habitAssignId);
749748
return ResponseEntity.status(HttpStatus.FOUND)
750-
.location(URI.create(redirectUrl + "/#/profile"))
749+
.location(URI.create(remoteWebClientProperties.getClientAddress() + "/#/profile"))
751750
.build();
752751
}
753752

core/src/main/java/greencity/webcontroller/ManagementController.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package greencity.webcontroller;
22

3+
import greencity.properties.RemoteWebClientProperties;
34
import greencity.security.utils.SecurityUtils;
45
import lombok.RequiredArgsConstructor;
5-
import org.springframework.beans.factory.annotation.Value;
66
import org.springframework.stereotype.Controller;
77
import org.springframework.web.bind.annotation.GetMapping;
88
import org.springframework.web.bind.annotation.RequestMapping;
@@ -12,8 +12,7 @@
1212
@RequiredArgsConstructor
1313
@RequestMapping
1414
public class ManagementController {
15-
@Value("${greencityuser.server.address}")
16-
private String greenCityUserServerAddress;
15+
private final RemoteWebClientProperties remoteWebClientProperties;
1716

1817
/**
1918
* Returns index page.
@@ -48,10 +47,11 @@ public String redirectLogin() {
4847
@GetMapping("/management/login")
4948
public String login() {
5049
if (!SecurityUtils.isAuthenticated()) {
51-
String managementLoginUrl = UriComponentsBuilder.fromHttpUrl(greenCityUserServerAddress)
52-
.path("/management/login")
53-
.build()
54-
.toUriString();
50+
String managementLoginUrl =
51+
UriComponentsBuilder.fromHttpUrl(remoteWebClientProperties.getGreencityUserServerAddress())
52+
.path("/management/login")
53+
.build()
54+
.toUriString();
5555
return "redirect:" + managementLoginUrl;
5656
} else {
5757
return "redirect:/management";

core/src/main/java/greencity/webcontroller/ManagementEventController.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import greencity.dto.filter.FilterEventDto;
1515
import greencity.dto.user.UserProfilePictureDto;
1616
import greencity.enums.TagType;
17+
import greencity.properties.GoogleProperties;
18+
import greencity.properties.RemoteWebClientProperties;
1719
import greencity.service.EventService;
1820
import greencity.service.TagsService;
1921
import io.swagger.v3.oas.annotations.Operation;
@@ -26,7 +28,6 @@
2628
import lombok.RequiredArgsConstructor;
2729
import lombok.extern.slf4j.Slf4j;
2830
import org.modelmapper.ModelMapper;
29-
import org.springframework.beans.factory.annotation.Value;
3031
import org.springframework.data.domain.Page;
3132
import org.springframework.data.domain.PageRequest;
3233
import org.springframework.data.domain.Pageable;
@@ -87,12 +88,8 @@ public class ManagementEventController {
8788
private final TagsService tagsService;
8889
private final RestClient restClient;
8990
private final ModelMapper getModelMapper;
90-
91-
@Value("${google.maps.api.key}")
92-
private String googleMapApiKey;
93-
94-
@Value("${address}")
95-
private String backendAddress;
91+
private final RemoteWebClientProperties remoteWebClientProperties;
92+
private final GoogleProperties googleProperties;
9693

9794
/**
9895
* Method that returns management page with all {@link EventDto}.
@@ -129,7 +126,7 @@ public String getAllEvents(@RequestParam(required = false, name = "query") Strin
129126
model.addAttribute(SORT_MODEL, orderUrl.toString());
130127
model.addAttribute(EVENT_TAGS, tagsService.findByTypeAndLanguageCode(TagType.EVENT, locale.getLanguage()));
131128
model.addAttribute(PAGE_SIZE, pageable.getPageSize());
132-
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, backendAddress);
129+
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, remoteWebClientProperties.getGreencityServerAddress());
133130
model.addAttribute(CITIES,
134131
eventService.getAllEventsAddresses().stream()
135132
.map(e -> "en".equals(locale.getLanguage()) ? e.getCityEn() : e.getCityUk())
@@ -193,9 +190,9 @@ public String getUsersDislikedEvent(@PathVariable("eventId") Long eventId,
193190
public String getEventCreatePage(Model model, Principal principal) {
194191
model.addAttribute(ADD_EVENT_DTO_REQUEST, new AddEventDtoRequest());
195192
model.addAttribute(IMAGES, new MultipartFile[] {});
196-
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, backendAddress);
193+
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, remoteWebClientProperties.getGreencityServerAddress());
197194
model.addAttribute(AUTHOR, restClient.findByEmail(principal.getName()).getName());
198-
model.addAttribute(GOOGLE_MAP_API_KEY, googleMapApiKey);
195+
model.addAttribute(GOOGLE_MAP_API_KEY, googleProperties.getGoogleMapApiKey());
199196
return "core/management_create_event";
200197
}
201198

@@ -245,10 +242,10 @@ public ResponseEntity<EventDto> update(
245242

246243
@GetMapping("/edit/{id}")
247244
public String editEvent(@PathVariable("id") Long id, Model model, Principal principal) {
248-
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, backendAddress);
245+
model.addAttribute(BACKEND_ADDRESS_ATTRIBUTE, remoteWebClientProperties.getGreencityServerAddress());
249246
model.addAttribute(AUTHOR, restClient.findByEmail(principal.getName()).getName());
250247
model.addAttribute(EVENT_DTO, eventService.getEvent(id, principal));
251-
model.addAttribute(GOOGLE_MAP_API_KEY, googleMapApiKey);
248+
model.addAttribute(GOOGLE_MAP_API_KEY, googleProperties.getGoogleMapApiKey());
252249
return "core/management_edit_event";
253250
}
254251

core/src/main/resources/application.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=${KEY_VAULT_ENDPOINT}
2+
spring.cloud.azure.keyvault.secret.property-sources[0].refresh-interval=15m
23

34
#Azure Connection
45
spring.cloud.azure.credential.client-id=${AZURE_CLIENT_ID}

core/src/test/java/greencity/controller/EcoNewsControllerTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import greencity.dto.user.UserVO;
2020
import greencity.exception.exceptions.NotFoundException;
2121
import greencity.exception.handler.CustomExceptionHandler;
22+
import greencity.properties.OpenAiProperties;
2223
import greencity.security.jwt.JwtTool;
2324
import greencity.service.EcoNewsRelevanceService;
2425
import greencity.service.EcoNewsService;
@@ -85,6 +86,8 @@ class EcoNewsControllerTest {
8586
@Mock
8687
private ModelMapper modelMapper;
8788
@Mock
89+
private OpenAiProperties openAiProperties;
90+
@Mock
8891
JwtTool jwtTool;
8992

9093
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@@ -99,7 +102,7 @@ static void setup() {
99102
}
100103

101104
@BeforeEach
102-
public void setUp() {
105+
void setUp() {
103106
this.mockMvc = MockMvcBuilders
104107
.standaloneSetup(ecoNewsController)
105108
.setCustomArgumentResolvers(
@@ -114,6 +117,8 @@ public void setUp() {
114117
.thenReturn(jwt);
115118
when(jwtTool.extractUserId(jwt))
116119
.thenReturn(TestConst.USER_ID);
120+
when(openAiProperties.getRelevance())
121+
.thenReturn("enabled");
117122
}
118123

119124
@Test

core/src/test/java/greencity/controller/HabitAssignControllerTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import greencity.dto.habit.UserToDoAndCustomToDoListsDto;
1111
import greencity.dto.user.UserVO;
1212
import greencity.enums.HabitAssignStatus;
13+
import greencity.properties.RemoteWebClientProperties;
1314
import greencity.security.jwt.JwtTool;
1415
import greencity.service.HabitAssignService;
1516
import greencity.service.UserService;
@@ -54,6 +55,9 @@ class HabitAssignControllerTest {
5455
@Mock
5556
private UserService userService;
5657

58+
@Mock
59+
private RemoteWebClientProperties remoteWebClientProperties;
60+
5761
@Mock
5862
JwtTool jwtTool;
5963

@@ -79,6 +83,8 @@ void setUp() {
7983
.thenReturn(jwt);
8084
lenient().when(jwtTool.extractUserId(jwt))
8185
.thenReturn(TestConst.USER_ID);
86+
lenient().when(remoteWebClientProperties.getClientAddress())
87+
.thenReturn("http://localhost:4200/");
8288
}
8389

8490
@Test

core/src/test/java/greencity/webcontroller/ManagementControllerTest.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
11
package greencity.webcontroller;
22

33
import greencity.TestConst;
4+
import greencity.properties.RemoteWebClientProperties;
45
import org.junit.jupiter.api.BeforeEach;
56
import org.junit.jupiter.api.Test;
67
import org.junit.jupiter.api.extension.ExtendWith;
78
import org.mockito.InjectMocks;
9+
import org.mockito.Mock;
810
import org.mockito.junit.jupiter.MockitoExtension;
911
import org.mockito.junit.jupiter.MockitoSettings;
1012
import org.mockito.quality.Strictness;
1113
import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
1214
import org.springframework.security.authentication.AnonymousAuthenticationToken;
1315
import org.springframework.security.core.authority.AuthorityUtils;
1416
import org.springframework.security.core.context.SecurityContextHolder;
15-
import org.springframework.test.util.ReflectionTestUtils;
1617
import org.springframework.test.web.servlet.MockMvc;
1718
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
1819
import org.springframework.web.util.UriComponentsBuilder;
1920

21+
import static org.mockito.Mockito.when;
2022
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
2123
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
2224

@@ -25,6 +27,9 @@
2527
class ManagementControllerTest {
2628
private MockMvc mockMvc;
2729

30+
@Mock
31+
private RemoteWebClientProperties remoteWebClientProperties;
32+
2833
private static final String link = "/management";
2934
private static final String loginLink = "/login";
3035

@@ -54,8 +59,8 @@ void redirectLoginTest() throws Exception {
5459

5560
@Test
5661
void loginTest() throws Exception {
57-
ReflectionTestUtils.setField(managementController,
58-
"greenCityUserServerAddress", TestConst.GREENCITY_USER_SERVER_ADDRESS);
62+
when(remoteWebClientProperties.getGreencityUserServerAddress())
63+
.thenReturn(TestConst.GREENCITY_USER_SERVER_ADDRESS);
5964

6065
SecurityContextHolder.getContext()
6166
.setAuthentication(new AnonymousAuthenticationToken("GUEST", "anonymousUser", AuthorityUtils

core/src/test/java/greencity/webcontroller/ManagementEventControllerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import greencity.dto.user.UserVO;
1414
import greencity.entity.event.Event;
1515
import greencity.enums.TagType;
16+
import greencity.properties.GoogleProperties;
17+
import greencity.properties.RemoteWebClientProperties;
1618
import greencity.repository.EventRepo;
1719
import greencity.service.EventService;
1820
import greencity.service.TagsService;
@@ -78,11 +80,19 @@ class ManagementEventControllerTest {
7880
private Validator mockValidator;
7981
@Mock
8082
private Locale defaultLocale;
83+
@Mock
84+
private RemoteWebClientProperties remoteWebClientProperties;
85+
@Mock
86+
private GoogleProperties googleProperties;
8187

8288
@BeforeEach
8389
void setUp() {
8490
defaultLocale = Locale.getDefault();
8591
Locale.setDefault(Locale.ENGLISH);
92+
when(remoteWebClientProperties.getGreencityUserServerAddress())
93+
.thenReturn("http://localhost:8060/");
94+
when(googleProperties.getGoogleApiKey())
95+
.thenReturn("mock-api-key");
8696
this.mockMvc = MockMvcBuilders.standaloneSetup(managementEventController)
8797
.setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
8898
.setValidator(mockValidator)

service-api/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,5 +137,11 @@
137137
<artifactId>reactor-test</artifactId>
138138
<scope>test</scope>
139139
</dependency>
140+
<dependency>
141+
<groupId>io.github.hakky54</groupId>
142+
<artifactId>logcaptor</artifactId>
143+
<version>2.12.1</version>
144+
<scope>test</scope>
145+
</dependency>
140146
</dependencies>
141147
</project>

0 commit comments

Comments
 (0)