/
config.go
79 lines (61 loc) · 1.45 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package config
import (
"fmt"
"io"
"net/url"
"os"
"strconv"
"gopkg.in/yaml.v2"
)
var App Application
type Application struct {
Port string `yaml:"port" env-default:"8080"`
BaseUrl string `yaml:"baseUrl" env-default:"/"`
DbUrl string `yaml:"db_url"`
TokenSecret string `yaml:"token_secret"`
TokenLifeTime int `yaml:"token_lifetime"`
}
type cfg struct {
App Application `yaml:"app"`
}
func LoadConfig(path string) error {
var conf cfg
yamlFile, err := os.Open(path)
if err != nil {
return err
}
content, err := io.ReadAll(yamlFile)
if err != nil {
return err
}
err = yaml.Unmarshal(content, &conf)
if err != nil {
return err
}
App = conf.App
return conf.validate()
}
func (c cfg) validate() error {
// Port
if num, err := strconv.Atoi(c.App.Port); err != nil {
return fmt.Errorf("invalid format app.port: %s", c.App.Port)
} else if num < 1 {
return fmt.Errorf("not allowed value app.port: %s", c.App.Port)
}
// BaseUrl
if _, err := url.Parse(c.App.BaseUrl); err != nil {
return fmt.Errorf("invalid format app.baseUrl: %s", c.App.BaseUrl)
}
// MongoBD URL
if _, err := url.Parse(c.App.DbUrl); err != nil {
return fmt.Errorf("invalid format app.DbUrl: %s", c.App.DbUrl)
}
// Token sercret
if len(c.App.TokenSecret) == 0 {
return fmt.Errorf("value of app.token_secret is empty")
}
if c.App.TokenLifeTime < 5 {
return fmt.Errorf("value of app.token_lifetime field is empty")
}
return nil
}