From a135435e09c1c698efb035b36d5ecfb16649f469 Mon Sep 17 00:00:00 2001 From: dogukanoksuz Date: Wed, 31 Aug 2022 16:19:07 +0300 Subject: [PATCH] feature: Added new functions --- app/handlers/extension.go | 43 +++++++++++++ app/{controllers => handlers}/test.go | 8 +-- .../{AccessToken.go => access_token.go} | 0 app/models/{Credentials.go => credentials.go} | 0 app/models/{Extension.go => extension.go} | 0 app/models/php_command.go | 11 ++++ app/models/{Server.go => server.go} | 0 app/models/{ServerKey.go => server_key.go} | 2 +- app/models/settings.go | 15 +++++ app/models/{Token.go => token.go} | 0 app/models/{User.go => user.go} | 0 app/routes/index.go | 5 +- go.mod | 6 +- go.sum | 6 ++ internal/database/connection.go | 2 +- internal/database/postgres.go | 11 +++- internal/liman/auth.go | 32 ++++++++++ .../{bridge/liman.go => liman/credentials.go} | 16 ++++- internal/liman/extension.go | 51 +++++++++++++++ internal/liman/server.go | 21 +++++++ internal/liman/settings.go | 63 +++++++++++++++++++ internal/middleware/auth.go | 44 +++++++++++++ internal/middleware/request.go | 13 ---- internal/sandbox/command_generator.go | 28 +++++++++ pkg/helpers/string.go | 12 ++++ pkg/helpers/uuid.go | 8 +++ pkg/utils/server.go | 2 +- 27 files changed, 370 insertions(+), 29 deletions(-) create mode 100644 app/handlers/extension.go rename app/{controllers => handlers}/test.go (64%) rename app/models/{AccessToken.go => access_token.go} (100%) rename app/models/{Credentials.go => credentials.go} (100%) rename app/models/{Extension.go => extension.go} (100%) create mode 100644 app/models/php_command.go rename app/models/{Server.go => server.go} (100%) rename app/models/{ServerKey.go => server_key.go} (91%) create mode 100644 app/models/settings.go rename app/models/{Token.go => token.go} (100%) rename app/models/{User.go => user.go} (100%) create mode 100644 internal/liman/auth.go rename internal/{bridge/liman.go => liman/credentials.go} (70%) create mode 100644 internal/liman/extension.go create mode 100644 internal/liman/server.go create mode 100644 internal/liman/settings.go create mode 100644 internal/middleware/auth.go delete mode 100644 internal/middleware/request.go create mode 100644 internal/sandbox/command_generator.go create mode 100644 pkg/helpers/string.go create mode 100644 pkg/helpers/uuid.go diff --git a/app/handlers/extension.go b/app/handlers/extension.go new file mode 100644 index 00000000..c5a0b966 --- /dev/null +++ b/app/handlers/extension.go @@ -0,0 +1,43 @@ +package handlers + +import ( + "github.com/gofiber/fiber/v2" + "github.com/limanmys/render-engine/internal/liman" +) + +func ExtensionRunner(c *fiber.Ctx) error { + /*if len(c.FormValue("extension_id")) < 1 { + return fiber.NewError(fiber.StatusNotFound, "Extension not found") + } + + extension, err := liman.GetExtension(&models.Extension{ + ID: c.FormValue("extension_id"), + }) + + if err != nil { + return err + } + + if extension.Status == "0" { + return fiber.NewError(fiber.StatusServiceUnavailable, "Extension is unavailable right now, please try again later.") + } + + if extension.RequireKey == "true" { + credentials, err := liman.GetCredentials( + &models.User{ + ID: c.Locals("user_id").(string), + }, + &models.Server{ + ID: c.FormValue("server_id"), + }, + ) + + if err != nil || len(credentials.Username) < 1 { + return fiber.NewError(fiber.StatusForbidden, "You need a key to use this extension, please add it through the case.") + } + } */ + + settings := liman.GetSettings(c.Locals("user_id").(string), c.FormValue("server_id"), c.FormValue("extension_id")) + + return c.JSON(settings) +} diff --git a/app/controllers/test.go b/app/handlers/test.go similarity index 64% rename from app/controllers/test.go rename to app/handlers/test.go index e6967c51..1dc111d7 100644 --- a/app/controllers/test.go +++ b/app/handlers/test.go @@ -1,16 +1,16 @@ -package controllers +package handlers import ( "github.com/gofiber/fiber/v2" "github.com/limanmys/render-engine/app/models" - "github.com/limanmys/render-engine/internal/bridge" + "github.com/limanmys/render-engine/internal/liman" ) func CredentialTest(c *fiber.Ctx) error { - credentials, err := bridge.GetCredentials( + credentials, err := liman.GetCredentials( &models.User{ - ID: c.Params("user"), + ID: c.Locals("user_id").(string), }, &models.Server{ ID: c.Params("server"), diff --git a/app/models/AccessToken.go b/app/models/access_token.go similarity index 100% rename from app/models/AccessToken.go rename to app/models/access_token.go diff --git a/app/models/Credentials.go b/app/models/credentials.go similarity index 100% rename from app/models/Credentials.go rename to app/models/credentials.go diff --git a/app/models/Extension.go b/app/models/extension.go similarity index 100% rename from app/models/Extension.go rename to app/models/extension.go diff --git a/app/models/php_command.go b/app/models/php_command.go new file mode 100644 index 00000000..5044be0a --- /dev/null +++ b/app/models/php_command.go @@ -0,0 +1,11 @@ +package models + +type CommandParams struct { + TargetFunction string + User string + Extension string + Server string + RequestData map[string]string + Token string + BaseURL string +} diff --git a/app/models/Server.go b/app/models/server.go similarity index 100% rename from app/models/Server.go rename to app/models/server.go diff --git a/app/models/ServerKey.go b/app/models/server_key.go similarity index 91% rename from app/models/ServerKey.go rename to app/models/server_key.go index 3e49bb07..316883b0 100644 --- a/app/models/ServerKey.go +++ b/app/models/server_key.go @@ -27,7 +27,7 @@ func (ServerKey) TableName() string { return "server_keys" } -func (d KeyData) DecryptKey(user *User, server *Server) *Credentials { +func (d KeyData) DecryptData(user *User, server *Server) *Credentials { key := os.Getenv("APP_KEY") + user.ID + server.ID return &Credentials{ diff --git a/app/models/settings.go b/app/models/settings.go new file mode 100644 index 00000000..88aaacd5 --- /dev/null +++ b/app/models/settings.go @@ -0,0 +1,15 @@ +package models + +type Settings struct { + ID string `json:"id"` + ServerID string `json:"server_id"` + UserID string `json:"user_id"` + Name string `json:"name"` + Value string `json:"value"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` +} + +func (Settings) TableName() string { + return "user_settings" +} diff --git a/app/models/Token.go b/app/models/token.go similarity index 100% rename from app/models/Token.go rename to app/models/token.go diff --git a/app/models/User.go b/app/models/user.go similarity index 100% rename from app/models/User.go rename to app/models/user.go diff --git a/app/routes/index.go b/app/routes/index.go index 9d194493..706a7e1c 100644 --- a/app/routes/index.go +++ b/app/routes/index.go @@ -2,9 +2,10 @@ package routes import ( "github.com/gofiber/fiber/v2" - "github.com/limanmys/render-engine/app/controllers" + "github.com/limanmys/render-engine/app/handlers" ) func Install(app *fiber.App) { - app.Get("/credentials/:user/:server", controllers.CredentialTest) + app.Get("/credentials/:server", handlers.CredentialTest) + app.Post("/extensionRunner", handlers.ExtensionRunner) } diff --git a/go.mod b/go.mod index 302ed1d4..7a96887b 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/limanmys/render-engine go 1.18 require ( - github.com/gofiber/fiber/v2 v2.36.0 + github.com/gofiber/fiber/v2 v2.37.0 github.com/google/uuid v1.3.0 github.com/joho/godotenv v1.4.0 gorm.io/driver/mysql v1.3.6 @@ -29,7 +29,7 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.39.0 // indirect github.com/valyala/tcplisten v1.0.0 // indirect - golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d // indirect - golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 // indirect + golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect + golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect golang.org/x/text v0.3.7 // indirect ) diff --git a/go.sum b/go.sum index 25448c64..f61f20cc 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/gofiber/fiber/v2 v2.31.0 h1:M2rWPQbD5fDVAjcoOLjKRXTIlHesI5Eq7I5FEQPt4 github.com/gofiber/fiber/v2 v2.31.0/go.mod h1:1Ega6O199a3Y7yDGuM9FyXDPYQfv+7/y48wl6WCwUF4= github.com/gofiber/fiber/v2 v2.36.0 h1:1qLMe5rhXFLPa2SjK10Wz7WFgLwYi4TYg7XrjztJHqA= github.com/gofiber/fiber/v2 v2.36.0/go.mod h1:tgCr+lierLwLoVHHO/jn3Niannv34WRkQETU8wiL9fQ= +github.com/gofiber/fiber/v2 v2.37.0 h1:KVboSQ7e0wDbSFXNjXKqoigwp9HYUqgWn4uGFaUO1P8= +github.com/gofiber/fiber/v2 v2.37.0/go.mod h1:xm3pDGlfE1xqVKb77iH8weLU0FFoTeWeK3nbiYM2Nh0= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= @@ -190,6 +192,8 @@ golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d h1:3qF+Z8Hkrw9sOhrFHti9TlB1Hkac1x+DNRkv0XQiFjo= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= @@ -220,6 +224,8 @@ golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f h1:rlezHXNlxYWvBCzNses9Dlc7n golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 h1:UiNENfZ8gDvpiWw7IpOMQ27spWmThO1RwwdQVbJahJM= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/internal/database/connection.go b/internal/database/connection.go index 46b25f25..1cf8d01d 100644 --- a/internal/database/connection.go +++ b/internal/database/connection.go @@ -16,7 +16,7 @@ func Connection() *gorm.DB { connection = initialize() }) - return connection + return connection.Debug() } func initialize() *gorm.DB { diff --git a/internal/database/postgres.go b/internal/database/postgres.go index e251de0e..e5dff21a 100644 --- a/internal/database/postgres.go +++ b/internal/database/postgres.go @@ -2,6 +2,7 @@ package database import ( "fmt" + "log" "os" "gorm.io/driver/postgres" @@ -21,7 +22,15 @@ func initializePostgres() *gorm.DB { connection, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { - return nil + log.Fatalln("Cannot connect to Liman database!") } + + db, err := connection.DB() + + err = db.Ping() + if err != nil { + log.Fatalln("Cannot connect to Liman database!") + } + return connection } diff --git a/internal/liman/auth.go b/internal/liman/auth.go new file mode 100644 index 00000000..f36bf5e7 --- /dev/null +++ b/internal/liman/auth.go @@ -0,0 +1,32 @@ +package liman + +import ( + "errors" + + "github.com/limanmys/render-engine/app/models" + "github.com/limanmys/render-engine/internal/database" +) + +func AuthWithToken(token string) (string, error) { + tokenObj := &models.Token{} + + err := database.Connection().First(&tokenObj, "token = ?", token).Error + + if err != nil || len(tokenObj.UserID) < 1 { + return "", errors.New("Authorization token is not valid.") + } + + return tokenObj.UserID, nil +} + +func AuthWithAccessToken(token string) (string, error) { + tokenObj := &models.AccessToken{} + + err := database.Connection().First(&tokenObj, "token = ?", token).Error + + if err != nil || len(tokenObj.UserID) < 1 { + return "", errors.New("Authorization token is not valid.") + } + + return tokenObj.UserID, nil +} diff --git a/internal/bridge/liman.go b/internal/liman/credentials.go similarity index 70% rename from internal/bridge/liman.go rename to internal/liman/credentials.go index 11648c9e..df22ad2f 100644 --- a/internal/bridge/liman.go +++ b/internal/liman/credentials.go @@ -1,8 +1,9 @@ -package bridge +package liman import ( "encoding/json" + "github.com/gofiber/fiber/v2" "github.com/limanmys/render-engine/app/models" "github.com/limanmys/render-engine/internal/database" ) @@ -14,6 +15,7 @@ func GetCredentials(user *models.User, server *models.Server) (*models.Credentia encryptedKey := &models.KeyData{} encrypterUser := user.ID + if serverKey.Data == "" { database.Connection().First(&server, "id = ?", server.ID) @@ -23,9 +25,17 @@ func GetCredentials(user *models.User, server *models.Server) (*models.Credentia } } - json.Unmarshal([]byte(serverKey.Data), encryptedKey) - credentials := encryptedKey.DecryptKey(&models.User{ID: encrypterUser}, server) + json.Unmarshal( + []byte(serverKey.Data), + encryptedKey, + ) + + credentials := encryptedKey.DecryptData(&models.User{ID: encrypterUser}, server) credentials.Type = serverKey.Type + if len(credentials.Username) < 1 { + return nil, fiber.NewError(fiber.StatusNotFound, "Server not found") + } + return credentials, nil } diff --git a/internal/liman/extension.go b/internal/liman/extension.go new file mode 100644 index 00000000..c712ef1a --- /dev/null +++ b/internal/liman/extension.go @@ -0,0 +1,51 @@ +package liman + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "strings" + + "github.com/gofiber/fiber/v2" + "github.com/limanmys/render-engine/app/models" + "github.com/limanmys/render-engine/internal/database" +) + +func GetExtension(extension *models.Extension) (*models.Extension, error) { + result := database.Connection().First(&extension) + + if result.Error != nil { + return nil, fiber.NewError(fiber.StatusNotFound, "Cannot found extension with this id") + } + + if result.RowsAffected > 0 { + return extension, nil + } + + return nil, fiber.NewError(fiber.StatusNotFound, "Cannot found extension with this id") +} + +func GetExtensionJSON(extension *models.Extension) (map[string]any, error) { + fileName := "" + if len(extension.Name) > 0 { + fileName = strings.ToLower(extension.Name) + } else { + extObject, err := GetExtension(extension) + fileName = strings.ToLower(extObject.Name) + + if err != nil { + return nil, err + } + } + + jsonFile, err := ioutil.ReadFile(fmt.Sprintf("/liman/extensions/%s/db.json", fileName)) + + if err != nil { + return nil, err + } + + extJson := make(map[string]any) + json.Unmarshal(jsonFile, &extJson) + + return extJson, nil +} diff --git a/internal/liman/server.go b/internal/liman/server.go new file mode 100644 index 00000000..1acecf79 --- /dev/null +++ b/internal/liman/server.go @@ -0,0 +1,21 @@ +package liman + +import ( + "github.com/gofiber/fiber/v2" + "github.com/limanmys/render-engine/app/models" + "github.com/limanmys/render-engine/internal/database" +) + +func GetServer(server *models.Server) (*models.Server, error) { + result := database.Connection().First(&server) + + if result.Error != nil { + return nil, fiber.NewError(fiber.StatusNotFound, "Cannot found server with this id") + } + + if result.RowsAffected > 0 { + return server, nil + } + + return nil, fiber.NewError(fiber.StatusNotFound, "Cannot found server with this id") +} diff --git a/internal/liman/settings.go b/internal/liman/settings.go new file mode 100644 index 00000000..3de9a73b --- /dev/null +++ b/internal/liman/settings.go @@ -0,0 +1,63 @@ +package liman + +import ( + "os" + + "github.com/limanmys/render-engine/app/models" + "github.com/limanmys/render-engine/internal/database" + "github.com/mervick/aes-everywhere/go/aes256" +) + +func GetSettings(userID string, serverID string, extensionID string) map[string]string { + extJson, err := GetExtensionJSON(&models.Extension{ID: extensionID}) + + if err != nil { + return nil + } + + // Determine which global variables exists + var extensionKeys []string + var globalVars []string + for _, setting := range extJson["database"].([]interface{}) { + isGlobal := setting.(map[string]interface{})["global"] + if isGlobal != nil && isGlobal.(bool) { + globalVars = append(globalVars, setting.(map[string]interface{})["variable"].(string)) + } + + extensionKeys = append(extensionKeys, setting.(map[string]interface{})["variable"].(string)) + } + + settings := []models.Settings{} + results := make(map[string]string) + + decryptionKey := os.Getenv("APP_KEY") + userID + serverID + + // Get user_settings for user and decrypt it + database.Connection().Find( + &settings, + "name IN ? AND user_id = ? AND server_id = ?", + extensionKeys, + userID, + serverID, + ) + for _, setting := range settings { + results[setting.Name] = aes256.Decrypt(setting.Value, decryptionKey) + } + + // Search global variables shared between users + database.Connection().Find( + &settings, + "name IN ? AND server_id = ?", + globalVars, + serverID, + ) + for _, setting := range settings { + if _, ok := results[setting.Name]; ok { + continue + } + + results[setting.Name] = aes256.Decrypt(setting.Value, decryptionKey) + } + + return results +} diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go new file mode 100644 index 00000000..c3ef4042 --- /dev/null +++ b/internal/middleware/auth.go @@ -0,0 +1,44 @@ +package middleware + +import ( + "strings" + + "github.com/gofiber/fiber/v2" + "github.com/limanmys/render-engine/internal/liman" +) + +func NewAuthorization() fiber.Handler { + return authorization +} + +func authorization(c *fiber.Ctx) error { + if len(c.FormValue("token")) > 0 { + user, err := liman.AuthWithToken( + strings.Trim(c.FormValue("token"), ""), + ) + + if err != nil { + return fiber.NewError(fiber.StatusUnauthorized, err.Error()) + } + + c.Locals("user_id", user) + return c.Next() + } + + if len(c.FormValue("liman-token")) > 0 { + user, err := liman.AuthWithAccessToken( + strings.Trim(c.FormValue("liman-token"), ""), + ) + + if err != nil { + return fiber.NewError(fiber.StatusUnauthorized, err.Error()) + } + + c.Locals("user_id", user) + return c.Next() + } + + // TODO: Log handlers + + return fiber.NewError(fiber.StatusUnauthorized, "Authorization token is missing.") +} diff --git a/internal/middleware/request.go b/internal/middleware/request.go deleted file mode 100644 index 97d0e61f..00000000 --- a/internal/middleware/request.go +++ /dev/null @@ -1,13 +0,0 @@ -package middleware - -import "github.com/gofiber/fiber/v2" - -func RequestHandler(c *fiber.Ctx) error { - if c.FormValue("liman-token") == "" { - return fiber.NewError(fiber.StatusUnauthorized, "Authorization token is missing.") - } - - - - return c.Next() -} diff --git a/internal/sandbox/command_generator.go b/internal/sandbox/command_generator.go new file mode 100644 index 00000000..bd99a604 --- /dev/null +++ b/internal/sandbox/command_generator.go @@ -0,0 +1,28 @@ +package sandbox + +import ( + "github.com/alessio/shellescape" + "github.com/gofiber/fiber/v2" + "github.com/limanmys/render-engine/app/models" + "github.com/limanmys/render-engine/internal/liman" + "github.com/limanmys/render-engine/pkg/helpers" +) + +func GenerateCommand(params *models.CommandParams) (string, error) { + result := make(map[string]string) + sandboxPath := "/liman/sandbox/php/index.php" + + settings := liman.GetSettings(params.User, params.Server, params.Extension) + extension, _ := liman.GetExtension(&models.Extension{ID: params.Extension}) + server, _ := liman.GetServer(&models.Server{ID: params.Server}) + + extension.Name = shellescape.StripUnsafe(extension.Name) + + if !helpers.IsLetter(extension.Name) { + return "", fiber.NewError(fiber.StatusUnprocessableEntity, "Extension names can only contains letters") + } + + // TODO: complete the command generator + + return "", nil +} diff --git a/pkg/helpers/string.go b/pkg/helpers/string.go new file mode 100644 index 00000000..767f8e13 --- /dev/null +++ b/pkg/helpers/string.go @@ -0,0 +1,12 @@ +package helpers + +import "unicode" + +func IsLetter(s string) bool { + for _, r := range s { + if !unicode.IsLetter(r) { + return false + } + } + return true +} diff --git a/pkg/helpers/uuid.go b/pkg/helpers/uuid.go new file mode 100644 index 00000000..e1dc0973 --- /dev/null +++ b/pkg/helpers/uuid.go @@ -0,0 +1,8 @@ +package helpers + +import "github.com/google/uuid" + +func CheckUUID(u string) bool { + _, err := uuid.Parse(u) + return err == nil +} diff --git a/pkg/utils/server.go b/pkg/utils/server.go index c989c3ed..8eaa60a6 100644 --- a/pkg/utils/server.go +++ b/pkg/utils/server.go @@ -21,7 +21,7 @@ func CreateServer(port int) { app.Use(recover.New()) app.Use(compress.New()) - app.Use(middleware.RequestHandler) + app.Use(middleware.NewAuthorization()) // Mount routes routes.Install(app)