b992080c95
- Add config table for storing FlareSolverr proxy setting
- Add HTTP endpoints to get/set proxy status (GET/POST /api/config/flaresolverr)
- Refactor httpclient to support proxy mode (requests go through FlareSolverr)
- Add verbose logging for debugging
- Add POST support to FlareSolverr client
Usage:
GET /api/config/flaresolverr - returns {flaresolverr_proxy: bool}
POST /api/config/flaresolverr - body: {enabled: true/false}
57 lines
1.3 KiB
Go
Executable File
57 lines
1.3 KiB
Go
Executable File
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
DatabaseURL string
|
|
FlareSolverrURL string
|
|
FlareSolverrProxy bool
|
|
Addr string
|
|
MangaListTTL time.Duration
|
|
MangaDetailTTL time.Duration
|
|
ChapterListTTL time.Duration
|
|
DBMaxConns int
|
|
DBMinConns int
|
|
}
|
|
|
|
func Load() Config {
|
|
return Config{
|
|
DatabaseURL: os.Getenv("DATABASE_URL"),
|
|
FlareSolverrURL: os.Getenv("FLARESOLVERR_URL"),
|
|
FlareSolverrProxy: envBool("FLARESOLVERR_PROXY", false),
|
|
Addr: envStr("ADDR", ":8080"),
|
|
MangaListTTL: time.Duration(envInt("MANGA_LIST_TTL_SECONDS", 600)) * time.Second,
|
|
MangaDetailTTL: time.Duration(envInt("MANGA_DETAIL_TTL_SECONDS", 3600)) * time.Second,
|
|
ChapterListTTL: time.Duration(envInt("CHAPTER_LIST_TTL_SECONDS", 600)) * time.Second,
|
|
DBMaxConns: envInt("DB_MAX_CONNS", 10),
|
|
DBMinConns: envInt("DB_MIN_CONNS", 2),
|
|
}
|
|
}
|
|
|
|
func envStr(key, def string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
|
|
func envInt(key string, def int) int {
|
|
if v := os.Getenv(key); v != "" {
|
|
if n, err := strconv.Atoi(v); err == nil {
|
|
return n
|
|
}
|
|
}
|
|
return def
|
|
}
|
|
|
|
func envBool(key string, def bool) bool {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v == "1" || v == "true" || v == "yes"
|
|
}
|
|
return def
|
|
}
|