fix: add parser Public Suffix List for naming domain file config and fix failed to remove old legacy file config
This commit is contained in:
1 parent
af92445c6c
commit
17cbc2fb98
5 files changed
+148
-1
No files matched your search
@@ -1,3 +1,5 @@
|
||||
import { getDomain } from "tldts";
|
||||
|
||||
export function sanitizeDomainFileName(domainName: string): string {
|
||||
return domainName.toLowerCase().replace(/[^a-z0-9.-]/g, "-");
|
||||
}
|
||||
@@ -18,7 +20,27 @@ function normalizeAnchorDomain(domainName: string): string {
|
||||
return domainName.trim().toLowerCase().replace(/^\*\./, "");
|
||||
}
|
||||
|
||||
export function getDomainConfigAnchor(domainNames: string[]): string {
|
||||
function resolveRegistrableDomain(domainName: string): string {
|
||||
const parsed = getDomain(domainName, {
|
||||
allowIcannDomains: true,
|
||||
allowPrivateDomains: true,
|
||||
});
|
||||
|
||||
if (parsed) {
|
||||
return parsed;
|
||||
}
|
||||
|
||||
const labels = domainName.split(".").filter(Boolean);
|
||||
if (labels.length >= 2) {
|
||||
return labels.slice(-2).join(".");
|
||||
}
|
||||
|
||||
return domainName;
|
||||
}
|
||||
|
||||
export function getLegacyTwoLabelDomainConfigAnchor(
|
||||
domainNames: string[],
|
||||
): string {
|
||||
const normalized = Array.from(
|
||||
new Set(domainNames.map(normalizeAnchorDomain).filter(Boolean)),
|
||||
);
|
||||
@@ -48,6 +70,30 @@ export function getDomainConfigAnchor(domainNames: string[]): string {
|
||||
return candidate;
|
||||
}
|
||||
|
||||
export function getDomainConfigAnchor(domainNames: string[]): string {
|
||||
const normalized = Array.from(
|
||||
new Set(domainNames.map(normalizeAnchorDomain).filter(Boolean)),
|
||||
);
|
||||
|
||||
if (normalized.length === 0) {
|
||||
return "shared-domain";
|
||||
}
|
||||
|
||||
normalized.sort((left, right) => {
|
||||
const leftLabels = left.split(".").length;
|
||||
const rightLabels = right.split(".").length;
|
||||
|
||||
if (leftLabels !== rightLabels) {
|
||||
return leftLabels - rightLabels;
|
||||
}
|
||||
|
||||
return left.localeCompare(right);
|
||||
});
|
||||
|
||||
const candidate = normalized[0] ?? "shared-domain";
|
||||
return resolveRegistrableDomain(candidate);
|
||||
}
|
||||
|
||||
export function buildManagedNginxSharedFileBase(
|
||||
containerName: string,
|
||||
domainNames: string[],
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
buildManagedNginxFileBase,
|
||||
buildManagedNginxSharedFileBase,
|
||||
getDomainConfigAnchor,
|
||||
getLegacyTwoLabelDomainConfigAnchor,
|
||||
sanitizeDomainFileName,
|
||||
sanitizeContainerFileName,
|
||||
} from "./names";
|
||||
@@ -385,6 +386,14 @@ export async function provisionNginxConfig(
|
||||
configMode === "SHARED"
|
||||
? `${sanitizeContainerFileName(containerName)}--${sanitizeDomainFileName(getDomainConfigAnchor(domainNames))}`
|
||||
: null;
|
||||
const legacyBuggyAnchorSafeName =
|
||||
configMode === "SHARED"
|
||||
? sanitizeDomainFileName(getLegacyTwoLabelDomainConfigAnchor(domainNames))
|
||||
: null;
|
||||
const legacyBuggySharedSafeName =
|
||||
configMode === "SHARED"
|
||||
? `${sanitizeContainerFileName(containerName)}--${sanitizeDomainFileName(getLegacyTwoLabelDomainConfigAnchor(domainNames))}`
|
||||
: null;
|
||||
const legacyServiceSharedSafeName =
|
||||
configMode === "SHARED"
|
||||
? `doktainer-${sanitizeContainerFileName(containerName)}`
|
||||
@@ -425,6 +434,20 @@ export async function provisionNginxConfig(
|
||||
`rm -f ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-enabled/${legacySharedSafeName}.conf`)} ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-available/${legacySharedSafeName}.conf`)}`,
|
||||
);
|
||||
}
|
||||
if (legacyBuggyAnchorSafeName && legacyBuggyAnchorSafeName !== safeName) {
|
||||
cleanupCommands.push(
|
||||
`rm -f ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-enabled/${legacyBuggyAnchorSafeName}.conf`)} ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-available/${legacyBuggyAnchorSafeName}.conf`)}`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
legacyBuggySharedSafeName &&
|
||||
legacyBuggySharedSafeName !== safeName &&
|
||||
legacyBuggySharedSafeName !== legacySharedSafeName
|
||||
) {
|
||||
cleanupCommands.push(
|
||||
`rm -f ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-enabled/${legacyBuggySharedSafeName}.conf`)} ${escapeDoubleQuotedShellArg(`/etc/nginx/sites-available/${legacyBuggySharedSafeName}.conf`)}`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
legacyServiceSharedSafeName &&
|
||||
legacyServiceSharedSafeName !== safeName
|
||||
@@ -498,6 +521,14 @@ export async function removeManagedNginxProxyConfig(options: {
|
||||
options.containerName && configMode === "SHARED"
|
||||
? `${sanitizeContainerFileName(options.containerName)}--${sanitizeDomainFileName(getDomainConfigAnchor(domainNames))}`
|
||||
: null;
|
||||
const legacyBuggyAnchorSafeName =
|
||||
configMode === "SHARED"
|
||||
? sanitizeDomainFileName(getLegacyTwoLabelDomainConfigAnchor(domainNames))
|
||||
: null;
|
||||
const legacyBuggySharedSafeName =
|
||||
options.containerName && configMode === "SHARED"
|
||||
? `${sanitizeContainerFileName(options.containerName)}--${sanitizeDomainFileName(getLegacyTwoLabelDomainConfigAnchor(domainNames))}`
|
||||
: null;
|
||||
const legacyServiceSharedSafeName =
|
||||
options.containerName && configMode === "SHARED"
|
||||
? `doktainer-${sanitizeContainerFileName(options.containerName)}`
|
||||
@@ -520,6 +551,30 @@ export async function removeManagedNginxProxyConfig(options: {
|
||||
`/etc/nginx/sites-available/${legacySharedSafeName}.conf`,
|
||||
);
|
||||
}
|
||||
if (legacyBuggyAnchorSafeName && legacyBuggyAnchorSafeName !== managedSafeName) {
|
||||
await removePrivilegedFile(
|
||||
options.server,
|
||||
`/etc/nginx/sites-enabled/${legacyBuggyAnchorSafeName}.conf`,
|
||||
);
|
||||
await removePrivilegedFile(
|
||||
options.server,
|
||||
`/etc/nginx/sites-available/${legacyBuggyAnchorSafeName}.conf`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
legacyBuggySharedSafeName &&
|
||||
legacyBuggySharedSafeName !== managedSafeName &&
|
||||
legacyBuggySharedSafeName !== legacySharedSafeName
|
||||
) {
|
||||
await removePrivilegedFile(
|
||||
options.server,
|
||||
`/etc/nginx/sites-enabled/${legacyBuggySharedSafeName}.conf`,
|
||||
);
|
||||
await removePrivilegedFile(
|
||||
options.server,
|
||||
`/etc/nginx/sites-available/${legacyBuggySharedSafeName}.conf`,
|
||||
);
|
||||
}
|
||||
if (
|
||||
legacyServiceSharedSafeName &&
|
||||
legacyServiceSharedSafeName !== managedSafeName
|
||||
|
||||
Reference in new issue
Block a user