Files
DoGaMa-serv/cmd/dogama-init/main.go
T
tony 46bc90a0e8
CI / validate (pull_request) Failing after 2m30s
feat(release): harden production packaging
2026-08-09 22:11:21 +02:00

53 lines
1.3 KiB
Go

// Command dogama-init initializes persistent secrets for the standard Compose deployment.
package main
import (
"fmt"
"os"
"strconv"
"git.zaynet.fr/DoGaMa/DoGaMa-serv/internal/internalsecrets"
)
func main() {
uid, gid := integer("DOGAMA_APP_UID", 65532), integer("DOGAMA_APP_GID", 65532)
items := []struct {
path string
uid, gid int
mode os.FileMode
}{
{"/var/lib/dogama-agent/secrets/token", 0, gid, 0o640},
{"/var/lib/dogama/secrets/master_key", uid, gid, 0o600},
}
for _, item := range items {
if _, err := internalsecrets.Ensure(item.path, item.uid, item.gid, item.mode); err != nil {
fmt.Fprintf(os.Stderr, "internal secret initialization failed: %v\n", err)
os.Exit(1)
}
}
for _, path := range []string{"/var/lib/dogama", "/srv/game-servers", "/srv/game-backups"} {
if err := prepareDirectory(path, uid, gid); err != nil {
fmt.Fprintf(os.Stderr, "persistent directory initialization failed: %v\n", err)
os.Exit(1)
}
}
}
func prepareDirectory(path string, uid, gid int) error {
if err := os.MkdirAll(path, 0o750); err != nil {
return err
}
if err := os.Chmod(path, 0o750); err != nil {
return err
}
return os.Chown(path, uid, gid)
}
func integer(name string, fallback int) int {
value, err := strconv.Atoi(os.Getenv(name))
if err != nil || value < 0 {
return fallback
}
return value
}