Flowfile 0.3.5__py3-none-any.whl → 0.3.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of Flowfile might be problematic. Click here for more details.
- flowfile/__init__.py +3 -3
- flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +86 -0
- flowfile/web/static/assets/CloudConnectionManager-d004942f.js +784 -0
- flowfile/web/static/assets/CloudStorageReader-29d14fcc.css +143 -0
- flowfile/web/static/assets/CloudStorageReader-eccf9fc2.js +437 -0
- flowfile/web/static/assets/CloudStorageWriter-49c9a4b2.css +138 -0
- flowfile/web/static/assets/CloudStorageWriter-b1ba6bba.js +430 -0
- flowfile/web/static/assets/{CrossJoin-dfcf7351.js → CrossJoin-68981877.js} +8 -8
- flowfile/web/static/assets/{DatabaseConnectionSettings-b2afb1d7.js → DatabaseConnectionSettings-0b06649c.js} +2 -2
- flowfile/web/static/assets/{DatabaseManager-824a49b2.js → DatabaseManager-8349a426.js} +2 -2
- flowfile/web/static/assets/{DatabaseReader-a48124d8.js → DatabaseReader-905344f8.js} +9 -9
- flowfile/web/static/assets/{DatabaseWriter-b47cbae2.js → DatabaseWriter-9f5b8638.js} +9 -9
- flowfile/web/static/assets/{ExploreData-fdfc45a4.js → ExploreData-131a6d53.js} +5 -5
- flowfile/web/static/assets/{ExternalSource-861b0e71.js → ExternalSource-e3549dcc.js} +6 -6
- flowfile/web/static/assets/{Filter-f87bb897.js → Filter-6e0730ae.js} +8 -8
- flowfile/web/static/assets/{Formula-1e2ed720.js → Formula-02f033e6.js} +75 -9
- flowfile/web/static/assets/{Formula-b8cefc31.css → Formula-29f19d21.css} +10 -0
- flowfile/web/static/assets/{FuzzyMatch-b6cc4fdd.js → FuzzyMatch-54c14036.js} +9 -9
- flowfile/web/static/assets/{GraphSolver-6a371f4c.js → GraphSolver-08a3f499.js} +5 -5
- flowfile/web/static/assets/{GroupBy-f7b7f472.js → GroupBy-2ae38139.js} +6 -6
- flowfile/web/static/assets/{Join-eec38203.js → Join-493b9772.js} +23 -15
- flowfile/web/static/assets/{Join-41c0f331.css → Join-f45eff22.css} +20 -20
- flowfile/web/static/assets/{ManualInput-9aaa46fb.js → ManualInput-4373d163.js} +106 -34
- flowfile/web/static/assets/{ManualInput-ac7b9972.css → ManualInput-a71b52c6.css} +29 -17
- flowfile/web/static/assets/{Output-3b2ca045.js → Output-b534f3c7.js} +4 -4
- flowfile/web/static/assets/{Pivot-a4f5d88f.js → Pivot-2968ff65.js} +6 -6
- flowfile/web/static/assets/{PolarsCode-49ce444f.js → PolarsCode-65136536.js} +6 -6
- flowfile/web/static/assets/{Read-07acdc9a.js → Read-c56339ed.js} +6 -6
- flowfile/web/static/assets/{RecordCount-6a21da56.js → RecordCount-1c641a5e.js} +5 -5
- flowfile/web/static/assets/{RecordId-949bdc17.js → RecordId-df308b8f.js} +6 -6
- flowfile/web/static/assets/{Sample-7afca6e1.js → Sample-293e8a64.js} +5 -5
- flowfile/web/static/assets/{SecretManager-b41c029d.js → SecretManager-03911655.js} +2 -2
- flowfile/web/static/assets/{Select-32b28406.js → Select-3058a13d.js} +8 -8
- flowfile/web/static/assets/{SettingsSection-a0f15a05.js → SettingsSection-fbf4fb39.js} +1 -1
- flowfile/web/static/assets/{Sort-fc6ba0e2.js → Sort-a29bbaf7.js} +6 -6
- flowfile/web/static/assets/{TextToRows-23127596.js → TextToRows-c7d7760e.js} +8 -8
- flowfile/web/static/assets/{UnavailableFields-c42880a3.js → UnavailableFields-118f1d20.js} +2 -2
- flowfile/web/static/assets/{Union-39eecc6c.js → Union-f0589571.js} +5 -5
- flowfile/web/static/assets/{Unique-a0e8fe61.js → Unique-7329a207.js} +8 -8
- flowfile/web/static/assets/{Unpivot-1e2d43f0.js → Unpivot-30b0be15.js} +5 -5
- flowfile/web/static/assets/{api-44ca9e9c.js → api-602fb95c.js} +1 -1
- flowfile/web/static/assets/api-fb67319c.js +80 -0
- flowfile/web/static/assets/cloud_storage_reader-aa1415d6.png +0 -0
- flowfile/web/static/assets/{designer-267d44f1.js → designer-94a6bf4d.js} +36 -34
- flowfile/web/static/assets/{documentation-6c0810a2.js → documentation-a224831e.js} +1 -1
- flowfile/web/static/assets/{dropDown-52790b15.js → dropDown-c2d2aa97.js} +1 -1
- flowfile/web/static/assets/{fullEditor-e272b506.js → fullEditor-921ac5fd.js} +2 -2
- flowfile/web/static/assets/{genericNodeSettings-4bdcf98e.js → genericNodeSettings-7013cc94.js} +3 -3
- flowfile/web/static/assets/{index-e235a8bc.js → index-3a75211d.js} +19 -6
- flowfile/web/static/assets/{nodeTitle-fc3fc4b7.js → nodeTitle-a63d4680.js} +3 -3
- flowfile/web/static/assets/{secretApi-cdc2a3fd.js → secretApi-763aec6e.js} +1 -1
- flowfile/web/static/assets/{selectDynamic-96aa82cd.js → selectDynamic-08464729.js} +3 -3
- flowfile/web/static/assets/{vue-codemirror.esm-25e75a08.js → vue-codemirror.esm-f15a5f87.js} +2 -1
- flowfile/web/static/assets/{vue-content-loader.es-6c4b1c24.js → vue-content-loader.es-93bd09d7.js} +1 -1
- flowfile/web/static/index.html +1 -1
- {flowfile-0.3.5.dist-info → flowfile-0.3.6.dist-info}/METADATA +8 -3
- {flowfile-0.3.5.dist-info → flowfile-0.3.6.dist-info}/RECORD +108 -103
- {flowfile-0.3.5.dist-info → flowfile-0.3.6.dist-info}/entry_points.txt +2 -0
- flowfile_core/__init__.py +2 -0
- flowfile_core/configs/node_store/nodes.py +8 -6
- flowfile_core/database/connection.py +63 -15
- flowfile_core/database/init_db.py +0 -1
- flowfile_core/database/models.py +49 -2
- flowfile_core/flowfile/code_generator/code_generator.py +401 -17
- flowfile_core/flowfile/connection_manager/models.py +1 -1
- flowfile_core/flowfile/database_connection_manager/db_connections.py +216 -2
- flowfile_core/flowfile/extensions.py +1 -1
- flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +259 -0
- flowfile_core/flowfile/flow_data_engine/create/funcs.py +19 -8
- flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +522 -59
- flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +12 -2
- flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +1 -1
- flowfile_core/flowfile/flow_data_engine/join/__init__.py +2 -1
- flowfile_core/flowfile/flow_data_engine/join/utils.py +25 -0
- flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +29 -22
- flowfile_core/flowfile/flow_data_engine/utils.py +1 -40
- flowfile_core/flowfile/flow_graph.py +119 -82
- flowfile_core/flowfile/flow_node/flow_node.py +68 -33
- flowfile_core/flowfile/flow_node/models.py +32 -3
- flowfile_core/flowfile/flow_node/schema_callback.py +3 -2
- flowfile_core/flowfile/sources/external_sources/__init__.py +0 -2
- flowfile_core/flowfile/sources/external_sources/factory.py +4 -7
- flowfile_core/flowfile/utils.py +1 -23
- flowfile_core/main.py +3 -2
- flowfile_core/routes/cloud_connections.py +81 -0
- flowfile_core/routes/logs.py +0 -1
- flowfile_core/routes/routes.py +3 -39
- flowfile_core/schemas/cloud_storage_schemas.py +215 -0
- flowfile_core/schemas/input_schema.py +37 -15
- flowfile_core/schemas/schemas.py +7 -2
- flowfile_core/schemas/transform_schema.py +97 -22
- flowfile_core/utils/utils.py +40 -1
- flowfile_core/utils/validate_setup.py +41 -0
- flowfile_frame/flow_frame.py +253 -102
- flowfile_frame/flow_frame_methods.py +13 -13
- flowfile_worker/external_sources/s3_source/main.py +216 -0
- flowfile_worker/external_sources/s3_source/models.py +142 -0
- flowfile_worker/funcs.py +51 -6
- flowfile_worker/models.py +22 -2
- flowfile_worker/routes.py +40 -38
- flowfile_worker/utils.py +1 -1
- test_utils/s3/commands.py +46 -0
- test_utils/s3/data_generator.py +291 -0
- test_utils/s3/fixtures.py +209 -0
- flowfile/web/static/assets/AirbyteReader-1ac35765.css +0 -314
- flowfile/web/static/assets/AirbyteReader-e08044e5.js +0 -922
- flowfile/web/static/assets/dropDownGeneric-60f56a8a.js +0 -72
- flowfile/web/static/assets/dropDownGeneric-895680d6.css +0 -10
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -159
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -172
- flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -173
- flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -20
- flowfile_worker/external_sources/airbyte_sources/__init__.py +0 -0
- flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -161
- flowfile_worker/external_sources/airbyte_sources/main.py +0 -89
- flowfile_worker/external_sources/airbyte_sources/models.py +0 -133
- flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
- {flowfile-0.3.5.dist-info → flowfile-0.3.6.dist-info}/LICENSE +0 -0
- {flowfile-0.3.5.dist-info → flowfile-0.3.6.dist-info}/WHEEL +0 -0
- {flowfile_core/flowfile/sources/external_sources/airbyte_sources → flowfile_worker/external_sources/s3_source}/__init__.py +0 -0
- {flowfile_core/schemas/external_sources → test_utils/s3}/__init__.py +0 -0
|
@@ -0,0 +1,784 @@
|
|
|
1
|
+
import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-fb67319c.js";
|
|
2
|
+
import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a5 as withDirectives, a6 as vModelText, ag as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, i as createCommentVNode, ah as vModelDynamic, s as normalizeClass, ai as vModelCheckbox, v as withModifiers, n as onMounted, g as createTextVNode, f as createVNode, w as withCtx, u as unref, z as ElMessage, aj as ElDialog, ak as ElButton, _ as _export_sfc } from "./index-3a75211d.js";
|
|
3
|
+
const _hoisted_1$1 = { class: "form-grid" };
|
|
4
|
+
const _hoisted_2$1 = { class: "form-field" };
|
|
5
|
+
const _hoisted_3$1 = { class: "form-field" };
|
|
6
|
+
const _hoisted_4$1 = { class: "form-field" };
|
|
7
|
+
const _hoisted_5$1 = ["value"];
|
|
8
|
+
const _hoisted_6$1 = { class: "form-field" };
|
|
9
|
+
const _hoisted_7$1 = ["required"];
|
|
10
|
+
const _hoisted_8$1 = {
|
|
11
|
+
key: 0,
|
|
12
|
+
class: "form-field"
|
|
13
|
+
};
|
|
14
|
+
const _hoisted_9$1 = ["required"];
|
|
15
|
+
const _hoisted_10$1 = {
|
|
16
|
+
key: 1,
|
|
17
|
+
class: "form-field"
|
|
18
|
+
};
|
|
19
|
+
const _hoisted_11$1 = { class: "password-field" };
|
|
20
|
+
const _hoisted_12$1 = ["type", "required"];
|
|
21
|
+
const _hoisted_13$1 = {
|
|
22
|
+
key: 2,
|
|
23
|
+
class: "form-field"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_14$1 = ["required"];
|
|
26
|
+
const _hoisted_15$1 = { class: "form-field" };
|
|
27
|
+
const _hoisted_16$1 = { class: "checkbox-container" };
|
|
28
|
+
const _hoisted_17$1 = { class: "form-field" };
|
|
29
|
+
const _hoisted_18$1 = ["required"];
|
|
30
|
+
const _hoisted_19$1 = {
|
|
31
|
+
key: 0,
|
|
32
|
+
class: "form-field"
|
|
33
|
+
};
|
|
34
|
+
const _hoisted_20$1 = { class: "password-field" };
|
|
35
|
+
const _hoisted_21$1 = ["type", "required"];
|
|
36
|
+
const _hoisted_22 = { class: "form-field" };
|
|
37
|
+
const _hoisted_23 = ["required"];
|
|
38
|
+
const _hoisted_24 = { class: "form-field" };
|
|
39
|
+
const _hoisted_25 = ["required"];
|
|
40
|
+
const _hoisted_26 = { class: "form-field" };
|
|
41
|
+
const _hoisted_27 = { class: "password-field" };
|
|
42
|
+
const _hoisted_28 = ["type", "required"];
|
|
43
|
+
const _hoisted_29 = { class: "form-field" };
|
|
44
|
+
const _hoisted_30 = { class: "form-field" };
|
|
45
|
+
const _hoisted_31 = { class: "checkbox-container" };
|
|
46
|
+
const _hoisted_32 = { class: "form-actions" };
|
|
47
|
+
const _hoisted_33 = ["disabled"];
|
|
48
|
+
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
49
|
+
__name: "CloudConnectionSettings",
|
|
50
|
+
props: {
|
|
51
|
+
initialConnection: {},
|
|
52
|
+
isSubmitting: { type: Boolean }
|
|
53
|
+
},
|
|
54
|
+
emits: ["submit", "cancel"],
|
|
55
|
+
setup(__props, { emit: __emit }) {
|
|
56
|
+
const props = __props;
|
|
57
|
+
const emit = __emit;
|
|
58
|
+
const authMethodsByStorageType = {
|
|
59
|
+
s3: [
|
|
60
|
+
{ value: "access_key", label: "Access Key" },
|
|
61
|
+
{ value: "iam_role", label: "IAM Role" },
|
|
62
|
+
{ value: "aws-cli", label: "AWS CLI" },
|
|
63
|
+
{ value: "auto", label: "Auto" }
|
|
64
|
+
],
|
|
65
|
+
adls: [
|
|
66
|
+
{ value: "access_key", label: "Access Key" },
|
|
67
|
+
{ value: "service_principal", label: "Service Principal" },
|
|
68
|
+
{ value: "managed_identity", label: "Managed Identity" },
|
|
69
|
+
{ value: "sas_token", label: "SAS Token" },
|
|
70
|
+
{ value: "auto", label: "Auto" }
|
|
71
|
+
]
|
|
72
|
+
};
|
|
73
|
+
const defaultConnection = () => ({
|
|
74
|
+
connectionName: "",
|
|
75
|
+
storageType: "s3",
|
|
76
|
+
authMethod: "access_key",
|
|
77
|
+
verifySsl: true,
|
|
78
|
+
awsAllowUnsafeHtml: false
|
|
79
|
+
});
|
|
80
|
+
const connection = ref(
|
|
81
|
+
props.initialConnection ? { ...props.initialConnection } : defaultConnection()
|
|
82
|
+
);
|
|
83
|
+
watch(
|
|
84
|
+
() => props.initialConnection,
|
|
85
|
+
(newVal) => {
|
|
86
|
+
if (newVal) {
|
|
87
|
+
connection.value = { ...newVal };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
const showAwsSecret = ref(false);
|
|
92
|
+
const showAzureKey = ref(false);
|
|
93
|
+
const showAzureSecret = ref(false);
|
|
94
|
+
const availableAuthMethods = computed(() => {
|
|
95
|
+
const cloudStorageType = connection.value.storageType;
|
|
96
|
+
return authMethodsByStorageType[cloudStorageType] || [];
|
|
97
|
+
});
|
|
98
|
+
watch(
|
|
99
|
+
() => connection.value.storageType,
|
|
100
|
+
(newStorageType) => {
|
|
101
|
+
const methods = authMethodsByStorageType[newStorageType];
|
|
102
|
+
if (methods && methods.length > 0) {
|
|
103
|
+
const currentMethodAvailable = methods.some((m) => m.value === connection.value.authMethod);
|
|
104
|
+
if (!currentMethodAvailable) {
|
|
105
|
+
connection.value.authMethod = methods[0].value;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
const isValid = computed(() => {
|
|
111
|
+
const baseValid = !!connection.value.connectionName && !!connection.value.storageType && !!connection.value.authMethod;
|
|
112
|
+
if (!baseValid)
|
|
113
|
+
return false;
|
|
114
|
+
if (connection.value.storageType === "s3") {
|
|
115
|
+
if (!connection.value.awsRegion)
|
|
116
|
+
return false;
|
|
117
|
+
if (connection.value.authMethod === "access_key") {
|
|
118
|
+
return !!connection.value.awsAccessKeyId && !!connection.value.awsSecretAccessKey;
|
|
119
|
+
} else if (connection.value.authMethod === "iam_role") {
|
|
120
|
+
return !!connection.value.awsRoleArn;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (connection.value.storageType === "adls") {
|
|
124
|
+
if (!connection.value.azureAccountName)
|
|
125
|
+
return false;
|
|
126
|
+
if (connection.value.authMethod === "access_key") {
|
|
127
|
+
return !!connection.value.azureAccountKey;
|
|
128
|
+
} else if (connection.value.authMethod === "service_principal") {
|
|
129
|
+
return !!connection.value.azureTenantId && !!connection.value.azureClientId && !!connection.value.azureClientSecret;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return true;
|
|
133
|
+
});
|
|
134
|
+
const submitButtonText = computed(() => {
|
|
135
|
+
if (props.isSubmitting) {
|
|
136
|
+
return "Saving...";
|
|
137
|
+
}
|
|
138
|
+
return props.initialConnection ? "Update Connection" : "Create Connection";
|
|
139
|
+
});
|
|
140
|
+
const submitForm = () => {
|
|
141
|
+
if (isValid.value) {
|
|
142
|
+
emit("submit", connection.value);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
return (_ctx, _cache) => {
|
|
146
|
+
return openBlock(), createElementBlock("form", {
|
|
147
|
+
class: "form",
|
|
148
|
+
onSubmit: withModifiers(submitForm, ["prevent"])
|
|
149
|
+
}, [
|
|
150
|
+
createBaseVNode("div", _hoisted_1$1, [
|
|
151
|
+
createBaseVNode("div", _hoisted_2$1, [
|
|
152
|
+
_cache[19] || (_cache[19] = createBaseVNode("label", {
|
|
153
|
+
for: "connection-name",
|
|
154
|
+
class: "form-label"
|
|
155
|
+
}, "Connection Name", -1)),
|
|
156
|
+
withDirectives(createBaseVNode("input", {
|
|
157
|
+
id: "connection-name",
|
|
158
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => connection.value.connectionName = $event),
|
|
159
|
+
type: "text",
|
|
160
|
+
class: "form-input",
|
|
161
|
+
placeholder: "my_cloud_storage",
|
|
162
|
+
required: ""
|
|
163
|
+
}, null, 512), [
|
|
164
|
+
[vModelText, connection.value.connectionName]
|
|
165
|
+
])
|
|
166
|
+
]),
|
|
167
|
+
createBaseVNode("div", _hoisted_3$1, [
|
|
168
|
+
_cache[21] || (_cache[21] = createBaseVNode("label", {
|
|
169
|
+
for: "storage-type",
|
|
170
|
+
class: "form-label"
|
|
171
|
+
}, "Storage Type", -1)),
|
|
172
|
+
withDirectives(createBaseVNode("select", {
|
|
173
|
+
id: "storage-type",
|
|
174
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => connection.value.storageType = $event),
|
|
175
|
+
class: "form-input",
|
|
176
|
+
required: ""
|
|
177
|
+
}, _cache[20] || (_cache[20] = [
|
|
178
|
+
createBaseVNode("option", { value: "s3" }, "AWS S3", -1),
|
|
179
|
+
createBaseVNode("option", { value: "adls" }, "Azure Data Lake Storage", -1)
|
|
180
|
+
]), 512), [
|
|
181
|
+
[vModelSelect, connection.value.storageType]
|
|
182
|
+
])
|
|
183
|
+
]),
|
|
184
|
+
createBaseVNode("div", _hoisted_4$1, [
|
|
185
|
+
_cache[22] || (_cache[22] = createBaseVNode("label", {
|
|
186
|
+
for: "auth-method",
|
|
187
|
+
class: "form-label"
|
|
188
|
+
}, "Authentication Method", -1)),
|
|
189
|
+
withDirectives(createBaseVNode("select", {
|
|
190
|
+
id: "auth-method",
|
|
191
|
+
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => connection.value.authMethod = $event),
|
|
192
|
+
class: "form-input",
|
|
193
|
+
required: ""
|
|
194
|
+
}, [
|
|
195
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(availableAuthMethods.value, (method) => {
|
|
196
|
+
return openBlock(), createElementBlock("option", {
|
|
197
|
+
key: method.value,
|
|
198
|
+
value: method.value
|
|
199
|
+
}, toDisplayString(method.label), 9, _hoisted_5$1);
|
|
200
|
+
}), 128))
|
|
201
|
+
], 512), [
|
|
202
|
+
[vModelSelect, connection.value.authMethod]
|
|
203
|
+
])
|
|
204
|
+
]),
|
|
205
|
+
connection.value.storageType === "s3" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
206
|
+
createBaseVNode("div", _hoisted_6$1, [
|
|
207
|
+
_cache[23] || (_cache[23] = createBaseVNode("label", {
|
|
208
|
+
for: "aws-region",
|
|
209
|
+
class: "form-label"
|
|
210
|
+
}, "AWS Region", -1)),
|
|
211
|
+
withDirectives(createBaseVNode("input", {
|
|
212
|
+
id: "aws-region",
|
|
213
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => connection.value.awsRegion = $event),
|
|
214
|
+
type: "text",
|
|
215
|
+
class: "form-input",
|
|
216
|
+
placeholder: "us-east-1",
|
|
217
|
+
required: connection.value.storageType === "s3"
|
|
218
|
+
}, null, 8, _hoisted_7$1), [
|
|
219
|
+
[vModelText, connection.value.awsRegion]
|
|
220
|
+
])
|
|
221
|
+
]),
|
|
222
|
+
connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_8$1, [
|
|
223
|
+
_cache[24] || (_cache[24] = createBaseVNode("label", {
|
|
224
|
+
for: "aws-access-key-id",
|
|
225
|
+
class: "form-label"
|
|
226
|
+
}, "AWS Access Key ID", -1)),
|
|
227
|
+
withDirectives(createBaseVNode("input", {
|
|
228
|
+
id: "aws-access-key-id",
|
|
229
|
+
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => connection.value.awsAccessKeyId = $event),
|
|
230
|
+
type: "text",
|
|
231
|
+
class: "form-input",
|
|
232
|
+
placeholder: "AKIAIOSFODNN7EXAMPLE",
|
|
233
|
+
required: connection.value.authMethod === "access_key"
|
|
234
|
+
}, null, 8, _hoisted_9$1), [
|
|
235
|
+
[vModelText, connection.value.awsAccessKeyId]
|
|
236
|
+
])
|
|
237
|
+
])) : createCommentVNode("", true),
|
|
238
|
+
connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_10$1, [
|
|
239
|
+
_cache[25] || (_cache[25] = createBaseVNode("label", {
|
|
240
|
+
for: "aws-secret-access-key",
|
|
241
|
+
class: "form-label"
|
|
242
|
+
}, "AWS Secret Access Key", -1)),
|
|
243
|
+
createBaseVNode("div", _hoisted_11$1, [
|
|
244
|
+
withDirectives(createBaseVNode("input", {
|
|
245
|
+
id: "aws-secret-access-key",
|
|
246
|
+
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => connection.value.awsSecretAccessKey = $event),
|
|
247
|
+
type: showAwsSecret.value ? "text" : "password",
|
|
248
|
+
class: "form-input",
|
|
249
|
+
placeholder: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
|
250
|
+
required: connection.value.authMethod === "access_key"
|
|
251
|
+
}, null, 8, _hoisted_12$1), [
|
|
252
|
+
[vModelDynamic, connection.value.awsSecretAccessKey]
|
|
253
|
+
]),
|
|
254
|
+
createBaseVNode("button", {
|
|
255
|
+
type: "button",
|
|
256
|
+
class: "toggle-visibility",
|
|
257
|
+
"aria-label": "Toggle AWS secret visibility",
|
|
258
|
+
onClick: _cache[6] || (_cache[6] = ($event) => showAwsSecret.value = !showAwsSecret.value)
|
|
259
|
+
}, [
|
|
260
|
+
createBaseVNode("i", {
|
|
261
|
+
class: normalizeClass(showAwsSecret.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
|
|
262
|
+
}, null, 2)
|
|
263
|
+
])
|
|
264
|
+
])
|
|
265
|
+
])) : createCommentVNode("", true),
|
|
266
|
+
connection.value.authMethod === "iam_role" ? (openBlock(), createElementBlock("div", _hoisted_13$1, [
|
|
267
|
+
_cache[26] || (_cache[26] = createBaseVNode("label", {
|
|
268
|
+
for: "aws-role-arn",
|
|
269
|
+
class: "form-label"
|
|
270
|
+
}, "AWS Role ARN", -1)),
|
|
271
|
+
withDirectives(createBaseVNode("input", {
|
|
272
|
+
id: "aws-role-arn",
|
|
273
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => connection.value.awsRoleArn = $event),
|
|
274
|
+
type: "text",
|
|
275
|
+
class: "form-input",
|
|
276
|
+
placeholder: "arn:aws:iam::123456789012:role/MyRole",
|
|
277
|
+
required: connection.value.authMethod === "iam_role"
|
|
278
|
+
}, null, 8, _hoisted_14$1), [
|
|
279
|
+
[vModelText, connection.value.awsRoleArn]
|
|
280
|
+
])
|
|
281
|
+
])) : createCommentVNode("", true),
|
|
282
|
+
createBaseVNode("div", _hoisted_15$1, [
|
|
283
|
+
createBaseVNode("div", _hoisted_16$1, [
|
|
284
|
+
withDirectives(createBaseVNode("input", {
|
|
285
|
+
id: "aws-allow-unsafe-html",
|
|
286
|
+
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => connection.value.awsAllowUnsafeHtml = $event),
|
|
287
|
+
type: "checkbox",
|
|
288
|
+
class: "checkbox-input"
|
|
289
|
+
}, null, 512), [
|
|
290
|
+
[vModelCheckbox, connection.value.awsAllowUnsafeHtml]
|
|
291
|
+
]),
|
|
292
|
+
_cache[27] || (_cache[27] = createBaseVNode("label", {
|
|
293
|
+
for: "aws-allow-unsafe-html",
|
|
294
|
+
class: "form-label"
|
|
295
|
+
}, "Allow Unsafe HTML", -1))
|
|
296
|
+
])
|
|
297
|
+
])
|
|
298
|
+
], 64)) : createCommentVNode("", true),
|
|
299
|
+
connection.value.storageType === "adls" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
300
|
+
createBaseVNode("div", _hoisted_17$1, [
|
|
301
|
+
_cache[28] || (_cache[28] = createBaseVNode("label", {
|
|
302
|
+
for: "azure-account-name",
|
|
303
|
+
class: "form-label"
|
|
304
|
+
}, "Azure Account Name", -1)),
|
|
305
|
+
withDirectives(createBaseVNode("input", {
|
|
306
|
+
id: "azure-account-name",
|
|
307
|
+
"onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => connection.value.azureAccountName = $event),
|
|
308
|
+
type: "text",
|
|
309
|
+
class: "form-input",
|
|
310
|
+
placeholder: "mystorageaccount",
|
|
311
|
+
required: connection.value.storageType === "adls"
|
|
312
|
+
}, null, 8, _hoisted_18$1), [
|
|
313
|
+
[vModelText, connection.value.azureAccountName]
|
|
314
|
+
])
|
|
315
|
+
]),
|
|
316
|
+
connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_19$1, [
|
|
317
|
+
_cache[29] || (_cache[29] = createBaseVNode("label", {
|
|
318
|
+
for: "azure-account-key",
|
|
319
|
+
class: "form-label"
|
|
320
|
+
}, "Azure Account Key", -1)),
|
|
321
|
+
createBaseVNode("div", _hoisted_20$1, [
|
|
322
|
+
withDirectives(createBaseVNode("input", {
|
|
323
|
+
id: "azure-account-key",
|
|
324
|
+
"onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => connection.value.azureAccountKey = $event),
|
|
325
|
+
type: showAzureKey.value ? "text" : "password",
|
|
326
|
+
class: "form-input",
|
|
327
|
+
placeholder: "Account key",
|
|
328
|
+
required: connection.value.authMethod === "access_key"
|
|
329
|
+
}, null, 8, _hoisted_21$1), [
|
|
330
|
+
[vModelDynamic, connection.value.azureAccountKey]
|
|
331
|
+
]),
|
|
332
|
+
createBaseVNode("button", {
|
|
333
|
+
type: "button",
|
|
334
|
+
class: "toggle-visibility",
|
|
335
|
+
"aria-label": "Toggle Azure key visibility",
|
|
336
|
+
onClick: _cache[11] || (_cache[11] = ($event) => showAzureKey.value = !showAzureKey.value)
|
|
337
|
+
}, [
|
|
338
|
+
createBaseVNode("i", {
|
|
339
|
+
class: normalizeClass(showAzureKey.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
|
|
340
|
+
}, null, 2)
|
|
341
|
+
])
|
|
342
|
+
])
|
|
343
|
+
])) : createCommentVNode("", true),
|
|
344
|
+
connection.value.authMethod === "service_principal" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
345
|
+
createBaseVNode("div", _hoisted_22, [
|
|
346
|
+
_cache[30] || (_cache[30] = createBaseVNode("label", {
|
|
347
|
+
for: "azure-tenant-id",
|
|
348
|
+
class: "form-label"
|
|
349
|
+
}, "Azure Tenant ID", -1)),
|
|
350
|
+
withDirectives(createBaseVNode("input", {
|
|
351
|
+
id: "azure-tenant-id",
|
|
352
|
+
"onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => connection.value.azureTenantId = $event),
|
|
353
|
+
type: "text",
|
|
354
|
+
class: "form-input",
|
|
355
|
+
placeholder: "12345678-1234-1234-1234-123456789012",
|
|
356
|
+
required: connection.value.authMethod === "service_principal"
|
|
357
|
+
}, null, 8, _hoisted_23), [
|
|
358
|
+
[vModelText, connection.value.azureTenantId]
|
|
359
|
+
])
|
|
360
|
+
]),
|
|
361
|
+
createBaseVNode("div", _hoisted_24, [
|
|
362
|
+
_cache[31] || (_cache[31] = createBaseVNode("label", {
|
|
363
|
+
for: "azure-client-id",
|
|
364
|
+
class: "form-label"
|
|
365
|
+
}, "Azure Client ID", -1)),
|
|
366
|
+
withDirectives(createBaseVNode("input", {
|
|
367
|
+
id: "azure-client-id",
|
|
368
|
+
"onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => connection.value.azureClientId = $event),
|
|
369
|
+
type: "text",
|
|
370
|
+
class: "form-input",
|
|
371
|
+
placeholder: "12345678-1234-1234-1234-123456789012",
|
|
372
|
+
required: connection.value.authMethod === "service_principal"
|
|
373
|
+
}, null, 8, _hoisted_25), [
|
|
374
|
+
[vModelText, connection.value.azureClientId]
|
|
375
|
+
])
|
|
376
|
+
]),
|
|
377
|
+
createBaseVNode("div", _hoisted_26, [
|
|
378
|
+
_cache[32] || (_cache[32] = createBaseVNode("label", {
|
|
379
|
+
for: "azure-client-secret",
|
|
380
|
+
class: "form-label"
|
|
381
|
+
}, "Azure Client Secret", -1)),
|
|
382
|
+
createBaseVNode("div", _hoisted_27, [
|
|
383
|
+
withDirectives(createBaseVNode("input", {
|
|
384
|
+
id: "azure-client-secret",
|
|
385
|
+
"onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => connection.value.azureClientSecret = $event),
|
|
386
|
+
type: showAzureSecret.value ? "text" : "password",
|
|
387
|
+
class: "form-input",
|
|
388
|
+
placeholder: "Client secret",
|
|
389
|
+
required: connection.value.authMethod === "service_principal"
|
|
390
|
+
}, null, 8, _hoisted_28), [
|
|
391
|
+
[vModelDynamic, connection.value.azureClientSecret]
|
|
392
|
+
]),
|
|
393
|
+
createBaseVNode("button", {
|
|
394
|
+
type: "button",
|
|
395
|
+
class: "toggle-visibility",
|
|
396
|
+
"aria-label": "Toggle Azure secret visibility",
|
|
397
|
+
onClick: _cache[15] || (_cache[15] = ($event) => showAzureSecret.value = !showAzureSecret.value)
|
|
398
|
+
}, [
|
|
399
|
+
createBaseVNode("i", {
|
|
400
|
+
class: normalizeClass(showAzureSecret.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
|
|
401
|
+
}, null, 2)
|
|
402
|
+
])
|
|
403
|
+
])
|
|
404
|
+
])
|
|
405
|
+
], 64)) : createCommentVNode("", true)
|
|
406
|
+
], 64)) : createCommentVNode("", true),
|
|
407
|
+
createBaseVNode("div", _hoisted_29, [
|
|
408
|
+
_cache[33] || (_cache[33] = createBaseVNode("label", {
|
|
409
|
+
for: "endpoint-url",
|
|
410
|
+
class: "form-label"
|
|
411
|
+
}, "Custom Endpoint URL (Optional)", -1)),
|
|
412
|
+
withDirectives(createBaseVNode("input", {
|
|
413
|
+
id: "endpoint-url",
|
|
414
|
+
"onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => connection.value.endpointUrl = $event),
|
|
415
|
+
type: "text",
|
|
416
|
+
class: "form-input",
|
|
417
|
+
placeholder: "https://custom-endpoint.example.com"
|
|
418
|
+
}, null, 512), [
|
|
419
|
+
[vModelText, connection.value.endpointUrl]
|
|
420
|
+
])
|
|
421
|
+
]),
|
|
422
|
+
createBaseVNode("div", _hoisted_30, [
|
|
423
|
+
createBaseVNode("div", _hoisted_31, [
|
|
424
|
+
withDirectives(createBaseVNode("input", {
|
|
425
|
+
id: "verify-ssl",
|
|
426
|
+
"onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => connection.value.verifySsl = $event),
|
|
427
|
+
type: "checkbox",
|
|
428
|
+
class: "checkbox-input"
|
|
429
|
+
}, null, 512), [
|
|
430
|
+
[vModelCheckbox, connection.value.verifySsl]
|
|
431
|
+
]),
|
|
432
|
+
_cache[34] || (_cache[34] = createBaseVNode("label", {
|
|
433
|
+
for: "verify-ssl",
|
|
434
|
+
class: "form-label"
|
|
435
|
+
}, "Verify SSL", -1))
|
|
436
|
+
])
|
|
437
|
+
])
|
|
438
|
+
]),
|
|
439
|
+
createBaseVNode("div", _hoisted_32, [
|
|
440
|
+
createBaseVNode("button", {
|
|
441
|
+
type: "button",
|
|
442
|
+
class: "btn btn-secondary",
|
|
443
|
+
onClick: _cache[18] || (_cache[18] = ($event) => _ctx.$emit("cancel"))
|
|
444
|
+
}, "Cancel"),
|
|
445
|
+
createBaseVNode("button", {
|
|
446
|
+
type: "submit",
|
|
447
|
+
class: "btn btn-primary",
|
|
448
|
+
disabled: !isValid.value || _ctx.isSubmitting
|
|
449
|
+
}, toDisplayString(submitButtonText.value), 9, _hoisted_33)
|
|
450
|
+
])
|
|
451
|
+
], 32);
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
const _hoisted_1 = { class: "cloud-connection-manager-container" };
|
|
456
|
+
const _hoisted_2 = { class: "card mb-3" };
|
|
457
|
+
const _hoisted_3 = { class: "card-header" };
|
|
458
|
+
const _hoisted_4 = { class: "card-title" };
|
|
459
|
+
const _hoisted_5 = { class: "card-content" };
|
|
460
|
+
const _hoisted_6 = {
|
|
461
|
+
key: 0,
|
|
462
|
+
class: "loading-state"
|
|
463
|
+
};
|
|
464
|
+
const _hoisted_7 = {
|
|
465
|
+
key: 1,
|
|
466
|
+
class: "empty-state"
|
|
467
|
+
};
|
|
468
|
+
const _hoisted_8 = {
|
|
469
|
+
key: 2,
|
|
470
|
+
class: "flex-col gap-2"
|
|
471
|
+
};
|
|
472
|
+
const _hoisted_9 = { class: "secret-info" };
|
|
473
|
+
const _hoisted_10 = { class: "secret-name" };
|
|
474
|
+
const _hoisted_11 = { class: "badge" };
|
|
475
|
+
const _hoisted_12 = { class: "badge auth-badge" };
|
|
476
|
+
const _hoisted_13 = { class: "connection-details" };
|
|
477
|
+
const _hoisted_14 = { key: 0 };
|
|
478
|
+
const _hoisted_15 = { key: 1 };
|
|
479
|
+
const _hoisted_16 = { key: 2 };
|
|
480
|
+
const _hoisted_17 = { key: 3 };
|
|
481
|
+
const _hoisted_18 = { class: "secret-actions" };
|
|
482
|
+
const _hoisted_19 = ["onClick"];
|
|
483
|
+
const _hoisted_20 = ["onClick"];
|
|
484
|
+
const _hoisted_21 = { class: "dialog-footer" };
|
|
485
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
486
|
+
__name: "CloudConnectionManager",
|
|
487
|
+
setup(__props) {
|
|
488
|
+
const connectionInterfaces = ref([]);
|
|
489
|
+
const isLoading = ref(true);
|
|
490
|
+
const dialogVisible = ref(false);
|
|
491
|
+
const deleteDialogVisible = ref(false);
|
|
492
|
+
const isEditing = ref(false);
|
|
493
|
+
const isSubmitting = ref(false);
|
|
494
|
+
const isDeleting = ref(false);
|
|
495
|
+
const connectionToDelete = ref("");
|
|
496
|
+
const activeConnection = ref(void 0);
|
|
497
|
+
const getStorageIcon = (storageType) => {
|
|
498
|
+
switch (storageType) {
|
|
499
|
+
case "s3":
|
|
500
|
+
return "fa-brands fa-aws";
|
|
501
|
+
case "adls":
|
|
502
|
+
return "fa-brands fa-microsoft";
|
|
503
|
+
default:
|
|
504
|
+
return "fa-solid fa-cloud";
|
|
505
|
+
}
|
|
506
|
+
};
|
|
507
|
+
const getStorageLabel = (storageType) => {
|
|
508
|
+
switch (storageType) {
|
|
509
|
+
case "s3":
|
|
510
|
+
return "AWS S3";
|
|
511
|
+
case "adls":
|
|
512
|
+
return "Azure ADLS";
|
|
513
|
+
default:
|
|
514
|
+
return storageType.toUpperCase();
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
const getAuthMethodLabel = (authMethod) => {
|
|
518
|
+
switch (authMethod) {
|
|
519
|
+
case "access_key":
|
|
520
|
+
return "Access Key";
|
|
521
|
+
case "iam_role":
|
|
522
|
+
return "IAM Role";
|
|
523
|
+
case "service_principal":
|
|
524
|
+
return "Service Principal";
|
|
525
|
+
case "managed_identity":
|
|
526
|
+
return "Managed Identity";
|
|
527
|
+
case "sas_token":
|
|
528
|
+
return "SAS Token";
|
|
529
|
+
case "aws-cli":
|
|
530
|
+
return "AWS CLI";
|
|
531
|
+
case "auto":
|
|
532
|
+
return "Auto";
|
|
533
|
+
default:
|
|
534
|
+
return authMethod;
|
|
535
|
+
}
|
|
536
|
+
};
|
|
537
|
+
const fetchConnections = async () => {
|
|
538
|
+
isLoading.value = true;
|
|
539
|
+
try {
|
|
540
|
+
connectionInterfaces.value = await fetchCloudStorageConnectionsInterfaces();
|
|
541
|
+
} catch (error) {
|
|
542
|
+
console.error("Error fetching connections:", error);
|
|
543
|
+
ElMessage.error("Failed to load cloud storage connections");
|
|
544
|
+
} finally {
|
|
545
|
+
isLoading.value = false;
|
|
546
|
+
}
|
|
547
|
+
};
|
|
548
|
+
const showAddModal = () => {
|
|
549
|
+
isEditing.value = false;
|
|
550
|
+
activeConnection.value = void 0;
|
|
551
|
+
dialogVisible.value = true;
|
|
552
|
+
};
|
|
553
|
+
const showEditModal = (connection) => {
|
|
554
|
+
isEditing.value = true;
|
|
555
|
+
activeConnection.value = {
|
|
556
|
+
connectionName: connection.connectionName,
|
|
557
|
+
storageType: connection.storageType,
|
|
558
|
+
authMethod: connection.authMethod,
|
|
559
|
+
// AWS fields
|
|
560
|
+
awsRegion: connection.awsRegion || "",
|
|
561
|
+
awsAccessKeyId: connection.awsAccessKeyId || "",
|
|
562
|
+
awsSecretAccessKey: "",
|
|
563
|
+
// Password is not returned from the API
|
|
564
|
+
awsRoleArn: connection.awsRoleArn || "",
|
|
565
|
+
awsAllowUnsafeHtml: connection.awsAllowUnsafeHtml,
|
|
566
|
+
// Azure fields
|
|
567
|
+
azureAccountName: connection.azureAccountName || "",
|
|
568
|
+
azureAccountKey: "",
|
|
569
|
+
// Password is not returned from the API
|
|
570
|
+
azureTenantId: connection.azureTenantId || "",
|
|
571
|
+
azureClientId: connection.azureClientId || "",
|
|
572
|
+
azureClientSecret: "",
|
|
573
|
+
// Password is not returned from the API
|
|
574
|
+
// Common fields
|
|
575
|
+
endpointUrl: connection.endpointUrl || "",
|
|
576
|
+
verifySsl: connection.verifySsl
|
|
577
|
+
};
|
|
578
|
+
dialogVisible.value = true;
|
|
579
|
+
};
|
|
580
|
+
const showDeleteModal = (connectionName) => {
|
|
581
|
+
connectionToDelete.value = connectionName;
|
|
582
|
+
deleteDialogVisible.value = true;
|
|
583
|
+
};
|
|
584
|
+
const handleFormSubmit = async (connection) => {
|
|
585
|
+
isSubmitting.value = true;
|
|
586
|
+
try {
|
|
587
|
+
await createCloudStorageConnectionApi(connection);
|
|
588
|
+
await fetchConnections();
|
|
589
|
+
dialogVisible.value = false;
|
|
590
|
+
ElMessage.success(`Connection ${isEditing.value ? "updated" : "created"} successfully`);
|
|
591
|
+
} catch (error) {
|
|
592
|
+
ElMessage.error(
|
|
593
|
+
`Failed to ${isEditing.value ? "update" : "create"} connection: ${error.message || "Unknown error"}`
|
|
594
|
+
);
|
|
595
|
+
} finally {
|
|
596
|
+
isSubmitting.value = false;
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
const handleDeleteConnection = async () => {
|
|
600
|
+
if (!connectionToDelete.value)
|
|
601
|
+
return;
|
|
602
|
+
isDeleting.value = true;
|
|
603
|
+
try {
|
|
604
|
+
await deleteCloudStorageConnectionApi(connectionToDelete.value);
|
|
605
|
+
await fetchConnections();
|
|
606
|
+
deleteDialogVisible.value = false;
|
|
607
|
+
ElMessage.success("Connection deleted successfully");
|
|
608
|
+
} catch (error) {
|
|
609
|
+
ElMessage.error("Failed to delete connection");
|
|
610
|
+
} finally {
|
|
611
|
+
isDeleting.value = false;
|
|
612
|
+
connectionToDelete.value = "";
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
const handleCloseDialog = (done) => {
|
|
616
|
+
if (isSubmitting.value)
|
|
617
|
+
return;
|
|
618
|
+
done();
|
|
619
|
+
};
|
|
620
|
+
const handleCloseDeleteDialog = (done) => {
|
|
621
|
+
if (isDeleting.value)
|
|
622
|
+
return;
|
|
623
|
+
done();
|
|
624
|
+
};
|
|
625
|
+
onMounted(() => {
|
|
626
|
+
fetchConnections();
|
|
627
|
+
});
|
|
628
|
+
return (_ctx, _cache) => {
|
|
629
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
630
|
+
_cache[18] || (_cache[18] = createBaseVNode("div", { class: "mb-3" }, [
|
|
631
|
+
createBaseVNode("h2", { class: "page-title" }, "Cloud Storage Connections"),
|
|
632
|
+
createBaseVNode("p", { class: "description-text" }, " Cloud storage connections allow you to connect to your cloud storage services like AWS S3 and Azure Data Lake Storage. Create and manage your connections here to use them in your data workflows. ")
|
|
633
|
+
], -1)),
|
|
634
|
+
createBaseVNode("div", _hoisted_2, [
|
|
635
|
+
createBaseVNode("div", _hoisted_3, [
|
|
636
|
+
createBaseVNode("h3", _hoisted_4, "Your Connections (" + toDisplayString(connectionInterfaces.value.length) + ")", 1),
|
|
637
|
+
createBaseVNode("button", {
|
|
638
|
+
class: "btn btn-primary",
|
|
639
|
+
onClick: showAddModal
|
|
640
|
+
}, _cache[4] || (_cache[4] = [
|
|
641
|
+
createBaseVNode("i", { class: "fa-solid fa-plus" }, null, -1),
|
|
642
|
+
createTextVNode(" Add Connection ")
|
|
643
|
+
]))
|
|
644
|
+
]),
|
|
645
|
+
createBaseVNode("div", _hoisted_5, [
|
|
646
|
+
_cache[11] || (_cache[11] = createBaseVNode("div", { class: "info-box mb-3" }, [
|
|
647
|
+
createBaseVNode("i", { class: "fa-solid fa-info-circle" }),
|
|
648
|
+
createBaseVNode("div", null, [
|
|
649
|
+
createBaseVNode("p", null, [
|
|
650
|
+
createBaseVNode("strong", null, "What are cloud storage connections?")
|
|
651
|
+
]),
|
|
652
|
+
createBaseVNode("p", null, " Cloud storage connections store the credentials and configuration needed to securely access your cloud storage services. Once set up, you can reuse these connections throughout your workflows without re-entering credentials. ")
|
|
653
|
+
])
|
|
654
|
+
], -1)),
|
|
655
|
+
isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_6, _cache[5] || (_cache[5] = [
|
|
656
|
+
createBaseVNode("div", { class: "loading-spinner" }, null, -1),
|
|
657
|
+
createBaseVNode("p", null, "Loading connections...", -1)
|
|
658
|
+
]))) : connectionInterfaces.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_7, _cache[6] || (_cache[6] = [
|
|
659
|
+
createBaseVNode("i", { class: "fa-solid fa-cloud" }, null, -1),
|
|
660
|
+
createBaseVNode("p", null, "You haven't added any cloud storage connections yet", -1),
|
|
661
|
+
createBaseVNode("p", { class: "hint-text" }, ' Click the "Add Connection" button to create your first cloud storage connection. ', -1)
|
|
662
|
+
]))) : (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
663
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(connectionInterfaces.value, (connection) => {
|
|
664
|
+
return openBlock(), createElementBlock("div", {
|
|
665
|
+
key: connection.connectionName,
|
|
666
|
+
class: "secret-item"
|
|
667
|
+
}, [
|
|
668
|
+
createBaseVNode("div", _hoisted_9, [
|
|
669
|
+
createBaseVNode("div", _hoisted_10, [
|
|
670
|
+
createBaseVNode("i", {
|
|
671
|
+
class: normalizeClass(getStorageIcon(connection.storageType))
|
|
672
|
+
}, null, 2),
|
|
673
|
+
createBaseVNode("span", null, toDisplayString(connection.connectionName), 1),
|
|
674
|
+
createBaseVNode("span", _hoisted_11, toDisplayString(getStorageLabel(connection.storageType)), 1),
|
|
675
|
+
createBaseVNode("span", _hoisted_12, toDisplayString(getAuthMethodLabel(connection.authMethod)), 1)
|
|
676
|
+
]),
|
|
677
|
+
createBaseVNode("div", _hoisted_13, [
|
|
678
|
+
connection.storageType === "s3" && connection.awsRegion ? (openBlock(), createElementBlock("span", _hoisted_14, " Region: " + toDisplayString(connection.awsRegion), 1)) : connection.storageType === "adls" && connection.azureAccountName ? (openBlock(), createElementBlock("span", _hoisted_15, " Account: " + toDisplayString(connection.azureAccountName), 1)) : createCommentVNode("", true),
|
|
679
|
+
connection.endpointUrl ? (openBlock(), createElementBlock("span", _hoisted_16, _cache[7] || (_cache[7] = [
|
|
680
|
+
createBaseVNode("span", { class: "separator" }, "•", -1),
|
|
681
|
+
createTextVNode(" Custom endpoint ")
|
|
682
|
+
]))) : createCommentVNode("", true),
|
|
683
|
+
!connection.verifySsl ? (openBlock(), createElementBlock("span", _hoisted_17, _cache[8] || (_cache[8] = [
|
|
684
|
+
createBaseVNode("span", { class: "separator" }, "•", -1),
|
|
685
|
+
createTextVNode(" SSL verification disabled ")
|
|
686
|
+
]))) : createCommentVNode("", true)
|
|
687
|
+
])
|
|
688
|
+
]),
|
|
689
|
+
createBaseVNode("div", _hoisted_18, [
|
|
690
|
+
createBaseVNode("button", {
|
|
691
|
+
type: "button",
|
|
692
|
+
class: "btn btn-secondary",
|
|
693
|
+
onClick: ($event) => showEditModal(connection)
|
|
694
|
+
}, _cache[9] || (_cache[9] = [
|
|
695
|
+
createBaseVNode("i", { class: "fa-solid fa-edit" }, null, -1),
|
|
696
|
+
createBaseVNode("span", null, "Modify", -1)
|
|
697
|
+
]), 8, _hoisted_19),
|
|
698
|
+
connection.connectionName ? (openBlock(), createElementBlock("button", {
|
|
699
|
+
key: 0,
|
|
700
|
+
type: "button",
|
|
701
|
+
class: "btn btn-danger",
|
|
702
|
+
onClick: ($event) => showDeleteModal(connection.connectionName)
|
|
703
|
+
}, _cache[10] || (_cache[10] = [
|
|
704
|
+
createBaseVNode("i", { class: "fa-solid fa-trash-alt" }, null, -1),
|
|
705
|
+
createBaseVNode("span", null, "Delete", -1)
|
|
706
|
+
]), 8, _hoisted_20)) : createCommentVNode("", true)
|
|
707
|
+
])
|
|
708
|
+
]);
|
|
709
|
+
}), 128))
|
|
710
|
+
]))
|
|
711
|
+
])
|
|
712
|
+
]),
|
|
713
|
+
createVNode(unref(ElDialog), {
|
|
714
|
+
modelValue: dialogVisible.value,
|
|
715
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
|
|
716
|
+
title: isEditing.value ? "Edit Cloud Storage Connection" : "Add Cloud Storage Connection",
|
|
717
|
+
width: "600px",
|
|
718
|
+
"before-close": handleCloseDialog
|
|
719
|
+
}, {
|
|
720
|
+
default: withCtx(() => [
|
|
721
|
+
_cache[12] || (_cache[12] = createBaseVNode("div", { class: "modal-description mb-3" }, [
|
|
722
|
+
createBaseVNode("p", null, " Configure your cloud storage connection details. Choose your storage provider and authentication method, then provide the required credentials. ")
|
|
723
|
+
], -1)),
|
|
724
|
+
createVNode(_sfc_main$1, {
|
|
725
|
+
"initial-connection": activeConnection.value,
|
|
726
|
+
"is-submitting": isSubmitting.value,
|
|
727
|
+
onSubmit: handleFormSubmit,
|
|
728
|
+
onCancel: _cache[0] || (_cache[0] = ($event) => dialogVisible.value = false)
|
|
729
|
+
}, null, 8, ["initial-connection", "is-submitting"])
|
|
730
|
+
]),
|
|
731
|
+
_: 1,
|
|
732
|
+
__: [12]
|
|
733
|
+
}, 8, ["modelValue", "title"]),
|
|
734
|
+
createVNode(unref(ElDialog), {
|
|
735
|
+
modelValue: deleteDialogVisible.value,
|
|
736
|
+
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => deleteDialogVisible.value = $event),
|
|
737
|
+
title: "Delete Connection",
|
|
738
|
+
width: "400px",
|
|
739
|
+
"before-close": handleCloseDeleteDialog
|
|
740
|
+
}, {
|
|
741
|
+
footer: withCtx(() => [
|
|
742
|
+
createBaseVNode("div", _hoisted_21, [
|
|
743
|
+
createVNode(unref(ElButton), {
|
|
744
|
+
onClick: _cache[2] || (_cache[2] = ($event) => deleteDialogVisible.value = false)
|
|
745
|
+
}, {
|
|
746
|
+
default: withCtx(() => _cache[15] || (_cache[15] = [
|
|
747
|
+
createTextVNode("Cancel")
|
|
748
|
+
])),
|
|
749
|
+
_: 1,
|
|
750
|
+
__: [15]
|
|
751
|
+
}),
|
|
752
|
+
createVNode(unref(ElButton), {
|
|
753
|
+
type: "danger",
|
|
754
|
+
loading: isDeleting.value,
|
|
755
|
+
onClick: handleDeleteConnection
|
|
756
|
+
}, {
|
|
757
|
+
default: withCtx(() => _cache[16] || (_cache[16] = [
|
|
758
|
+
createTextVNode(" Delete ")
|
|
759
|
+
])),
|
|
760
|
+
_: 1,
|
|
761
|
+
__: [16]
|
|
762
|
+
}, 8, ["loading"])
|
|
763
|
+
])
|
|
764
|
+
]),
|
|
765
|
+
default: withCtx(() => [
|
|
766
|
+
createBaseVNode("p", null, [
|
|
767
|
+
_cache[13] || (_cache[13] = createTextVNode(" Are you sure you want to delete the connection ")),
|
|
768
|
+
createBaseVNode("strong", null, toDisplayString(connectionToDelete.value), 1),
|
|
769
|
+
_cache[14] || (_cache[14] = createTextVNode("? "))
|
|
770
|
+
]),
|
|
771
|
+
_cache[17] || (_cache[17] = createBaseVNode("p", { class: "warning-text" }, " This action cannot be undone and may affect any processes using this connection. ", -1))
|
|
772
|
+
]),
|
|
773
|
+
_: 1,
|
|
774
|
+
__: [17]
|
|
775
|
+
}, 8, ["modelValue"])
|
|
776
|
+
]);
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
});
|
|
780
|
+
const CloudConnectionManager_vue_vue_type_style_index_0_scoped_23359c71_lang = "";
|
|
781
|
+
const CloudConnectionManager = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-23359c71"]]);
|
|
782
|
+
export {
|
|
783
|
+
CloudConnectionManager as default
|
|
784
|
+
};
|