[server] Better organize config and flags

This commit is contained in:
Abhishek Shroff
2025-04-27 01:13:43 +05:30
parent f24a02229a
commit c8a0d4334b
8 changed files with 26 additions and 50 deletions
+13 -15
View File
@@ -5,6 +5,7 @@ import (
"time"
"github.com/fvbock/endless"
"github.com/gin-gonic/gin"
"github.com/shroff/phylum/server/internal/api/publink"
apiv1 "github.com/shroff/phylum/server/internal/api/v1"
"github.com/shroff/phylum/server/internal/api/webdav"
@@ -22,8 +23,11 @@ func SetupCommand() *cobra.Command {
Short: "Run the server",
GroupID: "server",
Run: func(cmd *cobra.Command, args []string) {
config := viper.GetViper()
engine := createEngine(config.GetBool("debug"), config.GetBool("log_body"), config.GetBool("cors_enabled"), config.GetStringSlice("cors_origins"))
config := viper.Sub("server")
if !viper.GetBool("debug") {
gin.SetMode(gin.ReleaseMode)
}
engine := createEngine(config)
webdav.SetupHandler(engine.Group(config.GetString("webdav_prefix")))
apiv1.Setup(engine.Group("/api/v1"))
@@ -42,26 +46,20 @@ func SetupCommand() *cobra.Command {
}
flags := cmd.Flags()
flags.Bool("auto-migrate", true, "Automatically migrate database schema")
viper.BindPFlag("auto_migrate", flags.Lookup("auto-migrate"))
flags.StringP("default-storage-dir", "S", "storage/default", "Default Storage Directory")
viper.BindPFlag("default_storage_dir", flags.Lookup("default-storage-dir"))
flags.StringP("listen", "l", ":1234", "Listen Addres")
viper.BindPFlag("listen", flags.Lookup("listen"))
flags.StringP("listen", "l", ":2448", "Listen Addres")
viper.BindPFlag("server.listen", flags.Lookup("listen"))
flags.Bool("log-body", false, "Log Response Body (Must be used with --debug)")
viper.BindPFlag("log_body", flags.Lookup("log-body"))
viper.BindPFlag("server.log_body", flags.Lookup("log-body"))
flags.Bool("cors-enabled", false, "Enabled CORS")
viper.BindPFlag("cors_enabled", flags.Lookup("cors-enabled"))
flags.Bool("cors-enabled", false, "Enable CORS")
viper.BindPFlag("server.cors.enabled", flags.Lookup("cors-enabled"))
flags.StringSlice("cors-origins", []string{"*"}, "CORS origins")
viper.BindPFlag("cors_origins", flags.Lookup("cors-origins"))
viper.BindPFlag("server.cors.origins", flags.Lookup("cors-origins"))
flags.String("webdav-prefix", "/webdav", "Listen Addres")
viper.BindPFlag("webdav_prefix", flags.Lookup("webdav-prefix"))
viper.BindPFlag("server.webdav_prefix", flags.Lookup("webdav-prefix"))
return cmd
}
+6 -7
View File
@@ -7,12 +7,11 @@ import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
"github.com/shroff/phylum/server/internal/core/errors"
"github.com/spf13/viper"
)
func createEngine(debug, logBody bool, corsEnabled bool, corsOrigins []string) *gin.Engine {
if !debug {
gin.SetMode(gin.ReleaseMode)
}
// func createEngine(logBody bool, corsEnabled bool, corsOrigins []string) *gin.Engine {
func createEngine(config *viper.Viper) *gin.Engine {
engine := gin.New()
engine.Use(gin.Logger(), gin.CustomRecovery(func(c *gin.Context, err any) {
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
@@ -21,13 +20,13 @@ func createEngine(debug, logBody bool, corsEnabled bool, corsOrigins []string) *
"msg": "Internal Server Error",
})
}))
if debug && logBody {
if config.GetBool("log_body") {
engine.Use(logBodyMiddleware)
}
if corsEnabled {
if config.GetBool("cors.enabled") {
engine.Use(cors.New(cors.Config{
AllowOrigins: corsOrigins,
AllowOrigins: config.GetStringSlice("cors.origins"),
AllowHeaders: []string{"Origin", "Authorization", "Accept", "Accept-Language", "Content-Type"},
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "PROPFIND", "PROPPATCH", "COPY", "MOVE"},
ExposeHeaders: []string{"Content-Length"},