89 lines
1.6 KiB
Go
89 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
func init() {
|
|
godotenv.Load()
|
|
}
|
|
|
|
func main() {
|
|
app := fiber.New()
|
|
|
|
allowedOrigins := os.Getenv("ALLOWED_ORIGINS")
|
|
if allowedOrigins == "" {
|
|
fmt.Println(`ALLOWED_ORIGINS environment variable is unset. Using wildcard "*".`)
|
|
allowedOrigins = "*"
|
|
}
|
|
|
|
app.Use(cors.New(cors.Config{
|
|
AllowOrigins: allowedOrigins,
|
|
AllowHeaders: "*",
|
|
}))
|
|
|
|
app.All("/", func(c *fiber.Ctx) (err error) {
|
|
urlStr := c.Query("url")
|
|
if urlStr == "" {
|
|
return c.Status(404).SendString("<3")
|
|
}
|
|
_, err = url.ParseRequestURI(urlStr)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
request, err := http.NewRequest(c.Method(), urlStr, bytes.NewReader(c.Body()))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
for key, values := range c.GetReqHeaders() {
|
|
if key == "X-Cookie" {
|
|
key = "Cookie"
|
|
}
|
|
request.Header.Add(key, values)
|
|
}
|
|
|
|
response, err := http.DefaultClient.Do(request)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer response.Body.Close()
|
|
|
|
for key, values := range response.Header {
|
|
if key == "Access-Control-Allow-Origin" || key == "Access-Control-Allow-Credentials" {
|
|
continue
|
|
}
|
|
if key == "Set-Cookie" {
|
|
key = "X-Set-Cookie"
|
|
}
|
|
for _, value := range values {
|
|
c.Response().Header.Add(key, value)
|
|
}
|
|
}
|
|
|
|
c.Set("Content-Type", response.Header.Get("Content-Type"))
|
|
|
|
body, err := io.ReadAll(response.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return c.Send(body)
|
|
})
|
|
|
|
log.Fatal(app.Listen(":32842"))
|
|
}
|