80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package discovery
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/hyperledger/fabric/cmd/common"
|
|
discovery "github.com/hyperledger/fabric/discovery/client"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// NewConfigCmd creates a new ConfigCmd
|
|
func NewConfigCmd(stub Stub, parser ResponseParser) *ConfigCmd {
|
|
return &ConfigCmd{
|
|
stub: stub,
|
|
parser: parser,
|
|
}
|
|
}
|
|
|
|
// ConfigCmd executes a command that retrieves config
|
|
type ConfigCmd struct {
|
|
stub Stub
|
|
server *string
|
|
channel *string
|
|
parser ResponseParser
|
|
}
|
|
|
|
// SetServer sets the server of the ConfigCmd
|
|
func (pc *ConfigCmd) SetServer(server *string) {
|
|
pc.server = server
|
|
}
|
|
|
|
// SetChannel sets the channel of the ConfigCmd
|
|
func (pc *ConfigCmd) SetChannel(channel *string) {
|
|
pc.channel = channel
|
|
}
|
|
|
|
// Execute executes the command
|
|
func (pc *ConfigCmd) Execute(conf common.Config) error {
|
|
if pc.server == nil || *pc.server == "" {
|
|
return errors.New("no server specified")
|
|
}
|
|
if pc.channel == nil || *pc.channel == "" {
|
|
return errors.New("no channel specified")
|
|
}
|
|
|
|
server := *pc.server
|
|
channel := *pc.channel
|
|
|
|
req := discovery.NewRequest().OfChannel(channel).AddConfigQuery()
|
|
res, err := pc.stub.Send(server, conf, req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return pc.parser.ParseResponse(channel, res)
|
|
}
|
|
|
|
// ConfigResponseParser parses config responses
|
|
type ConfigResponseParser struct {
|
|
io.Writer
|
|
}
|
|
|
|
// ParseResponse parses the given response for the given channel
|
|
func (parser *ConfigResponseParser) ParseResponse(channel string, res ServiceResponse) error {
|
|
chanConf, err := res.ForChannel(channel).Config()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
jsonBytes, _ := json.MarshalIndent(chanConf, "", "\t")
|
|
fmt.Fprintln(parser.Writer, string(jsonBytes))
|
|
return nil
|
|
}
|