mirror of
https://github.com/bjdgyc/anylink.git
synced 2025-08-08 16:43:25 +08:00
更改目录结构
This commit is contained in:
134
server/dbdata/group.go
Normal file
134
server/dbdata/group.go
Normal file
@@ -0,0 +1,134 @@
|
||||
package dbdata
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/bjdgyc/anylink/base"
|
||||
)
|
||||
|
||||
const (
|
||||
Allow = "allow"
|
||||
Deny = "deny"
|
||||
)
|
||||
|
||||
type GroupLinkAcl struct {
|
||||
// 自上而下匹配 默认 allow * *
|
||||
Action string `json:"action"` // allow、deny
|
||||
Val string `json:"val"`
|
||||
Port uint16 `json:"port"`
|
||||
IpNet *net.IPNet `json:"ip_net"`
|
||||
Note string `json:"note"`
|
||||
}
|
||||
|
||||
type ValData struct {
|
||||
Val string `json:"val"`
|
||||
IpMask string `json:"ip_mask"`
|
||||
Note string `json:"note"`
|
||||
}
|
||||
|
||||
type Group struct {
|
||||
Id int `json:"id" storm:"id,increment"`
|
||||
Name string `json:"name" storm:"unique"`
|
||||
Note string `json:"note"`
|
||||
AllowLan bool `json:"allow_lan"`
|
||||
ClientDns []ValData `json:"client_dns"`
|
||||
RouteInclude []ValData `json:"route_include"`
|
||||
RouteExclude []ValData `json:"route_exclude"`
|
||||
LinkAcl []GroupLinkAcl `json:"link_acl"`
|
||||
Bandwidth int `json:"bandwidth"` // 带宽限制
|
||||
Status int8 `json:"status"` // 1正常
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func GetGroupNames() []string {
|
||||
var datas []Group
|
||||
err := All(&datas, 0, 0)
|
||||
if err != nil {
|
||||
base.Error(err)
|
||||
return nil
|
||||
}
|
||||
var names []string
|
||||
for _, v := range datas {
|
||||
names = append(names, v.Name)
|
||||
}
|
||||
return names
|
||||
}
|
||||
|
||||
func SetGroup(g *Group) error {
|
||||
var err error
|
||||
if g.Name == "" {
|
||||
return errors.New("用户组名错误")
|
||||
}
|
||||
|
||||
// 判断数据
|
||||
clientDns := []ValData{}
|
||||
for _, v := range g.ClientDns {
|
||||
if v.Val != "" {
|
||||
clientDns = append(clientDns, v)
|
||||
}
|
||||
}
|
||||
if len(clientDns) == 0 {
|
||||
return errors.New("DNS 错误")
|
||||
}
|
||||
g.ClientDns = clientDns
|
||||
|
||||
routeInclude := []ValData{}
|
||||
for _, v := range g.RouteInclude {
|
||||
if v.Val != "" {
|
||||
ipMask, _, err := parseIpNet(v.Val)
|
||||
if err != nil {
|
||||
return errors.New("RouteInclude 错误" + err.Error())
|
||||
}
|
||||
|
||||
v.IpMask = ipMask
|
||||
routeInclude = append(routeInclude, v)
|
||||
}
|
||||
}
|
||||
g.RouteInclude = routeInclude
|
||||
routeExclude := []ValData{}
|
||||
for _, v := range g.RouteExclude {
|
||||
if v.Val != "" {
|
||||
ipMask, _, err := parseIpNet(v.Val)
|
||||
if err != nil {
|
||||
return errors.New("RouteExclude 错误" + err.Error())
|
||||
}
|
||||
v.IpMask = ipMask
|
||||
routeExclude = append(routeExclude, v)
|
||||
}
|
||||
}
|
||||
g.RouteExclude = routeExclude
|
||||
// 转换数据
|
||||
linkAcl := []GroupLinkAcl{}
|
||||
for _, v := range g.LinkAcl {
|
||||
if v.Val != "" {
|
||||
_, ipNet, err := parseIpNet(v.Val)
|
||||
if err != nil {
|
||||
return errors.New("GroupLinkAcl 错误" + err.Error())
|
||||
}
|
||||
v.IpNet = ipNet
|
||||
linkAcl = append(linkAcl, v)
|
||||
}
|
||||
}
|
||||
g.LinkAcl = linkAcl
|
||||
|
||||
g.UpdatedAt = time.Now()
|
||||
err = Save(g)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func parseIpNet(s string) (string, *net.IPNet, error) {
|
||||
ip, ipNet, err := net.ParseCIDR(s)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
mask := net.IP(ipNet.Mask)
|
||||
ipMask := fmt.Sprintf("%s/%s", ip, mask)
|
||||
|
||||
return ipMask, ipNet, nil
|
||||
}
|
Reference in New Issue
Block a user