Files
soft_usite/app/app.go
T

80 lines
1.7 KiB
Go
Executable File

package app
import (
"regexp"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/compress"
"github.com/gofiber/fiber/v2/middleware/etag"
"github.com/gofiber/fiber/v2/middleware/pprof"
"github.com/gofiber/fiber/v2/middleware/recover"
"github.com/sirupsen/logrus"
"github.com/sujit-baniya/fiber-boilerplate/config"
)
var Http *config.AppConfig
var Version = "v1.0"
func Load(configFile string) {
Http = &config.AppConfig{ConfigFile: configFile}
Http.Setup()
LoadBuiltInMiddlewares(Http)
}
func LoadBuiltInMiddlewares(app *config.AppConfig) {
app.Server.Use(recover.New())
app.Server.Use(etag.New())
app.Server.Use(compress.New(compress.Config{
Level: 1,
}))
if app.Server.Debug {
app.Server.Use(pprof.New())
}
}
var fetchIpFromString = regexp.MustCompile(`(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})`)
var possibleHeaderes = []string{
"X-Original-Forwarded-For",
"X-Forwarded-For",
"X-Real-Ip",
"X-Client-Ip",
"Forwarded-For",
"Forwarded",
"Remote-Addr",
"Client-Ip",
"CF-Connecting-IP",
}
// determine user ip
func IP(c *fiber.Ctx) string {
headerValue := []byte{}
if Http.Server.Config().ProxyHeader == "*" {
for _, headerName := range possibleHeaderes {
headerValue = c.Request().Header.Peek(headerName)
if len(headerValue) > 3 {
return string(fetchIpFromString.Find(headerValue))
}
}
}
headerValue = []byte(c.IP())
if len(headerValue) <= 3 {
headerValue = []byte("0.0.0.0")
}
// find ip address in string
return string(fetchIpFromString.Find(headerValue))
}
var Logger *logrus.Logger
func InitLogger() {
Logger = logrus.New()
Logger.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
Logger.SetLevel(logrus.InfoLevel)
}