versia-go/internal/handlers/user_handler/versia_webfinger.go

41 lines
1.1 KiB
Go
Raw Normal View History

2024-08-11 03:51:22 +02:00
package user_handler
import (
2024-08-20 22:43:26 +02:00
"errors"
2024-08-11 03:51:22 +02:00
"github.com/gofiber/fiber/v2"
2024-08-28 00:25:25 +02:00
"github.com/versia-pub/versia-go/config"
"github.com/versia-pub/versia-go/internal/api_schema"
"github.com/versia-pub/versia-go/internal/helpers"
"github.com/versia-pub/versia-go/pkg/webfinger"
2024-08-11 03:51:22 +02:00
)
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 {
2024-08-20 22:43:26 +02:00
return c.Status(fiber.StatusBadRequest).JSON(webfinger.Response{
2024-08-11 03:51:22 +02:00
Error: helpers.StringPtr("The requested user is a remote user"),
})
}
wf, err := i.userService.GetWebfingerForUser(c.UserContext(), userID.ID)
if err != nil {
2024-08-20 22:43:26 +02:00
if errors.Is(err, api_schema.ErrUserNotFound) {
return c.Status(fiber.StatusNotFound).JSON(webfinger.Response{
Error: helpers.StringPtr("User could not be found"),
})
}
2024-08-11 03:51:22 +02:00
return c.Status(fiber.StatusInternalServerError).JSON(webfinger.Response{
Error: helpers.StringPtr("Failed to query user"),
})
}
return c.JSON(wf.WebFingerResource())
}