forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
at master 1.1 kB view raw
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}