87 lines
1.8 KiB
Go
Executable File
87 lines
1.8 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())
|
|
}
|
|
}
|
|
|
|
func Location(c *fiber.Ctx) (string, error) {
|
|
ip := IP(c)
|
|
_, err := Http.GeoIP.GetLocation(ip)
|
|
if err != nil {
|
|
return "127.0.0.1", err
|
|
}
|
|
return "127.0.0.1", err
|
|
}
|
|
|
|
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)
|
|
}
|