lightcors/main.go
2023-05-14 17:57:40 -05:00

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"))
}