package main import ( "context" "encoding/json" "fmt" "log" "net/http" "goyomi/internal/config" "goyomi/internal/db" _ "goyomi/internal/registry" _ "goyomi/sources/all/ahottie" _ "goyomi/sources/all/akuma" _ "goyomi/sources/all/allporncomicsco" _ "goyomi/sources/all/asmhentai" _ "goyomi/sources/all/baobua" _ "goyomi/sources/all/beauty3600000" _ "goyomi/sources/all/buondua" _ "goyomi/sources/all/comicfury" _ "goyomi/sources/all/comicgrowl" _ "goyomi/sources/all/comicklive" _ "goyomi/sources/all/comikey" _ "goyomi/sources/all/comicsvalley" _ "goyomi/sources/all/commitstrip" _ "goyomi/sources/all/coomer" _ "goyomi/sources/all/elitebabes" _ "goyomi/sources/all/femjoyhunter" _ "goyomi/sources/all/ftvhunter" _ "goyomi/sources/all/joymiihub" _ "goyomi/sources/all/mangacrazy" _ "goyomi/sources/all/metarthunter" _ "goyomi/sources/all/playmatehunter" _ "goyomi/sources/all/xarthunter" _ "goyomi/sources/all/hentaihand" _ "goyomi/sources/all/kemono" _ "goyomi/sources/all/mangataro" _ "goyomi/sources/en/bakkin" _ "goyomi/sources/en/divascans" _ "goyomi/sources/en/guya" _ "goyomi/sources/en/hijalascans" _ "goyomi/sources/en/kaizenscan" _ "goyomi/sources/en/kewnscans" _ "goyomi/sources/en/lunatoons" _ "goyomi/sources/en/mistscans" _ "goyomi/sources/en/necroscans" _ "goyomi/sources/en/nyanukafe" _ "goyomi/sources/en/nyxscans" _ "goyomi/sources/en/orionscans" _ "goyomi/sources/en/renascans" _ "goyomi/sources/en/sanascans" _ "goyomi/sources/en/sirenscans" _ "goyomi/sources/en/vanillascans" _ "goyomi/sources/en/aquamanga" _ "goyomi/sources/en/arenascans" _ "goyomi/sources/en/artlapsa" _ "goyomi/sources/en/cocomic" _ "goyomi/sources/en/comicsland" _ "goyomi/sources/en/crowscans" _ "goyomi/sources/en/dankefurslesen" _ "goyomi/sources/en/elftoon" _ "goyomi/sources/en/gakamangas" _ "goyomi/sources/en/galaxydegenscans" _ "goyomi/sources/en/grimscans" _ "goyomi/sources/en/hachirumi" _ "goyomi/sources/en/harimanga" _ "goyomi/sources/en/hentai4free" _ "goyomi/sources/en/jinmangas" _ "goyomi/sources/en/kaliscanme" _ "goyomi/sources/en/kingofshojo" _ "goyomi/sources/en/kissmangain" _ "goyomi/sources/en/kunmanga" _ "goyomi/sources/en/lhtranslation" _ "goyomi/sources/en/mahouirexnohentaikarte" _ "goyomi/sources/en/manga18x" _ "goyomi/sources/en/mangagg" _ "goyomi/sources/en/mangahe" _ "goyomi/sources/en/mangahentai" _ "goyomi/sources/en/mangakiss" _ "goyomi/sources/en/mangamaniacs" _ "goyomi/sources/en/manhwaclan" _ "goyomi/sources/en/manhwalover" _ "goyomi/sources/en/manhwareads" _ "goyomi/sources/en/manhwatop" _ "goyomi/sources/en/manhwax" _ "goyomi/sources/en/mgjinx" _ "goyomi/sources/en/milftoon" _ "goyomi/sources/en/octopusmanga" _ "goyomi/sources/en/pawmanga" _ "goyomi/sources/en/ravenscans" _ "goyomi/sources/en/ritharscans" _ "goyomi/sources/en/rosesquadscans" _ "goyomi/sources/en/ryumanga" _ "goyomi/sources/en/tcbscansunoriginal" _ "goyomi/sources/en/toonilyme" _ "goyomi/sources/en/toonitube" _ "goyomi/sources/en/topmanhua" _ "goyomi/sources/en/writerscans" _ "goyomi/sources/en/yaoihub" _ "goyomi/sources/en/yaoiscan" _ "goyomi/sources/en/zinmanga" _ "goyomi/sources/en/zinmanga" _ "goyomi/sources/en/tritiniascans" _ "goyomi/sources/en/webtoonscan" _ "goyomi/sources/en/whalemanga" _ "goyomi/sources/en/beehentai" _ "goyomi/sources/en/boratscans" _ "goyomi/sources/en/boxmanhwa" _ "goyomi/sources/en/bunmanga" _ "goyomi/sources/en/cucumbermanga" _ "goyomi/sources/en/decadencescans" _ "goyomi/sources/en/kaliscancom" _ "goyomi/sources/en/kaliscanio" _ "goyomi/sources/en/linkmanga" _ "goyomi/sources/en/mangabuddy" _ "goyomi/sources/en/mangabuddyme" _ "goyomi/sources/en/mangacute" _ "goyomi/sources/en/mangadrama" _ "goyomi/sources/en/mangafab" _ "goyomi/sources/en/mangaforest" _ "goyomi/sources/en/mangamonk" _ "goyomi/sources/en/mangapuma" _ "goyomi/sources/en/mangasaga" _ "goyomi/sources/en/mangaspin" _ "goyomi/sources/en/mangasushi" _ "goyomi/sources/en/mangaxyz" _ "goyomi/sources/en/manhuafast" _ "goyomi/sources/en/manhuahot" _ "goyomi/sources/en/manhuanow" _ "goyomi/sources/en/manhuaplus" _ "goyomi/sources/en/manhuasite" _ "goyomi/sources/en/sleepytranslations" _ "goyomi/sources/en/spmanhwa" _ "goyomi/sources/en/mangahereonl" _ "goyomi/sources/en/mangahubio" _ "goyomi/sources/en/mangakakalotfun" _ "goyomi/sources/en/mangafoxfun" _ "goyomi/sources/en/manganel" _ "goyomi/sources/en/mangaonlinefun" _ "goyomi/sources/en/mangaowlio" _ "goyomi/sources/en/mangapandaonl" _ "goyomi/sources/en/mangaread" _ "goyomi/sources/en/mangareadersite" _ "goyomi/sources/en/mangareadorg" _ "goyomi/sources/en/mangatoday" _ "goyomi/sources/en/onemangaco" _ "goyomi/sources/en/onemangainfo" _ "goyomi/sources/en/readattackontitanshingekinokyojinmanga" _ "goyomi/sources/en/readberserkmanga" _ "goyomi/sources/en/readblackclovermangaonline" _ "goyomi/sources/en/readbokunoheroacademiamyheroacademiamanga" _ "goyomi/sources/en/readchainsawmanmangaonline" _ "goyomi/sources/en/readfairytailedenszeromangaonline" _ "goyomi/sources/en/readhaikyuumangaonline" _ "goyomi/sources/en/readjujutsukaisenmangaonline" _ "goyomi/sources/en/readkingdommangaonline" _ "goyomi/sources/en/readnanatsunotaizai7deadlysinsmangaonline" _ "goyomi/sources/en/readnarutoborutosamurai8mangaonline" _ "goyomi/sources/en/readonepiecemangaonline" _ "goyomi/sources/en/readonepunchmanmangaonlinetwo" _ "goyomi/sources/en/readsololevelingmangamanhwaonline" _ "goyomi/sources/en/readtokyoghoulretokyoghoulmangaonline" _ "goyomi/sources/all/hniscantrad" _ "goyomi/sources/en/monochromescans" _ "goyomi/sources/en/assortedscans" _ "goyomi/sources/en/eightmuses" _ "goyomi/sources/en/arcrelight" _ "goyomi/sources/en/baektoons" _ "goyomi/sources/en/epicmanga" _ "goyomi/sources/en/ero18x" _ "goyomi/sources/en/erisscans" _ "goyomi/sources/en/evilflowers" _ "goyomi/sources/en/fablescans" _ "goyomi/sources/en/allporncomicio" _ "goyomi/sources/en/anisascans" _ "goyomi/sources/en/apcomics" _ "goyomi/sources/en/deathtollscans" _ "goyomi/sources/en/dragontea" _ "goyomi/sources/en/eighteenporncomic" _ "goyomi/sources/en/galaxymanga" _ "goyomi/sources/en/gingertoon" _ "goyomi/sources/en/hentaisco" _ "goyomi/sources/en/hentaixcomic" _ "goyomi/sources/en/hentaixyuri" _ "goyomi/sources/en/ksgroupscans" _ "goyomi/sources/en/lagoonscans" _ "goyomi/sources/en/luascans" _ "goyomi/sources/en/manga18club" _ "goyomi/sources/en/mangaclash" _ "goyomi/sources/en/mangadia" _ "goyomi/sources/en/mangafree" _ "goyomi/sources/en/mangagofun" _ "goyomi/sources/en/mangaka" _ "goyomi/sources/en/mangatellers" _ "goyomi/sources/en/mangatrend" _ "goyomi/sources/en/mangatx" _ "goyomi/sources/en/manhuafastnet" _ "goyomi/sources/en/manhuanext" _ "goyomi/sources/en/manhuaplusorg" _ "goyomi/sources/en/manhuaus" _ "goyomi/sources/en/manhuazonghe" _ "goyomi/sources/en/manhwa18org" _ "goyomi/sources/en/manhwa68" _ "goyomi/sources/en/manhwaclan" _ "goyomi/sources/en/manhwacomics" _ "goyomi/sources/en/manhwaden" _ "goyomi/sources/en/manhwaget" _ "goyomi/sources/en/manhwahub" _ "goyomi/sources/en/manhwajoy" _ "goyomi/sources/en/manhwamanhua" _ "goyomi/sources/en/milftoon" _ "goyomi/sources/en/nikatoons" _ "goyomi/sources/en/novel24h" _ "goyomi/sources/en/novelcrow" _ "goyomi/sources/en/noxenscans" _ "goyomi/sources/en/orchisasia" _ "goyomi/sources/en/petrotechsociety" _ "goyomi/sources/en/pmscans" _ "goyomi/sources/en/rizzcomicunoriginal" _ "goyomi/sources/en/shibamanga" _ "goyomi/sources/en/skymanga" _ "goyomi/sources/en/spmanhwa" _ "goyomi/sources/en/toon18" _ "goyomi/sources/en/toongod" _ "goyomi/sources/en/toonizy" _ "goyomi/sources/en/topmanhuanet" _ "goyomi/sources/en/tritiniascans" _ "goyomi/sources/en/vyvymangaorg" _ "goyomi/sources/en/wearehunger" _ "goyomi/sources/en/webdexscans" _ "goyomi/sources/en/webtoonscan" _ "goyomi/sources/en/whalemanga" _ "goyomi/sources/en/woopread" _ "goyomi/sources/en/wuxiaworld" _ "goyomi/sources/en/yaoiscan" _ "goyomi/sources/en/zinmanganet" ) func main() { cfg := config.Load() ctx := context.Background() database, err := db.Open(ctx) if err != nil { log.Fatalf("db: %v", err) } defer database.Close() // Initialize config manager config.InitConfigManager(database.Queries) 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) } }