From 9015d0d86d23a83e578ded1bd95485d467515208 Mon Sep 17 00:00:00 2001 From: "Christopher Lott (cl778h)" Date: Thu, 17 Aug 2017 14:52:44 -0400 Subject: Publish seed code for the OOM Dashboard First open-source release of the ONAP Operations Manager Dashboard web application. Issue: CCSDK-61 Change-Id: I902f789692d76ee583aa967682e39f03b6578fe9 Signed-off-by: Christopher Lott (cl778h) --- .../org/onap/portalapp/conf/ExternalAppConfig.java | 163 +++++++++++++++++++++ .../portalapp/conf/ExternalAppInitializer.java | 47 ++++++ .../portalapp/conf/HibernateMappingLocations.java | 62 ++++++++ .../portalapp/lm/FusionLicenseManagerImpl.java | 90 ++++++++++++ .../onap/portalapp/login/LoginStrategyImpl.java | 91 ++++++++++++ .../onap/portalapp/service/AdminAuthExtension.java | 65 ++++++++ 6 files changed, 518 insertions(+) create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java create mode 100644 ecd-app-os/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java (limited to 'ecd-app-os/src/main/java/org/onap') diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java b/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java new file mode 100644 index 0000000..ae8c2ac --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppConfig.java @@ -0,0 +1,163 @@ +/*- + * ================================================================================ + * ECOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ +package org.onap.portalapp.conf; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.portalapp.lm.FusionLicenseManagerImpl; +import org.onap.portalapp.login.LoginStrategyImpl; +import org.openecomp.portalapp.controller.core.SingleSignOnController; +import org.openecomp.portalapp.controller.sample.ElasticSearchController; +import org.openecomp.portalapp.controller.sample.PostDroolsController; +import org.openecomp.portalapp.scheduler.LogRegistry; +import org.openecomp.portalsdk.core.auth.LoginStrategy; +import org.openecomp.portalsdk.core.conf.AppConfig; +import org.openecomp.portalsdk.core.conf.Configurable; +import org.openecomp.portalsdk.core.lm.FusionLicenseManager; +import org.openecomp.portalsdk.core.lm.FusionLicenseManagerUtils; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.objectcache.AbstractCacheManager; +import org.openecomp.portalsdk.core.scheduler.CoreRegister; +import org.openecomp.portalsdk.core.scheduler.CronRegistry; +import org.openecomp.portalsdk.core.service.DataAccessService; +import org.openecomp.portalsdk.core.service.PostDroolsService; +import org.openecomp.portalsdk.core.util.CacheManager; +import org.openecomp.portalsdk.core.util.SystemProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; + +/** + * ECOMP Portal SDK sample application. ECOMP Portal SDK core AppConfig class to + * reuse interceptors, view resolvers and other features defined there. + */ +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = { "org.onap", "org.openecomp" }, + // Exclude unused annotated classes with heavy dependencies. + excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { CoreRegister.class, + CronRegistry.class, ElasticSearchController.class, LogRegistry.class, PostDroolsController.class, + PostDroolsService.class, SingleSignOnController.class })) +@Profile("src") +@EnableAsync +@EnableScheduling +public class ExternalAppConfig extends AppConfig implements Configurable { + + private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAppConfig.class); + + @Configuration + @Import(SystemProperties.class) + static class InnerConfiguration { + } + + /* + * (non-Javadoc) + * @see org.openecomp.portalsdk.core.conf.AppConfig#viewResolver() + */ + public ViewResolver viewResolver() { + return super.viewResolver(); + } + + /* + * (non-Javadoc) + * @see org.openecomp.portalsdk.core.conf.AppConfig#addResourceHandlers(org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry) + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + super.addResourceHandlers(registry); + } + + /* + * (non-Javadoc) + * @see org.openecomp.portalsdk.core.conf.AppConfig#dataAccessService() + */ + @Override + public DataAccessService dataAccessService() { + // Echo the JDBC URL to assist developers when starting the app. + systemProperties(); + System.out.println("ExternalAppConfig: " + SystemProperties.DB_CONNECTIONURL + " is " + + SystemProperties.getProperty(SystemProperties.DB_CONNECTIONURL)); + return super.dataAccessService(); + } + + /** + * Creates a new list with a single entry that is the external app + * definitions.xml path. + * + * @return List of String, size 1 + */ + @Override + public List addTileDefinitions() { + List definitions = new ArrayList(); + // DBC does not need the sample page: + // definitions.add("/WEB-INF/defs/definitions.xml"); + definitions.add("/WEB-INF/ecd-app-definitions.xml"); + if (logger.isDebugEnabled()) + logger.debug(EELFLoggerDelegate.debugLogger, "addTileDefinitions: list is " + definitions); + return definitions; + } + + /** + * Adds request interceptors to the specified registry by calling + * {@link AppConfig#addInterceptors(InterceptorRegistry)}, but excludes + * certain paths from the session timeout interceptor. + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + super.setExcludeUrlPathsForSessionTimeout("/login_external", "*/login_external.htm", "login", "/login.htm", + "/api*", "/single_signon.htm", "/single_signon"); + super.addInterceptors(registry); + } + + /** + * Creates and returns a new instance of a {@link CacheManager} class. + * + * @return New instance of {@link CacheManager} + */ + @Bean + public AbstractCacheManager cacheManager() { + return new CacheManager(); + } + + @Bean + public FusionLicenseManager fusionLicenseManager() { + return new FusionLicenseManagerImpl(); + } + + @Bean + public FusionLicenseManagerUtils fusionLicenseManagerUtils() { + return new FusionLicenseManagerUtils(); + } + + @Bean + public LoginStrategy loginStrategy() { + return new LoginStrategyImpl(); + } +} diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java b/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java new file mode 100644 index 0000000..347bb51 --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/conf/ExternalAppInitializer.java @@ -0,0 +1,47 @@ +/*- + * ================================================================================ + * ECOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ +package org.onap.portalapp.conf; + +import org.openecomp.portalsdk.core.conf.AppInitializer; + +public class ExternalAppInitializer extends AppInitializer { + + @Override + protected Class[] getRootConfigClasses() { + return super.getRootConfigClasses(); + } + + @Override + protected Class[] getServletConfigClasses() { + Class appConfigClass = ExternalAppConfig.class; + // Show something on stdout to indicate the app is starting. + System.out.println("ExternalAppInitializer: servlet configuration class is " + appConfigClass.getName()); + return new Class[] { appConfigClass }; + } + + /* + * URL request will direct to the Spring dispatcher for processing + */ + @Override + protected String[] getServletMappings() { + return super.getServletMappings(); + } + +} diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java b/ecd-app-os/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java new file mode 100644 index 0000000..bcc7f04 --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/conf/HibernateMappingLocations.java @@ -0,0 +1,62 @@ +/*- + * ================================================================================ + * ECOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ +package org.onap.portalapp.conf; + +import org.springframework.context.annotation.Profile; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +import org.openecomp.portalsdk.core.conf.HibernateMappingLocatable; + +@Component +@Profile("src") +public class HibernateMappingLocations implements HibernateMappingLocatable { + + /* + * (non-Javadoc) + * + * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable# + * getMappingLocations() + */ + @Override + public Resource[] getMappingLocations() { + return new Resource[] { + // Path is relative to WEB-INF/conf; + // a leading slash gets stripped so don't bother. + // new ClassPathResource("../fusion/orm/Fusion.hbm.xml"), + // This is a COPY to work around a bug in the 1.1.0 release. + new ClassPathResource("../fusion-110-copy.hbm.xml"), + new ClassPathResource("../ecd-app.hbm.xml") + }; + } + + /* + * (non-Javadoc) + * + * @see org.openecomp.portalsdk.core.conf.HibernateMappingLocatable# + * getPackagesToScan() + */ + @Override + public String[] getPackagesToScan() { + return new String[] { "org.onap", "org.openecomp" }; + } + +} diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java b/ecd-app-os/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java new file mode 100644 index 0000000..7a08f54 --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/lm/FusionLicenseManagerImpl.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * =============LICENSE_START========================================================= + * + * ================================================================================= + * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + *******************************************************************************/ +package org.onap.portalapp.lm; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import org.openecomp.portalsdk.core.lm.FusionLicenseManager; + +public class FusionLicenseManagerImpl implements FusionLicenseManager { + + private Date expiredDate; + + public FusionLicenseManagerImpl() { + } + + /** + * An implementation of the KeyStoreParam interface that returns the + * information required to work with the keystore containing the private key. + */ + public void initKeyStoreParam() { + } + + public void initCipherParam() { + } + + /** + * Create/populate the "licenseParm" field. + */ + public void initLicenseParam() { + } + + public void doInitWork() { + } + + /** + * Prompt the user for the location of their license file, get the filename, + * then try to install the file. + * + * @return true if the license installed properly, false otherwise. + */ + public int installLicense() { + return INVALID_LICENSE; + } + + public synchronized int verifyLicense(ServletContext context) { + + return INVALID_LICENSE; + } + + @Override + public void generateLicense(Map clientInfoMap, List ipAddressList) throws Exception { + } + + @Override + public String nvl(String s) { + return (s == null) ? "" : s; + } + + public Date getExpiredDate() { + return expiredDate; + } + + public void setExpiredDate(Date expiredDate) { + this.expiredDate = expiredDate; + } + +} diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java b/ecd-app-os/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java new file mode 100644 index 0000000..22fca6d --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/login/LoginStrategyImpl.java @@ -0,0 +1,91 @@ +/*- + * ================================================================================ + * ECOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ + +package org.onap.portalapp.login; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.openecomp.portalsdk.core.auth.LoginStrategy; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.openecomp.portalsdk.core.onboarding.exception.PortalAPIException; +import org.openecomp.portalsdk.core.onboarding.util.CipherUtil; +import org.openecomp.portalsdk.core.onboarding.util.PortalApiConstants; +import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties; +import org.springframework.web.servlet.ModelAndView; + +public class LoginStrategyImpl extends LoginStrategy { + + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(LoginStrategyImpl.class); + + @Override + public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { + // 'login' for opensource is same as 'external' login. + return doExternalLogin(request, response); + } + + @Override + public String getUserId(HttpServletRequest request) throws PortalAPIException { + // Check ECOMP Portal cookie + if (!isLoginCookieExist(request)) + return null; + + String userid = null; + try { + userid = getUserIdFromCookie(request); + } catch (Exception e) { + logger.error(EELFLoggerDelegate.errorLogger, "getUserId failed", e); + } + return userid; + } + + private static String getUserIdFromCookie(HttpServletRequest request) throws Exception { + String userId = ""; + Cookie[] cookies = request.getCookies(); + Cookie userIdcookie = null; + if (cookies != null) + for (Cookie cookie : cookies) + if (cookie.getName().equals(USER_ID)) + userIdcookie = cookie; + if (userIdcookie != null) { + userId = CipherUtil.decrypt(userIdcookie.getValue(), + PortalApiProperties.getProperty(PortalApiConstants.Decryption_Key)); + } + return userId; + + } + + private static boolean isLoginCookieExist(HttpServletRequest request) { + Cookie ep = getCookie(request, EP_SERVICE); + return (ep != null); + } + + private static Cookie getCookie(HttpServletRequest request, String cookieName) { + Cookie[] cookies = request.getCookies(); + if (cookies != null) + for (Cookie cookie : cookies) + if (cookie.getName().equals(cookieName)) + return cookie; + + return null; + } + +} diff --git a/ecd-app-os/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java b/ecd-app-os/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java new file mode 100644 index 0000000..e3dbdf8 --- /dev/null +++ b/ecd-app-os/src/main/java/org/onap/portalapp/service/AdminAuthExtension.java @@ -0,0 +1,65 @@ +/*- + * ================================================================================ + * ECOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ================================================================================ + */ +package org.onap.portalapp.service; + +import java.util.Set; + +import org.openecomp.portalapp.service.IAdminAuthExtension; +import org.openecomp.portalsdk.core.domain.Role; +import org.openecomp.portalsdk.core.domain.User; +import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + + +@Service("adminAuthExtension") +@Transactional +/** + * Provides empty implementations of the methods in IAdminAuthExtension. + */ +public class AdminAuthExtension implements IAdminAuthExtension { + + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AdminAuthExtension.class); + + /* + * (non-Javadoc) + * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserExtension(org.openecomp.portalsdk.core.domain.User) + */ + public void saveUserExtension(User user) { + logger.debug("saveUserExtension"); + } + + /* + * (non-Javadoc) + * @see org.openecomp.portalapp.service.IAdminAuthExtension#editUserExtension(org.openecomp.portalsdk.core.domain.User) + */ + public void editUserExtension(User user) { + logger.debug("editUserExtension"); + } + + /* + * (non-Javadoc) + * @see org.openecomp.portalapp.service.IAdminAuthExtension#saveUserRoleExtension(java.util.Set, org.openecomp.portalsdk.core.domain.User) + */ + public void saveUserRoleExtension(Set roles, User user) { + logger.debug("saveUserRoleExtension"); + } + +} -- cgit 1.2.3-korg