fork of indigo with slightly nicer lexgen
at main 6.0 kB view raw
1package bgs 2 3import ( 4 "fmt" 5 "io" 6 "net/http" 7 "strconv" 8 9 comatprototypes "github.com/bluesky-social/indigo/api/atproto" 10 "github.com/bluesky-social/indigo/atproto/syntax" 11 "github.com/ipfs/go-cid" 12 "github.com/labstack/echo/v4" 13 "go.opentelemetry.io/otel" 14) 15 16type XRPCError struct { 17 Message string `json:"message"` 18} 19 20func (s *BGS) HandleComAtprotoSyncGetBlocks(c echo.Context) error { 21 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncGetBlocks") 22 defer span.End() 23 24 cids := c.QueryParams()["cids"] 25 did := c.QueryParam("did") 26 _, err := syntax.ParseDID(did) 27 if err != nil { 28 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid did: %s", did)}) 29 } 30 31 for _, cd := range cids { 32 _, err = cid.Parse(cd) 33 if err != nil { 34 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid cid: %s", cd)}) 35 } 36 } 37 38 var out io.Reader 39 var handleErr error 40 // func (s *BGS) handleComAtprotoSyncGetBlocks(ctx context.Context,cids []string,did string) (io.Reader, error) 41 out, handleErr = s.handleComAtprotoSyncGetBlocks(ctx, cids, did) 42 if handleErr != nil { 43 return handleErr 44 } 45 return c.Stream(200, "application/vnd.ipld.car", out) 46} 47 48func (s *BGS) HandleComAtprotoSyncGetLatestCommit(c echo.Context) error { 49 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncGetLatestCommit") 50 defer span.End() 51 did := c.QueryParam("did") 52 53 _, err := syntax.ParseDID(did) 54 if err != nil { 55 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid did: %s", did)}) 56 } 57 58 var out *comatprototypes.SyncGetLatestCommit_Output 59 var handleErr error 60 // func (s *BGS) handleComAtprotoSyncGetLatestCommit(ctx context.Context,did string) (*comatprototypes.SyncGetLatestCommit_Output, error) 61 out, handleErr = s.handleComAtprotoSyncGetLatestCommit(ctx, did) 62 if handleErr != nil { 63 return handleErr 64 } 65 return c.JSON(200, out) 66} 67 68func (s *BGS) HandleComAtprotoSyncGetRecord(c echo.Context) error { 69 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncGetRecord") 70 defer span.End() 71 collection := c.QueryParam("collection") 72 did := c.QueryParam("did") 73 rkey := c.QueryParam("rkey") 74 75 _, err := syntax.ParseRecordKey(rkey) 76 if err != nil { 77 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid rkey: %s", rkey)}) 78 } 79 80 _, err = syntax.ParseNSID(collection) 81 if err != nil { 82 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid collection: %s", collection)}) 83 } 84 85 _, err = syntax.ParseDID(did) 86 if err != nil { 87 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid did: %s", did)}) 88 } 89 90 var out io.Reader 91 var handleErr error 92 // func (s *BGS) handleComAtprotoSyncGetRecord(ctx context.Context,collection string,commit string,did string,rkey string) (io.Reader, error) 93 out, handleErr = s.handleComAtprotoSyncGetRecord(ctx, collection, did, rkey) 94 if handleErr != nil { 95 return handleErr 96 } 97 return c.Stream(200, "application/vnd.ipld.car", out) 98} 99 100func (s *BGS) HandleComAtprotoSyncGetRepo(c echo.Context) error { 101 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncGetRepo") 102 defer span.End() 103 did := c.QueryParam("did") 104 since := c.QueryParam("since") 105 106 _, err := syntax.ParseDID(did) 107 if err != nil { 108 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid did: %s", did)}) 109 } 110 111 var out io.Reader 112 var handleErr error 113 // func (s *BGS) handleComAtprotoSyncGetRepo(ctx context.Context,did string,since string) (io.Reader, error) 114 out, handleErr = s.handleComAtprotoSyncGetRepo(ctx, did, since) 115 if handleErr != nil { 116 return handleErr 117 } 118 return c.Stream(200, "application/vnd.ipld.car", out) 119} 120 121func (s *BGS) HandleComAtprotoSyncListRepos(c echo.Context) error { 122 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncListRepos") 123 defer span.End() 124 125 cursorQuery := c.QueryParam("cursor") 126 limitQuery := c.QueryParam("limit") 127 128 var err error 129 130 limit := 500 131 if limitQuery != "" { 132 limit, err = strconv.Atoi(limitQuery) 133 if err != nil || limit < 1 || limit > 1000 { 134 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid limit: %s", limitQuery)}) 135 } 136 } 137 138 cursor := int64(0) 139 if cursorQuery != "" { 140 cursor, err = strconv.ParseInt(cursorQuery, 10, 64) 141 if err != nil || cursor < 0 { 142 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid cursor: %s", cursorQuery)}) 143 } 144 } 145 146 out, handleErr := s.handleComAtprotoSyncListRepos(ctx, cursor, limit) 147 if handleErr != nil { 148 return handleErr 149 } 150 return c.JSON(200, out) 151} 152 153func (s *BGS) HandleComAtprotoSyncNotifyOfUpdate(c echo.Context) error { 154 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncNotifyOfUpdate") 155 defer span.End() 156 157 var body comatprototypes.SyncNotifyOfUpdate_Input 158 if err := c.Bind(&body); err != nil { 159 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid body: %s", err)}) 160 } 161 var handleErr error 162 // func (s *BGS) handleComAtprotoSyncNotifyOfUpdate(ctx context.Context,body *comatprototypes.SyncNotifyOfUpdate_Input) error 163 handleErr = s.handleComAtprotoSyncNotifyOfUpdate(ctx, &body) 164 if handleErr != nil { 165 return handleErr 166 } 167 return nil 168} 169 170func (s *BGS) HandleComAtprotoSyncRequestCrawl(c echo.Context) error { 171 ctx, span := otel.Tracer("server").Start(c.Request().Context(), "HandleComAtprotoSyncRequestCrawl") 172 defer span.End() 173 174 var body comatprototypes.SyncRequestCrawl_Input 175 if err := c.Bind(&body); err != nil { 176 return c.JSON(http.StatusBadRequest, XRPCError{Message: fmt.Sprintf("invalid body: %s", err)}) 177 } 178 var handleErr error 179 // func (s *BGS) handleComAtprotoSyncRequestCrawl(ctx context.Context,body *comatprototypes.SyncRequestCrawl_Input) error 180 handleErr = s.handleComAtprotoSyncRequestCrawl(ctx, &body) 181 if handleErr != nil { 182 return handleErr 183 } 184 return nil 185}