forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package xrpc
2
3import (
4 "net/http"
5 "strconv"
6
7 "tangled.org/core/api/tangled"
8 xrpcerr "tangled.org/core/xrpc/errors"
9)
10
11func (x *Xrpc) ListKeys(w http.ResponseWriter, r *http.Request) {
12 cursor := r.URL.Query().Get("cursor")
13
14 limit := 100 // default
15 if limitStr := r.URL.Query().Get("limit"); limitStr != "" {
16 if l, err := strconv.Atoi(limitStr); err == nil && l > 0 && l <= 1000 {
17 limit = l
18 }
19 }
20
21 keys, nextCursor, err := x.Db.GetPublicKeysPaginated(limit, cursor)
22 if err != nil {
23 x.Logger.Error("failed to get public keys", "error", err)
24 writeError(w, xrpcerr.NewXrpcError(
25 xrpcerr.WithTag("InternalServerError"),
26 xrpcerr.WithMessage("failed to retrieve public keys"),
27 ), http.StatusInternalServerError)
28 return
29 }
30
31 publicKeys := make([]*tangled.KnotListKeys_PublicKey, 0, len(keys))
32 for _, key := range keys {
33 publicKeys = append(publicKeys, &tangled.KnotListKeys_PublicKey{
34 Did: key.Did,
35 Key: key.Key,
36 CreatedAt: key.CreatedAt,
37 })
38 }
39
40 response := tangled.KnotListKeys_Output{
41 Keys: publicKeys,
42 }
43
44 if nextCursor != "" {
45 response.Cursor = &nextCursor
46 }
47
48 writeJson(w, response)
49}