# ISOSilo A Vibe coded Go web server that lets you browse and download files from ISO 9660 images via your browser, without mounting them. ## Features - **Library view** - lists all `.iso` files in a directory as clickable cards - **In-ISO browsing** - navigate directories inside any ISO just like a file manager - **File downloads** - download individual files directly from within an ISO - **Clean UI** - dark-themed, responsive interface with file-type icons - **Safe** - path traversal protection; only `.iso` files in the served directory are accessible - **Zero mount required** - reads ISO images directly using the ISO 9660 library ## Installation ### Prerequisites - Go 1.22 or later ### Build from source ```bash git clone https://code.oscorp.dk/visionmercer/isosilo.git cd isosilo go mod tidy # fetches github.com/kdomanski/iso9660 go build -o isosilo . ``` ## Usage ``` isosilo [flags] Flags: -dir string Directory containing ISO files to serve (default: current directory) -addr string Address to listen on (default: :8080) ``` ### Examples ```bash # Serve ISOs from the current directory on port 8080 ./isosilo # Serve a specific directory on a custom port ./isosilo -dir /mnt/isos -addr :9000 # Serve on all interfaces (default) or localhost only ./isosilo -addr 127.0.0.1:8080 ``` Then open http://localhost:8080 in your browser. ## URL Structure | URL | Description | | -------------------------- | ------------------------------------------ | | `GET /` | List all ISO files in the served directory | | `GET /browse/{iso}` | Browse the root of an ISO | | `GET /browse/{iso}/{path}` | Browse a subdirectory inside an ISO | | `GET /file/{iso}/{path}` | Download a file from inside an ISO | ## Dependencies - [`github.com/kdomanski/iso9660`](https://github.com/kdomanski/iso9660) — pure-Go ISO 9660 reader ## Project Layout ``` isosilo/ ├── main.go # Entry point, CLI flags, route registration ├── go.mod ├── go.sum └── internal/ ├── iso/ │ └── reader.go # ISO open/list/read abstraction └── handlers/ └── handlers.go # HTTP handlers + HTML templates ``` ## Security Notes - The server only serves files with a `.iso` extension from the configured directory. - ISO names are validated to prevent path traversal (`..`, `/`, `\`). - Internal ISO paths are cleaned before use.