-
-
Notifications
You must be signed in to change notification settings - Fork 201
/
dns_services.go
72 lines (65 loc) · 1.62 KB
/
dns_services.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
package ddnsmanager
import (
"sort"
"github.com/admpub/nging/v3/application/library/ddnsmanager/config"
"github.com/admpub/nging/v3/application/library/ddnsmanager/domain/dnsdomain"
"github.com/admpub/nging/v3/application/library/ddnsmanager/interfaces"
"github.com/webx-top/echo"
)
var dnsServices = map[string]func() interfaces.Updater{}
func Register(provider string, updater func() interfaces.Updater) {
dnsServices[provider] = updater
}
func Open(provider string) interfaces.Updater {
c, ok := dnsServices[provider]
if ok {
return c()
}
return nil
}
type ProviderMeta struct {
Name string
Description string
SignUpURL string
LineTypeURL string
Support dnsdomain.Support
ConfigItems echo.KVList
DNSService *config.DNSService
}
func AllProvoderMeta(cfgServices []*config.DNSService) []*ProviderMeta {
services := map[string]interfaces.Updater{}
var names []string
for name, c := range dnsServices {
services[name] = c()
names = append(names, name)
}
sort.Strings(names)
r := make([]*ProviderMeta, len(names))
for i, name := range names {
sv := services[name]
mt := &ProviderMeta{
Name: sv.Name(),
Description: sv.Description(),
SignUpURL: sv.SignUpURL(),
LineTypeURL: sv.LineTypeURL(),
Support: sv.Support(),
ConfigItems: sv.ConfigItems(),
}
for _, cfgSrv := range cfgServices {
if cfgSrv.Provider == name {
mt.DNSService = cfgSrv.Clone()
break
}
}
if mt.DNSService == nil {
mt.DNSService = &config.DNSService{
Provider: name,
}
}
if mt.DNSService.Settings == nil {
mt.DNSService.Settings = echo.H{}
}
r[i] = mt
}
return r
}