aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-05-09 23:33:10 +0530
committerBobby <[email protected]>2025-05-09 23:33:10 +0530
commit5b14961af44330ae85ed3e3f0b8ba2e8e452efa1 (patch)
treeab2529c02dd025fdfb7c2dec75482b9384697e27
parentf2085f139cff393873d15842afe9fbff72ca5b09 (diff)
downloadkage-server-5b14961af44330ae85ed3e3f0b8ba2e8e452efa1.tar.xz
kage-server-5b14961af44330ae85ed3e3f0b8ba2e8e452efa1.zip
basic HTTP server
-rw-r--r--config/config.go71
-rw-r--r--config/types.go6
-rw-r--r--kage/main.go40
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)
+ }
+}