UNPKG

@grafana/ui

Version:
1 lines • 26.2 kB
{"version":3,"file":"DataSourceHttpSettings.mjs","sources":["../../../../src/components/DataSourceSettings/DataSourceHttpSettings.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useState, useCallback, useId, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Alert } from '../Alert/Alert';\nimport { Button } from '../Button/Button';\nimport { Field } from '../Forms/Field';\nimport { InlineField } from '../Forms/InlineField';\nimport { RadioButtonGroup } from '../Forms/RadioButtonGroup/RadioButtonGroup';\nimport { Icon } from '../Icon/Icon';\nimport { Input } from '../Input/Input';\nimport { Stack } from '../Layout/Stack/Stack';\nimport { InlineSwitch } from '../Switch/Switch';\nimport { TagsInput } from '../TagsInput/TagsInput';\nimport { Text } from '../Text/Text';\n\nimport { BasicAuthSettings } from './BasicAuthSettings';\nimport { CustomHeadersSettings } from './CustomHeadersSettings';\nimport { HttpProxySettings } from './HttpProxySettings';\nimport { SecureSocksProxySettings } from './SecureSocksProxySettings';\nimport { TLSAuthSettings } from './TLSAuthSettings';\nimport { HttpSettingsProps } from './types';\n\nconst ACCESS_HELP_ID = 'grafana-http-access-help';\n\nconst HttpAccessHelp = () => {\n return (\n <Alert\n severity=\"info\"\n title={t('grafana-ui.data-source-http-settings.access-help-title', 'Access help')}\n topSpacing={3}\n id={ACCESS_HELP_ID}\n >\n <p>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.access-help-details\">\n Access mode controls how requests to the data source will be handled.\n <strong>\n &nbsp;<i>Server</i>\n </strong>{' '}\n should be the preferred way if nothing else is stated.\n </Trans>\n </p>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.server-mode-title\">\n <Text weight=\"medium\">Server access mode (Default):</Text>\n </Trans>\n <p>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.server-mode-description\">\n All requests will be made from the browser to Grafana backend/server which in turn will forward the requests\n to the data source and by that circumvent possible Cross-Origin Resource Sharing (CORS) requirements. The URL\n needs to be accessible from the grafana backend/server if you select this access mode.\n </Trans>\n </p>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.browser-mode-title\">\n <Text weight=\"medium\">Browser access mode:</Text>\n </Trans>\n <p>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.browser-mode-description\">\n All requests will be made from the browser directly to the data source and may be subject to Cross-Origin\n Resource Sharing (CORS) requirements. The URL needs to be accessible from the browser if you select this\n access mode.\n </Trans>\n </p>\n </Alert>\n );\n};\n\nconst LABEL_WIDTH = 26;\n\n/**\n * @deprecated Use components from `@grafana/plugin-ui` instead, according to the [migration guide](https://github.com/grafana/plugin-ui/blob/main/src/components/ConfigEditor/migrating-from-datasource-http-settings.md).\n */\nexport const DataSourceHttpSettings = (props: HttpSettingsProps) => {\n const {\n defaultUrl,\n dataSourceConfig,\n onChange,\n showAccessOptions,\n sigV4AuthToggleEnabled,\n showForwardOAuthIdentityOption,\n azureAuthSettings,\n renderSigV4Editor,\n secureSocksDSProxyEnabled,\n urlLabel,\n urlDocs,\n } = props;\n\n const ACCESS_OPTIONS: Array<SelectableValue<string>> = useMemo(\n () => [\n {\n label: t('grafana-ui.data-source-http-settings.server-mode-label', 'Server (default)'),\n value: 'proxy',\n },\n {\n label: t('grafana-ui.data-source-http-settings.browser-mode-label', 'Browser'),\n value: 'direct',\n },\n ],\n []\n );\n\n const DEFAULT_ACCESS_OPTION = useMemo(() => ACCESS_OPTIONS[0], [ACCESS_OPTIONS]);\n\n const [isAccessHelpVisible, setIsAccessHelpVisible] = useState(false);\n const [azureAuthEnabled, setAzureAuthEnabled] = useState(false);\n const theme = useTheme2();\n let urlTooltip;\n\n const onSettingsChange = useCallback(\n (change: Partial<typeof dataSourceConfig>) => {\n // Azure Authentication doesn't work correctly when Forward OAuth Identity is enabled.\n // The Authorization header that has been set by the ApplyAzureAuth middleware gets overwritten\n // with the Authorization header set by the OAuthTokenMiddleware.\n const isAzureAuthEnabled =\n (azureAuthSettings?.azureAuthSupported && azureAuthSettings.getAzureAuthEnabled(dataSourceConfig)) || false;\n setAzureAuthEnabled(isAzureAuthEnabled);\n if (isAzureAuthEnabled) {\n const tmpOauthPassThru =\n dataSourceConfig.jsonData.oauthPassThru !== undefined ? dataSourceConfig.jsonData.oauthPassThru : false;\n change = {\n ...change,\n jsonData: {\n ...dataSourceConfig.jsonData,\n oauthPassThru: isAzureAuthEnabled ? false : tmpOauthPassThru,\n },\n };\n }\n\n onChange({\n ...dataSourceConfig,\n ...change,\n });\n },\n [azureAuthSettings, dataSourceConfig, onChange]\n );\n\n switch (dataSourceConfig.access) {\n case 'direct':\n urlTooltip = (\n <>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.direct-url-tooltip\">\n Your access method is <em>Browser</em>, this means the URL needs to be accessible from the browser.\n </Trans>\n {urlDocs}\n </>\n );\n break;\n case 'proxy':\n urlTooltip = (\n <>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.proxy-url-tooltip\">\n Your access method is <em>Server</em>, this means the URL needs to be accessible from the grafana\n backend/server.\n </Trans>\n {urlDocs}\n </>\n );\n break;\n default:\n urlTooltip = (\n <>\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.default-url-tooltip\">\n Specify a complete HTTP URL (for example http://your_server:8080)\n </Trans>\n {urlDocs}\n </>\n );\n }\n\n const isValidUrl = /^(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?$/.test(\n dataSourceConfig.url\n );\n\n const gridLayout = css({\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gap: theme.spacing(0.5),\n });\n\n const fromFieldId = useId();\n\n return (\n <Stack direction=\"column\" gap={5}>\n <section>\n <h3 className=\"page-heading\">\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.heading\">HTTP</Trans>\n </h3>\n\n <Field\n label={urlLabel ?? 'URL'}\n description={urlTooltip}\n invalid={!isValidUrl}\n error={!isValidUrl && t('grafana-ui.data-source-http-settings.invalid-url-error', 'Invalid URL')}\n disabled={dataSourceConfig.readOnly}\n >\n <Input\n id={fromFieldId}\n width={40}\n placeholder={defaultUrl}\n value={dataSourceConfig.url}\n data-testid={selectors.components.DataSource.DataSourceHttpSettings.urlInput}\n onChange={(event) => onSettingsChange({ url: event.currentTarget.value })}\n />\n </Field>\n\n {showAccessOptions && (\n <>\n <Field\n label={t('grafana-ui.data-source-http-settings.access-label', 'Access')}\n disabled={dataSourceConfig.readOnly}\n >\n <Stack direction=\"row\" gap={0.5}>\n <RadioButtonGroup\n aria-label={t('grafana-ui.data-source-http-settings.access-label', 'Access')}\n options={ACCESS_OPTIONS}\n value={\n ACCESS_OPTIONS.find((o) => o.value === dataSourceConfig.access)?.value ||\n DEFAULT_ACCESS_OPTION.value\n }\n onChange={(selectedValue) => onSettingsChange({ access: selectedValue })}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"md\"\n fill=\"outline\"\n onClick={() => setIsAccessHelpVisible((isVisible) => !isVisible)}\n aria-expanded={isAccessHelpVisible}\n aria-controls={ACCESS_HELP_ID}\n >\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.access-help\">\n Help&nbsp;\n <Icon name={isAccessHelpVisible ? 'angle-down' : 'angle-right'} />\n </Trans>\n </Button>\n </Stack>\n </Field>\n\n {isAccessHelpVisible && <HttpAccessHelp />}\n </>\n )}\n {dataSourceConfig.access === 'proxy' && (\n <>\n <Field\n label={t('grafana-ui.data-source-http-settings.allowed-cookies', 'Allowed cookies')}\n description={t(\n 'grafana-ui.data-source-http-settings.allowed-cookies-description',\n 'Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.'\n )}\n >\n <TagsInput\n tags={dataSourceConfig.jsonData.keepCookies}\n width={40}\n onChange={(cookies) =>\n onSettingsChange({ jsonData: { ...dataSourceConfig.jsonData, keepCookies: cookies } })\n }\n disabled={dataSourceConfig.readOnly}\n />\n </Field>\n\n <Field\n label={t('grafana-ui.data-source-http-settings.timeout-label', 'Timeout')}\n description={t(\n 'grafana-ui.data-source-http-settings.timeout-description',\n 'HTTP request timeout in seconds'\n )}\n disabled={dataSourceConfig.readOnly}\n >\n <Input\n type=\"number\"\n width={40}\n placeholder={t('grafana-ui.data-source-http-settings.timeout-placeholder', 'Timeout in seconds')}\n value={dataSourceConfig.jsonData.timeout}\n onChange={(event) => {\n onSettingsChange({\n jsonData: { ...dataSourceConfig.jsonData, timeout: parseInt(event.currentTarget.value, 10) },\n });\n }}\n />\n </Field>\n </>\n )}\n </section>\n\n <section>\n <h3 className=\"page-heading\">\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.auth\">Auth</Trans>\n </h3>\n <Stack direction=\"column\" gap={4}>\n <div>\n <div className={gridLayout}>\n <InlineField\n label={t('grafana-ui.data-source-http-settings.basic-auth-label', 'Basic auth')}\n labelWidth={LABEL_WIDTH}\n disabled={dataSourceConfig.readOnly}\n >\n <InlineSwitch\n id=\"http-settings-basic-auth\"\n value={dataSourceConfig.basicAuth}\n onChange={(event) => {\n onSettingsChange({ basicAuth: event!.currentTarget.checked });\n }}\n />\n </InlineField>\n\n <InlineField\n label={t('grafana-ui.data-source-http-settings.with-credentials-label', 'With Credentials')}\n tooltip={t(\n 'grafana-ui.data-source-http-settings.with-credentials-tooltip',\n 'Whether credentials such as cookies or auth headers should be sent with cross-site requests.'\n )}\n labelWidth={LABEL_WIDTH}\n disabled={dataSourceConfig.readOnly}\n >\n <InlineSwitch\n id=\"http-settings-with-credentials\"\n value={dataSourceConfig.withCredentials}\n onChange={(event) => {\n onSettingsChange({ withCredentials: event!.currentTarget.checked });\n }}\n />\n </InlineField>\n\n {azureAuthSettings?.azureAuthSupported && (\n <InlineField\n label={t('grafana-ui.data-source-http-settings.azure-auth-label', 'Azure Authentication')}\n tooltip={t(\n 'grafana-ui.data-source-http-settings.azure-auth-tooltip',\n 'Use Azure authentication for Azure endpoint.'\n )}\n labelWidth={LABEL_WIDTH}\n disabled={dataSourceConfig.readOnly}\n >\n <InlineSwitch\n id=\"http-settings-azure-auth\"\n value={azureAuthEnabled}\n onChange={(event) => {\n onSettingsChange(\n azureAuthSettings.setAzureAuthEnabled(dataSourceConfig, event!.currentTarget.checked)\n );\n }}\n />\n </InlineField>\n )}\n\n {sigV4AuthToggleEnabled && (\n <InlineField\n label={t('grafana-ui.data-source-http-settings.sigv4-auth-label', 'SigV4 auth')}\n labelWidth={LABEL_WIDTH}\n disabled={dataSourceConfig.readOnly}\n >\n <InlineSwitch\n id=\"http-settings-sigv4-auth\"\n value={dataSourceConfig.jsonData.sigV4Auth || false}\n onChange={(event) => {\n onSettingsChange({\n jsonData: { ...dataSourceConfig.jsonData, sigV4Auth: event!.currentTarget.checked },\n });\n }}\n />\n </InlineField>\n )}\n </div>\n\n {dataSourceConfig.access === 'proxy' && (\n <HttpProxySettings\n dataSourceConfig={dataSourceConfig}\n onChange={(jsonData) => onSettingsChange({ jsonData })}\n showForwardOAuthIdentityOption={azureAuthEnabled ? false : showForwardOAuthIdentityOption}\n />\n )}\n </div>\n\n {dataSourceConfig.basicAuth && (\n <section>\n <Text variant=\"h6\" element=\"h4\">\n <Trans i18nKey=\"grafana-ui.data-source-http-settings.basic-auth\">Basic Auth Details</Trans>\n </Text>\n\n <BasicAuthSettings {...props} />\n </section>\n )}\n\n {azureAuthSettings?.azureAuthSupported && azureAuthEnabled && azureAuthSettings.azureSettingsUI && (\n <azureAuthSettings.azureSettingsUI dataSourceConfig={dataSourceConfig} onChange={onChange} />\n )}\n\n {dataSourceConfig.jsonData.sigV4Auth && sigV4AuthToggleEnabled && renderSigV4Editor}\n {(dataSourceConfig.jsonData.tlsAuth || dataSourceConfig.jsonData.tlsAuthWithCACert) && (\n <TLSAuthSettings dataSourceConfig={dataSourceConfig} onChange={onChange} />\n )}\n\n {dataSourceConfig.access === 'proxy' && (\n <CustomHeadersSettings dataSourceConfig={dataSourceConfig} onChange={onChange} />\n )}\n </Stack>\n </section>\n {secureSocksDSProxyEnabled && <SecureSocksProxySettings options={dataSourceConfig} onOptionsChange={onChange} />}\n </Stack>\n );\n};\n"],"names":[],"mappings":"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"}