feat: add FlareSolverr proxy support with DB-backed config
- 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}
This commit is contained in:
@@ -2,12 +2,15 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"goyomi/internal/config"
|
||||
"goyomi/internal/db"
|
||||
"goyomi/internal/httpclient"
|
||||
_ "goyomi/internal/registry"
|
||||
_ "goyomi/sources/all/hentaihand"
|
||||
_ "goyomi/sources/all/kemono"
|
||||
@@ -40,13 +43,56 @@ func main() {
|
||||
}
|
||||
defer database.Close()
|
||||
|
||||
// Initialize config manager
|
||||
config.InitConfigManager(database.Queries)
|
||||
|
||||
if os.Getenv("FLARESOLVERR_URL") != "" {
|
||||
fsClient, err := httpclient.NewFlareSolverrClient()
|
||||
if err != nil {
|
||||
log.Printf("flaresolverr: client creation failed: %v", err)
|
||||
} else {
|
||||
httpclient.SetGlobalFlareSolverr(fsClient)
|
||||
log.Printf("flaresolverr: client initialized")
|
||||
}
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintln(w, "ok")
|
||||
})
|
||||
|
||||
// Config endpoints
|
||||
mux.HandleFunc("/api/config/flaresolverr", handleFlareSolverrConfig)
|
||||
|
||||
log.Printf("listening on %s", cfg.Addr)
|
||||
if err := http.ListenAndServe(cfg.Addr, mux); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func handleFlareSolverrConfig(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
enabled := config.IsFlareSolverrProxyEnabled()
|
||||
json.NewEncoder(w).Encode(map[string]bool{"flaresolverr_proxy": enabled})
|
||||
|
||||
case "POST":
|
||||
var req struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
http.Error(w, "invalid request", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if err := config.SetFlareSolverrProxyEnabled(ctx, req.Enabled); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
json.NewEncoder(w).Encode(map[string]bool{"flaresolverr_proxy": req.Enabled})
|
||||
|
||||
default:
|
||||
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user