package http import ( "io" "net/http" "git.capotej.com/capotej/communique/registry" "github.com/gin-gonic/gin" ) type Server struct { registry *registry.Registry } func NewServer(registry *registry.Registry) *Server { return &Server{registry: registry} } func (s *Server) Start(zapWriter io.Writer) { router := gin.Default() router.SetTrustedProxies(nil) gin.DisableConsoleColor() gin.DefaultWriter = zapWriter // send gin logs to zap // Webfinger router.GET("/.well-known/webfinger", func(c *gin.Context) { resourceParam := c.Query("resource") resource := s.registry.LookupResource(resourceParam) if resource != nil { c.JSON(http.StatusOK, resource) } else { c.JSON(http.StatusNotFound, nil) } }) // "User" endpoint router.GET("/actors/:actor", func(c *gin.Context) { actorParam := c.Param("actor") resource := s.registry.LookupByName(actorParam) if resource != nil { c.JSON(http.StatusOK, resource) } else { c.JSON(http.StatusNotFound, nil) } }) // Inbox router.POST("/actors/:actor/inbox", func(c *gin.Context) { actorParam := c.Param("actor") resource := s.registry.LookupByName(actorParam) if resource != nil { c.JSON(http.StatusOK, resource) } else { c.JSON(http.StatusNotFound, nil) } }) // Outbox router.GET("/actors/:actor/outbox", func(c *gin.Context) { actorParam := c.Param("actor") resource := s.registry.LookupByName(actorParam) if resource != nil { c.JSON(http.StatusOK, resource) } else { c.JSON(http.StatusNotFound, nil) } }) router.Run() }