@serve.zone/dcrouter 16.2.1 → 16.4.0
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/deno.json +1 -1
- package/dist_serve/bundle.js +1190 -1100
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/config/helpers.http-redirects.d.ts +1 -1
- package/dist_ts/config/helpers.http-redirects.js +4 -3
- package/dist_ts_interfaces/data/route-management.d.ts +2 -0
- package/dist_ts_interfaces/data/route-management.js +6 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/access/ops-view-apitokens.js +3 -3
- package/dist_ts_web/elements/access/ops-view-gatewayclients.js +3 -3
- package/dist_ts_web/elements/network/ops-view-network-activity.js +6 -6
- package/dist_ts_web/elements/network/ops-view-redirects.d.ts +3 -0
- package/dist_ts_web/elements/network/ops-view-redirects.js +38 -21
- package/dist_ts_web/elements/network/ops-view-remoteingress.js +3 -3
- package/dist_ts_web/elements/network/ops-view-routes.d.ts +8 -7
- package/dist_ts_web/elements/network/ops-view-routes.js +331 -161
- package/dist_ts_web/elements/network/ops-view-special-forwards.d.ts +4 -1
- package/dist_ts_web/elements/network/ops-view-special-forwards.js +118 -168
- package/dist_ts_web/elements/network/ops-view-vpn.js +3 -3
- package/dist_ts_web/elements/network/route-view-filters.d.ts +6 -0
- package/dist_ts_web/elements/network/route-view-filters.js +29 -0
- package/dist_ts_web/elements/network/special-forward-dialog.d.ts +11 -0
- package/dist_ts_web/elements/network/special-forward-dialog.js +154 -0
- package/dist_ts_web/elements/security/ops-view-security-blocked.js +6 -6
- package/package.json +2 -2
- package/readme.md +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/config/helpers.http-redirects.ts +6 -3
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/access/ops-view-apitokens.ts +2 -2
- package/ts_web/elements/access/ops-view-gatewayclients.ts +2 -2
- package/ts_web/elements/network/ops-view-network-activity.ts +5 -5
- package/ts_web/elements/network/ops-view-redirects.ts +34 -19
- package/ts_web/elements/network/ops-view-remoteingress.ts +2 -2
- package/ts_web/elements/network/ops-view-routes.ts +371 -171
- package/ts_web/elements/network/ops-view-special-forwards.ts +115 -178
- package/ts_web/elements/network/ops-view-vpn.ts +2 -2
- package/ts_web/elements/network/route-view-filters.ts +43 -0
- package/ts_web/elements/network/special-forward-dialog.ts +174 -0
- package/ts_web/elements/security/ops-view-security-blocked.ts +5 -5
- package/ts_web/readme.md +4 -4
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type IHttpRedirectInfo, type IMergedRoute } from '../../../dist_ts_interfaces/data/route-management.js';
|
|
2
|
+
export type TRouteOwnerFilter = 'all' | 'operator' | 'gatewayClient' | 'system';
|
|
3
|
+
export type TResolvedRouteOwner = Exclude<TRouteOwnerFilter, 'all'>;
|
|
4
|
+
export declare function getRouteOwner(route: IMergedRoute): TResolvedRouteOwner;
|
|
5
|
+
export declare function routeMatchesOwner(route: IMergedRoute, ownerFilter: TRouteOwnerFilter): boolean;
|
|
6
|
+
export declare function redirectMatchesOwner(redirect: IHttpRedirectInfo, mergedRoutes: IMergedRoute[], ownerFilter: TRouteOwnerFilter): boolean;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { canonicalizeSourceRouteId, } from '../../../dist_ts_interfaces/data/route-management.js';
|
|
2
|
+
export function getRouteOwner(route) {
|
|
3
|
+
if (route.metadata?.ownerType === 'gatewayClient')
|
|
4
|
+
return 'gatewayClient';
|
|
5
|
+
if (route.metadata?.ownerType === 'system')
|
|
6
|
+
return 'system';
|
|
7
|
+
if (route.metadata?.ownerType === 'operator')
|
|
8
|
+
return 'operator';
|
|
9
|
+
return route.origin === 'api' ? 'operator' : 'system';
|
|
10
|
+
}
|
|
11
|
+
export function routeMatchesOwner(route, ownerFilter) {
|
|
12
|
+
return ownerFilter === 'all' || getRouteOwner(route) === ownerFilter;
|
|
13
|
+
}
|
|
14
|
+
function getCanonicalRouteIds(route) {
|
|
15
|
+
const configuredRouteId = route.route.id;
|
|
16
|
+
return [route.id, configuredRouteId]
|
|
17
|
+
.filter((routeId) => Boolean(routeId))
|
|
18
|
+
.map(canonicalizeSourceRouteId);
|
|
19
|
+
}
|
|
20
|
+
export function redirectMatchesOwner(redirect, mergedRoutes, ownerFilter) {
|
|
21
|
+
if (ownerFilter === 'all')
|
|
22
|
+
return true;
|
|
23
|
+
const sourceRouteIds = new Set(redirect.sourceRouteIds.map(canonicalizeSourceRouteId));
|
|
24
|
+
return mergedRoutes.some((route) => {
|
|
25
|
+
return getCanonicalRouteIds(route).some((routeId) => sourceRouteIds.has(routeId))
|
|
26
|
+
&& getRouteOwner(route) === ownerFilter;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdmlldy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzL25ldHdvcmsvcm91dGUtdmlldy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsR0FHMUIsTUFBTSxzREFBc0QsQ0FBQztBQUs5RCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQW1CO0lBQy9DLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEtBQUssZUFBZTtRQUFFLE9BQU8sZUFBZSxDQUFDO0lBQzFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEtBQUssUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzVELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLEtBQUssVUFBVTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBQ2hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEtBQW1CLEVBQ25CLFdBQThCO0lBRTlCLE9BQU8sV0FBVyxLQUFLLEtBQUssSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQW1CO0lBQy9DLE1BQU0saUJBQWlCLEdBQUksS0FBSyxDQUFDLEtBQXlCLENBQUMsRUFBRSxDQUFDO0lBQzlELE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDO1NBQ2pDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBcUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4RCxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxRQUEyQixFQUMzQixZQUE0QixFQUM1QixXQUE4QjtJQUU5QixJQUFJLFdBQVcsS0FBSyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2pDLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2VBQzVFLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
2
|
+
export declare const letsEncryptHttp01ManagedRouteKind: "letsencrypt-http01-forward";
|
|
3
|
+
export declare function getSpecialForwardDomains(route: interfaces.data.IMergedRoute): string[];
|
|
4
|
+
export declare function getSpecialForwardTarget(route: interfaces.data.IMergedRoute): {
|
|
5
|
+
host: string;
|
|
6
|
+
port: number;
|
|
7
|
+
} | undefined;
|
|
8
|
+
export declare function showLetsEncryptHttp01ForwardDialog(options: {
|
|
9
|
+
existing?: interfaces.data.IMergedRoute;
|
|
10
|
+
targets: interfaces.data.INetworkTarget[];
|
|
11
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { html } from '@design.estate/dees-element';
|
|
2
|
+
import * as appstate from '../../appstate.js';
|
|
3
|
+
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
4
|
+
export const letsEncryptHttp01ManagedRouteKind = 'letsencrypt-http01-forward';
|
|
5
|
+
export function getSpecialForwardDomains(route) {
|
|
6
|
+
const domains = route.route.match.domains;
|
|
7
|
+
if (!domains)
|
|
8
|
+
return [];
|
|
9
|
+
return Array.isArray(domains) ? domains : [domains];
|
|
10
|
+
}
|
|
11
|
+
export function getSpecialForwardTarget(route) {
|
|
12
|
+
const target = route.route.action.targets?.[0];
|
|
13
|
+
if (!target || typeof target.port !== 'number')
|
|
14
|
+
return undefined;
|
|
15
|
+
const host = typeof target.host === 'string'
|
|
16
|
+
? target.host
|
|
17
|
+
: Array.isArray(target.host)
|
|
18
|
+
? target.host[0]
|
|
19
|
+
: undefined;
|
|
20
|
+
return host ? { host, port: target.port } : undefined;
|
|
21
|
+
}
|
|
22
|
+
function getDropdownKey(value) {
|
|
23
|
+
return typeof value === 'string'
|
|
24
|
+
? value
|
|
25
|
+
: value && typeof value === 'object' && 'key' in value
|
|
26
|
+
? String(value.key)
|
|
27
|
+
: '';
|
|
28
|
+
}
|
|
29
|
+
export async function showLetsEncryptHttp01ForwardDialog(options) {
|
|
30
|
+
const { DeesModal } = await import('@design.estate/dees-catalog');
|
|
31
|
+
const { existing, targets } = options;
|
|
32
|
+
const target = existing ? getSpecialForwardTarget(existing) : undefined;
|
|
33
|
+
const targetOptions = [
|
|
34
|
+
{ key: '', option: '(none — inline target)' },
|
|
35
|
+
...targets.map((networkTarget) => ({
|
|
36
|
+
key: networkTarget.id,
|
|
37
|
+
option: `${networkTarget.name} (${Array.isArray(networkTarget.host) ? networkTarget.host.join(', ') : networkTarget.host}:${networkTarget.port})`,
|
|
38
|
+
})),
|
|
39
|
+
];
|
|
40
|
+
const selectedTarget = targetOptions.find((option) => {
|
|
41
|
+
return option.key === (existing?.metadata?.networkTargetRef || '');
|
|
42
|
+
}) || targetOptions[0];
|
|
43
|
+
await DeesModal.createAndShow({
|
|
44
|
+
heading: existing
|
|
45
|
+
? `Edit User HTTP-01 Forward: ${existing.route.name || existing.id}`
|
|
46
|
+
: 'Add User Let\'s Encrypt HTTP-01 Forward',
|
|
47
|
+
content: html `
|
|
48
|
+
<dees-form>
|
|
49
|
+
<dees-input-text
|
|
50
|
+
.key=${'name'}
|
|
51
|
+
.label=${'Name'}
|
|
52
|
+
.value=${existing?.route.name || ''}
|
|
53
|
+
.required=${true}
|
|
54
|
+
></dees-input-text>
|
|
55
|
+
<dees-input-list
|
|
56
|
+
.key=${'domains'}
|
|
57
|
+
.label=${'Domains'}
|
|
58
|
+
.description=${'Exact public hostnames; HTTP-01 does not support wildcards'}
|
|
59
|
+
.placeholder=${'Add domain...'}
|
|
60
|
+
.value=${existing ? getSpecialForwardDomains(existing) : []}
|
|
61
|
+
></dees-input-list>
|
|
62
|
+
<dees-input-dropdown
|
|
63
|
+
.key=${'networkTargetRef'}
|
|
64
|
+
.label=${'Network Target'}
|
|
65
|
+
.options=${targetOptions}
|
|
66
|
+
.selectedOption=${selectedTarget}
|
|
67
|
+
></dees-input-dropdown>
|
|
68
|
+
<dees-input-text
|
|
69
|
+
.key=${'targetHost'}
|
|
70
|
+
.label=${'Inline Target Host'}
|
|
71
|
+
.description=${'Used only when no Network Target is selected'}
|
|
72
|
+
.value=${target?.host || ''}
|
|
73
|
+
></dees-input-text>
|
|
74
|
+
<dees-input-text
|
|
75
|
+
.key=${'targetPort'}
|
|
76
|
+
.label=${'Inline Target Port'}
|
|
77
|
+
.description=${'Usually port 80 on the ACME responder'}
|
|
78
|
+
.value=${target ? String(target.port) : '80'}
|
|
79
|
+
></dees-input-text>
|
|
80
|
+
<dees-input-checkbox
|
|
81
|
+
.key=${'remoteIngressEnabled'}
|
|
82
|
+
.label=${'Enable Remote Ingress'}
|
|
83
|
+
.value=${existing?.route.remoteIngress?.enabled === true}
|
|
84
|
+
></dees-input-checkbox>
|
|
85
|
+
<dees-input-list
|
|
86
|
+
.key=${'remoteIngressEdgeFilter'}
|
|
87
|
+
.label=${'Remote Ingress Edge Filter'}
|
|
88
|
+
.description=${'Optional edge IDs or tags; leave empty for all edges'}
|
|
89
|
+
.placeholder=${'Add edge ID or tag...'}
|
|
90
|
+
.value=${existing?.route.remoteIngress?.edgeFilter || []}
|
|
91
|
+
></dees-input-list>
|
|
92
|
+
</dees-form>
|
|
93
|
+
`,
|
|
94
|
+
menuOptions: [
|
|
95
|
+
{
|
|
96
|
+
name: 'Cancel',
|
|
97
|
+
iconName: 'lucide:x',
|
|
98
|
+
action: async (modalArg) => modalArg.destroy(),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: existing ? 'Save' : 'Create',
|
|
102
|
+
iconName: existing ? 'lucide:check' : 'lucide:plus',
|
|
103
|
+
action: async (modalArg) => {
|
|
104
|
+
const form = modalArg.shadowRoot?.querySelector('.content')?.querySelector('dees-form');
|
|
105
|
+
if (!form)
|
|
106
|
+
return;
|
|
107
|
+
const data = await form.collectFormData();
|
|
108
|
+
const name = String(data.name || '').trim();
|
|
109
|
+
const domains = Array.isArray(data.domains)
|
|
110
|
+
? data.domains.map((domain) => String(domain).trim()).filter(Boolean)
|
|
111
|
+
: [];
|
|
112
|
+
const networkTargetRef = getDropdownKey(data.networkTargetRef).trim();
|
|
113
|
+
const targetHost = String(data.targetHost || '').trim();
|
|
114
|
+
const targetPort = Number.parseInt(String(data.targetPort || ''), 10);
|
|
115
|
+
if (!name || domains.length === 0) {
|
|
116
|
+
alert('Name and at least one domain are required.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (!networkTargetRef
|
|
120
|
+
&& (!targetHost || !Number.isInteger(targetPort) || targetPort < 1 || targetPort > 65535)) {
|
|
121
|
+
alert('A valid inline target host and port are required.');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const edgeFilter = Array.isArray(data.remoteIngressEdgeFilter)
|
|
125
|
+
? data.remoteIngressEdgeFilter.map((entry) => String(entry).trim()).filter(Boolean)
|
|
126
|
+
: [];
|
|
127
|
+
const config = {
|
|
128
|
+
name,
|
|
129
|
+
domains,
|
|
130
|
+
...(networkTargetRef
|
|
131
|
+
? { networkTargetRef }
|
|
132
|
+
: { target: { host: targetHost, port: targetPort } }),
|
|
133
|
+
...(data.remoteIngressEnabled
|
|
134
|
+
? {
|
|
135
|
+
remoteIngress: {
|
|
136
|
+
enabled: true,
|
|
137
|
+
...(edgeFilter.length ? { edgeFilter } : {}),
|
|
138
|
+
},
|
|
139
|
+
}
|
|
140
|
+
: {}),
|
|
141
|
+
};
|
|
142
|
+
if (existing) {
|
|
143
|
+
await appstate.routeManagementStatePart.dispatchAction(appstate.updateLetsEncryptHttp01ForwardAction, { id: existing.id, config, enabled: existing.enabled });
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
await appstate.routeManagementStatePart.dispatchAction(appstate.createLetsEncryptHttp01ForwardAction, { config });
|
|
147
|
+
}
|
|
148
|
+
await modalArg.destroy();
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1mb3J3YXJkLWRpYWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9uZXR3b3JrL3NwZWNpYWwtZm9yd2FyZC1kaWFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyw0QkFBcUMsQ0FBQztBQUV2RixNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLEtBQW1DO0lBRW5DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUMxQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLEtBQW1DO0lBRW5DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqRSxNQUFNLElBQUksR0FBRyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUMxQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDYixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lB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
|
|
@@ -293,7 +293,7 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
293
293
|
name: 'Enable',
|
|
294
294
|
iconName: 'lucide:play',
|
|
295
295
|
type: ['contextmenu'],
|
|
296
|
-
actionRelevancyCheckFunc: (
|
|
296
|
+
actionRelevancyCheckFunc: (entry) => !entry.enabled,
|
|
297
297
|
actionFunc: async (actionData) => {
|
|
298
298
|
const rule = actionData.item;
|
|
299
299
|
await appstate.securityPolicyStatePart.dispatchAction(appstate.updateSecurityBlockRuleAction, {
|
|
@@ -306,7 +306,7 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
306
306
|
name: 'Disable',
|
|
307
307
|
iconName: 'lucide:pause',
|
|
308
308
|
type: ['contextmenu'],
|
|
309
|
-
actionRelevancyCheckFunc: (
|
|
309
|
+
actionRelevancyCheckFunc: (entry) => entry.enabled,
|
|
310
310
|
actionFunc: async (actionData) => {
|
|
311
311
|
const rule = actionData.item;
|
|
312
312
|
await appstate.securityPolicyStatePart.dispatchAction(appstate.updateSecurityBlockRuleAction, {
|
|
@@ -356,7 +356,7 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
356
356
|
name: 'Block Network Range',
|
|
357
357
|
iconName: 'lucide:network',
|
|
358
358
|
type: ['contextmenu'],
|
|
359
|
-
actionRelevancyCheckFunc: (
|
|
359
|
+
actionRelevancyCheckFunc: (entry) => Boolean(entry.networkRange),
|
|
360
360
|
actionFunc: async (actionData) => {
|
|
361
361
|
const record = actionData.item;
|
|
362
362
|
await this.showRuleDialog(undefined, {
|
|
@@ -370,7 +370,7 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
370
370
|
name: 'Block ASN',
|
|
371
371
|
iconName: 'lucide:radio-tower',
|
|
372
372
|
type: ['contextmenu'],
|
|
373
|
-
actionRelevancyCheckFunc: (
|
|
373
|
+
actionRelevancyCheckFunc: (entry) => Boolean(entry.asn),
|
|
374
374
|
actionFunc: async (actionData) => {
|
|
375
375
|
const record = actionData.item;
|
|
376
376
|
await this.showRuleDialog(undefined, {
|
|
@@ -384,7 +384,7 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
384
384
|
name: 'Block Organization',
|
|
385
385
|
iconName: 'lucide:building-2',
|
|
386
386
|
type: ['contextmenu'],
|
|
387
|
-
actionRelevancyCheckFunc: (
|
|
387
|
+
actionRelevancyCheckFunc: (entry) => Boolean(entry.asnOrg || entry.registrantOrg),
|
|
388
388
|
actionFunc: async (actionData) => {
|
|
389
389
|
const record = actionData.item;
|
|
390
390
|
await this.showRuleDialog(undefined, {
|
|
@@ -505,4 +505,4 @@ let OpsViewSecurityBlocked = (() => {
|
|
|
505
505
|
return OpsViewSecurityBlocked = _classThis;
|
|
506
506
|
})();
|
|
507
507
|
export { OpsViewSecurityBlocked };
|
|
508
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctc2VjdXJpdHktYmxvY2tlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9zZWN1cml0eS9vcHMtdmlldy1zZWN1cml0eS1ibG9ja2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILFVBQVUsR0FFWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCxzQkFBc0I7NEJBRGxDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDQyxXQUFXOzs7O3NDQUFuQixTQUFRLFdBQVc7Ozs7K0NBQ3BELEtBQUssRUFBRTtZQUNSLDhNQUFTLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUErRTtZQUY3Ryw2S0EwY0M7Ozs7UUF4Y0MsbUdBQThELFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUcsRUFBQztRQUEzRyxJQUFTLG1CQUFtQix5REFBK0U7UUFBM0csSUFBUyxtQkFBbUIsK0RBQStFO1FBRTNHO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHVCQUF1QjtpQkFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FB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
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctc2VjdXJpdHktYmxvY2tlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9zZWN1cml0eS9vcHMtdmlldy1zZWN1cml0eS1ibG9ja2VkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxFQUNILFVBQVUsR0FFWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCxzQkFBc0I7NEJBRGxDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQzs7OztzQkFDQyxXQUFXOzs7O3NDQUFuQixTQUFRLFdBQVc7Ozs7K0NBQ3BELEtBQUssRUFBRTtZQUNSLDhNQUFTLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUErRTtZQUY3Ryw2S0EwY0M7Ozs7UUF4Y0MsbUdBQThELFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUcsRUFBQztRQUEzRyxJQUFTLG1CQUFtQix5REFBK0U7UUFBM0csSUFBUyxtQkFBbUIsK0RBQStFO1FBRTNHO1lBQ0UsS0FBSyxFQUFFLENBQUM7O1lBQ1IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLHVCQUF1QjtpQkFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2hCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "16.
|
|
4
|
+
"version": "16.4.0",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@api.global/typedserver": "^8.5.3",
|
|
31
31
|
"@api.global/typedsocket": "^4.1.4",
|
|
32
32
|
"@apiclient.xyz/cloudflare": "^7.1.0",
|
|
33
|
-
"@design.estate/dees-catalog": "^3.96.
|
|
33
|
+
"@design.estate/dees-catalog": "^3.96.3",
|
|
34
34
|
"@design.estate/dees-element": "^2.2.4",
|
|
35
35
|
"@idp.global/sdk": "^1.4.0",
|
|
36
36
|
"@push.rocks/lik": "^6.4.1",
|
package/readme.md
CHANGED
|
@@ -277,7 +277,7 @@ SmartAcme is configured with DNS-01 priority for managed domains. If SmartAcme i
|
|
|
277
277
|
|
|
278
278
|
Operators can also create a managed **Special Forward** for an external Let's Encrypt HTTP-01 responder. The workflow accepts exact domains plus either an inline backend or a reusable Network Target. dcrouter compiles that intent into a public port `80` route matching only `/.well-known/acme-challenge/*`, assigns priority `1000`, binds the `PUBLIC` source profile, and can optionally expose the route through RemoteIngress. The high-priority path route coexists with the normal HTTP-to-HTTPS redirect for the same domain.
|
|
279
279
|
|
|
280
|
-
Use the Routes view's **Special
|
|
280
|
+
Use the Routes view's Type multitoggle and select **Special**, or use the raw TypedRequest methods `createLetsEncryptHttp01Forward`, `updateLetsEncryptHttp01Forward`, and `deleteLetsEncryptHttp01Forward`. Generic route update/delete methods intentionally reject these managed routes.
|
|
281
281
|
|
|
282
282
|
### Security Policy And IP Intelligence
|
|
283
283
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as plugins from '../plugins.js';
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
canonicalizeSourceRouteId,
|
|
4
|
+
type IHttpRedirectInfo,
|
|
5
|
+
} from '../../ts_interfaces/data/route-management.js';
|
|
3
6
|
import type { IDcRouterRouteConfig, IRouteRemoteIngress } from '../../ts_interfaces/data/remoteingress.js';
|
|
4
7
|
|
|
5
8
|
const AUTO_REDIRECT_ROUTE_PREFIX = 'dcrouter-auto-http-redirect';
|
|
@@ -93,7 +96,7 @@ function collectRedirectCandidates(routes: plugins.smartproxy.IRouteConfig[]): I
|
|
|
93
96
|
const existing = candidates.get(key);
|
|
94
97
|
if (existing) {
|
|
95
98
|
existing.sourceRouteNames.add(getRouteDisplayName(route));
|
|
96
|
-
if (route.id) existing.sourceRouteIds.add(route.id);
|
|
99
|
+
if (route.id) existing.sourceRouteIds.add(canonicalizeSourceRouteId(route.id));
|
|
97
100
|
existing.remoteIngress = mergeRemoteIngress(existing.remoteIngress, (route as IDcRouterRouteConfig).remoteIngress);
|
|
98
101
|
continue;
|
|
99
102
|
}
|
|
@@ -105,7 +108,7 @@ function collectRedirectCandidates(routes: plugins.smartproxy.IRouteConfig[]): I
|
|
|
105
108
|
domainPattern,
|
|
106
109
|
pathPattern: route.match.path,
|
|
107
110
|
sourceRouteNames: new Set([getRouteDisplayName(route)]),
|
|
108
|
-
sourceRouteIds: new Set(route.id ? [route.id] : []),
|
|
111
|
+
sourceRouteIds: new Set(route.id ? [canonicalizeSourceRouteId(route.id)] : []),
|
|
109
112
|
remoteIngress: mergeRemoteIngress(undefined, (route as IDcRouterRouteConfig).remoteIngress),
|
|
110
113
|
});
|
|
111
114
|
}
|
|
@@ -133,7 +133,7 @@ export class OpsViewApiTokens extends DeesElement {
|
|
|
133
133
|
name: 'Enable',
|
|
134
134
|
iconName: 'lucide:play',
|
|
135
135
|
type: ['inRow', 'contextmenu'] as any,
|
|
136
|
-
actionRelevancyCheckFunc: (
|
|
136
|
+
actionRelevancyCheckFunc: (token: any) => !token.enabled,
|
|
137
137
|
actionFunc: async (actionData: any) => {
|
|
138
138
|
const token = actionData.item as interfaces.data.IApiTokenInfo;
|
|
139
139
|
await appstate.routeManagementStatePart.dispatchAction(
|
|
@@ -146,7 +146,7 @@ export class OpsViewApiTokens extends DeesElement {
|
|
|
146
146
|
name: 'Disable',
|
|
147
147
|
iconName: 'lucide:pause',
|
|
148
148
|
type: ['inRow', 'contextmenu'] as any,
|
|
149
|
-
actionRelevancyCheckFunc: (
|
|
149
|
+
actionRelevancyCheckFunc: (token: any) => token.enabled,
|
|
150
150
|
actionFunc: async (actionData: any) => {
|
|
151
151
|
const token = actionData.item as interfaces.data.IApiTokenInfo;
|
|
152
152
|
await appstate.routeManagementStatePart.dispatchAction(
|
|
@@ -97,7 +97,7 @@ export class OpsViewGatewayClients extends DeesElement {
|
|
|
97
97
|
name: 'Enable',
|
|
98
98
|
iconName: 'lucide:play',
|
|
99
99
|
type: ['inRow', 'contextmenu'] as any,
|
|
100
|
-
actionRelevancyCheckFunc: (
|
|
100
|
+
actionRelevancyCheckFunc: (client: any) => !client.enabled,
|
|
101
101
|
actionFunc: async (actionData: any) => {
|
|
102
102
|
await appstate.routeManagementStatePart.dispatchAction(appstate.updateGatewayClientAction, {
|
|
103
103
|
id: actionData.item.id,
|
|
@@ -109,7 +109,7 @@ export class OpsViewGatewayClients extends DeesElement {
|
|
|
109
109
|
name: 'Disable',
|
|
110
110
|
iconName: 'lucide:pause',
|
|
111
111
|
type: ['inRow', 'contextmenu'] as any,
|
|
112
|
-
actionRelevancyCheckFunc: (
|
|
112
|
+
actionRelevancyCheckFunc: (client: any) => client.enabled,
|
|
113
113
|
actionFunc: async (actionData: any) => {
|
|
114
114
|
await appstate.routeManagementStatePart.dispatchAction(appstate.updateGatewayClientAction, {
|
|
115
115
|
id: actionData.item.id,
|
|
@@ -415,7 +415,7 @@ export class OpsViewNetworkActivity extends DeesElement {
|
|
|
415
415
|
name: 'Block Network Range',
|
|
416
416
|
iconName: 'lucide:network',
|
|
417
417
|
type: ['contextmenu'] as any,
|
|
418
|
-
actionRelevancyCheckFunc: (
|
|
418
|
+
actionRelevancyCheckFunc: (entry: any) => Boolean(this.getIpIntelligence(entry.ip)?.networkRange),
|
|
419
419
|
actionFunc: async (actionData: any) => {
|
|
420
420
|
const record = this.getIpIntelligence(actionData.item.ip);
|
|
421
421
|
await this.createBlockRuleDialog('cidr', record!.networkRange!, 'Blocked network range from Network Activity');
|
|
@@ -425,7 +425,7 @@ export class OpsViewNetworkActivity extends DeesElement {
|
|
|
425
425
|
name: 'Block ASN',
|
|
426
426
|
iconName: 'lucide:radio-tower',
|
|
427
427
|
type: ['contextmenu'] as any,
|
|
428
|
-
actionRelevancyCheckFunc: (
|
|
428
|
+
actionRelevancyCheckFunc: (entry: any) => Boolean(this.getIpIntelligence(entry.ip)?.asn),
|
|
429
429
|
actionFunc: async (actionData: any) => {
|
|
430
430
|
const record = this.getIpIntelligence(actionData.item.ip);
|
|
431
431
|
await this.createBlockRuleDialog('asn', String(record!.asn), 'Blocked ASN from Network Activity');
|
|
@@ -435,7 +435,7 @@ export class OpsViewNetworkActivity extends DeesElement {
|
|
|
435
435
|
name: 'Block Organization',
|
|
436
436
|
iconName: 'lucide:building-2',
|
|
437
437
|
type: ['contextmenu'] as any,
|
|
438
|
-
actionRelevancyCheckFunc: (
|
|
438
|
+
actionRelevancyCheckFunc: (entry: any) => Boolean(this.getIpOrganization(this.getIpIntelligence(entry.ip))),
|
|
439
439
|
actionFunc: async (actionData: any) => {
|
|
440
440
|
const record = this.getIpIntelligence(actionData.item.ip);
|
|
441
441
|
await this.createBlockRuleDialog('organization', this.getIpOrganization(record), 'Blocked organization from Network Activity');
|
|
@@ -445,7 +445,7 @@ export class OpsViewNetworkActivity extends DeesElement {
|
|
|
445
445
|
name: 'View Intelligence',
|
|
446
446
|
iconName: 'lucide:info',
|
|
447
447
|
type: ['doubleClick', 'contextmenu'] as any,
|
|
448
|
-
actionRelevancyCheckFunc: (
|
|
448
|
+
actionRelevancyCheckFunc: (entry: any) => Boolean(this.getIpIntelligence(entry.ip)),
|
|
449
449
|
actionFunc: async (actionData: any) => {
|
|
450
450
|
await this.showIpIntelligenceDetails(actionData.item.ip);
|
|
451
451
|
},
|
|
@@ -467,7 +467,7 @@ export class OpsViewNetworkActivity extends DeesElement {
|
|
|
467
467
|
name: 'Block Organization',
|
|
468
468
|
iconName: 'lucide:building-2',
|
|
469
469
|
type: ['contextmenu'] as any,
|
|
470
|
-
actionRelevancyCheckFunc: (
|
|
470
|
+
actionRelevancyCheckFunc: (entry: any) => Boolean(entry.organization),
|
|
471
471
|
actionFunc: async (actionData: any) => {
|
|
472
472
|
await this.createBlockRuleDialog('organization', actionData.item.organization, 'Blocked organization from Network Activity');
|
|
473
473
|
},
|
|
@@ -12,6 +12,10 @@ import { type IStatsTile } from '@design.estate/dees-catalog';
|
|
|
12
12
|
import * as appstate from '../../appstate.js';
|
|
13
13
|
import * as interfaces from '../../../dist_ts_interfaces/index.js';
|
|
14
14
|
import { viewHostCss } from '../shared/css.js';
|
|
15
|
+
import {
|
|
16
|
+
redirectMatchesOwner,
|
|
17
|
+
type TRouteOwnerFilter,
|
|
18
|
+
} from './route-view-filters.js';
|
|
15
19
|
|
|
16
20
|
declare global {
|
|
17
21
|
interface HTMLElementTagNameMap {
|
|
@@ -21,8 +25,10 @@ declare global {
|
|
|
21
25
|
|
|
22
26
|
@customElement('ops-view-redirects')
|
|
23
27
|
export class OpsViewRedirects extends DeesElement {
|
|
24
|
-
@property({ type: Boolean })
|
|
28
|
+
@property({ type: Boolean, reflect: true })
|
|
25
29
|
accessor embedded = false;
|
|
30
|
+
@property({ type: String })
|
|
31
|
+
accessor ownerFilter: TRouteOwnerFilter = 'all';
|
|
26
32
|
|
|
27
33
|
@state()
|
|
28
34
|
accessor routeState: appstate.IRouteManagementState = appstate.routeManagementStatePart.getState()!;
|
|
@@ -53,6 +59,12 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
53
59
|
cssManager.defaultStyles,
|
|
54
60
|
viewHostCss,
|
|
55
61
|
css`
|
|
62
|
+
:host([embedded]) {
|
|
63
|
+
margin: 0;
|
|
64
|
+
max-width: none;
|
|
65
|
+
padding: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
56
68
|
.redirectsContainer {
|
|
57
69
|
display: flex;
|
|
58
70
|
flex-direction: column;
|
|
@@ -72,7 +84,9 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
72
84
|
];
|
|
73
85
|
|
|
74
86
|
public render(): TemplateResult {
|
|
75
|
-
const redirects = this.routeState.httpRedirects || []
|
|
87
|
+
const redirects = (this.routeState.httpRedirects || []).filter((redirect) => {
|
|
88
|
+
return redirectMatchesOwner(redirect, this.routeState.mergedRoutes, this.ownerFilter);
|
|
89
|
+
});
|
|
76
90
|
const activeCount = redirects.filter((redirect) => redirect.status === 'active').length;
|
|
77
91
|
const coveredCount = redirects.filter((redirect) => redirect.status === 'covered').length;
|
|
78
92
|
const skippedCount = redirects.filter((redirect) => redirect.status === 'skipped').length;
|
|
@@ -129,7 +143,9 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
129
143
|
return html`
|
|
130
144
|
${this.embedded ? '' : html`<dees-heading level="3">Redirects</dees-heading>`}
|
|
131
145
|
<div class="redirectsContainer">
|
|
132
|
-
|
|
146
|
+
${this.embedded
|
|
147
|
+
? ''
|
|
148
|
+
: html`<dees-statsgrid .tiles=${statsTiles}></dees-statsgrid>`}
|
|
133
149
|
|
|
134
150
|
${redirects.length > 0
|
|
135
151
|
? html`
|
|
@@ -150,14 +166,7 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
150
166
|
'Covered By': redirect.coveredByRouteNames.join(', ') || '-',
|
|
151
167
|
Notes: this.formatNotes(redirect),
|
|
152
168
|
})}
|
|
153
|
-
.dataActions=${
|
|
154
|
-
{
|
|
155
|
-
name: 'Refresh',
|
|
156
|
-
iconName: 'lucide:RefreshCw',
|
|
157
|
-
type: ['header' as const],
|
|
158
|
-
actionFunc: async () => this.refreshData(),
|
|
159
|
-
},
|
|
160
|
-
]}
|
|
169
|
+
.dataActions=${this.getTableActions()}
|
|
161
170
|
></dees-table>
|
|
162
171
|
`
|
|
163
172
|
: html`
|
|
@@ -166,14 +175,7 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
166
175
|
.heading2=${'Runtime redirects derived from enabled HTTPS routes'}
|
|
167
176
|
.data=${[]}
|
|
168
177
|
.displayFunction=${() => ({})}
|
|
169
|
-
.dataActions=${
|
|
170
|
-
{
|
|
171
|
-
name: 'Refresh',
|
|
172
|
-
iconName: 'lucide:RefreshCw',
|
|
173
|
-
type: ['header' as const],
|
|
174
|
-
actionFunc: async () => this.refreshData(),
|
|
175
|
-
},
|
|
176
|
-
]}
|
|
178
|
+
.dataActions=${this.getTableActions()}
|
|
177
179
|
></dees-table>
|
|
178
180
|
<div class="empty-state">
|
|
179
181
|
<p>No derived redirects</p>
|
|
@@ -188,6 +190,19 @@ export class OpsViewRedirects extends DeesElement {
|
|
|
188
190
|
await appstate.routeManagementStatePart.dispatchAction(appstate.fetchHttpRedirectsAction, null);
|
|
189
191
|
}
|
|
190
192
|
|
|
193
|
+
private getTableActions() {
|
|
194
|
+
return this.embedded
|
|
195
|
+
? []
|
|
196
|
+
: [
|
|
197
|
+
{
|
|
198
|
+
name: 'Refresh',
|
|
199
|
+
iconName: 'lucide:refreshCw',
|
|
200
|
+
type: ['header' as const],
|
|
201
|
+
actionFunc: async () => this.refreshData(),
|
|
202
|
+
},
|
|
203
|
+
];
|
|
204
|
+
}
|
|
205
|
+
|
|
191
206
|
private formatStatus(status: interfaces.data.THttpRedirectStatus): string {
|
|
192
207
|
return status.charAt(0).toUpperCase() + status.slice(1);
|
|
193
208
|
}
|
|
@@ -344,7 +344,7 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
344
344
|
name: 'Enable',
|
|
345
345
|
iconName: 'lucide:play',
|
|
346
346
|
type: ['inRow', 'contextmenu'] as any,
|
|
347
|
-
actionRelevancyCheckFunc: (
|
|
347
|
+
actionRelevancyCheckFunc: (endpoint: any) => !endpoint.enabled,
|
|
348
348
|
actionFunc: async (actionData: any) => {
|
|
349
349
|
const edge = actionData.item as interfaces.data.IRemoteIngress;
|
|
350
350
|
await appstate.remoteIngressStatePart.dispatchAction(
|
|
@@ -357,7 +357,7 @@ export class OpsViewRemoteIngress extends DeesElement {
|
|
|
357
357
|
name: 'Disable',
|
|
358
358
|
iconName: 'lucide:pause',
|
|
359
359
|
type: ['inRow', 'contextmenu'] as any,
|
|
360
|
-
actionRelevancyCheckFunc: (
|
|
360
|
+
actionRelevancyCheckFunc: (endpoint: any) => endpoint.enabled,
|
|
361
361
|
actionFunc: async (actionData: any) => {
|
|
362
362
|
const edge = actionData.item as interfaces.data.IRemoteIngress;
|
|
363
363
|
await appstate.remoteIngressStatePart.dispatchAction(
|