Fix certificate regeneration, svg files encrypting, and file manager being able to be dragged off screen.

This commit is contained in:
LukeGus
2025-09-26 19:54:39 -05:00
parent 54e7ac8bfd
commit 5afe225470
5 changed files with 78 additions and 47 deletions

View File

@@ -14,10 +14,11 @@ import { systemLogger } from "./logger.js";
* - Users can enable SSL by setting ENABLE_SSL=true
*/
export class AutoSSLSetup {
private static readonly SSL_DIR = path.join(process.cwd(), "ssl");
private static readonly DATA_DIR = process.env.DATA_DIR || "./db/data";
private static readonly SSL_DIR = path.join(AutoSSLSetup.DATA_DIR, "ssl");
private static readonly CERT_FILE = path.join(AutoSSLSetup.SSL_DIR, "termix.crt");
private static readonly KEY_FILE = path.join(AutoSSLSetup.SSL_DIR, "termix.key");
private static readonly ENV_FILE = path.join(process.cwd(), ".env");
private static readonly ENV_FILE = path.join(AutoSSLSetup.DATA_DIR, ".env");
/**
* Initialize SSL setup automatically during system startup
@@ -218,10 +219,9 @@ IP.2 = ::1
operation: "ssl_env_setup"
});
// Use container paths in production, local paths in development
const isProduction = process.env.NODE_ENV === "production";
const certPath = isProduction ? "/app/ssl/termix.crt" : this.CERT_FILE;
const keyPath = isProduction ? "/app/ssl/termix.key" : this.KEY_FILE;
// Use data directory paths for both production and development
const certPath = this.CERT_FILE;
const keyPath = this.KEY_FILE;
const sslEnvVars = {
ENABLE_SSL: "false", // Disable SSL by default to avoid setup issues

View File

@@ -495,19 +495,14 @@ function FileManagerContent({ initialHost, onClose }: FileManagerProps) {
async function handleUploadFile(file: File) {
if (!sshSessionId) return;
// Show progress for large files (>10MB)
const isLargeFile = file.size > 10 * 1024 * 1024;
let progressToast: any = null;
if (isLargeFile) {
progressToast = toast.loading(
t("fileManager.uploadingLargeFile", {
name: file.name,
size: formatFileSize(file.size)
}),
{ duration: Infinity }
);
}
// Show progress for all file uploads
const progressToast = toast.loading(
t("fileManager.uploadingFile", {
name: file.name,
size: formatFileSize(file.size)
}),
{ duration: Infinity }
);
try {
// Ensure SSH connection is valid
@@ -565,20 +560,16 @@ function FileManagerContent({ initialHost, onClose }: FileManagerProps) {
undefined, // userId - will be handled by backend
);
// Dismiss progress toast if it exists
if (progressToast) {
toast.dismiss(progressToast);
}
// Dismiss progress toast
toast.dismiss(progressToast);
toast.success(
t("fileManager.fileUploadedSuccessfully", { name: file.name }),
);
handleRefreshDirectory();
} catch (error: any) {
// Dismiss progress toast if it exists
if (progressToast) {
toast.dismiss(progressToast);
}
// Dismiss progress toast
toast.dismiss(progressToast);
if (
error.message?.includes("connection") ||

View File

@@ -116,15 +116,53 @@ export function DraggableWindow({
const deltaX = e.clientX - dragStart.x;
const deltaY = e.clientY - dragStart.y;
const newX = windowStart.x + deltaX;
const newY = windowStart.y + deltaY;
// Find the positioning container by checking parent hierarchy
const windowElement = windowRef.current;
let positioningContainer = null;
let currentElement = windowElement?.parentElement;
while (currentElement && currentElement !== document.body) {
const computedStyle = window.getComputedStyle(currentElement);
const position = computedStyle.position;
const transform = computedStyle.transform;
if (position === 'relative' || position === 'absolute' || position === 'fixed' || transform !== 'none') {
positioningContainer = currentElement;
break;
}
currentElement = currentElement.parentElement;
}
// Calculate boundaries based on the actual positioning context
let maxX, maxY, minX, minY;
if (positioningContainer) {
const containerRect = positioningContainer.getBoundingClientRect();
// Window is positioned relative to a positioning container
maxX = containerRect.width - size.width;
maxY = containerRect.height - size.height;
minX = 0;
minY = 0;
} else {
// Window is positioned relative to viewport
maxX = window.innerWidth - size.width;
maxY = window.innerHeight - size.height;
minX = 0;
minY = 0;
}
// Ensure window stays within boundaries
const constrainedX = Math.max(minX, Math.min(maxX, newX));
const constrainedY = Math.max(minY, Math.min(maxY, newY));
setPosition({
x: Math.max(
0,
Math.min(window.innerWidth - size.width, windowStart.x + deltaX),
),
y: Math.max(
0,
Math.min(window.innerHeight - 40, windowStart.y + deltaY),
), // Keep title bar visible
x: constrainedX,
y: constrainedY,
});
}