go_study/fabric-main/core/handlers/library/config.go

64 lines
1.8 KiB
Go

/*
Copyright IBM Corp All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package library
import (
"github.com/mitchellh/mapstructure"
"github.com/spf13/viper"
)
// Config configures the factory methods
// and plugins for the registry
type Config struct {
AuthFilters []*HandlerConfig `yaml:"authFilters"`
Decorators []*HandlerConfig `yaml:"decorators"`
Endorsers PluginMapping `yaml:"endorsers"`
Validators PluginMapping `yaml:"validators"`
}
// PluginMapping stores a map between chaincode id to plugin config
type PluginMapping map[string]*HandlerConfig
// HandlerConfig defines configuration for a plugin or compiled handler
type HandlerConfig struct {
Name string `yaml:"name"`
Library string `yaml:"library"`
}
func LoadConfig() (Config, error) {
var authFilters, decorators []*HandlerConfig
if err := mapstructure.Decode(viper.Get("peer.handlers.authFilters"), &authFilters); err != nil {
return Config{}, err
}
if err := mapstructure.Decode(viper.Get("peer.handlers.decorators"), &decorators); err != nil {
return Config{}, err
}
endorsers, validators := make(PluginMapping), make(PluginMapping)
e := viper.GetStringMap("peer.handlers.endorsers")
for k := range e {
name := viper.GetString("peer.handlers.endorsers." + k + ".name")
library := viper.GetString("peer.handlers.endorsers." + k + ".library")
endorsers[k] = &HandlerConfig{Name: name, Library: library}
}
v := viper.GetStringMap("peer.handlers.validators")
for k := range v {
name := viper.GetString("peer.handlers.validators." + k + ".name")
library := viper.GetString("peer.handlers.validators." + k + ".library")
validators[k] = &HandlerConfig{Name: name, Library: library}
}
return Config{
AuthFilters: authFilters,
Decorators: decorators,
Endorsers: endorsers,
Validators: validators,
}, nil
}