fix: persist docker sqlite settings path

This commit is contained in:
stupid-h4er
2026-05-27 22:11:36 +08:00
parent 74ea4b81f2
commit 6d185a6d93
4 changed files with 65 additions and 0 deletions
+30
View File
@@ -3,6 +3,8 @@ package config
import (
"crypto/rand"
"encoding/base64"
"os"
"path/filepath"
"strings"
"github.com/caarlos0/env/v11"
@@ -30,6 +32,7 @@ func Load() error {
if err := env.Parse(&Cfg); err != nil {
return err
}
normalizeDockerSQLiteDSN("/app/data")
if strings.TrimSpace(Cfg.JWTSecret) == "" || Cfg.JWTSecret == "infinite-canvas" {
secret, err := randomSecret()
if err != nil {
@@ -40,6 +43,33 @@ func Load() error {
return nil
}
func normalizeDockerSQLiteDSN(appDataDir string) {
driver := strings.ToLower(strings.TrimSpace(Cfg.StorageDriver))
if driver != "" && driver != "sqlite" {
return
}
dsn := strings.TrimSpace(Cfg.DatabaseDSN)
if dsn == "" || dsn == ":memory:" || strings.HasPrefix(dsn, "file:") {
return
}
pathPart, suffix := dsn, ""
if index := strings.Index(dsn, "?"); index >= 0 {
pathPart = dsn[:index]
suffix = dsn[index:]
}
if filepath.IsAbs(pathPart) {
return
}
slashPath := filepath.ToSlash(pathPart)
if slashPath != "data" && !strings.HasPrefix(slashPath, "data/") {
return
}
if _, err := os.Stat(appDataDir); err != nil {
return
}
Cfg.DatabaseDSN = filepath.Join(filepath.Dir(appDataDir), filepath.FromSlash(slashPath)) + suffix
}
func randomSecret() (string, error) {
buf := make([]byte, 32)
if _, err := rand.Read(buf); err != nil {