diff --git a/pkg/internal/web/api/forward.go b/pkg/internal/web/api/forward.go index 04909d3..867d24d 100644 --- a/pkg/internal/web/api/forward.go +++ b/pkg/internal/web/api/forward.go @@ -2,14 +2,39 @@ package api import ( "fmt" + "strings" + "git.solsynth.dev/hypernet/nexus/pkg/internal/directory" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/proxy" "github.com/spf13/viper" "github.com/valyala/fasthttp" - "strings" ) +func forwardWebfinger(c *fiber.Ctx) error { + service := directory.GetServiceInstanceByType("co") + + if service == nil || service.HttpAddr == nil { + return fiber.ErrNotFound + } + + url := c.OriginalURL() + url = strings.Replace(url, "/.well-known", "", 1) + url = *service.HttpAddr + url + + if tk, ok := c.Locals("nex_token").(string); ok { + c.Request().Header.Set(fiber.HeaderAuthorization, fmt.Sprintf("Bearer %s", tk)) + } else { + c.Request().Header.Del(fiber.HeaderAuthorization) + } + + return proxy.Do(c, url, &fasthttp.Client{ + NoDefaultUserAgentHeader: true, + DisablePathNormalizing: true, + StreamResponseBody: true, + }) +} + func forwardService(c *fiber.Ctx) error { serviceType := c.Params("service") ogKeyword := serviceType diff --git a/pkg/internal/web/api/index.go b/pkg/internal/web/api/index.go index f045014..ba727e1 100644 --- a/pkg/internal/web/api/index.go +++ b/pkg/internal/web/api/index.go @@ -26,6 +26,7 @@ func MapControllers(app *fiber.App) { // Some built-in public-accessible APIs wellKnown := app.Group("/.well-known").Name("Well Known") { + wellKnown.Get("/webfinger", forwardWebfinger) // Forward webfinger to Interactive wellKnown.Get("/openid-configuration", func(c *fiber.Ctx) error { service := directory.GetServiceInstanceByType(nex.ServiceTypeAuth) if service == nil || service.HttpAddr == nil {