[7.6] Logout should redirect to the login screen at the server… (#57191)

* logout should redirect to the login screen at the server base path

* Revert "logout should redirect to the login screen at the server base path"

This reverts commit c80716be6e.

* fix logout url in nav control service

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>

Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
This commit is contained in:
Larry Gregory 2020-02-10 08:22:51 -05:00 committed by GitHub
parent d4dfb17698
commit 809d55e430
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 11 deletions

View file

@ -57,7 +57,7 @@ export class SecurityNavControlService {
}
private registerSecurityNavControl(
core: Pick<CoreStart, 'chrome' | 'http' | 'i18n' | 'application'>
core: Pick<CoreStart, 'chrome' | 'http' | 'i18n' | 'injectedMetadata' | 'application'>
) {
const currentUserPromise = this.authc.getCurrentUser();
core.chrome.navControls.registerRight({
@ -65,10 +65,14 @@ export class SecurityNavControlService {
mount: (el: HTMLElement) => {
const I18nContext = core.i18n.Context;
const serverBasePath = core.injectedMetadata.getInjectedVar('serverBasePath') as string;
const logoutUrl = `${serverBasePath}/logout`;
const props = {
user: currentUserPromise,
editProfileUrl: core.http.basePath.prepend('/app/kibana#/account'),
logoutUrl: core.http.basePath.prepend(`/logout`),
logoutUrl,
};
ReactDOM.render(
<I18nContext>

View file

@ -5,11 +5,15 @@
*/
import expect from '@kbn/expect';
import { parse } from 'url';
import { FtrProviderContext } from '../../ftr_provider_context';
export default function({ getService, getPageObjects }) {
export default function({ getService, getPageObjects }: FtrProviderContext) {
const browser = getService('browser');
const esArchiver = getService('esArchiver');
const PageObjects = getPageObjects(['security']);
const PageObjects = getPageObjects(['security', 'spaceSelector']);
const testSubjects = getService('testSubjects');
const spaces = getService('spaces');
describe('Security', function() {
this.tags('smoke');
@ -46,6 +50,37 @@ export default function({ getService, getPageObjects }) {
const logoutMessage = await testSubjects.getVisibleText('loginInfoMessage');
expect(logoutMessage).to.eql('You have logged out of Kibana.');
});
describe('within a non-default space', async () => {
before(async () => {
await PageObjects.security.forceLogout();
await spaces.create({
id: 'some-space',
name: 'Some non-default space',
disabledFeatures: [],
});
});
after(async () => {
await spaces.delete('some-space');
});
it('logging out of a non-default space redirects to the login page at the server root', async () => {
await PageObjects.security.login(null, null, {
expectSpaceSelector: true,
});
await PageObjects.spaceSelector.clickSpaceCard('some-space');
await PageObjects.spaceSelector.expectHomePage('some-space');
await PageObjects.security.logout();
const currentUrl = await browser.getCurrentUrl();
const url = parse(currentUrl);
expect(url.pathname).to.eql('/login');
});
});
});
});
}

View file

@ -22,8 +22,6 @@ import { WatcherPageProvider } from './watcher_page';
// @ts-ignore not ts yet
import { ReportingPageProvider } from './reporting_page';
// @ts-ignore not ts yet
import { SpaceSelectorPageProvider } from './space_selector_page';
// @ts-ignore not ts yet
import { AccountSettingProvider } from './accountsetting_page';
import { InfraHomePageProvider } from './infra_home_page';
import { InfraLogsPageProvider } from './infra_logs_page';
@ -46,6 +44,7 @@ import { CopySavedObjectsToSpacePageProvider } from './copy_saved_objects_to_spa
import { LensPageProvider } from './lens_page';
import { InfraMetricExplorerProvider } from './infra_metric_explorer';
import { RoleMappingsPageProvider } from './role_mappings_page';
import { SpaceSelectorPageProvider } from './space_selector_page';
// just like services, PageObjects are defined as a map of
// names to Providers. Merge in Kibana's or pick specific ones

View file

@ -5,8 +5,9 @@
*/
import expect from '@kbn/expect';
import { FtrProviderContext } from '../ftr_provider_context';
export function SpaceSelectorPageProvider({ getService, getPageObjects }) {
export function SpaceSelectorPageProvider({ getService, getPageObjects }: FtrProviderContext) {
const retry = getService('retry');
const log = getService('log');
const testSubjects = getService('testSubjects');
@ -19,7 +20,7 @@ export function SpaceSelectorPageProvider({ getService, getPageObjects }) {
log.debug('SpaceSelectorPage:initTests');
}
async clickSpaceCard(spaceId) {
async clickSpaceCard(spaceId: string) {
return await retry.try(async () => {
log.info(`SpaceSelectorPage:clickSpaceCard(${spaceId})`);
await testSubjects.click(`space-card-${spaceId}`);
@ -27,11 +28,11 @@ export function SpaceSelectorPageProvider({ getService, getPageObjects }) {
});
}
async expectHomePage(spaceId) {
async expectHomePage(spaceId: string) {
return await this.expectRoute(spaceId, `/app/kibana#/home`);
}
async expectRoute(spaceId, route) {
async expectRoute(spaceId: string, route: string) {
return await retry.try(async () => {
log.debug(`expectRoute(${spaceId}, ${route})`);
await find.byCssSelector('[data-test-subj="kibanaChrome"] nav:not(.ng-hide) ', 20000);
@ -49,7 +50,7 @@ export function SpaceSelectorPageProvider({ getService, getPageObjects }) {
return await testSubjects.click('spacesNavSelector');
}
async clickSpaceAvatar(spaceId) {
async clickSpaceAvatar(spaceId: string) {
return await retry.try(async () => {
log.info(`SpaceSelectorPage:clickSpaceAvatar(${spaceId})`);
await testSubjects.click(`space-avatar-${spaceId}`);