diff --git a/pkg/flightsql/flightsql.go b/pkg/flightsql/flightsql.go index 7f09544..3af897e 100644 --- a/pkg/flightsql/flightsql.go +++ b/pkg/flightsql/flightsql.go @@ -64,6 +64,14 @@ func NewDatasource(settings backend.DataSourceInstanceSettings) (instancemgmt.In return nil, fmt.Errorf("config: %s", err) } + if token, exists := settings.DecryptedSecureJSONData["token"]; exists { + cfg.Token = token + } + + if password, exists := settings.DecryptedSecureJSONData["password"]; exists { + cfg.Password = password + } + if err := cfg.validate(); err != nil { return nil, fmt.Errorf("config validation: %v", err) } diff --git a/src/components/BuilderView.tsx b/src/components/BuilderView.tsx index 340647c..c6cff89 100644 --- a/src/components/BuilderView.tsx +++ b/src/components/BuilderView.tsx @@ -136,7 +136,6 @@ export function BuilderView({query, datasource, onChange, fromRawSql}: any) { } } if (!tableExists) { - console.log('query', query) query.queryText = '' } } diff --git a/src/components/ConfigEditor.test.tsx b/src/components/ConfigEditor.test.tsx index b2a04ff..67f1be2 100644 --- a/src/components/ConfigEditor.test.tsx +++ b/src/components/ConfigEditor.test.tsx @@ -34,14 +34,15 @@ const setup = async (optionOverrides?: object) => { isDefault: false, jsonData: { host: '', - token: '', secure: true, username: '', - password: '', selectedAuthType: '', metadata: [], }, - secureJsonFields: {}, + secureJsonFields: { + token: false, + password: false, + }, readOnly: false, withCredentials: false, typeName: '', diff --git a/src/components/ConfigEditor.tsx b/src/components/ConfigEditor.tsx index 5b07ddc..23837b4 100644 --- a/src/components/ConfigEditor.tsx +++ b/src/components/ConfigEditor.tsx @@ -1,7 +1,7 @@ import React, {useEffect, useState} from 'react' import {InlineSwitch, FieldSet, InlineField, SecretInput, Input, Select, InlineFieldRow, InlineLabel} from '@grafana/ui' import {DataSourcePluginOptionsEditorProps, SelectableValue} from '@grafana/data' -import {FlightSQLDataSourceOptions, authTypeOptions} from '../types' +import {FlightSQLDataSourceOptions, authTypeOptions, SecureJsonData} from '../types' import { onHostChange, onTokenChange, @@ -13,11 +13,15 @@ import { onValueChange, addMetaData, removeMetaData, + onResetToken, + onResetPassword, } from './utils' -export function ConfigEditor(props: DataSourcePluginOptionsEditorProps) { +export function ConfigEditor(props: DataSourcePluginOptionsEditorProps) { const {options, onOptionsChange} = props const {jsonData} = options + const {secureJsonData, secureJsonFields} = options + const [selectedAuthType, setAuthType] = useState>({ value: jsonData?.selectedAuthType, label: jsonData?.selectedAuthType, @@ -70,11 +74,11 @@ export function ConfigEditor(props: DataSourcePluginOptionsEditorProps onTokenChange(e, options, onOptionsChange)} - onReset={() => onTokenChange(null, options, onOptionsChange)} - isConfigured={false} + onReset={() => onResetToken(options, onOptionsChange)} + isConfigured={secureJsonFields?.token} > )} @@ -95,11 +99,11 @@ export function ConfigEditor(props: DataSourcePluginOptionsEditorProps onPasswordChange(e, options, onOptionsChange)} - onReset={() => onPasswordChange(null, options, onOptionsChange)} - isConfigured={false} + onReset={() => onResetPassword(options, onOptionsChange)} + isConfigured={secureJsonFields?.password} > diff --git a/src/components/utils.ts b/src/components/utils.ts index 699ef1b..356c97a 100644 --- a/src/components/utils.ts +++ b/src/components/utils.ts @@ -106,14 +106,6 @@ export const onHostChange = (event: any, options: any, onOptionsChange: any) => onOptionsChange({...options, jsonData}) } -export const onTokenChange = (event: any, options: any, onOptionsChange: any) => { - const jsonData = { - ...options.jsonData, - token: event?.target?.value || '', - } - onOptionsChange({...options, jsonData}) -} - export const onSecureChange = (options: any, onOptionsChange: any) => { const jsonData = { ...options.jsonData, @@ -131,11 +123,11 @@ export const onUsernameChange = (event: any, options: any, onOptionsChange: any) } export const onPasswordChange = (event: any, options: any, onOptionsChange: any) => { - const jsonData = { - ...options.jsonData, - password: event.target.value, + const secureJsonData = { + ...options.secureJsonData, + password: event?.target?.value || '', } - onOptionsChange({...options, jsonData}) + onOptionsChange({...options, secureJsonData}) } export const onAuthTypeChange = (selectedAuthType: any, options: any, onOptionsChange: any) => { @@ -190,3 +182,39 @@ export const onValueChange = (event: any, metaDataArr: any, index: any, setMetaD newMetaValues[index]['value'] = event.target.value setMetaData(newMetaValues) } + +export const onTokenChange = (event: any, options: any, onOptionsChange: any) => { + const secureJsonData = { + ...options.secureJsonData, + token: event?.target?.value || '', + } + onOptionsChange({...options, secureJsonData}) +} + +export const onResetToken = (options: any, onOptionsChange: any) => { + onOptionsChange({ + ...options, + secureJsonFields: { + ...options.secureJsonFields, + token: false, + }, + secureJsonData: { + ...options.secureJsonData, + token: '', + }, + }) +} + +export const onResetPassword = (options: any, onOptionsChange: any) => { + onOptionsChange({ + ...options, + secureJsonFields: { + ...options.secureJsonFields, + password: false, + }, + secureJsonData: { + ...options.secureJsonData, + password: '', + }, + }) +} diff --git a/src/mock-datasource.ts b/src/mock-datasource.ts index dcca1f4..e8c1451 100644 --- a/src/mock-datasource.ts +++ b/src/mock-datasource.ts @@ -53,14 +53,15 @@ export const mockDatasourceOptions: DataSourcePluginOptionsEditorProps( +export const plugin = new DataSourcePlugin( FlightSQLDataSource ) .setConfigEditor(ConfigEditor) diff --git a/src/types.ts b/src/types.ts index ebbf831..59cff70 100644 --- a/src/types.ts +++ b/src/types.ts @@ -28,6 +28,11 @@ export interface FlightSQLDataSourceOptions extends DataSourceJsonData { metadata?: any } +export interface SecureJsonData { + password?: string + token?: string +} + export type TablesResponse = { tables: string[] }