mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-07-06 14:35:26 +02:00
feat(traefik): add support for internationalized domain names (IDN)
- Implemented a function to convert IDNs to ASCII punycode format, ensuring compatibility with Traefik requirements. - Added tests to verify the conversion of IDNs and the handling of ASCII domains in router configurations.
This commit is contained in:
@@ -104,6 +104,20 @@ export const removeDomain = async (
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts an internationalized domain name (IDN) to ASCII punycode format.
|
||||
* Traefik requires domain names in ASCII format, so non-ASCII characters
|
||||
* must be converted (e.g., "тест.рф" → "xn--e1aybc.xn--p1ai").
|
||||
*/
|
||||
const toPunycode = (host: string): string => {
|
||||
try {
|
||||
return new URL(`http://${host}`).hostname;
|
||||
} catch {
|
||||
// If URL parsing fails, return the original host
|
||||
return host;
|
||||
}
|
||||
};
|
||||
|
||||
export const createRouterConfig = async (
|
||||
app: ApplicationNested,
|
||||
domain: Domain,
|
||||
@@ -114,8 +128,9 @@ export const createRouterConfig = async (
|
||||
|
||||
const { host, path, https, uniqueConfigKey, internalPath, stripPath } =
|
||||
domain;
|
||||
const punycodeHost = toPunycode(host);
|
||||
const routerConfig: HttpRouter = {
|
||||
rule: `Host(\`${host}\`)${path !== null && path !== "/" ? ` && PathPrefix(\`${path}\`)` : ""}`,
|
||||
rule: `Host(\`${punycodeHost}\`)${path !== null && path !== "/" ? ` && PathPrefix(\`${path}\`)` : ""}`,
|
||||
service: `${appName}-service-${uniqueConfigKey}`,
|
||||
middlewares: [],
|
||||
entryPoints: [entryPoint],
|
||||
|
||||
Reference in New Issue
Block a user