arnaucube
arnaucube/go-dhtPublic Self-hosted repository
go-dht/config/config.go
config/config.goRaw
 1package config
 2
 3import (
 4	"go-dht/kademlia"
 5
 6	"github.com/spf13/viper"
 7	"github.com/urfave/cli"
 8)
 9
10type Config struct {
11	ID            string
12	Addr          string
13	Port          string
14	AdminPort     string
15	KnownNodesStr []KnownNodeStr        `mapstructure:"knownnodes"`
16	KnownNodes    []kademlia.ListedNode `mapstructure:"-"`
17	Storage       string
18}
19
20type KnownNodeStr struct {
21	ID   string
22	Addr string
23	Port string
24}
25
26var C Config
27
28func MustRead(c *cli.Context) error {
29	viper.SetConfigType("yaml")
30	viper.SetConfigName("config")
31	viper.AddConfigPath(".")
32
33	if c.GlobalString("config") != "" {
34		viper.SetConfigFile(c.GlobalString("config"))
35	}
36
37	if err := viper.ReadInConfig(); err != nil {
38		return err
39	}
40	if err := viper.Unmarshal(&C); err != nil {
41		return err
42	}
43
44	for _, v := range C.KnownNodesStr {
45		id, err := kademlia.IDFromString(v.ID)
46		if err != nil {
47			return err
48		}
49		kn := kademlia.ListedNode{
50			ID:   id,
51			Addr: v.Addr,
52			Port: v.Port,
53		}
54		C.KnownNodes = append(C.KnownNodes, kn)
55	}
56	C.KnownNodesStr = []KnownNodeStr{}
57	return nil
58}