mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-06-15 20:25:23 +02:00
- Updated the WebSocket server to encode the log path in base64 before executing the tail command on the remote server. - Added validation to ensure the directory name adheres to a specified regex pattern, improving input integrity for directory paths.
57 lines
1.1 KiB
TypeScript
57 lines
1.1 KiB
TypeScript
import os from "node:os";
|
|
import path from "node:path";
|
|
import { paths } from "@dokploy/server/constants";
|
|
import { publicIpv4, publicIpv6 } from "public-ip";
|
|
|
|
export const getShell = () => {
|
|
switch (os.platform()) {
|
|
case "win32":
|
|
return "powershell.exe";
|
|
case "darwin":
|
|
return "zsh";
|
|
default:
|
|
return "bash";
|
|
}
|
|
};
|
|
|
|
export const getPublicIpWithFallback = async () => {
|
|
// @ts-ignore
|
|
let ip = null;
|
|
try {
|
|
ip = await publicIpv4();
|
|
} catch (error) {
|
|
console.log(
|
|
"Error obtaining public IPv4 address, falling back to IPv6",
|
|
// @ts-ignore
|
|
error.message,
|
|
);
|
|
try {
|
|
ip = await publicIpv6();
|
|
} catch (error) {
|
|
// @ts-ignore
|
|
console.error("Error obtaining public IPv6 address", error.message);
|
|
ip = null;
|
|
}
|
|
}
|
|
return ip;
|
|
};
|
|
|
|
export const readValidDirectory = (
|
|
directory: string,
|
|
serverId?: string | null,
|
|
) => {
|
|
if (!/^[\w/. -]{1,500}$/.test(directory)) {
|
|
return false;
|
|
}
|
|
|
|
const { BASE_PATH } = paths(!!serverId);
|
|
|
|
const resolvedBase = path.resolve(BASE_PATH);
|
|
const resolvedDir = path.resolve(directory);
|
|
|
|
return (
|
|
resolvedDir === resolvedBase ||
|
|
resolvedDir.startsWith(resolvedBase + path.sep)
|
|
);
|
|
};
|