<feed xmlns='http://www.w3.org/2005/Atom'>
<title>minecraft-ui, branch master</title>
<subtitle>Everyone-is-equal self-hosted UI for minecraft server hosting.
</subtitle>
<id>https://git.2137697.xyz/minecraft-ui/atom?h=master</id>
<link rel='self' href='https://git.2137697.xyz/minecraft-ui/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/'/>
<updated>2026-08-04T12:05:15Z</updated>
<entry>
<title>small changes</title>
<updated>2026-08-04T12:05:15Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-08-04T12:05:15Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=ea1bc7db954030ad5e4b40391e8e0d655b9d7e9a'/>
<id>urn:sha1:ea1bc7db954030ad5e4b40391e8e0d655b9d7e9a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Config editor, host networking, whitelist RCON</title>
<updated>2026-07-29T10:21:32Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-29T10:21:32Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=bc0d3d2f324ee613424ee31103207222b4b19640'/>
<id>urn:sha1:bc0d3d2f324ee613424ee31103207222b4b19640</id>
<content type='text'>
- Config file editor at /instances/{id}/config (browse &amp; edit config/ files)
- Host networking for Docker container (fixes WireGuard MTU DNS issues)
- Whitelist changes applied live via RCON instead of stopping the server
- Config edit handler detects which fields changed: whitelist → RCON,
  other settings → restart container
- walk_dir simplified (removed unused root param)
- import_world uses if-let instead of never-looping while-let
- docker-compose.yml updated as reference template
</content>
</entry>
<entry>
<title>Enable/disable mods, batch toggle &amp; delete</title>
<updated>2026-07-29T09:19:12Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-29T09:19:12Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=1102f17a93111dca640d790cf9963a9ec9312096'/>
<id>urn:sha1:1102f17a93111dca640d790cf9963a9ec9312096</id>
<content type='text'>
- Add  column to mods table (auto-migrated)
- Toggle endpoint: rename .jar ↔ .jar.disabled on disk, flip DB flag
- Batch toggle &amp; delete with checkboxes + JS helper (fixes nested-form bug)
- Raw Vec&lt;(String,String)&gt; form deserialization fixes 'duplicate field' error
- Batch action bars at top and bottom of mod list
- Uploads default to enabled=1, rescan skips .jar.disabled files
</content>
</entry>
<entry>
<title>Mod picker: allow selecting multiple .jar files for upload</title>
<updated>2026-07-29T00:26:49Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-29T00:26:49Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=298d0d0805349e1e914953461c4beb8fead5adb1'/>
<id>urn:sha1:298d0d0805349e1e914953461c4beb8fead5adb1</id>
<content type='text'>
Add 'multiple' attribute to the file input so users can pick several
.jar files at once from their filesystem without needing to zip them.
The backend already processes each multipart field independently.
</content>
</entry>
<entry>
<title>Security audit fixes: patch 16 vulnerabilities across 7 source files</title>
<updated>2026-07-29T00:24:41Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-29T00:24:41Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=c654a6d17eb58adbb15b9c47ab32bcc3a1666307'/>
<id>urn:sha1:c654a6d17eb58adbb15b9c47ab32bcc3a1666307</id>
<content type='text'>
CRITICAL:
- Instance name path traversal (AP-001): sanitize::sanitize_instance_name()
  strips .., /, \, \0, spaces, special chars at all 12 join call sites
- Zip-slip protection in world import: starts_with() guard after enclosed_name()

HIGH:
- RCON command injection: validate_username() rejects non-MC usernames
  across all 6 player action macros (whitelist, op, ban)
- Level-seed properties injection: sanitize_seed() strips \n \r = : \0
- CSRF protection: SameSite=Lax -&gt; SameSite=Strict on session cookie

MEDIUM:
- Session TTL: server-side 24h expiry via strftime check in require_auth
- Rate limiting: in-memory 10-ip/5min sliding window on login
- Background task stale is_active: all queries use concrete WHERE id=?1
- Mod validation DoS: 500MB cap, 10k class scan limit, 10k CP entry cap

LOW:
- Logout auth guard: moved into protected route group + CurrentUser param
- Mod orphan race: DB insert before file write
- Backup orphan race: DB insert before ZIP creation
- Template fix: broken Askama == comparisons in edit.html

All fixes compile clean with zero warnings. 10 unit tests pass.
</content>
</entry>
<entry>
<title>Add per-instance mod management with client-side detection</title>
<updated>2026-07-28T23:03:24Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-28T23:03:24Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=74d2ada067bd2fd9436710ab7ac260e0eddf1314'/>
<id>urn:sha1:74d2ada067bd2fd9436710ab7ac260e0eddf1314</id>
<content type='text'>
- 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 &lt;body&gt; (was corrupting multipart uploads)
</content>
</entry>
<entry>
<title>create example config on startup</title>
<updated>2026-07-12T20:09:01Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-12T20:09:01Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=97920e457fdc210049f8d617c053cd40ccaf5cd3'/>
<id>urn:sha1:97920e457fdc210049f8d617c053cd40ccaf5cd3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>remove unused code, also, third stable</title>
<updated>2026-07-12T20:06:54Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-12T20:06:54Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=ce30a8732c21a1c936ac560b5c94576df2e26b22'/>
<id>urn:sha1:ce30a8732c21a1c936ac560b5c94576df2e26b22</id>
<content type='text'>
</content>
</entry>
<entry>
<title>second stable</title>
<updated>2026-07-12T19:35:25Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-12T19:35:25Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=9ad52d0151086252e6d8a3e60dc5b8cd4bfd5465'/>
<id>urn:sha1:9ad52d0151086252e6d8a3e60dc5b8cd4bfd5465</id>
<content type='text'>
</content>
</entry>
<entry>
<title>first stable</title>
<updated>2026-07-12T17:38:03Z</updated>
<author>
<name>salmonik</name>
<email>salmonik@tuta.io</email>
</author>
<published>2026-07-12T17:38:03Z</published>
<link rel='alternate' type='text/html' href='https://git.2137697.xyz/minecraft-ui/commit/?id=ae7ef10b67737f08a86743f687bca30a12e9e17a'/>
<id>urn:sha1:ae7ef10b67737f08a86743f687bca30a12e9e17a</id>
<content type='text'>
</content>
</entry>
</feed>
