versia-go/internal/handlers/user_handler/versia_webfinger.go
2024-08-28 01:10:38 +02:00

41 lines
1.1 KiB
Go

package user_handler
import (
"errors"
"github.com/gofiber/fiber/v2"
"github.com/lysand-org/versia-go/config"
"github.com/lysand-org/versia-go/internal/api_schema"
"github.com/lysand-org/versia-go/internal/helpers"
"github.com/lysand-org/versia-go/pkg/webfinger"
)
func (i *Handler) Webfinger(c *fiber.Ctx) error {
userID, err := webfinger.ParseResource(c.Query("resource"))
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(webfinger.Response{
Error: helpers.StringPtr(err.Error()),
})
}
if userID.Domain != config.C.PublicAddress.Host {
return c.Status(fiber.StatusBadRequest).JSON(webfinger.Response{
Error: helpers.StringPtr("The requested user is a remote user"),
})
}
wf, err := i.userService.GetWebfingerForUser(c.UserContext(), userID.ID)
if err != nil {
if errors.Is(err, api_schema.ErrUserNotFound) {
return c.Status(fiber.StatusNotFound).JSON(webfinger.Response{
Error: helpers.StringPtr("User could not be found"),
})
}
return c.Status(fiber.StatusInternalServerError).JSON(webfinger.Response{
Error: helpers.StringPtr("Failed to query user"),
})
}
return c.JSON(wf.WebFingerResource())
}