Skip to content

Commit

Permalink
Merge branch 'master' into add-endpoint-list-creation
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankHassanabad committed Jul 15, 2020
2 parents cbb2abe + 8a99880 commit fb40648
Show file tree
Hide file tree
Showing 11 changed files with 393 additions and 149 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
import React, { useState } from 'react';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import {
EuiPageBody,
Expand All @@ -14,20 +15,47 @@ import {
EuiTitle,
EuiSpacer,
EuiIcon,
EuiCallOut,
EuiFlexItem,
EuiFlexGroup,
EuiCode,
EuiCodeBlock,
EuiLink,
} from '@elastic/eui';
import { useCore, sendPostFleetSetup } from '../../../hooks';
import { WithoutHeaderLayout } from '../../../layouts';
import { GetFleetStatusResponse } from '../../../types';

export const RequirementItem: React.FunctionComponent<{ isMissing: boolean }> = ({
isMissing,
children,
}) => {
return (
<EuiFlexGroup gutterSize="s" alignItems="flexStart">
<EuiFlexItem grow={false}>
<EuiText>
{isMissing ? (
<EuiIcon type="crossInACircleFilled" color="danger" />
) : (
<EuiIcon type="checkInCircleFilled" color="success" />
)}
</EuiText>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<EuiText>{children}</EuiText>
</EuiFlexItem>
</EuiFlexGroup>
);
};

export const SetupPage: React.FunctionComponent<{
refresh: () => Promise<void>;
missingRequirements: GetFleetStatusResponse['missing_requirements'];
}> = ({ refresh, missingRequirements }) => {
const [isFormLoading, setIsFormLoading] = useState<boolean>(false);
const core = useCore();

const onSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const onSubmit = async () => {
setIsFormLoading(true);
try {
await sendPostFleetSetup({ forceRecreate: true });
Expand All @@ -38,84 +66,218 @@ export const SetupPage: React.FunctionComponent<{
}
};

const content =
missingRequirements.includes('tls_required') ||
missingRequirements.includes('api_keys') ||
missingRequirements.includes('encrypted_saved_object_encryption_key_required') ? (
<>
<EuiSpacer size="m" />
<EuiIcon type="lock" color="subdued" size="xl" />
<EuiSpacer size="m" />
<EuiTitle size="l">
<h2>
if (
!missingRequirements.includes('tls_required') &&
!missingRequirements.includes('api_keys') &&
!missingRequirements.includes('encrypted_saved_object_encryption_key_required')
) {
return (
<WithoutHeaderLayout>
<EuiPageBody restrictWidth={548}>
<EuiPageContent
verticalPosition="center"
horizontalPosition="center"
className="eui-textCenter"
paddingSize="l"
>
<EuiSpacer size="m" />
<EuiIcon type="lock" color="subdued" size="xl" />
<EuiSpacer size="m" />
<EuiTitle size="l">
<h2>
<FormattedMessage
id="xpack.ingestManager.setupPage.enableTitle"
defaultMessage="Enable Fleet"
/>
</h2>
</EuiTitle>
<EuiSpacer size="xl" />
<EuiText color="subdued">
<FormattedMessage
id="xpack.ingestManager.setupPage.enableText"
defaultMessage="In order to use Fleet, you must create an Elastic user. This user can create API keys
and write to logs-* and metrics-*."
/>
</EuiText>
<EuiSpacer size="l" />
<EuiForm>
<EuiButton onClick={onSubmit} fill isLoading={isFormLoading} type="submit">
<FormattedMessage
id="xpack.ingestManager.setupPage.enableFleet"
defaultMessage="Create user and enable Fleet"
/>
</EuiButton>
</EuiForm>
<EuiSpacer size="m" />
</EuiPageContent>
</EuiPageBody>
</WithoutHeaderLayout>
);
}

return (
<WithoutHeaderLayout>
<EuiPageBody restrictWidth={820}>
<EuiPageContent>
<EuiCallOut
title={i18n.translate('xpack.ingestManager.setupPage.missingRequirementsCalloutTitle', {
defaultMessage: 'Missing security requirements',
})}
color="warning"
iconType="alert"
>
<FormattedMessage
id="xpack.ingestManager.setupPage.missingRequirementsTitle"
defaultMessage="Missing requirements"
id="xpack.ingestManager.setupPage.missingRequirementsCalloutDescription"
defaultMessage="In order to use Fleet, you must enable the following Elasticsearch and Kibana security features."
/>
</h2>
</EuiTitle>
<EuiSpacer size="xl" />
<EuiText color="subdued" textAlign={'left'}>
</EuiCallOut>
<EuiSpacer size="m" />
<FormattedMessage
id="xpack.ingestManager.setupPage.missingRequirementsDescription"
defaultMessage="To use Fleet, you must enable the following features:
{space}- Enable Elasticsearch API keys.
{space}- Enable TLS to secure the communication between Agents and Kibana.
{space}- Set the encryption key for encrypted saved objects.
"
values={{
space: <EuiSpacer size="m" />,
}}
id="xpack.ingestManager.setupPage.missingRequirementsElasticsearchTitle"
defaultMessage="In your Elasticsearch configuration, enable:"
/>
</EuiText>
<EuiSpacer size="l" />
</>
) : (
<>
<EuiSpacer size="m" />
<EuiIcon type="lock" color="subdued" size="xl" />
<EuiSpacer size="m" />
<EuiTitle size="l">
<h2>
<EuiSpacer size="l" />
<RequirementItem isMissing={false}>
<FormattedMessage
id="xpack.ingestManager.setupPage.elasticsearchSecurityFlagText"
defaultMessage="{esSecurityLink}. Set {securityFlag} to {true} ."
values={{
esSecurityLink: (
<EuiLink
href="https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-security.html"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.elasticsearchSecurityLink"
defaultMessage="Elasticsearch security"
/>
</EuiLink>
),
securityFlag: <EuiCode>xpack.security.enabled</EuiCode>,
true: <EuiCode>true</EuiCode>,
}}
/>
</RequirementItem>
<EuiSpacer size="s" />
<RequirementItem isMissing={missingRequirements.includes('api_keys')}>
<FormattedMessage
id="xpack.ingestManager.setupPage.enableTitle"
defaultMessage="Enable Fleet"
id="xpack.ingestManager.setupPage.elasticsearchApiKeyFlagText"
defaultMessage="{apiKeyLink}. Set {apiKeyFlag} to {true} ."
values={{
apiKeyFlag: <EuiCode>xpack.security.authc.api_key.enabled</EuiCode>,
true: <EuiCode>true</EuiCode>,
apiKeyLink: (
<EuiLink
href="https://www.elastic.co/guide/en/elasticsearch/reference/current/security-settings.html#api-key-service-settings"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.apiKeyServiceLink"
defaultMessage="API key service"
/>
</EuiLink>
),
}}
/>
</h2>
</EuiTitle>
<EuiSpacer size="xl" />
<EuiText color="subdued">
</RequirementItem>
<EuiSpacer size="m" />
<EuiCodeBlock isCopyable={true}>
{`xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true`}
</EuiCodeBlock>
<EuiSpacer size="l" />
<FormattedMessage
id="xpack.ingestManager.setupPage.enableText"
defaultMessage="In order to use Fleet, you must create an Elastic user. This user can create API keys
and write to logs-* and metrics-*."
id="xpack.ingestManager.setupPage.missingRequirementsKibanaTitle"
defaultMessage="In your Kibana configuration, enable:"
/>
<EuiSpacer size="l" />
<RequirementItem isMissing={missingRequirements.includes('tls_required')}>
<FormattedMessage
id="xpack.ingestManager.setupPage.tlsFlagText"
defaultMessage="{kibanaSecurityLink}. Set {securityFlag} to {true}. For development purposes, you can disable {tlsLink} by setting {tlsFlag} to {true} as an unsafe alternative."
values={{
kibanaSecurityLink: (
<EuiLink
href="https://www.elastic.co/guide/en/kibana/current/using-kibana-with-security.html"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.kibanaSecurityLink"
defaultMessage="Kibana security"
/>
</EuiLink>
),
securityFlag: <EuiCode>xpack.security.enabled</EuiCode>,
tlsLink: (
<EuiLink
href="https://www.elastic.co/guide/en/kibana/current/configuring-tls.html"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.tlsLink"
defaultMessage="TLS"
/>
</EuiLink>
),
tlsFlag: <EuiCode>xpack.ingestManager.fleet.tlsCheckDisabled</EuiCode>,
true: <EuiCode>true</EuiCode>,
}}
/>
</RequirementItem>
<EuiSpacer size="s" />
<RequirementItem
isMissing={missingRequirements.includes(
'encrypted_saved_object_encryption_key_required'
)}
>
<FormattedMessage
id="xpack.ingestManager.setupPage.encryptionKeyFlagText"
defaultMessage="{encryptionKeyLink}. Set {keyFlag} to any alphanumeric value of at least 32 characters."
values={{
encryptionKeyLink: (
<EuiLink
href="https://www.elastic.co/guide/en/kibana/current/ingest-manager-settings-kb.html"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.kibanaEncryptionLink"
defaultMessage="Kibana encryption key"
/>
</EuiLink>
),
keyFlag: <EuiCode>xpack.encryptedSavedObjects.encryptionKey</EuiCode>,
}}
/>
</RequirementItem>
<EuiSpacer size="m" />
<EuiCodeBlock isCopyable={true}>
{`xpack.security.enabled: true
xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"`}
</EuiCodeBlock>
<EuiSpacer size="l" />
<FormattedMessage
id="xpack.ingestManager.setupPage.gettingStartedText"
defaultMessage="For more information, read our {link} guide."
values={{
link: (
<EuiLink
href="https://www.elastic.co/guide/en/ingest-management/current/index.html"
target="_blank"
external
>
<FormattedMessage
id="xpack.ingestManager.setupPage.gettingStartedLink"
defaultMessage="Getting Started"
/>
</EuiLink>
),
}}
/>
</EuiText>
<EuiSpacer size="l" />
<EuiForm>
<form onSubmit={onSubmit}>
<EuiButton fill isLoading={isFormLoading} type="submit">
<FormattedMessage
id="xpack.ingestManager.setupPage.enableFleet"
defaultMessage="Create user and enable Fleet"
/>
</EuiButton>
</form>
</EuiForm>
<EuiSpacer size="m" />
</>
);

return (
<WithoutHeaderLayout>
<EuiPageBody restrictWidth={548}>
<EuiPageContent
verticalPosition="center"
horizontalPosition="center"
className="eui-textCenter"
paddingSize="l"
>
{content}
</EuiPageContent>
</EuiPageBody>
</WithoutHeaderLayout>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { CONTENT_TYPE_CSV, CSV_FROM_SAVEDOBJECT_JOB_TYPE } from '../../../common
import { RunTaskFnFactory, ScheduledTaskParams, TaskRunResult } from '../../types';
import { createGenerateCsv } from '../csv/generate_csv';
import { JobParamsPanelCsv, SearchPanel } from './types';
import { getFakeRequest } from './lib/get_fake_request';
import { getGenerateCsvParams } from './lib/get_csv_job';

/*
Expand Down Expand Up @@ -44,19 +43,10 @@ export const runTaskFnFactory: RunTaskFnFactory<ImmediateExecuteFn> = function e
const { jobParams } = jobPayload;
const jobLogger = logger.clone([jobId === null ? 'immediate' : jobId]);
const generateCsv = createGenerateCsv(jobLogger);
const { isImmediate, panel, visType } = jobParams as JobParamsPanelCsv & {
panel: SearchPanel;
};
const { panel, visType } = jobParams as JobParamsPanelCsv & { panel: SearchPanel };

jobLogger.debug(`Execute job generating [${visType}] csv`);

if (isImmediate && req) {
jobLogger.info(`Executing job from Immediate API using request context`);
} else {
jobLogger.info(`Executing job async using encrypted headers`);
req = await getFakeRequest(jobPayload, config.get('encryptionKey')!, jobLogger);
}

const savedObjectsClient = context.core.savedObjects.client;

const uiConfig = await reporting.getUiSettingsServiceFactory(savedObjectsClient);
Expand Down
Loading

0 comments on commit fb40648

Please sign in to comment.