aboutsummaryrefslogtreecommitdiff
path: root/http/router.go
diff options
context:
space:
mode:
Diffstat (limited to 'http/router.go')
-rw-r--r--http/router.go110
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()
+}