Skip to content

Commit 2a76870

Browse files
committed
Add password configuration to datasource settings
This currently bumps the minimum Grafana version to 9.1.0 through use of `SecretInput`, which isn't ideal - perhaps we could copy/paste that component in instead, or just write our own. Closes #16.
1 parent df1f266 commit 2a76870

File tree

6 files changed

+920
-591
lines changed

6 files changed

+920
-591
lines changed

backend/src/lib.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,18 @@ impl MaterializePlugin {
3838
let settings: MaterializeDatasourceSettings =
3939
serde_json::from_value(datasource_settings.json_data.clone())
4040
.map_err(Error::InvalidDatasourceSettings)?;
41-
let (client, connection) = Config::new()
41+
let mut config = Config::new();
42+
config
4243
.user(&settings.username)
4344
.host(&settings.host)
44-
.port(settings.port)
45-
.connect(NoTls)
46-
.await?;
45+
.port(settings.port);
46+
if let Some(p) = &datasource_settings
47+
.decrypted_secure_json_data
48+
.get("password")
49+
{
50+
config.password(p);
51+
}
52+
let (client, connection) = config.connect(NoTls).await?;
4753
tokio::spawn(async move {
4854
if let Err(e) = connection.await {
4955
eprintln!("connection error: {}", e);

docker-compose.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: "3"
22

33
services:
44
grafana:
5-
image: grafana/grafana:9.0.7
5+
image: grafana/grafana:9.1.6
66
ports:
77
- "3000:3000"
88
restart: on-failure

package.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
"author": "Ben Sully",
1414
"license": "Apache-2.0",
1515
"devDependencies": {
16-
"@grafana/data": "^9.0.0",
17-
"@grafana/runtime": "^9.0.0",
18-
"@grafana/toolkit": "^9.0.0",
19-
"@grafana/ui": "^9.0.0",
16+
"@grafana/data": "^9.1.0",
17+
"@grafana/runtime": "^9.1.0",
18+
"@grafana/toolkit": "^9.1.0",
19+
"@grafana/ui": "^9.1.0",
2020
"@types/lodash": "^4.14.177"
2121
},
2222
"resolutions": {
23-
"rxjs": "7.5.5"
23+
"rxjs": "7.5.6"
2424
},
2525
"engines": {
2626
"node": ">=14"

src/ConfigEditor.tsx

+15-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import React, { useCallback } from 'react';
22
import { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';
3-
import { DataSourceOptions } from './types';
4-
import { FieldSet, Form, InlineField, Input } from '@grafana/ui';
3+
import { DataSourceOptions, DataSourceSecureOptions } from './types';
4+
import { FieldSet, Form, InlineField, Input, SecretInput } from '@grafana/ui';
55

6-
interface Props extends DataSourcePluginOptionsEditorProps<DataSourceOptions> {}
6+
interface Props extends DataSourcePluginOptionsEditorProps<DataSourceOptions, DataSourceSecureOptions> { }
77

88
export const ConfigEditor = ({ options, onOptionsChange }: Props): JSX.Element => {
99
const onSettingsChange = useCallback(
10-
(change: Partial<DataSourceSettings<DataSourceOptions>>) => {
10+
(change: Partial<DataSourceSettings<DataSourceOptions, DataSourceSecureOptions>>) => {
1111
onOptionsChange({
1212
...options,
1313
...change,
@@ -52,6 +52,17 @@ export const ConfigEditor = ({ options, onOptionsChange }: Props): JSX.Element =
5252
}
5353
/>
5454
</InlineField>
55+
56+
<InlineField label="Password" labelWidth={20}>
57+
<SecretInput
58+
isConfigured={!!options.secureJsonData?.password ?? false}
59+
onReset={() => onSettingsChange({ secureJsonData: { ...options.secureJsonData, password: undefined } })}
60+
value={options.secureJsonData?.password}
61+
onBlur={(event) =>
62+
onSettingsChange({ secureJsonData: { ...options.secureJsonData, password: event.currentTarget.value } })
63+
}
64+
/>
65+
</InlineField>
5566
</FieldSet>
5667
</>
5768
)}

src/types.ts

+7
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,10 @@ export interface DataSourceOptions extends DataSourceJsonData {
7070
port?: number;
7171
username?: string;
7272
}
73+
74+
/**
75+
* These are secure options configured for each DataSource instance.
76+
*/
77+
export interface DataSourceSecureOptions extends DataSourceJsonData {
78+
password?: string;
79+
}

0 commit comments

Comments
 (0)