Improve publisher ui to support sso

4.x.x
Vigneshan Seshamany 4 years ago
parent 6ee1d31a0e
commit 44c7affb49

@ -1,4 +1,5 @@
{ {
"appName": "publisher",
"theme": { "theme": {
"logo": "https://entgra.io/assets/images/svg/logo.svg", "logo": "https://entgra.io/assets/images/svg/logo.svg",
"primaryColor": "rgb(24, 144, 255)", "primaryColor": "rgb(24, 144, 255)",
@ -14,7 +15,10 @@
}, },
"loginUri": "/publisher-ui-request-handler/login", "loginUri": "/publisher-ui-request-handler/login",
"logoutUri": "/publisher-ui-request-handler/logout", "logoutUri": "/publisher-ui-request-handler/logout",
"platform": "publisher" "ssoLoginUri": "/publisher-ui-request-handler/ssoLogin",
"ssoLogoutUri": "/publisher-ui-request-handler/ssoLogout",
"platform": "publisher",
"appUiConfigUri": "/api/device-mgt-config/v1.0/configurations/ui-config"
}, },
"defaultPlatformIcons": { "defaultPlatformIcons": {
"default": { "default": {

@ -23,6 +23,7 @@ import { BrowserRouter as Router, Redirect, Switch } from 'react-router-dom';
import axios from 'axios'; import axios from 'axios';
import { Layout, Spin, Result } from 'antd'; import { Layout, Spin, Result } from 'antd';
import ConfigContext from './components/ConfigContext'; import ConfigContext from './components/ConfigContext';
import { getUiConfig } from './services/utils/uiConfigHandler';
const { Content } = Layout; const { Content } = Layout;
const loadingView = ( const loadingView = (
@ -161,9 +162,19 @@ class App extends React.Component {
const redirectUrl = encodeURI(window.location.href); const redirectUrl = encodeURI(window.location.href);
const pageURL = window.location.pathname; const pageURL = window.location.pathname;
const lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1); const lastURLSegment = pageURL.substr(pageURL.lastIndexOf('/') + 1);
if (lastURLSegment !== 'login') { getUiConfig(config).then(uiConfig => {
if (uiConfig !== undefined) {
if (uiConfig.isSsoEnable) {
window.location =
window.location.origin +
config.serverConfig.ssoLoginUri +
'?redirect=' +
window.location.origin +
pageURL;
} else if (lastURLSegment !== 'login') {
window.location.href = window.location.href =
window.location.origin + `/publisher/login?redirect=${redirectUrl}`; window.location.origin +
`/${config.appName}/login?redirect=${redirectUrl}`;
} else { } else {
this.getAndroidEnterpriseToken(config); this.getAndroidEnterpriseToken(config);
} }
@ -173,6 +184,13 @@ class App extends React.Component {
error: true, error: true,
}); });
} }
});
} else {
this.setState({
loading: false,
error: true,
});
}
}; };
render() { render() {

@ -21,6 +21,7 @@ import { LogoutOutlined } from '@ant-design/icons';
import { notification, Menu } from 'antd'; import { notification, Menu } from 'antd';
import axios from 'axios'; import axios from 'axios';
import { withConfigContext } from '../../../../components/ConfigContext'; import { withConfigContext } from '../../../../components/ConfigContext';
import { getUiConfig } from '../../../../services/utils/uiConfigHandler';
/* /*
This class for call the logout api by sending request This class for call the logout api by sending request
@ -44,25 +45,36 @@ class Logout extends React.Component {
inValid: false, inValid: false,
}); });
let logoutUri;
getUiConfig(config).then(uiConfig => {
if (uiConfig !== undefined) {
if (uiConfig.isSsoEnable) {
logoutUri = window.location.origin + config.serverConfig.ssoLogoutUri;
} else {
logoutUri = window.location.origin + config.serverConfig.logoutUri;
}
axios axios
.post(window.location.origin + config.serverConfig.logoutUri) .post(logoutUri)
.then(res => { .then(res => {
// if the api call status is correct then user will logout and then it goes to login page // if the api call status is correct then user
// will logout and then it goes to login page
if (res.status === 200) { if (res.status === 200) {
window.location = window.location.origin + '/publisher/login'; window.location =
window.location.origin + `/${config.appName}/login`;
} }
}) })
.catch(function(error) { .catch(function(error) {
if (error.hasOwnProperty('response') && error.response.status === 400) {
thisForm.setState({
inValid: true,
});
} else {
notification.error({ notification.error({
message: 'There was a problem', message: 'There was a problem',
duration: 0, duration: 0,
description: 'Error occurred while trying to logout.', description: 'Error occurred while trying to logout.',
}); });
});
} else {
this.setState({
loading: false,
error: true,
});
} }
}); });
}; };

@ -0,0 +1,40 @@
/*
* Copyright (C) 2020. Entgra (Pvt) Ltd, https://entgra.io
* All Rights Reserved.
*
* Unauthorized copying/redistribution of this file, via any medium
* is strictly prohibited.
* Proprietary and confidential.
*
* Licensed under the Entgra Commercial License,
* Version 1.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.
*
* You may obtain a copy of the License at
* https://entgra.io/licenses/entgra-commercial/1.0
*/
import axios from 'axios';
import { notification } from 'antd';
export const getUiConfig = config => {
return axios
.get(window.location.origin + config.serverConfig.appUiConfigUri)
.then(res => {
return res.data;
})
.catch(error => {
notification.error({
message: 'There was a problem',
duration: 0,
description: 'Error occurred while trying to load UI configurations.',
});
});
};
Loading…
Cancel
Save