diff options
Diffstat (limited to 'http/router.go')
-rw-r--r-- | http/router.go | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/http/router.go b/http/router.go new file mode 100644 index 0000000..204243f --- /dev/null +++ b/http/router.go @@ -0,0 +1,110 @@ +package http + +import ( + "io" + "net/http" + + "git.capotej.com/capotej/communique/registry" + "github.com/gin-gonic/gin" +) + +type Router struct { + registry *registry.Registry +} + +func NewRouter(registry *registry.Registry) *Router { + return &Router{registry: registry} +} + +func (s *Router) 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.WebfingerResource(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.Profile(actorParam) + if resource != nil { + c.Writer.Header().Set("Content-Type", "application/activity+json") + 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.Inbox(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") + var resource map[string]interface{} + if c.Query("page") == "true" { + resource, _ = s.registry.OutboxCollection(actorParam) + } else { + resource, _ = s.registry.Outbox(actorParam) + } + if resource != nil { + c.JSON(http.StatusOK, resource) + c.Writer.Header().Set("Content-Type", "application/activity+json") + } else { + c.JSON(http.StatusNotFound, nil) + } + }) + + // Single activity + router.GET("/actors/:actor/activity/:id", func(c *gin.Context) { + actorParam := c.Param("actor") + idParam := c.Param("id") + var resource map[string]interface{} + resource, _ = s.registry.Activity(actorParam, idParam) + + if resource != nil { + c.Writer.Header().Set("Content-Type", "application/activity+json") + c.JSON(http.StatusOK, resource) + } else { + c.JSON(http.StatusNotFound, nil) + } + }) + + // Single note + router.GET("/actors/:actor/activity/:id/note", func(c *gin.Context) { + actorParam := c.Param("actor") + idParam := c.Param("id") + var resource map[string]interface{} + resource, _ = s.registry.Activity(actorParam, idParam) + + if resource != nil { + c.Writer.Header().Set("Content-Type", "application/activity+json") + c.JSON(http.StatusOK, resource) + } else { + c.JSON(http.StatusNotFound, nil) + } + }) + + router.Run() +} |