Compare commits

..

No commits in common. "11cf35cf0d65f4b3c014439b84b706f63f1e8a33" and "e55077c7e9fa88a0b4728bae98a979bbfbf40738" have entirely different histories.

4 changed files with 30 additions and 47 deletions

View File

@ -5,19 +5,19 @@ A blazing fast reverse proxy with a lot of shining features.
## Features ## Features
1. Reverse proxy 1. Reverse proxy
2. WebSocket Support 2. HTTP2 Support
3. Static File Hosting 3. WebSocket Support
4. Low Configuration 4. Static File Hosting
5. Analytics and Metrics 5. Low Configuration
6. Integrate with CI/CD 6. Analytics and Metrics
7. Web management panel (Work in progres for v2, available in v1) 7. Integrate with CI/CD
8. One-liner CLI 8. Web management panel (Work in progres for v2, available in v1)
9. Open-source and free 9. One-liner CLI
10. **Blazing fast ⚡** 10. Open-source and free
11. **Blazing fast ⚡**
> [!IMPORTANT] > [!IMPORTANT]
> Currently roadsign haven't supported for server-side events. We are working on it. > Currently roadsign haven't supported for server-side events. We are working on it.
> At the same time, we don't support HTTP/2.0, [here's](https://github.com/gofiber/fiber/issues/262) the reason
### How fast is it? ### How fast is it?

View File

@ -1,7 +1,6 @@
package hypertext package hypertext
import ( import (
"fmt"
"github.com/spf13/viper" "github.com/spf13/viper"
"math/rand" "math/rand"
"regexp" "regexp"
@ -95,38 +94,22 @@ func UseProxies(app *fiber.App) {
}) })
} }
func makeResponse(c *fiber.Ctx, region *navi.Region, location *navi.Location, dest *navi.Destination) error { func makeResponse(ctx *fiber.Ctx, region *navi.Region, location *navi.Location, dest *navi.Destination) error {
uri := c.Request().URI().String() uri := ctx.Request().URI().String()
// Modify request // Modify request
for _, transformer := range dest.Transformers { for _, transformer := range dest.Transformers {
if err := transformer.TransformRequest(c); err != nil { if err := transformer.TransformRequest(ctx); err != nil {
return err return err
} }
} }
// Add reserve proxy headers
ip := c.IP()
scheme := c.Protocol()
protocol := string(c.Request().Header.Protocol())
c.Request().Header.Set(fiber.HeaderXForwardedFor, ip)
c.Request().Header.Set(fiber.HeaderXForwardedHost, ip)
c.Request().Header.Set(fiber.HeaderXForwardedProto, scheme)
c.Request().Header.Set(
fiber.HeaderVia,
fmt.Sprintf("%s %s", protocol, viper.GetString("central")),
)
c.Request().Header.Set(
fiber.HeaderForwarded,
fmt.Sprintf("by=%s; for=%s; host=%s; proto=%s", c.IP(), c.IP(), c.Get(fiber.HeaderHost), scheme),
)
// Forward // Forward
err := navi.R.Forward(c, dest) err := navi.R.Forward(ctx, dest)
// Modify response // Modify response
for _, transformer := range dest.Transformers { for _, transformer := range dest.Transformers {
if err := transformer.TransformResponse(c); err != nil { if err := transformer.TransformResponse(ctx); err != nil {
return err return err
} }
} }
@ -143,10 +126,10 @@ func makeResponse(c *fiber.Ctx, region *navi.Region, location *navi.Location, de
Location: location.ID, Location: location.ID,
Destination: dest.ID, Destination: dest.ID,
Uri: uri, Uri: uri,
IpAddress: c.IP(), IpAddress: ctx.IP(),
UserAgent: c.Get(fiber.HeaderUserAgent), UserAgent: ctx.Get(fiber.HeaderUserAgent),
Error: navi.RoadTraceError{ Error: navi.RoadTraceError{
IsNull: err == nil, IsNull: err == nil,
Message: message, Message: message,
}, },
}) })

View File

@ -1,11 +1,12 @@
package sideload package sideload
import ( import (
"code.smartsheep.studio/goatworks/roadsign/pkg/sideload/view"
"fmt" "fmt"
"net/http"
"code.smartsheep.studio/goatworks/roadsign/pkg/sideload/view"
"github.com/gofiber/fiber/v2/middleware/filesystem" "github.com/gofiber/fiber/v2/middleware/filesystem"
jsoniter "github.com/json-iterator/go" jsoniter "github.com/json-iterator/go"
"net/http"
roadsign "code.smartsheep.studio/goatworks/roadsign/pkg" roadsign "code.smartsheep.studio/goatworks/roadsign/pkg"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
@ -42,6 +43,13 @@ func InitSideload() *fiber.App {
}, },
})) }))
app.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(view.FS),
PathPrefix: "dist",
Index: "index.html",
NotFoundFile: "index.html",
}))
cgi := app.Group("/cgi").Name("CGI") cgi := app.Group("/cgi").Name("CGI")
{ {
cgi.Get("/metadata", getMetadata) cgi.Get("/metadata", getMetadata)
@ -59,12 +67,5 @@ func InitSideload() *fiber.App {
webhooks.Put("/sync/:slug", doSync) webhooks.Put("/sync/:slug", doSync)
} }
app.Use("/", filesystem.New(filesystem.Config{
Root: http.FS(view.FS),
PathPrefix: "dist",
Index: "index.html",
NotFoundFile: "dist/index.html",
}))
return app return app
} }

View File

@ -1,5 +1,3 @@
id = "central"
[debug] [debug]
print_routes = false print_routes = false
@ -27,6 +25,7 @@ capture_traces = true
[performance] [performance]
traces_limit = 256 traces_limit = 256
network_timeout = 3_000
prefork = false prefork = false
[security] [security]