Files
dbx/apps/desktop/src/lib/database/damengSslOptions.ts
T

76 lines
2.4 KiB
TypeScript

export interface DamengSslFormConfig {
enabled: boolean;
sslFilesPath: string;
sslKeystorePassword: string;
sslProtocol: string;
}
interface DamengUrlParam {
key: string;
value: string;
raw: string;
}
const SSL_FILES_PATH_KEY = "sslfilespath";
const SSL_KEYSTORE_PASSWORD_KEY = "sslkeystorepass";
const SSL_PROTOCOL_KEY = "sslprotocol";
export function damengSslFormConfig(urlParams?: string): DamengSslFormConfig {
const params = parseDamengUrlParams(urlParams);
const sslFilesPath = getDamengUrlParam(params, SSL_FILES_PATH_KEY);
const sslKeystorePassword = getDamengUrlParam(params, SSL_KEYSTORE_PASSWORD_KEY);
const sslProtocol = getDamengUrlParam(params, SSL_PROTOCOL_KEY);
return {
enabled: params.some((param) => isManagedDamengSslParam(param.key)),
sslFilesPath,
sslKeystorePassword,
sslProtocol,
};
}
export function applyDamengSslUrlParams(urlParams: string | undefined, enabled: boolean, sslFilesPath: string, sslKeystorePassword: string, sslProtocol: string): string {
const parts = parseDamengUrlParams(urlParams)
.filter((param) => !isManagedDamengSslParam(param.key))
.map((param) => param.raw);
if (enabled) {
const normalizedFilesPath = sslFilesPath.trim();
const normalizedProtocol = sslProtocol.trim();
if (normalizedFilesPath) parts.push(`sslFilesPath=${normalizedFilesPath}`);
if (sslKeystorePassword) parts.push(`sslkeystorePass=${sslKeystorePassword}`);
if (normalizedProtocol) parts.push(`sslProtocol=${normalizedProtocol}`);
}
return parts.join("&");
}
function parseDamengUrlParams(urlParams?: string): DamengUrlParam[] {
return (urlParams || "")
.trim()
.replace(/^[?&;]+/, "")
.replace(/[?&;]+$/, "")
.split(/[&;]/)
.map((part) => part.trim())
.filter(Boolean)
.map((raw) => {
const equals = raw.indexOf("=");
if (equals < 0) return { key: raw, value: "", raw };
return {
key: raw.slice(0, equals).trim(),
value: raw.slice(equals + 1).trim(),
raw,
};
})
.filter((param) => !!param.key);
}
function getDamengUrlParam(params: DamengUrlParam[], key: string): string {
return params.find((param) => param.key.toLowerCase() === key)?.value || "";
}
function isManagedDamengSslParam(key: string): boolean {
const normalizedKey = key.trim().toLowerCase();
return normalizedKey === SSL_FILES_PATH_KEY || normalizedKey === SSL_KEYSTORE_PASSWORD_KEY || normalizedKey === SSL_PROTOCOL_KEY;
}