package main import ( "log" "net/http" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/cors" ) func main() { r := chi.NewRouter() rps := GetEnvFloat("RATE_LIMIT_RPS", 2.0) burst := GetEnvInt("RATE_LIMIT_BURST", 5) // *CORS r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(cors.Handler(cors.Options{ //AllowedOrigins: []string{"https://*", "http://*"}, //* Use this for development AllowedOrigins: GetEnvList("ALLOWED_ORIGINS", []string{"https://utils.fernandovideira.com"}), //* Use this for production AllowedMethods: []string{"GET"}, AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"}, ExposedHeaders: []string{"Link"}, AllowCredentials: false, MaxAge: 300, })) r.Use(RefererCheck(GetEnvList("ALLOWED_ORIGINS", []string{"https://utils.fernandovideira.com"}))) r.Use(RateLimiter(rps, burst)) r.Route("/v1", func(r chi.Router) { r.Route("/fantasy", func(r chi.Router) { r.Get("/elf-names", ElfNamesHandler) r.Get("/dwarf-names", DwarfNamesHandler) r.Get("/arakocra-names", ArakocraNamesHandler) r.Get("/aasimar-names", AasimarNamesHandler) r.Get("/bugbear-names", BugbearNamesHandler) r.Get("/centaur-names", CentaurNamesHandler) r.Get("/changeling-names", ChangelingNamesHandler) r.Get("/deep-gnome-names", DeepGnomeNamesHandler) r.Get("/deva-names", DevaNamesHandler) r.Get("/dragonborn-names", DragonbornNamesHandler) r.Get("/drow-names", DrowNamesHandler) r.Get("/duergar-names", DuergarNamesHandler) r.Get("/eladrin-names", EladrinNamesHandler) r.Get("/fairy-names", FairyNamesHandler) r.Get("/firbolg-names", ElfNamesHandler) r.Get("/genasi-names", GenasiNamesHandler) r.Get("/githyanki-names", GithyankiNamesHandler) r.Get("/githzerai-names", GithzeraiNamesHandler) r.Get("/gnome-names", GnomeNamesHandler) r.Get("/goblin-names", GoblinNamesHandler) r.Get("/goliath-names", GoliathNamesHandler) r.Get("/grung-names", GrungNamesHandler) r.Get("/half-elf-names", HalfElfNamesHandler) r.Get("/half-orc-names", HalfOrcNamesHandler) r.Get("/halfling-names", HalflingNamesHandler) r.Get("/harengon-names", HarengonNamesHandler) r.Get("/hobgoblin-names", HobgoblinNamesHandler) r.Get("/human-names", HumanNamesHandler) r.Get("/kalashtar-names", KalashtarNamesHandler) r.Get("/kenku-names", KenkuNamesHandler) r.Get("/kobold-names", KoboldNamesHandler) r.Get("/leonin-names", LeoninNamesHandler) r.Get("/lizardfolk-names", LizardfolkNamesHandler) r.Get("/locathah-names", LocathahNamesHandler) r.Get("/loxodon-names", LoxodonNamesHandler) r.Get("/minotaur-names", MinotaurNamesHandler) r.Get("/orc-names", OrcNamesHandler) r.Get("/satyr-names", SatyrNamesHandler) r.Get("/shadar-kai-names", ShadarKaiNamesHandler) r.Get("/shardmind-names", ShardmindNamesHandler) r.Get("/shifter-names", ShifterNamesHandler) r.Get("/simic-hybrid-names", SimicHybridNamesHandler) r.Get("/tabaxi-names", TabaxiNamesHandler) r.Get("/tiefling-names", TieflingNamesHandler) r.Get("/tortle-names", TortleNamesHandler) r.Get("/triton-names", TritonNamesHandler) r.Get("/vedalken-names", VedalkenNamesHandler) r.Get("/verdan-names", VerdanNamesHandler) r.Get("/warforged-names", WarforgedNamesHandler) r.Get("/wilden-names", WildenNamesHandler) r.Get("/yuan-ti-names", YuanTiNamesHandler) }) r.Route("/modern", func(r chi.Router) { r.Get("/english", ModernEnglishNamesHandler) r.Get("/portuguese", ModernPortugueseNamesHandler) }) }) log.Println("Listening on :8080") log.Fatal(http.ListenAndServe(":8080", r)) }