package main import ( "github.com/gofiber/fiber/v2" "github.com/rs/zerolog" "github.com/rs/zerolog/log" "io" "net/http" "os" ) const BaseURL = "https://www.ispyconnect.com" func main() { log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) zerolog.TimeFieldFormat = zerolog.TimeFormatUnix app := fiber.New() app.Get("/api/Agent/SMS", func(c *fiber.Ctx) error { userIdent := c.Query("UserIdent") number := c.Query("Number") body := c.Query("Body") if userIdent == "" || number == "" || body == "" { return c.SendStatus(400) } log.Info().Str("userIdent", userIdent).Str("number", number).Str("body", body).Msg("SMS") return c.SendStatus(200) }) app.Get("/api/Agent/CheckLicense", func(c *fiber.Ctx) error { return c.Send([]byte("true")) }) app.Use(forwardGetFromContext) if err := app.ListenTLS(":443", "/data/ssl.crt", "/data/ssl.key"); err != nil { log.Fatal().Err(err).Msg("Error while starting server") } } func forwardGet(url string, h http.Header) ([]byte, int, http.Header, error) { req, err := http.NewRequest("GET", BaseURL+url, nil) if err != nil { return nil, 0, nil, err } req.Header = h resp, err := http.DefaultClient.Do(req) if err != nil { return nil, 0, nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return nil, resp.StatusCode, nil, err } return body, resp.StatusCode, resp.Header, nil } func forwardGetFromContext(c *fiber.Ctx) error { resp, status, headers, err := forwardGet(c.OriginalURL(), c.GetReqHeaders()) for k, v := range headers { c.Set(k, v[0]) } l := log.Info().Err(err).Str("url", c.OriginalURL()).Int("status", status) query := c.Queries() for k, v := range query { l = l.Str(k, v) } l.Msg("Forwarded request") return c.Status(status).Send(resp) }