Files
MyGoNavi/frontend/src/utils/nacosConnectionScope.ts
Syngnat 12e410aead 🐛 fix(nacos-connection): 支持受限命名空间与权限保护
- 在连接表单中独立维护 Namespace ID 与 contextPath
- 为无命名空间列表权限的账号回退到已配置作用域
- 细分数据编辑、结构管理与导入保护并阻止陈旧操作
- 补齐侧边栏请求代际和连接 URI 回归测试
2026-07-28 23:51:36 +08:00

74 lines
2.0 KiB
TypeScript

export const NACOS_NAMESPACE_ID_PARAM = "namespaceId";
export type NacosConnectionScope = {
configured: boolean;
namespaceId: string;
requestNamespaceId: string;
};
const normalizeNacosConnectionParamsText = (raw: unknown): string => {
let text = String(raw ?? "").trim();
const queryIndex = text.indexOf("?");
if (queryIndex >= 0) {
text = text.slice(queryIndex + 1);
}
const hashIndex = text.indexOf("#");
if (hashIndex >= 0) {
text = text.slice(0, hashIndex);
}
return text
.replace(/^[?&]+/, "")
.replace(/[;\r\n]+/g, "&")
.trim();
};
const parseNacosConnectionParams = (raw: unknown): URLSearchParams =>
new URLSearchParams(normalizeNacosConnectionParamsText(raw));
export const resolveNacosConnectionScope = (
connectionParams: unknown,
): NacosConnectionScope => {
const params = parseNacosConnectionParams(connectionParams);
const namespaceId = String(
params.get(NACOS_NAMESPACE_ID_PARAM) ?? "",
).trim();
const configured = namespaceId !== "";
return {
configured,
namespaceId,
requestNamespaceId:
configured && namespaceId.toLowerCase() !== "public"
? namespaceId
: "",
};
};
export const setNacosConnectionScope = (
connectionParams: unknown,
namespaceId: unknown,
): string => {
const params = parseNacosConnectionParams(connectionParams);
const normalizedNamespaceId = String(namespaceId ?? "").trim();
if (normalizedNamespaceId) {
params.set(NACOS_NAMESPACE_ID_PARAM, normalizedNamespaceId);
} else {
params.delete(NACOS_NAMESPACE_ID_PARAM);
}
return params.toString();
};
export const extractNacosConnectionScope = (
connectionParams: unknown,
): {
connectionParams: string;
scope: NacosConnectionScope;
} => {
const params = parseNacosConnectionParams(connectionParams);
const scope = resolveNacosConnectionScope(params.toString());
params.delete(NACOS_NAMESPACE_ID_PARAM);
return {
connectionParams: params.toString(),
scope,
};
};