mirror of https://github.com/grafana/grafana
CloudMonitoring: use @grafana/google-sdk (#44398)
parent
5c9d2d6b3e
commit
50e7ac8d65
@ -1,82 +0,0 @@ |
||||
import React, { FormEvent, useState } from 'react'; |
||||
import { startCase } from 'lodash'; |
||||
import { Button, FileUpload, InlineField, Input, useStyles, Alert } from '@grafana/ui'; |
||||
import { css, cx } from '@emotion/css'; |
||||
import { GrafanaTheme } from '@grafana/data'; |
||||
|
||||
const configKeys = ['project_id', 'private_key', 'client_email', 'token_uri']; |
||||
|
||||
export interface JWT { |
||||
token_uri: string; |
||||
client_email: string; |
||||
private_key: string; |
||||
project_id: string; |
||||
} |
||||
|
||||
export interface Props { |
||||
onChange: (jwt: JWT) => void; |
||||
isConfigured: boolean; |
||||
} |
||||
|
||||
const validateJson = (json: JWT): json is JWT => { |
||||
return !!json.token_uri && !!json.client_email && !!json.project_id && !!json.project_id; |
||||
}; |
||||
|
||||
export function JWTConfig({ onChange, isConfigured }: Props) { |
||||
const styles = useStyles(getStyles); |
||||
const [enableUpload, setEnableUpload] = useState<boolean>(!isConfigured); |
||||
const [error, setError] = useState<string | null>(null); |
||||
|
||||
return enableUpload ? ( |
||||
<> |
||||
<FileUpload |
||||
className={styles} |
||||
accept="application/json" |
||||
onFileUpload={(event: FormEvent<HTMLInputElement>) => { |
||||
if (event?.currentTarget?.files?.length === 1) { |
||||
setError(null); |
||||
const reader = new FileReader(); |
||||
const readerOnLoad = () => { |
||||
return (e: any) => { |
||||
const json = JSON.parse(e.target.result); |
||||
if (validateJson(json)) { |
||||
onChange(json); |
||||
setEnableUpload(false); |
||||
} else { |
||||
setError('Invalid JWT file'); |
||||
} |
||||
}; |
||||
}; |
||||
reader.onload = readerOnLoad(); |
||||
reader.readAsText(event.currentTarget.files[0]); |
||||
} else { |
||||
setError('You can only upload one file'); |
||||
} |
||||
}} |
||||
> |
||||
Upload service account key file |
||||
</FileUpload> |
||||
|
||||
{error && <p className={cx(styles, 'alert')}>{error}</p>} |
||||
</> |
||||
) : ( |
||||
<> |
||||
{configKeys.map((key, i) => ( |
||||
<InlineField label={startCase(key)} key={i} labelWidth={20} disabled> |
||||
<Input width={40} placeholder="configured" /> |
||||
</InlineField> |
||||
))} |
||||
<Button variant="secondary" onClick={() => setEnableUpload(true)} className={styles}> |
||||
Upload another JWT file |
||||
</Button> |
||||
|
||||
<Alert title="" className={styles} severity="info"> |
||||
Do not forget to save your changes after uploading a file |
||||
</Alert> |
||||
</> |
||||
); |
||||
} |
||||
|
||||
export const getStyles = (theme: GrafanaTheme) => css` |
||||
margin: ${theme.spacing.md} 0 0; |
||||
`;
|
Loading…
Reference in new issue