summaryrefslogtreecommitdiff
path: root/nexus/utils/meta/request.go
diff options
context:
space:
mode:
Diffstat (limited to 'nexus/utils/meta/request.go')
-rw-r--r--nexus/utils/meta/request.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/nexus/utils/meta/request.go b/nexus/utils/meta/request.go
new file mode 100644
index 0000000..e9c649d
--- /dev/null
+++ b/nexus/utils/meta/request.go
@@ -0,0 +1,108 @@
+package meta
+
+import (
+ "nexus/utils/logger"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+type Param struct {
+ Key string
+ Value string
+}
+
+type RequestInfo struct {
+ Path string
+ Method string
+ Query []Param
+ Params []Param
+ Headers []Param
+ QueryString string
+ IP string
+ URL string
+}
+
+type RequestData struct {
+ RequestInfo
+ Context *fiber.Ctx
+}
+
+func BuildRequest(context *fiber.Ctx) RequestInfo {
+ return RequestInfo{
+ 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(),
+ }
+}
+
+func Request(context *fiber.Ctx) *RequestData {
+ data, ok := context.Locals(RequestKey).(RequestInfo)
+ if !ok {
+ logger.Errorf(LogPrefix, RequestContextMissing)
+ return nil
+ }
+
+ return &RequestData{
+ RequestInfo: data,
+ Context: context,
+ }
+}
+
+func (self *RequestData) Param(key string) string {
+ if self == nil || self.Context == nil {
+ return ""
+ }
+ return self.Context.Params(key)
+}
+
+func (self *RequestData) Query(key string) string {
+ if self == nil {
+ return ""
+ }
+ return findParam(self.RequestInfo.Query, key)
+}
+
+func (self *RequestData) Header(key string) string {
+ if self == nil {
+ return ""
+ }
+ return findParam(self.RequestInfo.Headers, key)
+}
+
+func buildQueryParams(context *fiber.Ctx) []Param {
+ params := make([]Param, 0)
+ context.Request().URI().QueryArgs().VisitAll(func(name []byte, value []byte) {
+ params = append(params, Param{Key: string(name), Value: string(value)})
+ })
+ return params
+}
+
+func buildRouteParams(context *fiber.Ctx) []Param {
+ params := make([]Param, 0)
+ for name, value := range context.AllParams() {
+ params = append(params, Param{Key: name, Value: value})
+ }
+ return params
+}
+
+func buildHeaders(context *fiber.Ctx) []Param {
+ params := make([]Param, 0)
+ context.Request().Header.VisitAll(func(name []byte, value []byte) {
+ params = append(params, Param{Key: string(name), Value: string(value)})
+ })
+ return params
+}
+
+func findParam(params []Param, key string) string {
+ for _, param := range params {
+ if param.Key == key {
+ return param.Value
+ }
+ }
+ return ""
+}