2020-08-03 20:01:38 +00:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Config struct {
|
2020-08-19 19:26:48 +00:00
|
|
|
ListenPort string `mapstructure:"listen_port"`
|
|
|
|
ListenAddr string `mapstructure:"listen_addr"`
|
|
|
|
Bootstrap bool `mapstructure:"is_bootstrap"`
|
|
|
|
BootstrapNodeMultiaddr string `mapstructure:"bootstrap_node_multiaddr"`
|
|
|
|
Rendezvous string `mapstructure:"rendezvous"`
|
|
|
|
SessionKey string `mapstructure:"session_key"`
|
2020-10-20 18:18:36 +00:00
|
|
|
Etherium EtheriumConfig `mapstructure:"etherium"`
|
|
|
|
Filecoin FilecoinConfig `mapstructure:"filecoin"`
|
2020-08-19 19:26:48 +00:00
|
|
|
PubSub PubSubConfig `mapstructure:"pubSub"`
|
2020-08-03 20:01:38 +00:00
|
|
|
}
|
|
|
|
|
2020-08-19 19:26:48 +00:00
|
|
|
type EtheriumConfig struct {
|
2020-10-20 18:18:36 +00:00
|
|
|
GatewayAddress string `mapstructure:"gateway_address"`
|
|
|
|
PrivateKey string `mapstructure:"private_key"`
|
|
|
|
OracleEmitterContractAddress string `mapstructure:"oracle_emitter_contract_address"`
|
|
|
|
AggregatorContractAddress string `mapstructure:"aggregator_contract_address"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type FilecoinConfig struct {
|
|
|
|
LotusHost string `mapstructure:"lotusHost"`
|
|
|
|
LotusToken string `mapstructure:"lotusToken"`
|
2020-08-19 19:26:48 +00:00
|
|
|
}
|
2020-08-03 20:01:38 +00:00
|
|
|
|
2020-08-19 19:26:48 +00:00
|
|
|
type PubSubConfig struct {
|
|
|
|
ProtocolID string `mapstructure:"protocolID"`
|
2020-08-03 20:01:38 +00:00
|
|
|
}
|
|
|
|
|
2020-08-19 19:26:48 +00:00
|
|
|
// NewConfig creates a new config based on default values or provided .env file
|
|
|
|
func NewConfig(configPath string) (*Config, error) {
|
|
|
|
cfg := &Config{
|
|
|
|
ListenAddr: "localhost",
|
|
|
|
ListenPort: ":8000",
|
|
|
|
Bootstrap: false,
|
|
|
|
BootstrapNodeMultiaddr: "/ip4/127.0.0.1/tcp/0",
|
|
|
|
Rendezvous: "filecoin-p2p-oracle",
|
|
|
|
Etherium: EtheriumConfig{
|
|
|
|
PrivateKey: "",
|
|
|
|
},
|
|
|
|
SessionKey: "go",
|
|
|
|
PubSub: PubSubConfig{
|
|
|
|
ProtocolID: "p2p-oracle",
|
|
|
|
},
|
|
|
|
}
|
2020-08-03 20:01:38 +00:00
|
|
|
|
2020-08-19 19:26:48 +00:00
|
|
|
viper.SetConfigFile(configPath)
|
2020-08-03 20:01:38 +00:00
|
|
|
err := viper.ReadInConfig()
|
|
|
|
if err != nil {
|
2020-08-19 19:26:48 +00:00
|
|
|
return nil, err
|
2020-08-03 20:01:38 +00:00
|
|
|
}
|
|
|
|
|
2020-08-19 19:26:48 +00:00
|
|
|
err = viper.Unmarshal(cfg)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2020-08-03 20:01:38 +00:00
|
|
|
}
|
2020-08-19 19:26:48 +00:00
|
|
|
|
|
|
|
return cfg, nil
|
2020-08-03 20:01:38 +00:00
|
|
|
}
|