feat: add config, auth, fetcher, java modules

- config: OS-specific paths, launcher.json load/save, DefaultSettings with MRIXSCRAFT_SERVER_URL env override
- auth: Yggdrasil client (authenticate, refresh, validate), session persistence in session.json, EnsureValid flow
- fetcher: HTTP download with SHA-1 verification, WorkerPool for concurrent downloads
- java: JRE detection (IsInstalled/Find), platform-specific executable name
- utils: SHA1File, SHA1Bytes, Unzip with zip-slip protection
- cmd/launcher: wire config + auth into main, session restore on startup

Co-Authored-By: OWL <noreply@anthropic.com>
This commit is contained in:
2026-05-26 06:35:09 +03:00
parent 320f009658
commit 070b5c0262
7 changed files with 750 additions and 9 deletions

View File

@@ -2,21 +2,53 @@ package main
import (
"fmt"
"log"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
"gitea.mrixs.me/Mrixs/MrixsCraft-launcher/internal/auth"
"gitea.mrixs.me/Mrixs/MrixsCraft-launcher/internal/config"
)
func main() {
fmt.Println("MrixsCraft Launcher starting...")
// version is set via -ldflags at build time.
var version = "dev"
func main() {
log.Printf("MrixsCraft Launcher %s", version)
root, err := config.EnsureRoot()
if err != nil {
log.Fatalf("Failed to initialise data directory: %v", err)
}
log.Printf("Data directory: %s", root)
// Try to restore an existing session.
client, err := auth.NewFromConfig()
if err != nil {
log.Fatalf("Failed to create auth client: %v", err)
}
sess, err := client.EnsureValid()
if err != nil {
log.Printf("Session check failed: %v", err)
}
if sess != nil {
log.Printf("Logged in as %s", sess.Username)
} else {
log.Println("No valid session — login required")
}
// Bootstrap Fyne UI.
a := app.New()
w := a.NewWindow("MrixsCraft Launcher")
w.Resize(fyne.NewSize(800, 600))
w := a.NewWindow(fmt.Sprintf("MrixsCraft %s", version))
w.Resize(fyne.NewSize(900, 600))
w.CenterOnScreen()
w.SetContent(container.NewVBox(
widget.NewLabel("MrixsCraft Launcher"),
widget.NewLabel(fmt.Sprintf("MrixsCraft Launcher %s", version)),
))
w.ShowAndRun()