package app import ( "net/http" "checkIP/internal/mmdb" "checkIP/internal/network" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" ) func NewRouter(reader *mmdb.Reader) *gin.Engine { router := gin.New() router.Use(gin.Recovery()) router.Use(gin.LoggerWithWriter(logrus.StandardLogger().Out)) router.GET("/", func(c *gin.Context) { ip := c.ClientIP() if ip == "" { c.String(http.StatusBadRequest, "Invalid IP") return } ipInfo := network.GetIPInformation(ip) fields := logrus.Fields{ "ip": ipInfo.IP, "is_private": ipInfo.IsPrivate, } if ipInfo.IsPrivate { fields["private_cidr"] = ipInfo.PrivateCIDR } logrus.WithFields(fields).Info("ip check") if ipInfo.IsPrivate { c.String(http.StatusBadRequest, "Invalid IP") return } ipLocation, err := reader.QueryIP(ipInfo.IP) if err != nil { logrus.WithError(err).Error("mmdb lookup failed") c.Status(http.StatusInternalServerError) return } logrus.WithField("ip_info", ipLocation).Info("mmdb lookup") c.JSON(http.StatusOK, ipLocation) }) return router }