An atproto PDS written in Go
at main 2.2 kB view raw
1package server 2 3import ( 4 "github.com/haileyok/cocoon/internal/helpers" 5 "github.com/haileyok/cocoon/models" 6 "github.com/ipfs/go-cid" 7 "github.com/labstack/echo/v4" 8) 9 10type ComAtprotoServerCheckAccountStatusResponse struct { 11 Activated bool `json:"activated"` 12 ValidDid bool `json:"validDid"` 13 RepoCommit string `json:"repoCommit"` 14 RepoRev string `json:"repoRev"` 15 RepoBlocks int64 `json:"repoBlocks"` 16 IndexedRecords int64 `json:"indexedRecords"` 17 PrivateStateValues int64 `json:"privateStateValues"` 18 ExpectedBlobs int64 `json:"expectedBlobs"` 19 ImportedBlobs int64 `json:"importedBlobs"` 20} 21 22func (s *Server) handleServerCheckAccountStatus(e echo.Context) error { 23 urepo := e.Get("repo").(*models.RepoActor) 24 25 resp := ComAtprotoServerCheckAccountStatusResponse{ 26 Activated: true, // TODO: should allow for deactivation etc. 27 ValidDid: true, // TODO: should probably verify? 28 RepoRev: urepo.Rev, 29 ImportedBlobs: 0, // TODO: ??? 30 } 31 32 rootcid, err := cid.Cast(urepo.Root) 33 if err != nil { 34 s.logger.Error("error casting cid", "error", err) 35 return helpers.ServerError(e, nil) 36 } 37 resp.RepoCommit = rootcid.String() 38 39 type CountResp struct { 40 Ct int64 41 } 42 43 var blockCtResp CountResp 44 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil { 45 s.logger.Error("error getting block count", "error", err) 46 return helpers.ServerError(e, nil) 47 } 48 resp.RepoBlocks = blockCtResp.Ct 49 50 var recCtResp CountResp 51 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil { 52 s.logger.Error("error getting record count", "error", err) 53 return helpers.ServerError(e, nil) 54 } 55 resp.IndexedRecords = recCtResp.Ct 56 57 var blobCtResp CountResp 58 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil { 59 s.logger.Error("error getting record count", "error", err) 60 return helpers.ServerError(e, nil) 61 } 62 resp.ExpectedBlobs = blobCtResp.Ct 63 64 return e.JSON(200, resp) 65}