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	KnownNodesStr []KnownNodeStr        `mapstructure:"knownnodes"`
15	KnownNodes    []kademlia.ListedNode `mapstructure:"-"`
16}
17
18type KnownNodeStr struct {
19	ID   string
20	Addr string
21	Port string
22}
23
24var C Config
25
26func MustRead(c *cli.Context) error {
27	viper.SetConfigType("yaml")
28	viper.SetConfigName("config")
29	viper.AddConfigPath(".")
30
31	if c.GlobalString("config") != "" {
32		viper.SetConfigFile(c.GlobalString("config"))
33	}
34
35	if err := viper.ReadInConfig(); err != nil {
36		return err
37	}
38	if err := viper.Unmarshal(&C); err != nil {
39		return err
40	}
41
42	for _, v := range C.KnownNodesStr {
43		id, err := kademlia.IDFromString(v.ID)
44		if err != nil {
45			return err
46		}
47		kn := kademlia.ListedNode{
48			ID:   id,
49			Addr: v.Addr,
50			Port: v.Port,
51		}
52		C.KnownNodes = append(C.KnownNodes, kn)
53	}
54	C.KnownNodesStr = []KnownNodeStr{}
55	return nil
56}