UNPKG

@grafana/ui

Version:
1 lines • 26.4 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 *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/plugins-datasourcehttpsettings--docs\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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"}