Remove Fleet setup call from Integrations app (#117383)

This commit is contained in:
Josh Dover 2021-11-03 20:05:52 +01:00 committed by GitHub
parent 6c4373fb6c
commit b609b1e450
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 92 deletions

View file

@ -5,21 +5,14 @@
* 2.0. * 2.0.
*/ */
import React, { memo, useEffect, useState } from 'react'; import React, { memo } from 'react';
import type { AppMountParameters } from 'kibana/public'; import type { AppMountParameters } from 'kibana/public';
import { EuiErrorBoundary, EuiPortal } from '@elastic/eui'; import { EuiErrorBoundary, EuiPortal } from '@elastic/eui';
import type { History } from 'history'; import type { History } from 'history';
import { Router, Redirect, Route, Switch } from 'react-router-dom'; import { Router, Redirect, Route, Switch } from 'react-router-dom';
import { FormattedMessage } from '@kbn/i18n/react';
import useObservable from 'react-use/lib/useObservable'; import useObservable from 'react-use/lib/useObservable';
import { import { ConfigContext, FleetStatusProvider, KibanaVersionContext } from '../../hooks';
ConfigContext,
FleetStatusProvider,
KibanaVersionContext,
sendGetPermissionsCheck,
sendSetup,
} from '../../hooks';
import type { FleetConfigType, FleetStartServices } from '../../plugin'; import type { FleetConfigType, FleetStartServices } from '../../plugin';
@ -32,91 +25,14 @@ import { EuiThemeProvider } from '../../../../../../src/plugins/kibana_react/com
import { AgentPolicyContextProvider, useUrlModal } from './hooks'; import { AgentPolicyContextProvider, useUrlModal } from './hooks';
import { INTEGRATIONS_ROUTING_PATHS, pagePathGetters } from './constants'; import { INTEGRATIONS_ROUTING_PATHS, pagePathGetters } from './constants';
import { Error, Loading, SettingFlyout } from './components'; import { SettingFlyout } from './components';
import type { UIExtensionsStorage } from './types'; import type { UIExtensionsStorage } from './types';
import { EPMApp } from './sections/epm'; import { EPMApp } from './sections/epm';
import { DefaultLayout } from './layouts'; import { PackageInstallProvider, UIExtensionsContext } from './hooks';
import { PackageInstallProvider } from './hooks';
import { useBreadcrumbs, UIExtensionsContext } from './hooks';
import { IntegrationsHeader } from './components/header'; import { IntegrationsHeader } from './components/header';
const ErrorLayout = ({ children }: { children: JSX.Element }) => (
<EuiErrorBoundary>
<DefaultLayout>{children}</DefaultLayout>
</EuiErrorBoundary>
);
export const WithPermissionsAndSetup: React.FC = memo(({ children }) => {
useBreadcrumbs('integrations');
const [isPermissionsLoading, setIsPermissionsLoading] = useState<boolean>(false);
const [isInitialized, setIsInitialized] = useState(false);
const [initializationError, setInitializationError] = useState<Error | null>(null);
useEffect(() => {
(async () => {
setIsInitialized(false);
setInitializationError(null);
try {
// Attempt Fleet Setup if user has permissions, otherwise skip
setIsPermissionsLoading(true);
const permissionsResponse = await sendGetPermissionsCheck();
setIsPermissionsLoading(false);
if (permissionsResponse.data?.success) {
try {
const setupResponse = await sendSetup();
if (setupResponse.error) {
setInitializationError(setupResponse.error);
}
} catch (err) {
setInitializationError(err);
}
setIsInitialized(true);
} else {
setIsInitialized(true);
}
} catch {
// If there's an error checking permissions, default to proceeding without running setup
// User will only have access to EPM endpoints if they actually have permission
setIsInitialized(true);
}
})();
}, []);
if (isPermissionsLoading) {
return (
<ErrorLayout>
<Loading />
</ErrorLayout>
);
}
if (!isInitialized || initializationError) {
return (
<ErrorLayout>
{initializationError ? (
<Error
title={
<FormattedMessage
id="xpack.fleet.initializationErrorMessageTitle"
defaultMessage="Unable to initialize Fleet"
/>
}
error={initializationError}
/>
) : (
<Loading />
)}
</ErrorLayout>
);
}
return <>{children}</>;
});
/** /**
* Fleet Application context all the way down to the Router, but with no permissions or setup checks * Fleet Application context all the way down to the Router, but with no permissions or setup checks
* and no routes defined * and no routes defined

View file

@ -15,7 +15,7 @@ import type { FleetConfigType, FleetStartServices } from '../../plugin';
import { licenseService } from '../../hooks'; import { licenseService } from '../../hooks';
import type { UIExtensionsStorage } from '../../types'; import type { UIExtensionsStorage } from '../../types';
import { AppRoutes, IntegrationsAppContext, WithPermissionsAndSetup } from './app'; import { AppRoutes, IntegrationsAppContext } from './app';
export interface ProtectedRouteProps extends RouteProps { export interface ProtectedRouteProps extends RouteProps {
isAllowed?: boolean; isAllowed?: boolean;
@ -58,9 +58,7 @@ const IntegrationsApp = ({
extensions={extensions} extensions={extensions}
setHeaderActionMenu={setHeaderActionMenu} setHeaderActionMenu={setHeaderActionMenu}
> >
<WithPermissionsAndSetup>
<AppRoutes /> <AppRoutes />
</WithPermissionsAndSetup>
</IntegrationsAppContext> </IntegrationsAppContext>
); );
}; };