/
query.go
141 lines (117 loc) · 3.82 KB
/
query.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package cli
import (
"context"
"fmt"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/spf13/cobra"
"github.com/allinbits/cosmos-cash/v3/x/verifiable-credential/types"
)
// GetQueryCmd returns the cli query commands for this module
func GetQueryCmd(queryRoute string) *cobra.Command {
// Group verifiable-credential queries under a subcommand
cmd := &cobra.Command{
Use: types.ModuleName,
Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName),
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}
// this line is used by starport scaffolding # 1
cmd.AddCommand(
GetCmdQueryVerifiableCredentials(),
GetCmdQueryVerifiableCredential(),
GetCmdQueryValidateVerifiableCredential(),
)
return cmd
}
func GetCmdQueryVerifiableCredentials() *cobra.Command {
cmd := &cobra.Command{
Use: "verifiable-credentials",
Short: "Query for all verifiable credentials",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
queryClient := types.NewQueryClient(clientCtx)
pageReq, err := client.ReadPageRequest(cmd.Flags())
if err != nil {
return err
}
result, err := queryClient.VerifiableCredentials(
context.Background(),
&types.QueryVerifiableCredentialsRequest{
Pagination: pageReq,
},
)
if err != nil {
return err
}
return clientCtx.PrintProto(result)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}
// GetCmdQueryVerifiableCredential implements the VerifiableCredential query command.
func GetCmdQueryVerifiableCredential() *cobra.Command {
cmd := &cobra.Command{
Use: "verifiable-credential [verifiable-credential-id]",
Short: "Query a verifiable-credential",
Long: `Query details about an individual verifiable-credential.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
queryClient := types.NewQueryClient(clientCtx)
params := &types.QueryVerifiableCredentialRequest{VerifiableCredentialId: args[0]}
res, err := queryClient.VerifiableCredential(cmd.Context(), params)
if err != nil {
return err
}
return clientCtx.PrintProto(&res.VerifiableCredential)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}
// GetCmdQueryValidateVerifiableCredential implements the VerifiableCredential query command.
func GetCmdQueryValidateVerifiableCredential() *cobra.Command {
cmd := &cobra.Command{
Use: "validate-verifiable-credential [verifiable-credential-id] [pubkey]",
Short: "Validate a verifiable-credential",
Long: `Validate proof for an individual verifiable-credential.`,
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientQueryContext(cmd)
if err != nil {
return err
}
queryClient := types.NewQueryClient(clientCtx)
// query to get the verifiable credential
params := &types.QueryVerifiableCredentialRequest{VerifiableCredentialId: args[0]}
res, err := queryClient.VerifiableCredential(cmd.Context(), params)
if err != nil {
return err
}
// check the returned credential is signed by the provided pubkey
var pk cryptotypes.PubKey
err = clientCtx.Codec.UnmarshalInterfaceJSON([]byte(args[1]), &pk)
if err != nil {
panic(err)
}
isValid := res.VerifiableCredential.Validate(pk)
result := &types.QueryValidateVerifiableCredentialResponse{
IsValid: isValid,
}
return clientCtx.PrintProto(result)
},
}
flags.AddQueryFlagsToCmd(cmd)
return cmd
}