diff --git a/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryUserPermissionsReloader.java b/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryUserPermissionsReloader.java index 7dfef480..75cd94bb 100644 --- a/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryUserPermissionsReloader.java +++ b/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryUserPermissionsReloader.java @@ -43,14 +43,17 @@ public InMemoryUserPermissionsReloader(SimpMessagingTemplate eventSender, UserDe public void reloadPermissions() { super.reloadPermissions(); List.of(ADMIN_USERNAME, EDITOR_USERNAME, VIEWER_USERNAME, SUPERUSER_USERNAME).forEach(user -> { - try { - String[] fileContent = Files.readString(getPath(user)).split(";"); - userDetailsService.updateUser(User.withUsername(user) - .password(String.format("{noop}%s", fileContent[0])) - .authorities(userRolesMapping.mapToKouncilRoles(Set.of(fileContent[1].split(",")))) - .build()); - } catch (IOException e) { - throw new KouncilRuntimeException(e); + Path path = getPath(user); + if (Files.exists(path)) { + try { + String[] fileContent = Files.readString(path).split(";"); + userDetailsService.updateUser(User.withUsername(user) + .password(String.format("{noop}%s", fileContent[0])) + .authorities(userRolesMapping.mapToKouncilRoles(Set.of(fileContent[1].split(",")))) + .build()); + } catch (IOException e) { + throw new KouncilRuntimeException(e); + } } }); } diff --git a/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryWebSecurityConfig.java b/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryWebSecurityConfig.java index 5a39c58b..cc630f96 100644 --- a/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryWebSecurityConfig.java +++ b/kouncil-backend/src/main/java/com/consdata/kouncil/config/security/inmemory/InMemoryWebSecurityConfig.java @@ -31,6 +31,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; @@ -53,6 +54,7 @@ @RequiredArgsConstructor @ConditionalOnProperty(prefix = "kouncil.auth", name = "active-provider", havingValue = "inmemory") @EnableGlobalMethodSecurity(jsr250Enabled = true, securedEnabled = true, prePostEnabled = true) +@DependsOn({"userGroupsConfigReader"}) public class InMemoryWebSecurityConfig { private final UserRolesMapping userRolesMapping; diff --git a/kouncil-backend/src/test/java/com/consdata/kouncil/security/AuthControllerTest.java b/kouncil-backend/src/test/java/com/consdata/kouncil/security/AuthControllerTest.java index 16d2c91b..8b305bd2 100644 --- a/kouncil-backend/src/test/java/com/consdata/kouncil/security/AuthControllerTest.java +++ b/kouncil-backend/src/test/java/com/consdata/kouncil/security/AuthControllerTest.java @@ -5,7 +5,10 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.consdata.kouncil.config.security.UserGroupsConfigReader; import com.consdata.kouncil.config.security.inmemory.InMemoryWebSecurityConfig; +import com.consdata.kouncil.security.function.SystemFunctionsRepository; +import com.consdata.kouncil.security.group.UserGroupRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; @@ -19,13 +22,17 @@ @ExtendWith(SpringExtension.class) @WebMvcTest(value = AuthController.class) -@ContextConfiguration(classes = {AuthController.class, InMemoryWebSecurityConfig.class}) +@ContextConfiguration(classes = {AuthController.class, InMemoryWebSecurityConfig.class, UserGroupsConfigReader.class}) class AuthControllerTest { @Autowired private MockMvc mockMvc; @MockBean private UserRolesMapping userRolesMapping; + @MockBean + private SystemFunctionsRepository systemFunctionsRepository; + @MockBean + private UserGroupRepository userGroupRepository; @Test void should_authenticate_user() throws Exception { diff --git a/kouncil-backend/src/test/java/com/consdata/kouncil/security/FirstTimeLoginControllerInMemoryTest.java b/kouncil-backend/src/test/java/com/consdata/kouncil/security/FirstTimeLoginControllerInMemoryTest.java index 65ac1c89..c10b2685 100644 --- a/kouncil-backend/src/test/java/com/consdata/kouncil/security/FirstTimeLoginControllerInMemoryTest.java +++ b/kouncil-backend/src/test/java/com/consdata/kouncil/security/FirstTimeLoginControllerInMemoryTest.java @@ -9,9 +9,12 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.consdata.kouncil.config.security.UserGroupsConfigReader; import com.consdata.kouncil.config.security.inmemory.FirstTimeLoginController; -import com.consdata.kouncil.config.security.inmemory.InMemoryWebSecurityConfig; import com.consdata.kouncil.config.security.inmemory.InMemoryUserManager; +import com.consdata.kouncil.config.security.inmemory.InMemoryWebSecurityConfig; +import com.consdata.kouncil.security.function.SystemFunctionsRepository; +import com.consdata.kouncil.security.group.UserGroupRepository; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -27,13 +30,17 @@ @ExtendWith(SpringExtension.class) @WebMvcTest(value = AuthController.class) -@ContextConfiguration(classes = {FirstTimeLoginController.class, InMemoryUserManager.class, InMemoryWebSecurityConfig.class}) +@ContextConfiguration(classes = {FirstTimeLoginController.class, InMemoryUserManager.class, InMemoryWebSecurityConfig.class, UserGroupsConfigReader.class}) class FirstTimeLoginControllerInMemoryTest { @Autowired private MockMvc mockMvc; @MockBean private UserRolesMapping userRolesMapping; + @MockBean + private SystemFunctionsRepository systemFunctionsRepository; + @MockBean + private UserGroupRepository userGroupRepository; @Test @WithMockUser(username = "admin", roles = {"ADMIN"}) diff --git a/kouncil-frontend/apps/kouncil/src/app/login/change-password.component.scss b/kouncil-frontend/apps/kouncil/src/app/login/change-password.component.scss index e69de29b..b9bc65ea 100644 --- a/kouncil-frontend/apps/kouncil/src/app/login/change-password.component.scss +++ b/kouncil-frontend/apps/kouncil/src/app/login/change-password.component.scss @@ -0,0 +1,3 @@ +:host { + width: 100%; +}