diff options
-rw-r--r-- | src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java | 13 | ||||
-rw-r--r-- | src/main/resources/application-noaaf.properties | 19 | ||||
-rw-r--r-- | ui-react/package.json | 4 | ||||
-rw-r--r-- | ui-react/src/LoopUI.js | 16 | ||||
-rw-r--r-- | ui-react/src/api/UserService.js | 25 | ||||
-rw-r--r-- | ui-react/src/components/dialogs/UserInfo.js | 17 | ||||
-rw-r--r-- | ui-react/src/index.js | 6 |
7 files changed, 71 insertions, 29 deletions
diff --git a/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java b/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java index a8ff12067..9d4e7d0c7 100644 --- a/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java @@ -75,8 +75,10 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) { try { http.csrf().disable().httpBasic().and().authorizeRequests().antMatchers("/restservices/clds/v1/user/**") - .authenticated().anyRequest().permitAll().and().logout().and().sessionManagement().maximumSessions(1) - .and().invalidSessionUrl("/designer/timeout.html"); + .authenticated().anyRequest().permitAll().and().logout() + .logoutUrl("/restservices/clds/v1/user/logout").logoutSuccessUrl("/index.html") + .invalidateHttpSession(true).deleteCookies("JSESSIONID").and().sessionManagement() + .maximumSessions(1); } catch (Exception e) { logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e); @@ -105,7 +107,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter { } for (CldsUser user : usersList) { auth.inMemoryAuthentication().withUser(user.getUser()).password(user.getPassword()) - .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder); + .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder); } } catch (Exception e) { logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e); @@ -118,8 +120,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter { * CldsUser. * * @return The array of CldsUser - * @throws IOException - * In case of the file is not found + * @throws IOException In case of the file is not found */ private CldsUser[] loadUsers() throws IOException { logger.info("Load from clds-users.properties"); @@ -134,7 +135,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter { return new BCryptPasswordEncoder(cldsBcryptEncoderStrength); } else { throw new CldsConfigException( - "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time."); + "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time."); } } }
\ No newline at end of file diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 52f79bef4..cec02579a 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -2,7 +2,7 @@ # ============LICENSE_START======================================================= # ONAP CLAMP # ================================================================================ -# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights +# Copyright (C) 2017-2019 AT&T Intellectual Property. All rights # reserved. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); @@ -51,7 +51,21 @@ info.build.version=@project.version@ ### server.ssl.key-store=file:/tmp/mykey.jks ### server.ssl.key-store-password=mypass ### server.ssl.key-password=mypass -server.port=8080 +server.port=8443 +## Config part for Server certificates +# Can be a classpath parameter instead of file:/ +server.ssl.key-store=classpath:/clds/aaf/org.onap.clamp.p12 +server.ssl.key-store-password=China in the Spring +server.ssl.key-password=China in the Spring +server.ssl.key-store-type=PKCS12 +server.ssl.key-alias=clamp@clamp.onap.org + +## Config part for Client certificates +server.ssl.client-auth=want +server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks +server.ssl.trust-store-password=changeit + +#server.http-to-https-redirection.port=8080 server.servlet.context-path=/ #Modified engine-rest applicationpath @@ -141,6 +155,7 @@ clamp.config.policy.api.password=zb!XztG34 clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969 clamp.config.policy.pap.userName=healthcheck clamp.config.policy.pap.password=zb!XztG34 + clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123 diff --git a/ui-react/package.json b/ui-react/package.json index 358152b5b..65608bed4 100644 --- a/ui-react/package.json +++ b/ui-react/package.json @@ -1,6 +1,6 @@ { "name": "onap-clamp-ui", - "version": "4.1.0-SNAPSHOT", + "version": "4.1.1-SNAPSHOT", "description": "ONAP Clamp Loop Designer UI", "author": "ONAP Clamp Team", "license": "Apache-2.0", @@ -9,7 +9,7 @@ "registry": "https://nexus3.onap.org/repository/npm.snapshot/" }, "main": "index.js", - "proxy": "https://localhost:8080", + "proxy": "https://localhost:8443", "scripts": { "start": "react-scripts start", "build": "react-scripts build", diff --git a/ui-react/src/LoopUI.js b/ui-react/src/LoopUI.js index 9389ad656..fb595ded0 100644 --- a/ui-react/src/LoopUI.js +++ b/ui-react/src/LoopUI.js @@ -106,6 +106,7 @@ export default class LoopUI extends React.Component { constructor() { super(); this.getUser = this.getUser.bind(this); + this.logout = this.logout.bind(this); this.updateLoopCache = this.updateLoopCache.bind(this); this.loadLoop = this.loadLoop.bind(this); this.closeLoop = this.closeLoop.bind(this); @@ -120,6 +121,14 @@ export default class LoopUI extends React.Component { this.setState({ userName: user }) }); } + + logout() { + UserService.logout().then(user => { + this.setState({ userName: user }); + window.location.reload(); + }); + + } renderMenuNavBar() { return ( @@ -205,8 +214,8 @@ export default class LoopUI extends React.Component { this.setState({ loopCache: new LoopCache({}), loopName: LoopUI.defaultLoopName }); this.props.history.push('/'); } - - render() { + + render() { return ( <StyledMainDiv id="main_div"> <Route path="/operationalPolicyModal" @@ -223,7 +232,8 @@ export default class LoopUI extends React.Component { <Route path="/undeploy" render={(routeProps) => (<PerformAction {...routeProps} loopAction="undeploy" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} /> <Route path="/deploy" render={(routeProps) => (<DeployLoop {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} /> <Route path="/refreshStatus" render={(routeProps) => (<RefreshStatus {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} /> - <GlobalClampStyle /> + <Route path="/logout" render={this.logout} /> + <GlobalClampStyle /> {this.renderNavBar()} {this.renderLoopViewer()} </StyledMainDiv> diff --git a/ui-react/src/api/UserService.js b/ui-react/src/api/UserService.js index be21e692a..37ec73d1a 100644 --- a/ui-react/src/api/UserService.js +++ b/ui-react/src/api/UserService.js @@ -47,6 +47,31 @@ export default class UserService { return UserService.notLoggedUserName; }); } + + static logout() { + return fetch('/restservices/clds/v1/user/logout', { + method: 'POST', + credentials: 'same-origin', + }) + .then(function (response) { + console.debug("logout response received, status code:", response.status); + if (response.ok) { + return response.text(); + } else { + console.error("logout response is nok"); + return UserService.notLoggedUserName; + } + }) + .then(function (data) { + console.info ("User disconnected:",data) + return data; + }) + .catch(function(error) { + console.warn("logout error received, user set to: ",UserService.notLoggedUserName); + console.error("logout error:",error); + return UserService.notLoggedUserName; + }); + } static getUserInfo() { return fetch('/restservices/clds/v1/clds/cldsInfo', { diff --git a/ui-react/src/components/dialogs/UserInfo.js b/ui-react/src/components/dialogs/UserInfo.js index b8d68b849..7d81b38b3 100644 --- a/ui-react/src/components/dialogs/UserInfo.js +++ b/ui-react/src/components/dialogs/UserInfo.js @@ -39,7 +39,6 @@ export default class UserInfo extends React.Component { super(props, context); this.handleClose = this.handleClose.bind(this); - this.initialValues = this.initialValues.bind(this); this.renderReadTemplatePermission = this.renderReadTemplatePermission.bind(this); this.renderReadModelPermission = this.renderReadModelPermission.bind(this); this.renderReadToscaPermission = this.renderReadToscaPermission.bind(this); @@ -49,23 +48,15 @@ export default class UserInfo extends React.Component { this.renderUserName = this.renderUserName.bind(this); this.state = { show: true, - userInfo: {permissionReadTemplate: true, - permissionReadCl: true, - permissionReadTosca: true, - permissionUpdateCl: true, - permissionUpdateTemplate: true, - permissionUpdateTosca: true, - userName: 'admin', - cldsVersion: '1.0.0' - } + userInfo: {} }; - } - initialValues() { + componentWillMount() { UserService.getUserInfo().then(userInfo => { this.setState({ userInfo: userInfo }) }); } + handleClose() { this.props.history.push('/'); } @@ -127,7 +118,7 @@ export default class UserInfo extends React.Component { } render() { return ( - <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} onEntered={this.initialValues}> + <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}> <Modal.Header closeButton> <Modal.Title>User Info</Modal.Title> </Modal.Header> diff --git a/ui-react/src/index.js b/ui-react/src/index.js index cbbdc65ef..dd83096ea 100644 --- a/ui-react/src/index.js +++ b/ui-react/src/index.js @@ -23,13 +23,13 @@ import React from 'react'; import ReactDOM from 'react-dom'; import OnapClamp from './OnapClamp'; -import { Route, BrowserRouter } from 'react-router-dom' +import { Route, MemoryRouter } from 'react-router-dom' const routing = ( - <BrowserRouter forceRefresh={false}> + <MemoryRouter forceRefresh={false}> <Route path="/" component={OnapClamp}/> - </BrowserRouter> + </MemoryRouter> ); export var mainClamp = ReactDOM.render( |