diff options
Diffstat (limited to 'web/config.go')
-rw-r--r-- | web/config.go | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/web/config.go b/web/config.go new file mode 100644 index 0000000..01b6f47 --- /dev/null +++ b/web/config.go | |||
@@ -0,0 +1,75 @@ | |||
1 | package web | ||
2 | |||
3 | import ( | ||
4 | "encoding/json" | ||
5 | "io/ioutil" | ||
6 | "log" | ||
7 | "strings" | ||
8 | |||
9 | "code.crute.me/mcrute/go_ddns_manager/bind" | ||
10 | "code.crute.me/mcrute/go_ddns_manager/dns" | ||
11 | ) | ||
12 | |||
13 | type ServerConfig struct { | ||
14 | BindConfig *bind.BINDConfig | ||
15 | DNSClient *dns.DNSClient | ||
16 | AcmeView string | ||
17 | DynamicDnsView string | ||
18 | DDNSSecrets map[string]string `json:"DDNS"` | ||
19 | AcmeSecrets map[string]map[string]int `json:"ACME"` | ||
20 | } | ||
21 | |||
22 | func LoadServerConfig(zonesFile, secretsFile, server, view string) (*ServerConfig, error) { | ||
23 | scfg := &ServerConfig{ | ||
24 | DNSClient: &dns.DNSClient{Server: server}, | ||
25 | AcmeView: view, | ||
26 | DynamicDnsView: view, | ||
27 | } | ||
28 | |||
29 | cfg, err := bind.ParseBINDConfig(zonesFile) | ||
30 | if err != nil { | ||
31 | return nil, err | ||
32 | } | ||
33 | scfg.BindConfig = cfg | ||
34 | |||
35 | fd, err := ioutil.ReadFile(secretsFile) | ||
36 | if err != nil { | ||
37 | return nil, err | ||
38 | } | ||
39 | |||
40 | if err = json.Unmarshal(fd, scfg); err != nil { | ||
41 | return nil, err | ||
42 | } | ||
43 | |||
44 | return scfg, nil | ||
45 | } | ||
46 | |||
47 | func (s *ServerConfig) GetDDNSZoneName(k string) string { | ||
48 | log.Printf("%#v", s.DDNSSecrets) | ||
49 | v, _ := s.DDNSSecrets[k] | ||
50 | return v | ||
51 | } | ||
52 | |||
53 | func (s *ServerConfig) AcmeSecretExists(k string) bool { | ||
54 | _, ok := s.AcmeSecrets[k] | ||
55 | return ok | ||
56 | } | ||
57 | |||
58 | func (s *ServerConfig) IsAcmeClientAllowed(key, zone string) bool { | ||
59 | u, ok := s.AcmeSecrets[key] | ||
60 | if !ok { | ||
61 | return false | ||
62 | } | ||
63 | |||
64 | p, ok := u[zone] | ||
65 | if ok && p == 1 { | ||
66 | return true | ||
67 | } | ||
68 | |||
69 | p, ok = u[strings.TrimRight(zone, ".")] | ||
70 | if ok && p == 1 { | ||
71 | return true | ||
72 | } | ||
73 | |||
74 | return false | ||
75 | } | ||