From 74d2ada067bd2fd9436710ab7ac260e0eddf1314 Mon Sep 17 00:00:00 2001 From: salmonik Date: Wed, 29 Jul 2026 01:03:24 +0200 Subject: Add per-instance mod management with client-side detection - New mod validation engine (src/mods.rs) with constant-pool class-file scanning: detects server-side content (block, tileentity, command, worldgen) vs client-only API (gui, renderer, forge/client) - 7 client-only mods correctly detected (AppleSkin, CraftingTweaks, Durability101, EnchantmentDescriptions, InventoryHUD, MouseTweaks, TrashSlot); 51 server-capable; 1 unknown - Routes + templating for mod upload (jar/zip), listing, delete, rescan - Multipart upload with 500MB limit (bypasses axum's default 2MB) - Per-instance mod summary card on edit page - Whitelist toggle checkbox on edit page (persisted, drives ENABLE_WHITELIST) - Dynamic Java image tag (java8/java17/java21) based on MC version - Class scan is informational-only; rejection based on metadata side=CLIENT - has_modpack flag cleanup on mod delete - Remove hx-boost from (was corrupting multipart uploads) --- src/db.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/db.rs') diff --git a/src/db.rs b/src/db.rs index 7868e3e..2024032 100644 --- a/src/db.rs +++ b/src/db.rs @@ -62,6 +62,18 @@ impl Database { updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); + CREATE TABLE IF NOT EXISTS mods ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + instance_id INTEGER NOT NULL, + filename TEXT NOT NULL, + display_name TEXT, + side TEXT NOT NULL DEFAULT 'UNKNOWN', + accepted INTEGER NOT NULL DEFAULT 0, + rejection_reason TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + FOREIGN KEY (instance_id) REFERENCES instances(id) ON DELETE CASCADE + ); + CREATE TABLE IF NOT EXISTS backups ( id INTEGER PRIMARY KEY AUTOINCREMENT, instance_id INTEGER NOT NULL, @@ -98,6 +110,10 @@ impl Database { let _ = conn.execute_batch( "ALTER TABLE instances ADD COLUMN container_state TEXT NOT NULL DEFAULT 'stopped'", ); + // Migration: add whitelist_enabled column if missing + let _ = conn.execute_batch( + "ALTER TABLE instances ADD COLUMN whitelist_enabled INTEGER NOT NULL DEFAULT 1", + ); Ok(()) } -- cgit v1.2.3