diff --git a/src/entities/connection/api/types.ts b/src/entities/connection/api/types.ts
index 03095169..1fe82bb5 100644
--- a/src/entities/connection/api/types.ts
+++ b/src/entities/connection/api/types.ts
@@ -8,22 +8,32 @@ export type Connection = {
} & ConnectionData;
export type ConnectionData =
- | ConnectionHive
+ | ConnectionFtp
+ | ConnectionFtps
+ | ConnectionSftp
+ | ConnectionWebdav
+ | ConnectionSamba
| ConnectionHdfs
+ | ConnectionS3
+ | ConnectionHive
| ConnectionOracle
| ConnectionPostgres
| ConnectionClickhouse
| ConnectionMySql
- | ConnectionMsSql
- | ConnectionS3;
+ | ConnectionMsSql;
export type ConnectionBucketStyle = 'domain' | 'path';
export type ConnectionProtocol = 'https' | 'http';
+export type ConnectionSambaProtocol = 'SMB' | 'NetBIOS';
+
+export type ConnectionSambaAuthType = 'NTLMv1' | 'NTLMv2';
+
export enum ConnectionAuthType {
BASIC = 'basic',
S3 = 's3',
+ SAMBA = 'samba',
}
interface ConnectionAuthBasic {
@@ -38,6 +48,13 @@ interface ConnectionAuthS3 {
secret_key?: string;
}
+interface ConnectionAuthSamba {
+ type: ConnectionAuthType.SAMBA;
+ user: string;
+ password?: string;
+ auth_type: ConnectionSambaAuthType;
+}
+
export interface ConnectionHive {
type: ConnectionType.HIVE;
auth_data: ConnectionAuthBasic;
@@ -81,7 +98,7 @@ export interface ConnectionClickhouse {
connection_data: {
host: string;
port: number;
- database_name: string;
+ database_name: string | null;
};
}
@@ -105,6 +122,55 @@ export interface ConnectionMsSql {
};
}
+export interface ConnectionFtp {
+ type: ConnectionType.FTP;
+ auth_data: ConnectionAuthBasic;
+ connection_data: {
+ host: string;
+ port: number;
+ };
+}
+
+export interface ConnectionFtps {
+ type: ConnectionType.FTPS;
+ auth_data: ConnectionAuthBasic;
+ connection_data: {
+ host: string;
+ port: number;
+ };
+}
+
+export interface ConnectionSftp {
+ type: ConnectionType.SFTP;
+ auth_data: ConnectionAuthBasic;
+ connection_data: {
+ host: string;
+ port: number;
+ };
+}
+
+export interface ConnectionWebdav {
+ type: ConnectionType.WEBDAV;
+ auth_data: ConnectionAuthBasic;
+ connection_data: {
+ host: string;
+ port: number | null;
+ protocol: ConnectionProtocol;
+ };
+}
+
+export interface ConnectionSamba {
+ type: ConnectionType.SAMBA;
+ auth_data: ConnectionAuthSamba;
+ connection_data: {
+ host: string;
+ share: string;
+ port: number | null;
+ protocol: ConnectionSambaProtocol;
+ domain: string;
+ };
+}
+
export interface ConnectionS3 {
type: ConnectionType.S3;
auth_data: ConnectionAuthS3;
diff --git a/src/entities/connection/assets/ftp.svg b/src/entities/connection/assets/ftp.svg
new file mode 100644
index 00000000..f469ef12
--- /dev/null
+++ b/src/entities/connection/assets/ftp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/entities/connection/assets/index.ts b/src/entities/connection/assets/index.ts
index 83942f9b..6cd0f74e 100644
--- a/src/entities/connection/assets/index.ts
+++ b/src/entities/connection/assets/index.ts
@@ -6,5 +6,22 @@ import MssqlIcon from './mssql.svg';
import MysqlIcon from './mysql.svg';
import OracleIcon from './oracle.svg';
import PostgresIcon from './postgres.svg';
+import WebDavIcon from './webdav.svg';
+import SambaIcon from './samba.svg';
+import FtpIcon from './ftp.svg';
+import SftpIcon from './sftp.svg';
-export { ClickhouseIcon, HdfsIcon, HiveIcon, MssqlIcon, MysqlIcon, OracleIcon, PostgresIcon, S3Icon };
+export {
+ ClickhouseIcon,
+ HdfsIcon,
+ HiveIcon,
+ MssqlIcon,
+ MysqlIcon,
+ OracleIcon,
+ PostgresIcon,
+ S3Icon,
+ WebDavIcon,
+ SambaIcon,
+ FtpIcon,
+ SftpIcon,
+};
diff --git a/src/entities/connection/assets/samba.svg b/src/entities/connection/assets/samba.svg
new file mode 100644
index 00000000..b73fd4f9
--- /dev/null
+++ b/src/entities/connection/assets/samba.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/entities/connection/assets/sftp.svg b/src/entities/connection/assets/sftp.svg
new file mode 100644
index 00000000..cb717816
--- /dev/null
+++ b/src/entities/connection/assets/sftp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/entities/connection/assets/webdav.svg b/src/entities/connection/assets/webdav.svg
new file mode 100644
index 00000000..1f3c33bb
--- /dev/null
+++ b/src/entities/connection/assets/webdav.svg
@@ -0,0 +1,49 @@
+
+
+
diff --git a/src/entities/connection/constants.tsx b/src/entities/connection/constants.tsx
index 30993d7c..9e2e2244 100644
--- a/src/entities/connection/constants.tsx
+++ b/src/entities/connection/constants.tsx
@@ -2,41 +2,69 @@ import React, { ReactNode } from 'react';
import { ConnectionType } from '@shared/types';
import { prepareOptionsForSelect } from '@shared/ui';
-import { ClickhouseIcon, HdfsIcon, HiveIcon, MssqlIcon, MysqlIcon, OracleIcon, PostgresIcon, S3Icon } from './assets';
+import {
+ ClickhouseIcon,
+ FtpIcon,
+ HdfsIcon,
+ HiveIcon,
+ MssqlIcon,
+ MysqlIcon,
+ OracleIcon,
+ PostgresIcon,
+ S3Icon,
+ SambaIcon,
+ SftpIcon,
+ WebDavIcon,
+} from './assets';
import { ConnectionBucketStyle, ConnectionProtocol } from './api';
export const CONNECTION_TYPE_NAMES: Record = {
- [ConnectionType.CLICKHOUSE]: 'ClickHouse',
+ [ConnectionType.FTP]: 'FTP',
+ [ConnectionType.FTPS]: 'FTPS',
+ [ConnectionType.SFTP]: 'SFTP',
+ [ConnectionType.WEBDAV]: 'WebDAV',
+ [ConnectionType.SAMBA]: 'Samba',
[ConnectionType.HDFS]: 'HDFS',
+ [ConnectionType.S3]: 'S3',
+ [ConnectionType.CLICKHOUSE]: 'ClickHouse',
[ConnectionType.HIVE]: 'Hive',
[ConnectionType.MS_SQL]: 'MSSQL',
[ConnectionType.MY_SQL]: 'MySQL',
[ConnectionType.ORACLE]: 'Oracle',
[ConnectionType.POSTGRES]: 'Postgres',
- [ConnectionType.S3]: 'S3',
};
export const CONNECTION_ICONS: Record = {
- [ConnectionType.CLICKHOUSE]: ,
+ [ConnectionType.FTP]: ,
+ [ConnectionType.FTPS]: ,
+ [ConnectionType.SFTP]: ,
+ [ConnectionType.WEBDAV]: ,
+ [ConnectionType.SAMBA]: ,
[ConnectionType.HDFS]: ,
+ [ConnectionType.S3]: ,
+ [ConnectionType.CLICKHOUSE]: ,
[ConnectionType.HIVE]: ,
[ConnectionType.MS_SQL]: ,
[ConnectionType.MY_SQL]: ,
[ConnectionType.ORACLE]: ,
[ConnectionType.POSTGRES]: ,
- [ConnectionType.S3]: ,
};
export const CONNECTION_TYPE_SELECT_OPTIONS = prepareOptionsForSelect({
data: [
{ value: ConnectionType.CLICKHOUSE, label: CONNECTION_TYPE_NAMES[ConnectionType.CLICKHOUSE] },
+ { value: ConnectionType.FTP, label: CONNECTION_TYPE_NAMES[ConnectionType.FTP] },
+ { value: ConnectionType.FTPS, label: CONNECTION_TYPE_NAMES[ConnectionType.FTPS] },
{ value: ConnectionType.HDFS, label: CONNECTION_TYPE_NAMES[ConnectionType.HDFS] },
{ value: ConnectionType.HIVE, label: CONNECTION_TYPE_NAMES[ConnectionType.HIVE] },
{ value: ConnectionType.MS_SQL, label: CONNECTION_TYPE_NAMES[ConnectionType.MS_SQL] },
{ value: ConnectionType.MY_SQL, label: CONNECTION_TYPE_NAMES[ConnectionType.MY_SQL] },
{ value: ConnectionType.ORACLE, label: CONNECTION_TYPE_NAMES[ConnectionType.ORACLE] },
{ value: ConnectionType.POSTGRES, label: CONNECTION_TYPE_NAMES[ConnectionType.POSTGRES] },
+ { value: ConnectionType.SAMBA, label: CONNECTION_TYPE_NAMES[ConnectionType.SAMBA] },
+ { value: ConnectionType.SFTP, label: CONNECTION_TYPE_NAMES[ConnectionType.SFTP] },
{ value: ConnectionType.S3, label: CONNECTION_TYPE_NAMES[ConnectionType.S3] },
+ { value: ConnectionType.WEBDAV, label: CONNECTION_TYPE_NAMES[ConnectionType.WEBDAV] },
],
renderLabel: (data) => data.label,
renderValue: (data) => data.value,
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/constants.ts b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/constants.ts
new file mode 100644
index 00000000..31f45e83
--- /dev/null
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/constants.ts
@@ -0,0 +1,8 @@
+import { ConnectionSambaAuthType } from '@entities/connection';
+import { prepareOptionsForSelect } from '@shared/ui';
+
+export const CONNECTION_SAMBA_AUTH_TYPE_SELECT_OPTIONS = prepareOptionsForSelect({
+ data: ['NTLMv1', 'NTLMv2'],
+ renderLabel: (data) => data,
+ renderValue: (data) => data,
+});
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/index.tsx
new file mode 100644
index 00000000..e8d4cea7
--- /dev/null
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionAuthSamba/index.tsx
@@ -0,0 +1,33 @@
+import React from 'react';
+import { Form, Input } from 'antd';
+import { Select } from '@shared/ui';
+
+import { useSensitiveFields } from '../../hooks';
+
+import { CONNECTION_SAMBA_AUTH_TYPE_SELECT_OPTIONS } from './constants';
+
+export const ConnectionAuthSamba = () => {
+ const { isRequired } = useSensitiveFields();
+
+ return (
+ <>
+ {/* Hide Form.Item control, because its value is set in 'useSelectConnectionType' hook */}
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionClickhouse/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionClickhouse/index.tsx
index a163089a..4740c7cc 100644
--- a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionClickhouse/index.tsx
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionClickhouse/index.tsx
@@ -7,7 +7,7 @@ import { ConnectionAuthBasic } from '../ConnectionAuthBasic';
export const ConnectionClickhouse = () => {
return (
<>
-
+
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtp/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtp/index.tsx
new file mode 100644
index 00000000..00456afa
--- /dev/null
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtp/index.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Form, Input, InputNumber } from 'antd';
+
+import { MAX_ALLOWED_PORT, MIN_ALLOWED_PORT } from '../../constants';
+import { ConnectionAuthBasic } from '../ConnectionAuthBasic';
+
+export const ConnectionFtp = () => {
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtps/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtps/index.tsx
new file mode 100644
index 00000000..f9ca5701
--- /dev/null
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionFtps/index.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Form, Input, InputNumber } from 'antd';
+
+import { MAX_ALLOWED_PORT, MIN_ALLOWED_PORT } from '../../constants';
+import { ConnectionAuthBasic } from '../ConnectionAuthBasic';
+
+export const ConnectionSftp = () => {
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ );
+};
diff --git a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionS3/index.tsx b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionS3/index.tsx
index cf1bc91a..6c140fa2 100644
--- a/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionS3/index.tsx
+++ b/src/entities/connection/ui/ConnectionTypeForm/components/ConnectionS3/index.tsx
@@ -12,10 +12,10 @@ export const ConnectionS3 = () => {
-
+
-
+