diff options
Diffstat (limited to 'utils')
| -rw-r--r-- | utils/meta/builder.go | 20 | ||||
| -rw-r--r-- | utils/meta/constants.go | 6 | ||||
| -rw-r--r-- | utils/meta/functions.go | 53 | ||||
| -rw-r--r-- | utils/meta/request.go | 43 | ||||
| -rw-r--r-- | utils/meta/types.go | 17 | ||||
| -rw-r--r-- | utils/meta/value.go | 30 |
6 files changed, 169 insertions, 0 deletions
diff --git a/utils/meta/builder.go b/utils/meta/builder.go new file mode 100644 index 0000000..4ae2648 --- /dev/null +++ b/utils/meta/builder.go @@ -0,0 +1,20 @@ +package meta + +import ( + "dove/types" + + "github.com/gofiber/fiber/v2" +) + +func BuildRequest(context *fiber.Ctx) types.Request { + return types.Request{ + Path: context.Path(), + Method: context.Method(), + Query: buildQueryParams(context), + Params: buildRouteParams(context), + Headers: buildHeaders(context), + QueryString: string(context.Request().URI().QueryString()), + IP: context.IP(), + URL: context.OriginalURL(), + } +} diff --git a/utils/meta/constants.go b/utils/meta/constants.go new file mode 100644 index 0000000..3f2ce68 --- /dev/null +++ b/utils/meta/constants.go @@ -0,0 +1,6 @@ +package meta + +const ( + LOG_PREFIX = "Meta" + REQUEST_KEY = "__request" +) diff --git a/utils/meta/functions.go b/utils/meta/functions.go new file mode 100644 index 0000000..0b8f309 --- /dev/null +++ b/utils/meta/functions.go @@ -0,0 +1,53 @@ +package meta + +import ( + "dove/types" + + "github.com/gofiber/fiber/v2" +) + +func findParam(params []types.Param, key string) (string, bool) { + for _, param := range params { + if param.Key == key { + return param.Value, true + } + } + + return "", false +} + +func buildQueryParams(context *fiber.Ctx) []types.Param { + params := make([]types.Param, 0) + context.Request().URI().QueryArgs().VisitAll(func(name []byte, paramValue []byte) { + params = append(params, types.Param{ + Key: string(name), + Value: string(paramValue), + }) + }) + + return params +} + +func buildRouteParams(context *fiber.Ctx) []types.Param { + params := make([]types.Param, 0) + for name, routeValue := range context.AllParams() { + params = append(params, types.Param{ + Key: name, + Value: routeValue, + }) + } + + return params +} + +func buildHeaders(context *fiber.Ctx) []types.Param { + params := make([]types.Param, 0) + context.Request().Header.VisitAll(func(name []byte, headerValue []byte) { + params = append(params, types.Param{ + Key: string(name), + Value: string(headerValue), + }) + }) + + return params +} diff --git a/utils/meta/request.go b/utils/meta/request.go new file mode 100644 index 0000000..3098970 --- /dev/null +++ b/utils/meta/request.go @@ -0,0 +1,43 @@ +package meta + +import ( + "dove/messages" + "dove/types" + "dove/utils/logger" + + "github.com/gofiber/fiber/v2" +) + +func Request(context *fiber.Ctx) request { + data, ok := context.Locals(REQUEST_KEY).(types.Request) + if !ok { + logger.Errorf(LOG_PREFIX, messages.MetaRequestContextMissing) + return request{} + } + + return request{ + Request: data, + context: context, + } +} + +func (self request) Param(key string) value { + if self.context != nil { + result := self.context.Params(key) + if result != "" { + return value{data: result, found: true} + } + } + + return value{} +} + +func (self request) Query(key string) value { + result, found := findParam(self.Request.Query, key) + return value{data: result, found: found} +} + +func (self request) Header(key string) value { + result, found := findParam(self.Request.Headers, key) + return value{data: result, found: found} +} diff --git a/utils/meta/types.go b/utils/meta/types.go new file mode 100644 index 0000000..8aa710f --- /dev/null +++ b/utils/meta/types.go @@ -0,0 +1,17 @@ +package meta + +import ( + "dove/types" + + "github.com/gofiber/fiber/v2" +) + +type request struct { + types.Request + context *fiber.Ctx +} + +type value struct { + data string + found bool +} diff --git a/utils/meta/value.go b/utils/meta/value.go new file mode 100644 index 0000000..fb90500 --- /dev/null +++ b/utils/meta/value.go @@ -0,0 +1,30 @@ +package meta + +import ( + "dove/messages" + "dove/utils/logger" +) + +func (self value) String() string { + return self.data +} + +func (self value) Exists() bool { + return self.found +} + +func (self value) Or(fallback string) string { + if self.found { + return self.data + } + + return fallback +} + +func (self value) Required() string { + if !self.found { + logger.Errorf(LOG_PREFIX, messages.MetaRequiredValueMissing) + } + + return self.data +} |
