diff options
| author | Bobby <[email protected]> | 2025-05-09 23:33:10 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2025-05-09 23:33:10 +0530 |
| commit | 5b14961af44330ae85ed3e3f0b8ba2e8e452efa1 (patch) | |
| tree | ab2529c02dd025fdfb7c2dec75482b9384697e27 | |
| parent | f2085f139cff393873d15842afe9fbff72ca5b09 (diff) | |
| download | kage-server-5b14961af44330ae85ed3e3f0b8ba2e8e452efa1.tar.xz kage-server-5b14961af44330ae85ed3e3f0b8ba2e8e452efa1.zip | |
basic HTTP server
| -rw-r--r-- | config/config.go | 71 | ||||
| -rw-r--r-- | config/types.go | 6 | ||||
| -rw-r--r-- | kage/main.go | 40 |
3 files changed, 117 insertions, 0 deletions
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) + } +} |
