Files
waf-platform/EdgeDNS/internal/models/ranges.go

59 lines
1.4 KiB
Go

// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
//go:build plus
package models
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
"github.com/iwind/TeaGo/maps"
)
// InitRangesFromJSON 从JSON中初始化线路范围
func InitRangesFromJSON(rangesJSON []byte) (ranges []dnsconfigs.NSRouteRangeInterface, err error) {
if len(rangesJSON) == 0 {
return
}
var rangeMaps = []maps.Map{}
err = json.Unmarshal(rangesJSON, &rangeMaps)
if err != nil {
return nil, err
}
for _, rangeMap := range rangeMaps {
var rangeType = rangeMap.GetString("type")
paramsJSON, err := json.Marshal(rangeMap.Get("params"))
if err != nil {
return nil, err
}
var r dnsconfigs.NSRouteRangeInterface
switch rangeType {
case dnsconfigs.NSRouteRangeTypeIP:
r = &dnsconfigs.NSRouteRangeIPRange{}
case dnsconfigs.NSRouteRangeTypeCIDR:
r = &dnsconfigs.NSRouteRangeCIDR{}
case dnsconfigs.NSRouteRangeTypeRegion:
r = &dnsconfigs.NSRouteRangeRegion{
Connector: rangeMap.GetString("connector"),
}
r.SetRegionResolver(DefaultRegionResolver)
default:
return nil, errors.New("invalid route line type '" + rangeType + "'")
}
err = json.Unmarshal(paramsJSON, r)
if err != nil {
return nil, err
}
err = r.Init()
if err != nil {
return nil, err
}
ranges = append(ranges, r)
}
return
}