summaryrefslogtreecommitdiff
path: root/web/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'web/config.go')
-rw-r--r--web/config.go75
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 @@
1package web
2
3import (
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
13type 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
22func 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
47func (s *ServerConfig) GetDDNSZoneName(k string) string {
48 log.Printf("%#v", s.DDNSSecrets)
49 v, _ := s.DDNSSecrets[k]
50 return v
51}
52
53func (s *ServerConfig) AcmeSecretExists(k string) bool {
54 _, ok := s.AcmeSecrets[k]
55 return ok
56}
57
58func (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}