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}
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"goyomi/internal/db/queries"
|
|
)
|
|
|
|
type ConfigManager struct {
|
|
mu sync.RWMutex
|
|
flaresolverrProxy bool
|
|
queries *queries.Queries
|
|
}
|
|
|
|
var (
|
|
manager *ConfigManager
|
|
managerOnce sync.Once
|
|
)
|
|
|
|
func InitConfigManager(q *queries.Queries) {
|
|
managerOnce.Do(func() {
|
|
manager = &ConfigManager{queries: q}
|
|
manager.loadFromDB(context.Background())
|
|
})
|
|
}
|
|
|
|
func (m *ConfigManager) loadFromDB(ctx context.Context) {
|
|
if m.queries == nil {
|
|
return
|
|
}
|
|
val, err := m.queries.GetConfigValue(ctx, "flaresolverr_proxy")
|
|
if err == nil && val != "" {
|
|
m.flaresolverrProxy = val == "true"
|
|
}
|
|
}
|
|
|
|
func IsFlareSolverrProxyEnabled() bool {
|
|
if manager == nil {
|
|
return false
|
|
}
|
|
manager.mu.RLock()
|
|
defer manager.mu.RUnlock()
|
|
return manager.flaresolverrProxy
|
|
}
|
|
|
|
func SetFlareSolverrProxyEnabled(ctx context.Context, enabled bool) error {
|
|
if manager == nil {
|
|
return nil
|
|
}
|
|
value := "false"
|
|
if enabled {
|
|
value = "true"
|
|
}
|
|
err := manager.queries.SetConfigValue(ctx, queries.SetConfigValueParams{
|
|
Key: "flaresolverr_proxy",
|
|
Value: value,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
manager.mu.Lock()
|
|
manager.flaresolverrProxy = enabled
|
|
manager.mu.Unlock()
|
|
return nil
|
|
} |