From 5b14961af44330ae85ed3e3f0b8ba2e8e452efa1 Mon Sep 17 00:00:00 2001 From: Bobby Date: Fri, 9 May 2025 23:33:10 +0530 Subject: basic HTTP server --- config/config.go | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ config/types.go | 6 +++++ kage/main.go | 40 +++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 config/config.go create mode 100644 config/types.go create mode 100644 kage/main.go diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..8706fe1 --- /dev/null +++ b/config/config.go @@ -0,0 +1,71 @@ +package config + +import ( + "kage/utils/logger" + "os" + "strconv" + "strings" + + "github.com/joho/godotenv" +) + +var ( + Config *ServerConfig + log = logger.NewLogger().WithPrefix("Config") +) + +func init() { + godotenv.Load() + + Config = &ServerConfig{ + Port: getEnvAsInt("PORT", 3000), + Debug: getEnvAsBool("DEBUG", false), + } + + if Config.Debug { + log.WithTimestamp().WithTimeFormat("02/01/2006 03:04:05 PM") + } + + if Config.Port == 0 { + log.Fatalf("Port is not set in the environment variables") + } + + log.Successf("Configuration loaded successfully") +} + +func getEnv(key string, defaultValue string) string { + value, exists := os.LookupEnv(key) + if !exists { + return defaultValue + } + + return strings.TrimSpace(value) +} + +func getEnvAsInt(key string, defaultValue int) int { + value := getEnv(key, "") + if value == "" { + return defaultValue + } + + intValue, err := strconv.Atoi(value) + if err != nil { + return defaultValue + } + + return intValue +} + +func getEnvAsBool(key string, defaultValue bool) bool { + value := getEnv(key, "") + if value == "" { + return defaultValue + } + + boolValue, err := strconv.ParseBool(value) + if err != nil { + return defaultValue + } + + return boolValue +} diff --git a/config/types.go b/config/types.go new file mode 100644 index 0000000..5e84971 --- /dev/null +++ b/config/types.go @@ -0,0 +1,6 @@ +package config + +type ServerConfig struct { + Port int + Debug bool +} diff --git a/kage/main.go b/kage/main.go new file mode 100644 index 0000000..b01362b --- /dev/null +++ b/kage/main.go @@ -0,0 +1,40 @@ +package main + +import ( + "fmt" + "kage/config" + "kage/utils/logger" + + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/cors" + "github.com/gofiber/fiber/v2/middleware/helmet" +) + +var ( + log = logger.NewLogger().WithPrefix("Main Process") +) + +func main() { + if config.Config.Debug { + log.WithTimestamp().WithTimeFormat("02/01/2006 03:04:05 PM") + } + + app := fiber.New() + + app.Use(cors.New(cors.Config{ + AllowOrigins: "*", + AllowMethods: "GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS", + AllowHeaders: "Origin, Content-Type, Accept, Authorization, X-Requested-With, X-API-Key, X-CSRF-Token", + ExposeHeaders: "Content-Length, Content-Type, Content-Disposition, X-Pagination, X-Total-Count", + MaxAge: 86400, + })) + app.Use(helmet.New()) + + log.Infof("Attempting to start server on Port %d...", config.Config.Port) + + if err := app.Listen(fmt.Sprintf(":%d", config.Config.Port)); err != nil { + log.Fatalf("Failed to start server on port %d: %v", config.Config.Port, err) + } else { + log.Successf("Server started on port %d", config.Config.Port) + } +} -- cgit v1.2.3