diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/SystemApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/SystemApiController.java index 82c9f057..0e9e582a 100644 --- a/api/src/main/java/io/sentrius/sso/controllers/api/SystemApiController.java +++ b/api/src/main/java/io/sentrius/sso/controllers/api/SystemApiController.java @@ -149,7 +149,7 @@ public String setOption(HttpServletRequest request, HttpServletResponse response } else if (someFailed) { updateOption = MessagingUtil.SOME_SETTINGS_FAIL; } - return "redirect:/sso/v1/settings?message=" + MessagingUtil.getMessageId(updateOption); + return "redirect:/sso/v1/system/settings?message=" + MessagingUtil.getMessageId(updateOption); } diff --git a/api/src/main/java/io/sentrius/sso/startup/ConfigurationApplicationTask.java b/api/src/main/java/io/sentrius/sso/startup/ConfigurationApplicationTask.java index 8b68fafd..b715e84c 100644 --- a/api/src/main/java/io/sentrius/sso/startup/ConfigurationApplicationTask.java +++ b/api/src/main/java/io/sentrius/sso/startup/ConfigurationApplicationTask.java @@ -89,7 +89,7 @@ public void afterStartup() throws IOException, GeneralSecurityException, JSchExc var hash = new String(digest.digest()); AtomicBoolean recreate = new AtomicBoolean(false); - configurationOptionRepository.findByConfigurationName("yamlConfigurationFileHash") + configurationOptionRepository.findLatestByConfigurationName("yamlConfigurationFileHash") .ifPresentOrElse( configurationOption -> { if (!hash.equals(configurationOption.getConfigurationValue())) { diff --git a/api/src/test/java/io/sentrius/startup/PostStartupTaskTest.java b/api/src/test/java/io/sentrius/startup/PostStartupTaskTest.java index 40dda4a2..3857f841 100644 --- a/api/src/test/java/io/sentrius/startup/PostStartupTaskTest.java +++ b/api/src/test/java/io/sentrius/startup/PostStartupTaskTest.java @@ -79,7 +79,7 @@ void testAfterStartupWithYamlConfiguration() mockConfigOption.setConfigurationName("yamlConfigurationFileHash"); mockConfigOption.setConfigurationValue("oldHash"); - Mockito.when(configurationOptionRepository.findByConfigurationName("yamlConfigurationFileHash")) + Mockito.when(configurationOptionRepository.findLatestByConfigurationName("yamlConfigurationFileHash")) .thenReturn(Optional.of(mockConfigOption)); Mockito.when(userService.addUscer(ArgumentMatchers.any(User.class))).thenReturn(User.builder().id(1L).name("name").build()); @@ -87,7 +87,7 @@ void testAfterStartupWithYamlConfiguration() postStartupTask.afterStartup(); // Verify interactions - Mockito.verify(configurationOptionRepository).findByConfigurationName("yamlConfigurationFileHash"); + Mockito.verify(configurationOptionRepository).findLatestByConfigurationName("yamlConfigurationFileHash"); Mockito.verify(configurationOptionRepository).save(mockConfigOption); // Assertions @@ -103,7 +103,7 @@ void testAfterStartupNoYamlConfiguration() throws IOException, GeneralSecurityEx postStartupTask.afterStartup(); // Verify no interactions with repositories - Mockito.verify(configurationOptionRepository, Mockito.never()).findByConfigurationName( + Mockito.verify(configurationOptionRepository, Mockito.never()).findLatestByConfigurationName( ArgumentMatchers.anyString()); } } diff --git a/core/src/main/java/io/sentrius/sso/core/config/ThreadSafeDynamicPropertiesService.java b/core/src/main/java/io/sentrius/sso/core/config/ThreadSafeDynamicPropertiesService.java index 6d31cb98..064695d1 100644 --- a/core/src/main/java/io/sentrius/sso/core/config/ThreadSafeDynamicPropertiesService.java +++ b/core/src/main/java/io/sentrius/sso/core/config/ThreadSafeDynamicPropertiesService.java @@ -79,7 +79,7 @@ private void loadProperties() { public void updateProperty(String key, String value) throws IOException { lock.writeLock().lock(); try{ - configurationOptionRepository.save(ConfigurationOption.builder().build()); + configurationOptionRepository.save(ConfigurationOption.builder().configurationName(key).configurationValue(null == value ? "" : value).build()); } finally { lock.writeLock().unlock(); } @@ -89,7 +89,7 @@ public void updateProperty(String key, String value) throws IOException { public String getProperty(String key, String defaultValue) { lock.readLock().lock(); try { - var dbOption = configurationOptionRepository.findByConfigurationName(key); + var dbOption = configurationOptionRepository.findLatestByConfigurationName(key); if (dbOption.isEmpty()) { return properties.getProperty(key, defaultValue); } diff --git a/core/src/main/java/io/sentrius/sso/core/repository/ConfigurationOptionRepository.java b/core/src/main/java/io/sentrius/sso/core/repository/ConfigurationOptionRepository.java index c1e45105..3c203cfa 100644 --- a/core/src/main/java/io/sentrius/sso/core/repository/ConfigurationOptionRepository.java +++ b/core/src/main/java/io/sentrius/sso/core/repository/ConfigurationOptionRepository.java @@ -3,8 +3,11 @@ import java.util.Optional; import io.sentrius.sso.core.model.ConfigurationOption; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface ConfigurationOptionRepository extends JpaRepository { - Optional findByConfigurationName(String configurationName); + @Query("SELECT c FROM ConfigurationOption c WHERE c.configurationName = :configurationName ORDER BY c.id DESC LIMIT 1") + Optional findLatestByConfigurationName(@Param("configurationName") String configurationName); }