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