yoinkdvr/main.go

81 lines
1.8 KiB
Go
Raw Permalink Normal View History

2024-01-15 20:17:41 +01:00
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)
}