MVP: 按 07 风格重写前端 + Go 后端落地(长文/短文、编辑器、后台管理)
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Addr string
|
||||
Driver string // sqlite | postgres
|
||||
DSN string
|
||||
AdminUser string
|
||||
AdminPass string
|
||||
SessionSec string
|
||||
WebDist string
|
||||
DataDir string
|
||||
SiteURL string
|
||||
InsecureDev bool
|
||||
}
|
||||
|
||||
func getenv(k, def string) string {
|
||||
if v := strings.TrimSpace(os.Getenv(k)); v != "" {
|
||||
return v
|
||||
}
|
||||
return def
|
||||
}
|
||||
|
||||
func Load() (*Config, error) {
|
||||
root := getenv("ONE_ROOT", "")
|
||||
if root == "" {
|
||||
if wd, err := os.Getwd(); err == nil {
|
||||
root = filepath.Dir(wd) // server/ -> repo root
|
||||
} else {
|
||||
root = "."
|
||||
}
|
||||
}
|
||||
|
||||
c := &Config{
|
||||
Addr: getenv("ONE_ADDR", ":8080"),
|
||||
Driver: strings.ToLower(getenv("ONE_DB_DRIVER", "sqlite")),
|
||||
AdminUser: getenv("ONE_ADMIN_USER", "admin"),
|
||||
AdminPass: getenv("ONE_ADMIN_PASSWORD", "admin"),
|
||||
SessionSec: getenv("ONE_SECRET", ""),
|
||||
WebDist: getenv("ONE_WEB_DIST", filepath.Join(root, "frontend", "dist")),
|
||||
DataDir: getenv("ONE_DATA_DIR", filepath.Join(root, "data")),
|
||||
SiteURL: getenv("ONE_SITE_URL", "http://localhost:8080"),
|
||||
}
|
||||
|
||||
if c.Driver == "" {
|
||||
c.Driver = "sqlite"
|
||||
}
|
||||
if c.Driver != "sqlite" && c.Driver != "postgres" && c.Driver != "postgresql" {
|
||||
return nil, &badDriver{c.Driver}
|
||||
}
|
||||
if c.Driver == "postgresql" {
|
||||
c.Driver = "postgres"
|
||||
}
|
||||
|
||||
if c.DSN = getenv("ONE_DB_DSN", ""); c.DSN == "" {
|
||||
if c.Driver == "sqlite" {
|
||||
c.DSN = filepath.Join(c.DataDir, "one.db")
|
||||
} else {
|
||||
c.DSN = "postgres://localhost/one?sslmode=disable"
|
||||
}
|
||||
}
|
||||
|
||||
if c.SessionSec == "" {
|
||||
b := make([]byte, 32)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
c.SessionSec = hex.EncodeToString(b)
|
||||
}
|
||||
|
||||
c.InsecureDev = os.Getenv("ONE_ADMIN_PASSWORD") == ""
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
type badDriver struct{ d string }
|
||||
|
||||
func (e *badDriver) Error() string {
|
||||
return "unsupported ONE_DB_DRIVER: " + e.d + " (use sqlite or postgres)"
|
||||
}
|
||||
Reference in New Issue
Block a user