diff --git a/pom.xml b/pom.xml index bbdfcce0..2e5d7162 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ api jar ${project.groupId}:${project.artifactId} - 3.4.21-SNAPSHOT + 3.4.22-SNAPSHOT Hygieia Rest API Layer https://github.com/Hygieia/api @@ -69,7 +69,7 @@ 3.10 2.2.0-RC2 29.0-jre - 5.4.2.Final + 6.1.5.Final 2.10.3 1.18 1.2.3 diff --git a/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java b/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java index b897da3b..71452771 100644 --- a/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java +++ b/src/main/java/com/capitalone/dashboard/service/UserInfoServiceImpl.java @@ -5,6 +5,7 @@ import java.util.Properties; import com.capitalone.dashboard.auth.AuthProperties; +import com.capitalone.dashboard.settings.ApiSettings; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -38,12 +39,16 @@ public class UserInfoServiceImpl implements UserInfoService { @Autowired private AuthProperties authProperties; + private final ApiSettings apiSettings; + + private InitialDirContext initialDirContext; @Autowired - public UserInfoServiceImpl(UserInfoRepository userInfoRepository, AuthProperties authProperties) { + public UserInfoServiceImpl(UserInfoRepository userInfoRepository, AuthProperties authProperties, ApiSettings apiSettings) { this.userInfoRepository = userInfoRepository; this.authProperties = authProperties; + this.apiSettings = apiSettings; } @Override @@ -199,9 +204,9 @@ public boolean searchLdapUser(String searchId) throws NamingException { private Properties setProperties() { Properties props = new Properties(); - props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); - props.put("java.naming.security.protocol", "ssl"); - props.put(Context.SECURITY_AUTHENTICATION, "simple"); + props.put(Context.INITIAL_CONTEXT_FACTORY, apiSettings.getContextFactory()); + props.put("java.naming.security.protocol", apiSettings.getContextProtocol()); + props.put(Context.SECURITY_AUTHENTICATION, apiSettings.getContextSecurityAuthentication()); try { if (!StringUtils.isBlank(authProperties.getAdUrl())) { diff --git a/src/main/java/com/capitalone/dashboard/settings/ApiSettings.java b/src/main/java/com/capitalone/dashboard/settings/ApiSettings.java index cc29e56a..35fa1318 100644 --- a/src/main/java/com/capitalone/dashboard/settings/ApiSettings.java +++ b/src/main/java/com/capitalone/dashboard/settings/ApiSettings.java @@ -42,6 +42,16 @@ public class ApiSettings { private String capturePattern; + @Value("${contextFactory:com.sun.jndi.ldap.LdapCtxFactory}") + private String contextFactory; + + @Value("${contextProtocol:ssl}") + private String contextProtocol; + + @Value("${contextSecurityAuthentication:simple}") + private String contextSecurityAuthentication; + + private List ignoreEndPoints = new ArrayList(); private List ignoreApiUsers = new ArrayList(); private List ignoreBodyEndPoints = new ArrayList(); @@ -222,4 +232,28 @@ public String getBuildCollectorName() { public void setBuildCollectorName(String buildCollectorName) { this.buildCollectorName = buildCollectorName; } + + public String getContextFactory() { + return contextFactory; + } + + public void setContextFactory(String contextFactory) { + this.contextFactory = contextFactory; + } + + public String getContextProtocol() { + return contextProtocol; + } + + public void setContextProtocol(String contextProtocol) { + this.contextProtocol = contextProtocol; + } + + public String getContextSecurityAuthentication() { + return contextSecurityAuthentication; + } + + public void setContextSecurityAuthentication(String contextSecurityAuthentication) { + this.contextSecurityAuthentication = contextSecurityAuthentication; + } } diff --git a/src/test/java/com/capitalone/dashboard/config/TestAuthConfig.java b/src/test/java/com/capitalone/dashboard/config/TestAuthConfig.java index c31f61e1..fc3410b3 100644 --- a/src/test/java/com/capitalone/dashboard/config/TestAuthConfig.java +++ b/src/test/java/com/capitalone/dashboard/config/TestAuthConfig.java @@ -55,8 +55,9 @@ import com.capitalone.dashboard.service.UserInfoService; import com.capitalone.dashboard.service.UserInfoServiceImpl; import com.capitalone.dashboard.service.InfraStructureService; -import com.capitalone.dashboard.service.InfraStructureServiceImpl; +import com.capitalone.dashboard.settings.ApiSettings; import com.capitalone.dashboard.util.PaginationHeaderUtility; +import org.mockito.Mock; import org.mockito.Mockito; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -67,6 +68,8 @@ @ComponentScan(basePackages = {"com.capitalone.dashboard.auth"}) public class TestAuthConfig { + @Mock + private ApiSettings apiSettings; @Bean public DashboardRepository dashboardRepository() { return Mockito.mock(DashboardRepository.class); @@ -94,7 +97,7 @@ public UserInfoRepository userInfoRepository() { @Bean public UserInfoService userInfoService() { - return new UserInfoServiceImpl(userInfoRepository(), authProperties()); + return new UserInfoServiceImpl(userInfoRepository(), authProperties(), apiSettings); } @Bean diff --git a/src/test/java/com/capitalone/dashboard/config/TestDefaultAuthConfig.java b/src/test/java/com/capitalone/dashboard/config/TestDefaultAuthConfig.java index e90b008b..0b137b6b 100644 --- a/src/test/java/com/capitalone/dashboard/config/TestDefaultAuthConfig.java +++ b/src/test/java/com/capitalone/dashboard/config/TestDefaultAuthConfig.java @@ -53,7 +53,9 @@ import com.capitalone.dashboard.service.UserInfoService; import com.capitalone.dashboard.service.UserInfoServiceImpl; import com.capitalone.dashboard.service.InfraStructureService; +import com.capitalone.dashboard.settings.ApiSettings; import com.capitalone.dashboard.util.PaginationHeaderUtility; +import org.mockito.Mock; import org.mockito.Mockito; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -64,6 +66,9 @@ @ComponentScan(basePackages = {"com.capitalone.dashboard.auth"}) public class TestDefaultAuthConfig { + @Mock + private ApiSettings apiSettings; + @Bean public DashboardRepository dashboardRepository() { return Mockito.mock(DashboardRepository.class); @@ -86,7 +91,7 @@ public UserInfoRepository userInfoRepository() { @Bean public UserInfoService userInfoService() { - return new UserInfoServiceImpl(userInfoRepository(),authProperties()); + return new UserInfoServiceImpl(userInfoRepository(),authProperties(), apiSettings); } @Bean diff --git a/src/test/java/com/capitalone/dashboard/rest/DashboardControllerTest.java b/src/test/java/com/capitalone/dashboard/rest/DashboardControllerTest.java index e09d4925..28965c5f 100644 --- a/src/test/java/com/capitalone/dashboard/rest/DashboardControllerTest.java +++ b/src/test/java/com/capitalone/dashboard/rest/DashboardControllerTest.java @@ -115,12 +115,12 @@ public void createDashboard_nullRequest() throws Exception { .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(new DashboardRequest()))) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.fieldErrors.template", hasItems("may not be null"))) + .andExpect(jsonPath("$.fieldErrors.template", hasItems("must not be null"))) // TODO: These are no longer necessary in all cases. Potentially add new class-level validator. // .andExpect(jsonPath("$.fieldErrors.componentName", hasItems("may not be null"))) // .andExpect(jsonPath("$.fieldErrors.applicationName", hasItems("may not be null"))) - .andExpect(jsonPath("$.fieldErrors.type", hasItems("may not be null"))) - .andExpect(jsonPath("$.fieldErrors.dashboardRequestTitle", hasItems("may not be null"))); + .andExpect(jsonPath("$.fieldErrors.type", hasItems("must not be null"))) + .andExpect(jsonPath("$.fieldErrors.dashboardRequestTitle", hasItems("must not be null"))); } @Test @@ -308,7 +308,7 @@ public void renameTeamDashboard_nullTitle() throws Exception { .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(request))) .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.fieldErrors.title", hasItems("may not be null"))) + .andExpect(jsonPath("$.fieldErrors.title", hasItems("must not be null"))) ; } diff --git a/src/test/java/com/capitalone/dashboard/service/UserInfoServiceImplTest.java b/src/test/java/com/capitalone/dashboard/service/UserInfoServiceImplTest.java index 58546d4e..65b02150 100644 --- a/src/test/java/com/capitalone/dashboard/service/UserInfoServiceImplTest.java +++ b/src/test/java/com/capitalone/dashboard/service/UserInfoServiceImplTest.java @@ -15,6 +15,7 @@ import java.util.Collection; import com.capitalone.dashboard.auth.AuthProperties; +import com.capitalone.dashboard.settings.ApiSettings; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,6 +58,8 @@ public class UserInfoServiceImplTest { @InjectMocks private UserInfoServiceImpl service; + @Mock private ApiSettings apiSettings; + @Before public void setup(){ authProperties = new AuthProperties(); @@ -233,7 +236,7 @@ public void shouldSearchLdapUser() throws NamingException { // setup authProperties setup(); - service = new UserInfoServiceImpl(userInfoRepository,authProperties); + service = new UserInfoServiceImpl(userInfoRepository,authProperties, apiSettings); context = Mockito.mock(InitialDirContext.class); service.setInitialContext(context);