aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIttay Stern <ittay.stern@att.com>2019-08-25 13:02:27 +0300
committerIttay Stern <ittay.stern@att.com>2019-08-25 13:59:16 +0300
commit9c4a3a6d1ff8f6d91f32209bfdb59539bc20b743 (patch)
tree01da9e6134416c9979c17d854a053ae14ee1f9c2
parent87f850a6f3012aed165190bb861dcd0db8249dc6 (diff)
Allow plugging-in any provided LoginStrategy
Support dynamic loading of provided implementations of PORTAL SDK's  `org.onap.portalsdk.core.auth.LoginStrategy` interface. VID will load the class defined by `login.strategy.classname` configuration parameter. Default will keep current ONAP's dev login. Change-Id: I956a1f3376455211398769f3193703129b779871 Issue-ID: VID-594 Signed-off-by: Ittay Stern <ittay.stern@att.com>
-rw-r--r--epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java14
-rw-r--r--epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java56
2 files changed, 56 insertions, 14 deletions
diff --git a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
index b4dcd346a..d9b0f092e 100644
--- a/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
+++ b/epsdk-app-onap/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java
@@ -37,6 +37,8 @@
*/
package org.onap.portalapp.conf;
+import static org.apache.commons.lang3.StringUtils.isNotEmpty;
+
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
@@ -50,6 +52,7 @@ import org.onap.portalsdk.core.objectcache.AbstractCacheManager;
import org.onap.portalsdk.core.service.DataAccessService;
import org.onap.portalsdk.core.util.CacheManager;
import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@@ -164,8 +167,15 @@ public class ExternalAppConfig extends AppConfig implements Configurable {
}
@Bean
- public LoginStrategy loginStrategy() {
- return new LoginStrategyImpl();
+ public LoginStrategy loginStrategy(@Value("${login.strategy.classname:}") String classname) throws ReflectiveOperationException {
+ return isNotEmpty(classname) ?
+ newLoginStrategyInstance(classname) : new LoginStrategyImpl();
+ }
+
+ private LoginStrategy newLoginStrategyInstance(String loginStrategyClassname) throws ReflectiveOperationException {
+ return (LoginStrategy) Class.forName(loginStrategyClassname)
+ .getConstructor()
+ .newInstance();
}
@Bean
diff --git a/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java b/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java
index 1bdf46325..f06526860 100644
--- a/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java
+++ b/epsdk-app-onap/src/test/java/org/onap/portalapp/conf/ExternalAppConfigTest.java
@@ -37,18 +37,23 @@
*/
package org.onap.portalapp.conf;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.junit.Assert;
import org.junit.Test;
+import org.onap.portalapp.login.LoginStrategyImpl;
import org.onap.portalapp.scheduler.RegistryAdapter;
import org.onap.portalsdk.core.auth.LoginStrategy;
+import org.onap.portalsdk.core.onboarding.exception.PortalAPIException;
import org.onap.portalsdk.core.service.DataAccessService;
-import org.springframework.jdbc.datasource.init.DataSourceInitializer;
-import org.springframework.jdbc.datasource.init.DatabasePopulator;
-import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.ViewResolver;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
public class ExternalAppConfigTest {
@@ -112,12 +117,39 @@ public class ExternalAppConfigTest {
}
@Test
- public void testLoginStrategy() throws Exception {
- ExternalAppConfig testSubject;
- LoginStrategy result;
+ public void loginStrategy_givenEmptyString_yieldDefault() throws Exception {
+ assertThat(new ExternalAppConfig().loginStrategy(""),
+ is(instanceOf(LoginStrategyImpl.class)));
+ }
- // default test
- testSubject = createTestSubject();
- result = testSubject.loginStrategy();
+ @Test
+ public void loginStrategy_givenNullString_yieldDefault() throws Exception {
+ assertThat(new ExternalAppConfig().loginStrategy(null),
+ is(instanceOf(LoginStrategyImpl.class)));
+ }
+
+ public static class DummyLoginStrategy extends LoginStrategy {
+ @Override
+ public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) {
+ return null;
+ }
+
+ @Override
+ public String getUserId(HttpServletRequest request) {
+ return null;
+ }
+ }
+
+ @Test
+ public void loginStrategy_givenClassname_yieldClassInstance() throws Exception {
+ assertThat(
+ new ExternalAppConfig().loginStrategy("org.onap.portalapp.conf.ExternalAppConfigTest$DummyLoginStrategy"),
+ is(instanceOf(DummyLoginStrategy.class)));
+ }
+
+ @Test(expected = ClassNotFoundException.class)
+ public void loginStrategy_givenMissingClassname_throwsException() throws Exception {
+ new ExternalAppConfig().loginStrategy("no.real.classname");
+ Assert.fail("should throw");
}
-} \ No newline at end of file
+}