mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-08 05:10:29 -05:00
[server] Better organize config and flags
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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"},
|
||||
|
||||
Reference in New Issue
Block a user