Skip to content

Commit 1bd839d

Browse files
Jan Waśnineinchnick
authored andcommitted
Store access token in secureJsonData
1 parent 856c638 commit 1bd839d

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

pkg/trino/models/settings.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,8 @@ func (s *TrinoDatasourceSettings) Load(config backend.DataSourceInstanceSettings
4545
if err != nil {
4646
return err
4747
}
48+
if token, ok := config.DecryptedSecureJSONData["accessToken"]; ok {
49+
s.AccessToken = token
50+
}
4851
return nil
4952
}

src/ConfigEditor.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import React, { ChangeEvent, PureComponent } from 'react';
2-
import { DataSourceHttpSettings, InlineField, InlineSwitch, Input } from '@grafana/ui';
2+
import { DataSourceHttpSettings, InlineField, InlineSwitch, SecretInput } from '@grafana/ui';
33
import { DataSourcePluginOptionsEditorProps } from '@grafana/data';
4-
import { TrinoDataSourceOptions } from './types';
4+
import {TrinoDataSourceOptions, TrinoSecureJsonData} from './types';
55

6-
interface Props extends DataSourcePluginOptionsEditorProps<TrinoDataSourceOptions> {}
6+
interface Props extends DataSourcePluginOptionsEditorProps<TrinoDataSourceOptions, TrinoSecureJsonData> {}
77

88
interface State {}
99

@@ -14,8 +14,11 @@ export class ConfigEditor extends PureComponent<Props, State> {
1414
onOptionsChange({...options, jsonData: {...options.jsonData, enableImpersonation: event.target.checked}})
1515
}
1616
const onTokenChange = (event: ChangeEvent<HTMLInputElement>) => {
17-
onOptionsChange({...options, jsonData: {...options.jsonData, accessToken: event.target.value}})
17+
onOptionsChange({...options, secureJsonData: {...options.secureJsonData, accessToken: event.target.value}})
1818
}
19+
const onResetToken = () => {
20+
onOptionsChange({...options, secureJsonFields: {...options.secureJsonFields, accessToken: false }, secureJsonData: {...options.secureJsonData, accessToken: '' }});
21+
};
1922
return (
2023
<div className="gf-form-group">
2124
<DataSourceHttpSettings
@@ -41,14 +44,16 @@ export class ConfigEditor extends PureComponent<Props, State> {
4144
</div>
4245
<div className="gf-form-inline">
4346
<InlineField
44-
label="Access Token"
45-
tooltip="If set, use the Access Token for authentication to Trino"
47+
label="Access token"
48+
tooltip="If set, use the access token for authentication to Trino"
4649
labelWidth={26}
4750
>
48-
<Input
49-
value={options.jsonData?.accessToken || ''}
51+
<SecretInput
52+
value={options.secureJsonData?.accessToken ?? ''}
53+
isConfigured={options.secureJsonFields?.accessToken}
5054
onChange={onTokenChange}
5155
width={40}
56+
onReset={onResetToken}
5257
/>
5358
</InlineField>
5459
</div>

src/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,12 @@ ORDER BY
4646
* These are options configured for each DataSource instance.
4747
*/
4848

49+
export interface TrinoSecureJsonData {
50+
accessToken?: string;
51+
}
52+
4953
export interface TrinoDataSourceOptions extends DataSourceJsonData {
5054
enableImpersonation?: boolean;
51-
accessToken?: string;
5255
}
5356
/**
5457
* Value that is used in the backend, but never sent over HTTP to the frontend

tsconfig.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"compilerOptions": {
55
"rootDir": "./src",
66
"baseUrl": "./src",
7-
"typeRoots": ["./node_modules/@types"]
7+
"typeRoots": ["./node_modules/@types"],
8+
"jsx": "react",
9+
"allowSyntheticDefaultImports": true
810
}
9-
}
11+
}

0 commit comments

Comments
 (0)