|
@@ -9,7 +9,11 @@ import {
|
|
|
} from '@ant-design/pro-components'
|
|
|
import { Button, Col, message, Form } from 'antd'
|
|
|
import { useState } from 'react'
|
|
|
-import { testDataSourceConnection, createDataSource } from '../services'
|
|
|
+import {
|
|
|
+ testDataSourceConnection,
|
|
|
+ createDataSource,
|
|
|
+ uploadFile,
|
|
|
+} from '../services'
|
|
|
|
|
|
const DATA_TYPE_MYSQL = 'mysql'
|
|
|
const KERBS_VALID_FALSE = false
|
|
@@ -19,8 +23,13 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
const [dataType, setDataType] = useState(DATA_TYPE_MYSQL)
|
|
|
// 是否开启kerbsValid验证
|
|
|
const [kerbsValid, setKerbsValid] = useState(KERBS_VALID_FALSE)
|
|
|
+ const [kerberosServiceName, setKerberosServiceName] = useState('')
|
|
|
+ const [principal, setPrincipal] = useState(KERBS_VALID_FALSE)
|
|
|
// Loading状态
|
|
|
const [loading, setLoading] = useState(false)
|
|
|
+
|
|
|
+ const [keytabFile, setKeytabFile] = useState([])
|
|
|
+ const [krd5File, setKrd5File] = useState([])
|
|
|
// Form表单
|
|
|
const [form] = Form.useForm()
|
|
|
// 测试连接
|
|
@@ -39,10 +48,21 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
await form.validateFields(fields)
|
|
|
setLoading(true)
|
|
|
const testData = form.getFieldsValue(fields)
|
|
|
- const { data } = await testDataSourceConnection({
|
|
|
+ const params = {
|
|
|
...testData,
|
|
|
tag: form.getFieldValue('tag').join('/'),
|
|
|
- })
|
|
|
+ }
|
|
|
+ params['kerberos'] = kerbsValid ? 1 : 0
|
|
|
+ if (kerbsValid) {
|
|
|
+ const keytab = await uploadKerbFile(keytabFile)
|
|
|
+ const krb5config = await uploadKerbFile(krd5File)
|
|
|
+ console.log(keytab, krb5config)
|
|
|
+ params['keytab'] = keytab
|
|
|
+ params['krb5config'] = krb5config
|
|
|
+ params['kerberos_service_name'] = kerberosServiceName
|
|
|
+ params['principal'] = principal
|
|
|
+ }
|
|
|
+ const { data } = await testDataSourceConnection(params)
|
|
|
if (data.data) {
|
|
|
message.success('连接成功')
|
|
|
} else {
|
|
@@ -65,10 +85,21 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
'comments',
|
|
|
'tag',
|
|
|
]
|
|
|
- const { data } = await createDataSource({
|
|
|
+ const params = {
|
|
|
...form.getFieldsValue(fields),
|
|
|
tag: form.getFieldValue('tag').join('/'),
|
|
|
- })
|
|
|
+ }
|
|
|
+ params['kerberos'] = kerbsValid ? 1 : 0
|
|
|
+ if (kerbsValid) {
|
|
|
+ const keytab = await uploadKerbFile(keytabFile)
|
|
|
+ const krb5config = await uploadKerbFile(krd5File)
|
|
|
+ console.log(keytab, krb5config)
|
|
|
+ params['keytab'] = keytab
|
|
|
+ params['krb5config'] = krb5config
|
|
|
+ params['kerberos_service_name'] = kerberosServiceName
|
|
|
+ params['principal'] = principal
|
|
|
+ }
|
|
|
+ const { data } = await createDataSource(params)
|
|
|
if (data.code === 200) {
|
|
|
message.success('添加成功')
|
|
|
updateDataSource()
|
|
@@ -77,12 +108,57 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
+ const uploadKerbFile = async fileList => {
|
|
|
+ const file = new FormData()
|
|
|
+ fileList.forEach(item => {
|
|
|
+ file.append('file', item)
|
|
|
+ })
|
|
|
+ file.append('project_id', 'test')
|
|
|
+ file.append('file_type', 'kerberos')
|
|
|
+ const { data } = await uploadFile(file)
|
|
|
+ let uri = ''
|
|
|
+ if (data.code === 200) {
|
|
|
+ uri = data.data
|
|
|
+ } else {
|
|
|
+ message.error(data.msg)
|
|
|
+ }
|
|
|
+ return uri
|
|
|
+ }
|
|
|
// 测试连接按钮
|
|
|
const testConnectBtn = (
|
|
|
<Button onClick={testConnect} loading={loading}>
|
|
|
测试连接
|
|
|
</Button>
|
|
|
)
|
|
|
+
|
|
|
+ //上传文件配置
|
|
|
+ const keytabUpProps = {
|
|
|
+ onRemove: file => {
|
|
|
+ const index = keytabFile.indexOf(file)
|
|
|
+ const newFileList = keytabFile.slice()
|
|
|
+ newFileList.splice(index, 1)
|
|
|
+ setKeytabFile(newFileList)
|
|
|
+ },
|
|
|
+ beforeUpload: file => {
|
|
|
+ setKeytabFile([...keytabFile, file])
|
|
|
+ return false
|
|
|
+ },
|
|
|
+ keytabFile,
|
|
|
+ }
|
|
|
+
|
|
|
+ const krd5UpProps = {
|
|
|
+ onRemove: file => {
|
|
|
+ const index = krd5File.indexOf(file)
|
|
|
+ const newFileList = krd5File.slice()
|
|
|
+ newFileList.splice(index, 1)
|
|
|
+ setKrd5File(newFileList)
|
|
|
+ },
|
|
|
+ beforeUpload: file => {
|
|
|
+ setKrd5File([...krd5File, file])
|
|
|
+ return false
|
|
|
+ },
|
|
|
+ krd5File,
|
|
|
+ }
|
|
|
return (
|
|
|
<ModalForm
|
|
|
form={form}
|
|
@@ -182,7 +258,7 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
name="jdbc_username"
|
|
|
rules={[
|
|
|
{
|
|
|
- required: true,
|
|
|
+ required: !kerbsValid ? true : false,
|
|
|
message: '请输入用户名!',
|
|
|
},
|
|
|
]}
|
|
@@ -192,7 +268,7 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
name="jdbc_password"
|
|
|
rules={[
|
|
|
{
|
|
|
- required: true,
|
|
|
+ required: !kerbsValid ? true : false,
|
|
|
message: '请输入密码!',
|
|
|
},
|
|
|
]}
|
|
@@ -233,25 +309,38 @@ export default function DatasourceAdd({ updateDataSource }) {
|
|
|
{dataType === 'hive' && kerbsValid ? (
|
|
|
<>
|
|
|
<ProFormUploadButton
|
|
|
- label="keytab"
|
|
|
+ label="keytab文件"
|
|
|
name="keytab"
|
|
|
- action="upload.do"
|
|
|
title="上传keyTabPath"
|
|
|
+ fieldProps={{ ...keytabUpProps }}
|
|
|
max={1}
|
|
|
/>
|
|
|
<Col span={12} />
|
|
|
<ProFormUploadButton
|
|
|
- label="krd5config"
|
|
|
- name="krd5config"
|
|
|
- action="upload.do"
|
|
|
- title="上传kard5config"
|
|
|
+ label="krb5config文件"
|
|
|
+ name="krb5config"
|
|
|
+ title="上传krb5config"
|
|
|
+ fieldProps={{ ...krd5UpProps }}
|
|
|
max={1}
|
|
|
/>
|
|
|
<Col span={12} />
|
|
|
+ <ProFormText
|
|
|
+ label="kerberos_service_name"
|
|
|
+ name="kerberos_service_name"
|
|
|
+ placeholder="输入kerberos_service_name"
|
|
|
+ fieldProps={{
|
|
|
+ onChange: e => setKerberosServiceName(e.target.value),
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <Col span={12} />
|
|
|
<ProFormText
|
|
|
label="Principal"
|
|
|
name="principal"
|
|
|
- placeholder="ylaiuser@EMR-56L6ZNTS"></ProFormText>
|
|
|
+ placeholder="ylaiuser@EMR-56L6ZNTS"
|
|
|
+ fieldProps={{
|
|
|
+ onChange: e => setPrincipal(e.target.value),
|
|
|
+ }}
|
|
|
+ />
|
|
|
</>
|
|
|
) : (
|
|
|
<></>
|