+1
-1
README.md
+1
-1
README.md
···
31
31
32
32
#### Server
33
33
- [ ] com.atproto.server.activateAccount
34
-
- [ ] com.atproto.server.checkAccountStatus
34
+
- [x] com.atproto.server.checkAccountStatus
35
35
- [x] com.atproto.server.confirmEmail
36
36
- [x] com.atproto.server.createAccount
37
37
- [x] com.atproto.server.createInviteCode
+65
server/handle_server_check_account_status.go
+65
server/handle_server_check_account_status.go
···
1
+
package server
2
+
3
+
import (
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
+
10
+
type 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
+
22
+
func (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
+
}
+1
server/server.go
+1
server/server.go
···
712
712
s.echo.POST("/xrpc/com.atproto.server.resetPassword", s.handleServerResetPassword, s.handleLegacySessionMiddleware, s.handleOauthSessionMiddleware)
713
713
s.echo.POST("/xrpc/com.atproto.server.updateEmail", s.handleServerUpdateEmail, s.handleLegacySessionMiddleware, s.handleOauthSessionMiddleware)
714
714
s.echo.GET("/xrpc/com.atproto.server.getServiceAuth", s.handleServerGetServiceAuth, s.handleLegacySessionMiddleware, s.handleOauthSessionMiddleware)
715
+
s.echo.GET("/xrpc/com.atproto.server.checkAccountStatus", s.handleServerCheckAccountStatus, s.handleLegacySessionMiddleware, s.handleOauthSessionMiddleware)
715
716
716
717
// repo
717
718
s.echo.POST("/xrpc/com.atproto.repo.createRecord", s.handleCreateRecord, s.handleLegacySessionMiddleware, s.handleOauthSessionMiddleware)