60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
package handlers
|
|
|
|
import (
|
|
_ "embed"
|
|
"log"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
//nolint:all
|
|
//go:embed VERSION
|
|
var version string
|
|
|
|
func Api(c *fiber.Ctx) error {
|
|
// Get the url from the URL
|
|
urlQuery := c.Params("*")
|
|
|
|
queries := c.Queries()
|
|
body, req, resp, err := fetchSite(urlQuery, queries)
|
|
if err != nil {
|
|
log.Println("ERROR:", err)
|
|
c.SendStatus(500)
|
|
return c.SendString(err.Error())
|
|
}
|
|
|
|
response := Response{
|
|
Version: version,
|
|
Body: body,
|
|
}
|
|
|
|
response.Request.Headers = make([]any, 0, len(req.Header))
|
|
for k, v := range req.Header {
|
|
response.Request.Headers = append(response.Request.Headers, map[string]string{
|
|
"key": k,
|
|
"value": v[0],
|
|
})
|
|
}
|
|
|
|
response.Response.Headers = make([]any, 0, len(resp.Header))
|
|
for k, v := range resp.Header {
|
|
response.Response.Headers = append(response.Response.Headers, map[string]string{
|
|
"key": k,
|
|
"value": v[0],
|
|
})
|
|
}
|
|
|
|
return c.JSON(response)
|
|
}
|
|
|
|
type Response struct {
|
|
Version string `json:"version"`
|
|
Body string `json:"body"`
|
|
Request struct {
|
|
Headers []interface{} `json:"headers"`
|
|
} `json:"request"`
|
|
Response struct {
|
|
Headers []interface{} `json:"headers"`
|
|
} `json:"response"`
|
|
}
|