@serve.zone/dcrouter 12.2.1 → 12.2.4
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.
- package/dist_serve/bundle.js +802 -744
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.js +14 -2
- package/dist_ts/config/classes.route-config-manager.d.ts +2 -1
- package/dist_ts/config/classes.route-config-manager.js +8 -2
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +1 -0
- package/dist_ts_web/appstate.js +4 -1
- package/dist_ts_web/elements/ops-view-routes.d.ts +1 -0
- package/dist_ts_web/elements/ops-view-routes.js +61 -6
- package/dist_ts_web/elements/ops-view-securityprofiles.js +11 -19
- package/package.json +4 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +13 -0
- package/ts/config/classes.route-config-manager.ts +7 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +4 -0
- package/ts_web/elements/ops-view-routes.ts +56 -4
- package/ts_web/elements/ops-view-securityprofiles.ts +10 -18
|
@@ -162,8 +162,8 @@ let OpsViewSecurityProfiles = (() => {
|
|
|
162
162
|
<dees-form>
|
|
163
163
|
<dees-input-text .key=${'name'} .label=${'Name'} .required=${true}></dees-input-text>
|
|
164
164
|
<dees-input-text .key=${'description'} .label=${'Description'}></dees-input-text>
|
|
165
|
-
<dees-input-
|
|
166
|
-
<dees-input-
|
|
165
|
+
<dees-input-list .key=${'ipAllowList'} .label=${'IP Allow List'} .placeholder=${'Add IP or CIDR...'}></dees-input-list>
|
|
166
|
+
<dees-input-list .key=${'ipBlockList'} .label=${'IP Block List'} .placeholder=${'Add IP or CIDR...'}></dees-input-list>
|
|
167
167
|
<dees-input-text .key=${'maxConnections'} .label=${'Max Connections'}></dees-input-text>
|
|
168
168
|
</dees-form>
|
|
169
169
|
`,
|
|
@@ -173,19 +173,15 @@ let OpsViewSecurityProfiles = (() => {
|
|
|
173
173
|
action: async (modalArg) => {
|
|
174
174
|
const form = modalArg.shadowRoot.querySelector('dees-form');
|
|
175
175
|
const data = await form.collectFormData();
|
|
176
|
-
const ipAllowList = data.ipAllowList
|
|
177
|
-
|
|
178
|
-
: undefined;
|
|
179
|
-
const ipBlockList = data.ipBlockList
|
|
180
|
-
? String(data.ipBlockList).split(',').map((s) => s.trim()).filter(Boolean)
|
|
181
|
-
: undefined;
|
|
176
|
+
const ipAllowList = Array.isArray(data.ipAllowList) ? data.ipAllowList : [];
|
|
177
|
+
const ipBlockList = Array.isArray(data.ipBlockList) ? data.ipBlockList : [];
|
|
182
178
|
const maxConnections = data.maxConnections ? parseInt(String(data.maxConnections)) : undefined;
|
|
183
179
|
await appstate.profilesTargetsStatePart.dispatchAction(appstate.createProfileAction, {
|
|
184
180
|
name: String(data.name),
|
|
185
181
|
description: data.description ? String(data.description) : undefined,
|
|
186
182
|
security: {
|
|
187
|
-
...(ipAllowList ? { ipAllowList } : {}),
|
|
188
|
-
...(ipBlockList ? { ipBlockList } : {}),
|
|
183
|
+
...(ipAllowList.length > 0 ? { ipAllowList } : {}),
|
|
184
|
+
...(ipBlockList.length > 0 ? { ipBlockList } : {}),
|
|
189
185
|
...(maxConnections ? { maxConnections } : {}),
|
|
190
186
|
},
|
|
191
187
|
});
|
|
@@ -204,8 +200,8 @@ let OpsViewSecurityProfiles = (() => {
|
|
|
204
200
|
<dees-form>
|
|
205
201
|
<dees-input-text .key=${'name'} .label=${'Name'} .value=${profile.name}></dees-input-text>
|
|
206
202
|
<dees-input-text .key=${'description'} .label=${'Description'} .value=${profile.description || ''}></dees-input-text>
|
|
207
|
-
<dees-input-
|
|
208
|
-
<dees-input-
|
|
203
|
+
<dees-input-list .key=${'ipAllowList'} .label=${'IP Allow List'} .placeholder=${'Add IP or CIDR...'} .value=${profile.security?.ipAllowList || []}></dees-input-list>
|
|
204
|
+
<dees-input-list .key=${'ipBlockList'} .label=${'IP Block List'} .placeholder=${'Add IP or CIDR...'} .value=${profile.security?.ipBlockList || []}></dees-input-list>
|
|
209
205
|
<dees-input-text .key=${'maxConnections'} .label=${'Max Connections'} .value=${String(profile.security?.maxConnections || '')}></dees-input-text>
|
|
210
206
|
</dees-form>
|
|
211
207
|
`,
|
|
@@ -215,12 +211,8 @@ let OpsViewSecurityProfiles = (() => {
|
|
|
215
211
|
action: async (modalArg) => {
|
|
216
212
|
const form = modalArg.shadowRoot.querySelector('dees-form');
|
|
217
213
|
const data = await form.collectFormData();
|
|
218
|
-
const ipAllowList = data.ipAllowList
|
|
219
|
-
|
|
220
|
-
: [];
|
|
221
|
-
const ipBlockList = data.ipBlockList
|
|
222
|
-
? String(data.ipBlockList).split(',').map((s) => s.trim()).filter(Boolean)
|
|
223
|
-
: [];
|
|
214
|
+
const ipAllowList = Array.isArray(data.ipAllowList) ? data.ipAllowList : [];
|
|
215
|
+
const ipBlockList = Array.isArray(data.ipBlockList) ? data.ipBlockList : [];
|
|
224
216
|
const maxConnections = data.maxConnections ? parseInt(String(data.maxConnections)) : undefined;
|
|
225
217
|
await appstate.profilesTargetsStatePart.dispatchAction(appstate.updateProfileAction, {
|
|
226
218
|
id: profile.id,
|
|
@@ -273,4 +265,4 @@ let OpsViewSecurityProfiles = (() => {
|
|
|
273
265
|
return OpsViewSecurityProfiles = _classThis;
|
|
274
266
|
})();
|
|
275
267
|
export { OpsViewSecurityProfiles };
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctc2VjdXJpdHlwcm9maWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtdmlldy1zZWN1cml0eXByb2ZpbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxVQUFVLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCx1QkFBdUI7NEJBRG5DLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7O3VDQUFuQixTQUFRLFdBQVc7Ozs7eUNBQ3JELEtBQUssRUFBRTtZQUNSLDRMQUFTLGFBQWEsNkJBQWIsYUFBYSxxR0FBaUY7WUFGekcsNktBNk5DOzs7O1FBM05DLHVGQUF5RCxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFBdkcsSUFBUyxhQUFhLG1EQUFpRjtRQUF2RyxJQUFTLGFBQWEseURBQWlGO1FBRXZHO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFD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
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctc2VjdXJpdHlwcm9maWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9vcHMtdmlldy1zZWN1cml0eXByb2ZpbGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxVQUFVLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCx1QkFBdUI7NEJBRG5DLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7O3VDQUFuQixTQUFRLFdBQVc7Ozs7eUNBQ3JELEtBQUssRUFBRTtZQUNSLDRMQUFTLGFBQWEsNkJBQWIsYUFBYSxxR0FBaUY7WUFGekcsNktBcU5DOzs7O1FBbk5DLHVGQUF5RCxRQUFRLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFBdkcsSUFBUyxhQUFhLG1EQUFpRjtRQUF2RyxJQUFTLGFBQWEseURBQWlGO1FBRXZHO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsS0FBSyxDQUFDLGlCQUFpQjtZQUNyQixNQUFNLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkcsQ0FBQztRQUVNLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsV0FBVztZQUNYLEdBQUcsQ0FBQTs7Ozs7O0tBTUY7U0FDRixDQUFDO1FBRUssTUFBTTtZQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBRTdDLE1BQU0sVUFBVSxHQUFpQjtnQkFDL0I7b0JBQ0UsRUFBRSxFQUFFLGVBQWU7b0JBQ25CLEtBQUssRUFBRSxnQkFBZ0I7b0JBQ3ZCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTTtvQkFDdEIsSUFBSSxFQUFFLG9CQUFvQjtvQkFDMUIsV0FBVyxFQUFFLDRCQUE0QjtvQkFDekMsS0FBSyxFQUFFLFNBQVM7aUJBQ2pCO2FBQ0YsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFBOztpQ0FFa0IsVUFBVTs7c0JBRXJCLG1CQUFtQjtzQkFDbkIsNkNBQTZDO2tCQUNqRCxRQUFROzZCQUNHLENBQUMsT0FBeUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHO2dCQUN2QyxlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDeEUsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUc7Z0JBQ3hFLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsY0FBYyxJQUFJLEdBQUc7Z0JBQzFELFlBQVksRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUM1SSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUNqRCxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dCQUNoQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNmLENBQUMsQ0FBQyxHQUFHO2FBQ1IsQ0FBQzt5QkFDYTtnQkFDYjtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsSUFBSSxFQUFFLENBQUMsUUFBaUIsQ0FBQztvQkFDekIsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFNLEVBQUUsS0FBVSxFQUFFLEVBQUU7d0JBQ3ZDLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QyxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLElBQUksRUFBRSxDQUFDLFFBQWlCLENBQUM7b0JBQ3pCLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTt3QkFDckIsTUFBTSxRQUFRLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdkcsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFLENBQUMsYUFBc0IsQ0FBQztvQkFDOUIsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUF5QyxFQUFFLEtBQVUsRUFBRSxFQUFFO3dCQUMxRSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ25ELENBQUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLElBQUksRUFBRSxDQUFDLGFBQXNCLENBQUM7b0JBQzlCLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBeUMsRUFBRSxFQUFFO3dCQUM5RCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7aUJBQ0Y7YUFDRjs7O0tBR04sQ0FBQztRQUNKLENBQUM7UUFFTyxLQUFLLENBQUMsdUJBQXVCLENBQUMsS0FBVTtZQUM5QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNsRSxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUN0QixPQUFPLEVBQUUseUJBQXlCO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFBOztrQ0FFZSxNQUFNLFdBQVcsTUFBTSxjQUFjLElBQUk7a0NBQ3pDLGFBQWEsV0FBVyxhQUFhO2tDQUNyQyxhQUFhLFdBQVcsZUFBZSxpQkFBaUIsbUJBQW1CO2tDQUMzRSxhQUFhLFdBQVcsZUFBZSxpQkFBaUIsbUJBQW1CO2tDQUMzRSxnQkFBZ0IsV0FBVyxpQkFBaUI7O09BRXZFO2dCQUNELFdBQVcsRUFBRTtvQkFDWDt3QkFDRSxJQUFJLEVBQUUsUUFBUTt3QkFDZCxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFOzRCQUM5QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsVUFBVyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7NEJBQzFDLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3RGLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ3RGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzs0QkFFL0YsTUFBTSxRQUFRLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtnQ0FDbkYsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dDQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQ0FDcEUsUUFBUSxFQUFFO29DQUNSLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUNsRCxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQ0FDbEQsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lDQUM5Qzs2QkFDRixDQUFDLENBQUM7NEJBQ0gsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNyQixDQUFDO3FCQUNGO29CQUNELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFO2lCQUN4RTthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBeUMsRUFBRSxLQUFVO1lBQ3ZGLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQ2xFLFNBQVMsQ0FBQyxhQUFhLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDeEMsT0FBTyxFQUFFLElBQUksQ0FBQTs7a0NBRWUsTUFBTSxXQUFXLE1BQU0sV0FBVyxPQUFPLENBQUMsSUFBSTtrQ0FDOUMsYUFBYSxXQUFXLGFBQWEsV0FBVyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7a0NBQ3pFLGFBQWEsV0FBVyxlQUFlLGlCQUFpQixtQkFBbUIsV0FBVyxPQUFPLENBQUMsUUFBUSxFQUFFLFdBQVcsSUFBSSxFQUFFO2tDQUN6SCxhQUFhLFdBQVcsZUFBZSxpQkFBaUIsbUJBQW1CLFdBQVcsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRTtrQ0FDekgsZ0JBQWdCLFdBQVcsaUJBQWlCLFdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsY0FBYyxJQUFJLEVBQUUsQ0FBQzs7T0FFaEk7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYO3dCQUNFLElBQUksRUFBRSxNQUFNO3dCQUNaLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUU7NEJBQzlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDMUMsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDdEYsTUFBTSxXQUFXLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDdEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDOzRCQUUvRixNQUFNLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFO2dDQUNuRixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0NBQ2QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dDQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQ0FDcEUsUUFBUSxFQUFFO29DQUNSLFdBQVc7b0NBQ1gsV0FBVztvQ0FDWCxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUNBQzlDOzZCQUNGLENBQUMsQ0FBQzs0QkFDSCxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3JCLENBQUM7cUJBQ0Y7b0JBQ0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7aUJBQ3hFO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBeUM7WUFDbkUsTUFBTSxRQUFRLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkYsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRyxDQUFDO1lBQ25FLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ2xFLFNBQVMsQ0FBQyxhQUFhLENBQUM7b0JBQ3RCLE9BQU8sRUFBRSxnQkFBZ0I7b0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUEsTUFBTSxZQUFZLENBQUMsS0FBSyxvQkFBb0I7b0JBQ3pELFdBQVcsRUFBRTt3QkFDWDs0QkFDRSxJQUFJLEVBQUUsY0FBYzs0QkFDcEIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTtnQ0FDOUIsTUFBTSxRQUFRLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtvQ0FDbkYsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29DQUNkLEtBQUssRUFBRSxJQUFJO2lDQUNaLENBQUMsQ0FBQztnQ0FDSCxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7NEJBQ3JCLENBQUM7eUJBQ0Y7d0JBQ0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUU7cUJBQ3hFO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDOztZQXBOVSx1REFBdUI7Ozs7O1NBQXZCLHVCQUF1QiJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "12.2.
|
|
4
|
+
"version": "12.2.4",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"@api.global/typedserver": "^8.4.6",
|
|
36
36
|
"@api.global/typedsocket": "^4.1.2",
|
|
37
37
|
"@apiclient.xyz/cloudflare": "^7.1.0",
|
|
38
|
-
"@design.estate/dees-catalog": "^3.49.
|
|
38
|
+
"@design.estate/dees-catalog": "^3.49.2",
|
|
39
39
|
"@design.estate/dees-element": "^2.2.4",
|
|
40
40
|
"@push.rocks/lik": "^6.4.0",
|
|
41
41
|
"@push.rocks/projectinfo": "^5.1.0",
|
|
42
42
|
"@push.rocks/qenv": "^6.1.3",
|
|
43
43
|
"@push.rocks/smartacme": "^9.3.1",
|
|
44
44
|
"@push.rocks/smartdata": "^7.1.3",
|
|
45
|
-
"@push.rocks/smartdb": "^2.
|
|
45
|
+
"@push.rocks/smartdb": "^2.1.1",
|
|
46
46
|
"@push.rocks/smartdns": "^7.9.0",
|
|
47
47
|
"@push.rocks/smartfs": "^1.5.0",
|
|
48
48
|
"@push.rocks/smartguard": "^3.1.0",
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@push.rocks/smartunique": "^3.0.9",
|
|
62
62
|
"@push.rocks/smartvpn": "1.19.1",
|
|
63
63
|
"@push.rocks/taskbuffer": "^8.0.2",
|
|
64
|
-
"@serve.zone/catalog": "^2.9.
|
|
64
|
+
"@serve.zone/catalog": "^2.9.1",
|
|
65
65
|
"@serve.zone/interfaces": "^5.3.0",
|
|
66
66
|
"@serve.zone/remoteingress": "^4.15.3",
|
|
67
67
|
"@tsclass/tsclass": "^9.5.0",
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.dcrouter.ts
CHANGED
|
@@ -478,6 +478,12 @@ export class DcRouter {
|
|
|
478
478
|
}
|
|
479
479
|
: undefined,
|
|
480
480
|
this.referenceResolver,
|
|
481
|
+
// Sync merged routes to RemoteIngressManager whenever routes change
|
|
482
|
+
(routes) => {
|
|
483
|
+
if (this.remoteIngressManager) {
|
|
484
|
+
this.remoteIngressManager.setRoutes(routes as any[]);
|
|
485
|
+
}
|
|
486
|
+
},
|
|
481
487
|
);
|
|
482
488
|
this.apiTokenManager = new ApiTokenManager();
|
|
483
489
|
await this.apiTokenManager.initialize();
|
|
@@ -2054,6 +2060,13 @@ export class DcRouter {
|
|
|
2054
2060
|
const currentRoutes = this.constructorRoutes;
|
|
2055
2061
|
this.remoteIngressManager.setRoutes(currentRoutes as any[]);
|
|
2056
2062
|
|
|
2063
|
+
// Race-condition fix: if ConfigManagers finished before us, re-apply routes
|
|
2064
|
+
// so the callback delivers the full merged set (including DB-stored routes)
|
|
2065
|
+
// to our newly-created remoteIngressManager.
|
|
2066
|
+
if (this.routeConfigManager) {
|
|
2067
|
+
await this.routeConfigManager.applyRoutes();
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2057
2070
|
// Resolve TLS certs for tunnel: explicit paths > ACME for hubDomain > self-signed (Rust default)
|
|
2058
2071
|
const riCfg = this.options.remoteIngressConfig;
|
|
2059
2072
|
let tlsConfig: { certPem: string; keyPem: string } | undefined;
|
|
@@ -23,6 +23,7 @@ export class RouteConfigManager {
|
|
|
23
23
|
private getHttp3Config?: () => IHttp3Config | undefined,
|
|
24
24
|
private getVpnAllowList?: (tags?: string[]) => string[],
|
|
25
25
|
private referenceResolver?: ReferenceResolver,
|
|
26
|
+
private onRoutesApplied?: (routes: plugins.smartproxy.IRouteConfig[]) => void,
|
|
26
27
|
) {}
|
|
27
28
|
|
|
28
29
|
/** Expose stored routes map for reference resolution lookups. */
|
|
@@ -393,6 +394,12 @@ export class RouteConfigManager {
|
|
|
393
394
|
}
|
|
394
395
|
|
|
395
396
|
await smartProxy.updateRoutes(enabledRoutes);
|
|
397
|
+
|
|
398
|
+
// Notify listeners (e.g. RemoteIngressManager) of the merged route set
|
|
399
|
+
if (this.onRoutesApplied) {
|
|
400
|
+
this.onRoutesApplied(enabledRoutes);
|
|
401
|
+
}
|
|
402
|
+
|
|
396
403
|
logger.log('info', `Applied ${enabledRoutes.length} routes to SmartProxy (${this.storedRoutes.size} programmatic, ${this.overrides.size} overrides)`);
|
|
397
404
|
}
|
|
398
405
|
}
|
package/ts_web/appstate.ts
CHANGED
|
@@ -427,6 +427,8 @@ export const setActiveViewAction = uiStatePart.createAction<string>(async (state
|
|
|
427
427
|
if (viewName === 'routes' && currentState.activeView !== 'routes') {
|
|
428
428
|
setTimeout(() => {
|
|
429
429
|
routeManagementStatePart.dispatchAction(fetchMergedRoutesAction, null);
|
|
430
|
+
// Also fetch profiles/targets for the Create Route dropdowns
|
|
431
|
+
profilesTargetsStatePart.dispatchAction(fetchProfilesAndTargetsAction, null);
|
|
430
432
|
}, 100);
|
|
431
433
|
}
|
|
432
434
|
|
|
@@ -1413,6 +1415,7 @@ export const fetchMergedRoutesAction = routeManagementStatePart.createAction(asy
|
|
|
1413
1415
|
export const createRouteAction = routeManagementStatePart.createAction<{
|
|
1414
1416
|
route: any;
|
|
1415
1417
|
enabled?: boolean;
|
|
1418
|
+
metadata?: any;
|
|
1416
1419
|
}>(async (statePartArg, dataArg, actionContext): Promise<IRouteManagementState> => {
|
|
1417
1420
|
const context = getActionContext();
|
|
1418
1421
|
const currentState = statePartArg.getState()!;
|
|
@@ -1426,6 +1429,7 @@ export const createRouteAction = routeManagementStatePart.createAction<{
|
|
|
1426
1429
|
identity: context.identity!,
|
|
1427
1430
|
route: dataArg.route,
|
|
1428
1431
|
enabled: dataArg.enabled,
|
|
1432
|
+
metadata: dataArg.metadata,
|
|
1429
1433
|
});
|
|
1430
1434
|
|
|
1431
1435
|
return await actionContext!.dispatch(fetchMergedRoutesAction, null);
|
|
@@ -24,6 +24,14 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
24
24
|
lastUpdated: 0,
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
+
@state() accessor profilesTargetsState: appstate.IProfilesTargetsState = {
|
|
28
|
+
profiles: [],
|
|
29
|
+
targets: [],
|
|
30
|
+
isLoading: false,
|
|
31
|
+
error: null,
|
|
32
|
+
lastUpdated: 0,
|
|
33
|
+
};
|
|
34
|
+
|
|
27
35
|
constructor() {
|
|
28
36
|
super();
|
|
29
37
|
const sub = appstate.routeManagementStatePart
|
|
@@ -33,6 +41,13 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
33
41
|
});
|
|
34
42
|
this.rxSubscriptions.push(sub);
|
|
35
43
|
|
|
44
|
+
const ptSub = appstate.profilesTargetsStatePart
|
|
45
|
+
.select((s) => s)
|
|
46
|
+
.subscribe((ptState) => {
|
|
47
|
+
this.profilesTargetsState = ptState;
|
|
48
|
+
});
|
|
49
|
+
this.rxSubscriptions.push(ptSub);
|
|
50
|
+
|
|
36
51
|
// Re-fetch routes when user logs in (fixes race condition where
|
|
37
52
|
// the view is created before authentication completes)
|
|
38
53
|
const loginSub = appstate.loginStatePart
|
|
@@ -40,6 +55,7 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
40
55
|
.subscribe((isLoggedIn) => {
|
|
41
56
|
if (isLoggedIn) {
|
|
42
57
|
appstate.routeManagementStatePart.dispatchAction(appstate.fetchMergedRoutesAction, null);
|
|
58
|
+
appstate.profilesTargetsStatePart.dispatchAction(appstate.fetchProfilesAndTargetsAction, null);
|
|
43
59
|
}
|
|
44
60
|
});
|
|
45
61
|
this.rxSubscriptions.push(loginSub);
|
|
@@ -145,6 +161,7 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
145
161
|
enabled: mr.enabled,
|
|
146
162
|
tags,
|
|
147
163
|
id: mr.storedRouteId || mr.route.name || undefined,
|
|
164
|
+
metadata: mr.metadata,
|
|
148
165
|
};
|
|
149
166
|
});
|
|
150
167
|
|
|
@@ -275,6 +292,7 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
275
292
|
});
|
|
276
293
|
} else {
|
|
277
294
|
// Programmatic route
|
|
295
|
+
const meta = merged.metadata;
|
|
278
296
|
await DeesModal.createAndShow({
|
|
279
297
|
heading: `Route: ${merged.route.name}`,
|
|
280
298
|
content: html`
|
|
@@ -282,6 +300,8 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
282
300
|
<p>Source: <strong style="color: #0af;">programmatic</strong></p>
|
|
283
301
|
<p>Status: <strong>${merged.enabled ? 'Enabled' : 'Disabled'}</strong></p>
|
|
284
302
|
<p>ID: <code style="color: #888;">${merged.storedRouteId}</code></p>
|
|
303
|
+
${meta?.securityProfileName ? html`<p>Security Profile: <strong style="color: #a78bfa;">${meta.securityProfileName}</strong></p>` : ''}
|
|
304
|
+
${meta?.networkTargetName ? html`<p>Network Target: <strong style="color: #a78bfa;">${meta.networkTargetName}</strong></p>` : ''}
|
|
285
305
|
</div>
|
|
286
306
|
`,
|
|
287
307
|
menuOptions: [
|
|
@@ -319,6 +339,24 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
319
339
|
|
|
320
340
|
private async showCreateRouteDialog() {
|
|
321
341
|
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
342
|
+
const profiles = this.profilesTargetsState.profiles;
|
|
343
|
+
const targets = this.profilesTargetsState.targets;
|
|
344
|
+
|
|
345
|
+
// Build dropdown options for profiles and targets
|
|
346
|
+
const profileOptions = [
|
|
347
|
+
{ key: '', option: '(none — inline security)' },
|
|
348
|
+
...profiles.map((p) => ({
|
|
349
|
+
key: p.id,
|
|
350
|
+
option: `${p.name}${p.description ? ' — ' + p.description : ''}`,
|
|
351
|
+
})),
|
|
352
|
+
];
|
|
353
|
+
const targetOptions = [
|
|
354
|
+
{ key: '', option: '(none — inline target)' },
|
|
355
|
+
...targets.map((t) => ({
|
|
356
|
+
key: t.id,
|
|
357
|
+
option: `${t.name} (${Array.isArray(t.host) ? t.host.join(',') : t.host}:${t.port})`,
|
|
358
|
+
})),
|
|
359
|
+
];
|
|
322
360
|
|
|
323
361
|
await DeesModal.createAndShow({
|
|
324
362
|
heading: 'Add Programmatic Route',
|
|
@@ -327,8 +365,10 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
327
365
|
<dees-input-text .key=${'name'} .label=${'Route Name'} .required=${true}></dees-input-text>
|
|
328
366
|
<dees-input-text .key=${'ports'} .label=${'Ports (comma-separated)'} .required=${true}></dees-input-text>
|
|
329
367
|
<dees-input-text .key=${'domains'} .label=${'Domains (comma-separated, optional)'}></dees-input-text>
|
|
330
|
-
<dees-input-
|
|
331
|
-
<dees-input-
|
|
368
|
+
<dees-input-dropdown .key=${'securityProfileRef'} .label=${'Security Profile'} .options=${profileOptions} .selectedKey=${''}></dees-input-dropdown>
|
|
369
|
+
<dees-input-dropdown .key=${'networkTargetRef'} .label=${'Network Target'} .options=${targetOptions} .selectedKey=${''}></dees-input-dropdown>
|
|
370
|
+
<dees-input-text .key=${'targetHost'} .label=${'Target Host (if no target selected)'} .value=${'localhost'}></dees-input-text>
|
|
371
|
+
<dees-input-text .key=${'targetPort'} .label=${'Target Port (if no target selected)'}></dees-input-text>
|
|
332
372
|
</dees-form>
|
|
333
373
|
`,
|
|
334
374
|
menuOptions: [
|
|
@@ -362,15 +402,27 @@ export class OpsViewRoutes extends DeesElement {
|
|
|
362
402
|
targets: [
|
|
363
403
|
{
|
|
364
404
|
host: formData.targetHost || 'localhost',
|
|
365
|
-
port: parseInt(formData.targetPort, 10),
|
|
405
|
+
port: parseInt(formData.targetPort, 10) || 443,
|
|
366
406
|
},
|
|
367
407
|
],
|
|
368
408
|
},
|
|
369
409
|
};
|
|
370
410
|
|
|
411
|
+
// Build metadata if profile/target selected
|
|
412
|
+
const metadata: any = {};
|
|
413
|
+
if (formData.securityProfileRef) {
|
|
414
|
+
metadata.securityProfileRef = formData.securityProfileRef;
|
|
415
|
+
}
|
|
416
|
+
if (formData.networkTargetRef) {
|
|
417
|
+
metadata.networkTargetRef = formData.networkTargetRef;
|
|
418
|
+
}
|
|
419
|
+
|
|
371
420
|
await appstate.routeManagementStatePart.dispatchAction(
|
|
372
421
|
appstate.createRouteAction,
|
|
373
|
-
{
|
|
422
|
+
{
|
|
423
|
+
route,
|
|
424
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
|
|
425
|
+
},
|
|
374
426
|
);
|
|
375
427
|
await modalArg.destroy();
|
|
376
428
|
},
|
|
@@ -131,8 +131,8 @@ export class OpsViewSecurityProfiles extends DeesElement {
|
|
|
131
131
|
<dees-form>
|
|
132
132
|
<dees-input-text .key=${'name'} .label=${'Name'} .required=${true}></dees-input-text>
|
|
133
133
|
<dees-input-text .key=${'description'} .label=${'Description'}></dees-input-text>
|
|
134
|
-
<dees-input-
|
|
135
|
-
<dees-input-
|
|
134
|
+
<dees-input-list .key=${'ipAllowList'} .label=${'IP Allow List'} .placeholder=${'Add IP or CIDR...'}></dees-input-list>
|
|
135
|
+
<dees-input-list .key=${'ipBlockList'} .label=${'IP Block List'} .placeholder=${'Add IP or CIDR...'}></dees-input-list>
|
|
136
136
|
<dees-input-text .key=${'maxConnections'} .label=${'Max Connections'}></dees-input-text>
|
|
137
137
|
</dees-form>
|
|
138
138
|
`,
|
|
@@ -142,20 +142,16 @@ export class OpsViewSecurityProfiles extends DeesElement {
|
|
|
142
142
|
action: async (modalArg: any) => {
|
|
143
143
|
const form = modalArg.shadowRoot!.querySelector('dees-form');
|
|
144
144
|
const data = await form.collectFormData();
|
|
145
|
-
const ipAllowList = data.ipAllowList
|
|
146
|
-
|
|
147
|
-
: undefined;
|
|
148
|
-
const ipBlockList = data.ipBlockList
|
|
149
|
-
? String(data.ipBlockList).split(',').map((s: string) => s.trim()).filter(Boolean)
|
|
150
|
-
: undefined;
|
|
145
|
+
const ipAllowList: string[] = Array.isArray(data.ipAllowList) ? data.ipAllowList : [];
|
|
146
|
+
const ipBlockList: string[] = Array.isArray(data.ipBlockList) ? data.ipBlockList : [];
|
|
151
147
|
const maxConnections = data.maxConnections ? parseInt(String(data.maxConnections)) : undefined;
|
|
152
148
|
|
|
153
149
|
await appstate.profilesTargetsStatePart.dispatchAction(appstate.createProfileAction, {
|
|
154
150
|
name: String(data.name),
|
|
155
151
|
description: data.description ? String(data.description) : undefined,
|
|
156
152
|
security: {
|
|
157
|
-
...(ipAllowList ? { ipAllowList } : {}),
|
|
158
|
-
...(ipBlockList ? { ipBlockList } : {}),
|
|
153
|
+
...(ipAllowList.length > 0 ? { ipAllowList } : {}),
|
|
154
|
+
...(ipBlockList.length > 0 ? { ipBlockList } : {}),
|
|
159
155
|
...(maxConnections ? { maxConnections } : {}),
|
|
160
156
|
},
|
|
161
157
|
});
|
|
@@ -175,8 +171,8 @@ export class OpsViewSecurityProfiles extends DeesElement {
|
|
|
175
171
|
<dees-form>
|
|
176
172
|
<dees-input-text .key=${'name'} .label=${'Name'} .value=${profile.name}></dees-input-text>
|
|
177
173
|
<dees-input-text .key=${'description'} .label=${'Description'} .value=${profile.description || ''}></dees-input-text>
|
|
178
|
-
<dees-input-
|
|
179
|
-
<dees-input-
|
|
174
|
+
<dees-input-list .key=${'ipAllowList'} .label=${'IP Allow List'} .placeholder=${'Add IP or CIDR...'} .value=${profile.security?.ipAllowList || []}></dees-input-list>
|
|
175
|
+
<dees-input-list .key=${'ipBlockList'} .label=${'IP Block List'} .placeholder=${'Add IP or CIDR...'} .value=${profile.security?.ipBlockList || []}></dees-input-list>
|
|
180
176
|
<dees-input-text .key=${'maxConnections'} .label=${'Max Connections'} .value=${String(profile.security?.maxConnections || '')}></dees-input-text>
|
|
181
177
|
</dees-form>
|
|
182
178
|
`,
|
|
@@ -186,12 +182,8 @@ export class OpsViewSecurityProfiles extends DeesElement {
|
|
|
186
182
|
action: async (modalArg: any) => {
|
|
187
183
|
const form = modalArg.shadowRoot!.querySelector('dees-form');
|
|
188
184
|
const data = await form.collectFormData();
|
|
189
|
-
const ipAllowList = data.ipAllowList
|
|
190
|
-
|
|
191
|
-
: [];
|
|
192
|
-
const ipBlockList = data.ipBlockList
|
|
193
|
-
? String(data.ipBlockList).split(',').map((s: string) => s.trim()).filter(Boolean)
|
|
194
|
-
: [];
|
|
185
|
+
const ipAllowList: string[] = Array.isArray(data.ipAllowList) ? data.ipAllowList : [];
|
|
186
|
+
const ipBlockList: string[] = Array.isArray(data.ipBlockList) ? data.ipBlockList : [];
|
|
195
187
|
const maxConnections = data.maxConnections ? parseInt(String(data.maxConnections)) : undefined;
|
|
196
188
|
|
|
197
189
|
await appstate.profilesTargetsStatePart.dispatchAction(appstate.updateProfileAction, {
|