mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 23:20:26 +08:00
阶段性提交
This commit is contained in:
@@ -59,6 +59,8 @@ func (this *APINode) listenRPC() error {
|
||||
pb.RegisterNodeIPAddressServiceServer(rpcServer, &services.NodeIPAddressService{})
|
||||
pb.RegisterAPINodeServiceServer(rpcServer, &services.APINodeService{})
|
||||
pb.RegisterOriginServerServiceServer(rpcServer, &services.OriginServerService{})
|
||||
pb.RegisterHTTPWebServiceServer(rpcServer, &services.HTTPWebService{})
|
||||
pb.RegisterReverseProxyServiceServer(rpcServer, &services.ReverseProxyService{})
|
||||
err = rpcServer.Serve(listener)
|
||||
if err != nil {
|
||||
return errors.New("[API]start rpc failed: " + err.Error())
|
||||
|
||||
@@ -5,6 +5,7 @@ type HTTPCachePolicy struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
TemplateId uint32 `field:"templateId"` // 模版ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
Name string `field:"name"` // 名称
|
||||
Key string `field:"key"` // 缓存Key规则
|
||||
@@ -24,6 +25,7 @@ type HTTPCachePolicyOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
TemplateId interface{} // 模版ID
|
||||
IsOn interface{} // 是否启用
|
||||
Name interface{} // 名称
|
||||
Key interface{} // 缓存Key规则
|
||||
|
||||
@@ -2,29 +2,31 @@ package models
|
||||
|
||||
//
|
||||
type HTTPHeader struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
Name string `field:"name"` // 名称
|
||||
Value string `field:"value"` // 值
|
||||
Order uint32 `field:"order"` // 排序
|
||||
Status string `field:"status"` // 状态码设置
|
||||
State uint8 `field:"state"` // 状态
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
TemplateId uint32 `field:"templateId"` // 模版ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
Name string `field:"name"` // 名称
|
||||
Value string `field:"value"` // 值
|
||||
Order uint32 `field:"order"` // 排序
|
||||
Status string `field:"status"` // 状态码设置
|
||||
State uint8 `field:"state"` // 状态
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
}
|
||||
|
||||
type HTTPHeaderOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
IsOn interface{} // 是否启用
|
||||
Name interface{} // 名称
|
||||
Value interface{} // 值
|
||||
Order interface{} // 排序
|
||||
Status interface{} // 状态码设置
|
||||
State interface{} // 状态
|
||||
CreatedAt interface{} // 创建时间
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
TemplateId interface{} // 模版ID
|
||||
IsOn interface{} // 是否启用
|
||||
Name interface{} // 名称
|
||||
Value interface{} // 值
|
||||
Order interface{} // 排序
|
||||
Status interface{} // 状态码设置
|
||||
State interface{} // 状态
|
||||
CreatedAt interface{} // 创建时间
|
||||
}
|
||||
|
||||
func NewHTTPHeaderOperator() *HTTPHeaderOperator {
|
||||
|
||||
102
internal/db/models/http_web_dao.go
Normal file
102
internal/db/models/http_web_dao.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/iwind/TeaGo/Tea"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
"github.com/iwind/TeaGo/types"
|
||||
)
|
||||
|
||||
const (
|
||||
HTTPWebStateEnabled = 1 // 已启用
|
||||
HTTPWebStateDisabled = 0 // 已禁用
|
||||
)
|
||||
|
||||
type HTTPWebDAO dbs.DAO
|
||||
|
||||
func NewHTTPWebDAO() *HTTPWebDAO {
|
||||
return dbs.NewDAO(&HTTPWebDAO{
|
||||
DAOObject: dbs.DAOObject{
|
||||
DB: Tea.Env,
|
||||
Table: "edgeHTTPWebs",
|
||||
Model: new(HTTPWeb),
|
||||
PkName: "id",
|
||||
},
|
||||
}).(*HTTPWebDAO)
|
||||
}
|
||||
|
||||
var SharedHTTPWebDAO = NewHTTPWebDAO()
|
||||
|
||||
// 启用条目
|
||||
func (this *HTTPWebDAO) EnableHTTPWeb(id int64) error {
|
||||
_, err := this.Query().
|
||||
Pk(id).
|
||||
Set("state", HTTPWebStateEnabled).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
// 禁用条目
|
||||
func (this *HTTPWebDAO) DisableHTTPWeb(id int64) error {
|
||||
_, err := this.Query().
|
||||
Pk(id).
|
||||
Set("state", HTTPWebStateDisabled).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
// 查找启用中的条目
|
||||
func (this *HTTPWebDAO) FindEnabledHTTPWeb(id int64) (*HTTPWeb, error) {
|
||||
result, err := this.Query().
|
||||
Pk(id).
|
||||
Attr("state", HTTPWebStateEnabled).
|
||||
Find()
|
||||
if result == nil {
|
||||
return nil, err
|
||||
}
|
||||
return result.(*HTTPWeb), err
|
||||
}
|
||||
|
||||
// 组合配置
|
||||
func (this *HTTPWebDAO) ComposeWebConfig(webId int64) (*serverconfigs.WebConfig, error) {
|
||||
web, err := SharedHTTPWebDAO.FindEnabledHTTPWeb(webId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if web == nil {
|
||||
return nil, nil
|
||||
}
|
||||
config := &serverconfigs.WebConfig{}
|
||||
config.IsOn = web.IsOn == 1
|
||||
config.Root = web.Root
|
||||
return config, nil
|
||||
}
|
||||
|
||||
// 创建Web配置
|
||||
func (this *HTTPWebDAO) CreateWeb(root string) (int64, error) {
|
||||
op := NewHTTPWebOperator()
|
||||
op.State = HTTPWebStateEnabled
|
||||
op.Root = root
|
||||
_, err := this.Save(op)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return types.Int64(op.Id), nil
|
||||
}
|
||||
|
||||
// 修改Web配置
|
||||
func (this *HTTPWebDAO) UpdateWeb(webId int64, root string) error {
|
||||
if webId <= 0 {
|
||||
return errors.New("invalid webId")
|
||||
}
|
||||
op := NewHTTPWebOperator()
|
||||
op.Id = webId
|
||||
op.Root = root
|
||||
_, err := this.Save(op)
|
||||
|
||||
// TODO 更新所有使用此Web配置的服务
|
||||
|
||||
return err
|
||||
}
|
||||
5
internal/db/models/http_web_dao_test.go
Normal file
5
internal/db/models/http_web_dao_test.go
Normal file
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
28
internal/db/models/http_web_model.go
Normal file
28
internal/db/models/http_web_model.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package models
|
||||
|
||||
//
|
||||
type HTTPWeb struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
TemplateId uint32 `field:"templateId"` // 模版ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
State uint8 `field:"state"` // 状态
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
Root string `field:"root"` // 资源根目录
|
||||
}
|
||||
|
||||
type HTTPWebOperator struct {
|
||||
Id interface{} // ID
|
||||
IsOn interface{} // 是否启用
|
||||
TemplateId interface{} // 模版ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
State interface{} // 状态
|
||||
CreatedAt interface{} // 创建时间
|
||||
Root interface{} // 资源根目录
|
||||
}
|
||||
|
||||
func NewHTTPWebOperator() *HTTPWebOperator {
|
||||
return &HTTPWebOperator{}
|
||||
}
|
||||
1
internal/db/models/http_web_model_ext.go
Normal file
1
internal/db/models/http_web_model_ext.go
Normal file
@@ -0,0 +1 @@
|
||||
package models
|
||||
@@ -3,25 +3,29 @@ package models
|
||||
// 节点集群
|
||||
type NodeCluster struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
Name string `field:"name"` // 名称
|
||||
InstallDir string `field:"installDir"` // 安装目录
|
||||
GrantId uint32 `field:"grantId"` // 默认认证方式
|
||||
UseAllAPINodes uint8 `field:"useAllAPINodes"` // 是否使用所有API节点
|
||||
ApiNodes string `field:"apiNodes"` // 使用的API节点
|
||||
InstallDir string `field:"installDir"` // 安装目录
|
||||
Order uint32 `field:"order"` // 排序
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
GrantId uint32 `field:"grantId"` // 默认认证方式
|
||||
State uint8 `field:"state"` // 状态
|
||||
}
|
||||
|
||||
type NodeClusterOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
Name interface{} // 名称
|
||||
InstallDir interface{} // 安装目录
|
||||
GrantId interface{} // 默认认证方式
|
||||
UseAllAPINodes interface{} // 是否使用所有API节点
|
||||
ApiNodes interface{} // 使用的API节点
|
||||
InstallDir interface{} // 安装目录
|
||||
Order interface{} // 排序
|
||||
CreatedAt interface{} // 创建时间
|
||||
GrantId interface{} // 默认认证方式
|
||||
State interface{} // 状态
|
||||
}
|
||||
|
||||
|
||||
1
internal/db/models/node_cluster_model_ext.go
Normal file
1
internal/db/models/node_cluster_model_ext.go
Normal file
@@ -0,0 +1 @@
|
||||
package models
|
||||
@@ -3,6 +3,8 @@ package models
|
||||
// 节点
|
||||
type Node struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
UniqueId string `field:"uniqueId"` // 节点ID
|
||||
Secret string `field:"secret"` // 密钥
|
||||
@@ -23,6 +25,8 @@ type Node struct {
|
||||
|
||||
type NodeOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
IsOn interface{} // 是否启用
|
||||
UniqueId interface{} // 节点ID
|
||||
Secret interface{} // 密钥
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/iwind/TeaGo/Tea"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
@@ -95,3 +99,110 @@ func (this *OriginServerDAO) UpdateOriginServer(originId int64, name string, add
|
||||
_, err := this.Save(op)
|
||||
return err
|
||||
}
|
||||
|
||||
// 将源站信息转换为配置
|
||||
func (this *OriginServerDAO) ComposeOriginConfig(originId int64) (*serverconfigs.OriginServerConfig, error) {
|
||||
origin, err := this.FindEnabledOriginServer(originId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if origin == nil {
|
||||
return nil, errors.New("not found")
|
||||
}
|
||||
|
||||
addr := &serverconfigs.NetworkAddressConfig{}
|
||||
if len(origin.Addr) > 0 && origin.Addr != "null" {
|
||||
err = json.Unmarshal([]byte(origin.Addr), addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
connTimeout := shared.TimeDuration{}
|
||||
if len(origin.ConnTimeout) > 0 && origin.ConnTimeout != "null" {
|
||||
err = json.Unmarshal([]byte(origin.ConnTimeout), &connTimeout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
readTimeout := shared.TimeDuration{}
|
||||
if len(origin.ReadTimeout) > 0 && origin.ReadTimeout != "null" {
|
||||
err = json.Unmarshal([]byte(origin.ReadTimeout), &readTimeout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
idleTimeout := shared.TimeDuration{}
|
||||
if len(origin.IdleTimeout) > 0 && origin.IdleTimeout != "null" {
|
||||
err = json.Unmarshal([]byte(origin.IdleTimeout), &idleTimeout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
requestHeaders := &shared.HTTPHeadersConfig{}
|
||||
if len(origin.HttpRequestHeaders) > 0 && origin.HttpRequestHeaders != "null" {
|
||||
err = json.Unmarshal([]byte(origin.HttpRequestHeaders), requestHeaders)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
responseHeaders := &shared.HTTPHeadersConfig{}
|
||||
if len(origin.HttpResponseHeaders) > 0 && origin.HttpResponseHeaders != "null" {
|
||||
err = json.Unmarshal([]byte(origin.HttpResponseHeaders), responseHeaders)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
healthCheck := &serverconfigs.HealthCheckConfig{}
|
||||
if len(origin.HealthCheck) > 0 && origin.HealthCheck != "null" {
|
||||
err = json.Unmarshal([]byte(origin.HealthCheck), healthCheck)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
cert := &sslconfigs.SSLCertConfig{}
|
||||
if len(origin.Cert) > 0 && origin.Cert != "null" {
|
||||
err = json.Unmarshal([]byte(origin.Cert), cert)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
ftp := &serverconfigs.OriginServerFTPConfig{}
|
||||
if len(origin.Ftp) > 0 && origin.Ftp != "null" {
|
||||
err = json.Unmarshal([]byte(origin.Ftp), ftp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &serverconfigs.OriginServerConfig{
|
||||
Id: int64(origin.Id),
|
||||
IsOn: origin.IsOn == 1,
|
||||
Version: int(origin.Version),
|
||||
Name: origin.Name,
|
||||
Addr: addr,
|
||||
Description: origin.Description,
|
||||
Code: origin.Code,
|
||||
Weight: uint(origin.Weight),
|
||||
ConnTimeout: connTimeout,
|
||||
ReadTimeout: readTimeout,
|
||||
IdleTimeout: idleTimeout,
|
||||
MaxFails: int(origin.MaxFails),
|
||||
MaxConns: int(origin.MaxConns),
|
||||
MaxIdleConns: int(origin.MaxIdleConns),
|
||||
RequestURI: origin.HttpRequestURI,
|
||||
Host: origin.Host,
|
||||
RequestHeaders: requestHeaders,
|
||||
ResponseHeaders: responseHeaders,
|
||||
HealthCheck: healthCheck,
|
||||
Cert: cert,
|
||||
FTP: ftp,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package models
|
||||
// 源站
|
||||
type OriginServer struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
Name string `field:"name"` // 名称
|
||||
Version uint32 `field:"version"` // 版本
|
||||
@@ -21,7 +23,6 @@ type OriginServer struct {
|
||||
HttpResponseHeaders string `field:"httpResponseHeaders"` // 响应Headers配置
|
||||
Host string `field:"host"` // 自定义主机名
|
||||
HealthCheck string `field:"healthCheck"` // 健康检查设置
|
||||
IsDown uint8 `field:"isDown"` // 是否处于健康检查失败状态
|
||||
Cert string `field:"cert"` // 证书设置
|
||||
Ftp string `field:"ftp"` // FTP相关设置
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
@@ -30,6 +31,8 @@ type OriginServer struct {
|
||||
|
||||
type OriginServerOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
IsOn interface{} // 是否启用
|
||||
Name interface{} // 名称
|
||||
Version interface{} // 版本
|
||||
@@ -48,7 +51,6 @@ type OriginServerOperator struct {
|
||||
HttpResponseHeaders interface{} // 响应Headers配置
|
||||
Host interface{} // 自定义主机名
|
||||
HealthCheck interface{} // 健康检查设置
|
||||
IsDown interface{} // 是否处于健康检查失败状态
|
||||
Cert interface{} // 证书设置
|
||||
Ftp interface{} // FTP相关设置
|
||||
CreatedAt interface{} // 创建时间
|
||||
|
||||
197
internal/db/models/reverse_proxy_dao.go
Normal file
197
internal/db/models/reverse_proxy_dao.go
Normal file
@@ -0,0 +1,197 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/iwind/TeaGo/Tea"
|
||||
"github.com/iwind/TeaGo/dbs"
|
||||
"github.com/iwind/TeaGo/types"
|
||||
)
|
||||
|
||||
const (
|
||||
ReverseProxyStateEnabled = 1 // 已启用
|
||||
ReverseProxyStateDisabled = 0 // 已禁用
|
||||
)
|
||||
|
||||
type ReverseProxyDAO dbs.DAO
|
||||
|
||||
func NewReverseProxyDAO() *ReverseProxyDAO {
|
||||
return dbs.NewDAO(&ReverseProxyDAO{
|
||||
DAOObject: dbs.DAOObject{
|
||||
DB: Tea.Env,
|
||||
Table: "edgeReverseProxies",
|
||||
Model: new(ReverseProxy),
|
||||
PkName: "id",
|
||||
},
|
||||
}).(*ReverseProxyDAO)
|
||||
}
|
||||
|
||||
var SharedReverseProxyDAO = NewReverseProxyDAO()
|
||||
|
||||
// 启用条目
|
||||
func (this *ReverseProxyDAO) EnableReverseProxy(id int64) error {
|
||||
_, err := this.Query().
|
||||
Pk(id).
|
||||
Set("state", ReverseProxyStateEnabled).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
// 禁用条目
|
||||
func (this *ReverseProxyDAO) DisableReverseProxy(id int64) error {
|
||||
_, err := this.Query().
|
||||
Pk(id).
|
||||
Set("state", ReverseProxyStateDisabled).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
// 查找启用中的条目
|
||||
func (this *ReverseProxyDAO) FindEnabledReverseProxy(id int64) (*ReverseProxy, error) {
|
||||
result, err := this.Query().
|
||||
Pk(id).
|
||||
Attr("state", ReverseProxyStateEnabled).
|
||||
Find()
|
||||
if result == nil {
|
||||
return nil, err
|
||||
}
|
||||
return result.(*ReverseProxy), err
|
||||
}
|
||||
|
||||
// 根据iD组合配置
|
||||
func (this *ReverseProxyDAO) ComposeReverseProxyConfig(reverseProxyId int64) (*serverconfigs.ReverseProxyConfig, error) {
|
||||
reverseProxy, err := this.FindEnabledReverseProxy(reverseProxyId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if reverseProxy == nil {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
config := &serverconfigs.ReverseProxyConfig{}
|
||||
config.IsOn = reverseProxy.IsOn == 1
|
||||
|
||||
schedulingConfig := &serverconfigs.SchedulingConfig{}
|
||||
if len(reverseProxy.Scheduling) > 0 && reverseProxy.Scheduling != "null" {
|
||||
err = json.Unmarshal([]byte(reverseProxy.Scheduling), schedulingConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.Scheduling = schedulingConfig
|
||||
}
|
||||
if len(reverseProxy.PrimaryOrigins) > 0 && reverseProxy.PrimaryOrigins != "null" {
|
||||
originConfigs := []*serverconfigs.OriginServerConfig{}
|
||||
err = json.Unmarshal([]byte(reverseProxy.PrimaryOrigins), &originConfigs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, originConfig := range originConfigs {
|
||||
newOriginConfig, err := SharedOriginServerDAO.ComposeOriginConfig(int64(originConfig.Id))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if newOriginConfig != nil {
|
||||
config.AddPrimaryOrigin(newOriginConfig)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(reverseProxy.BackupOrigins) > 0 && reverseProxy.BackupOrigins != "null" {
|
||||
originConfigs := []*OriginServer{}
|
||||
err = json.Unmarshal([]byte(reverseProxy.BackupOrigins), &originConfigs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, originConfig := range originConfigs {
|
||||
newOriginConfig, err := SharedOriginServerDAO.ComposeOriginConfig(int64(originConfig.Id))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if newOriginConfig != nil {
|
||||
config.AddBackupOrigin(newOriginConfig)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
// 创建反向代理
|
||||
func (this *ReverseProxyDAO) CreateReverseProxy(schedulingJSON []byte, primaryOriginsJSON []byte, backupOriginsJSON []byte) (int64, error) {
|
||||
op := NewReverseProxyOperator()
|
||||
op.State = ReverseProxyStateEnabled
|
||||
if len(schedulingJSON) > 0 {
|
||||
op.Scheduling = string(schedulingJSON)
|
||||
}
|
||||
if len(primaryOriginsJSON) > 0 {
|
||||
op.PrimaryOrigins = string(primaryOriginsJSON)
|
||||
}
|
||||
if len(backupOriginsJSON) > 0 {
|
||||
op.BackupOrigins = string(backupOriginsJSON)
|
||||
}
|
||||
_, err := this.Save(op)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return types.Int64(op.Id), nil
|
||||
}
|
||||
|
||||
// 修改反向代理调度算法
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyScheduling(reverseProxyId int64, schedulingJSON []byte) error {
|
||||
if reverseProxyId <= 0 {
|
||||
return errors.New("invalid reverseProxyId")
|
||||
}
|
||||
op := NewReverseProxyOperator()
|
||||
op.Id = reverseProxyId
|
||||
if len(schedulingJSON) > 0 {
|
||||
op.Scheduling = string(schedulingJSON)
|
||||
} else {
|
||||
op.Scheduling = "null"
|
||||
}
|
||||
_, err := this.Save(op)
|
||||
|
||||
// TODO 更新所有使用此反向代理的服务
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// 修改主要源站
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyPrimaryOrigins(reverseProxyId int64, origins []byte) error {
|
||||
if reverseProxyId <= 0 {
|
||||
return errors.New("invalid reverseProxyId")
|
||||
}
|
||||
op := NewReverseProxyOperator()
|
||||
op.Id = reverseProxyId
|
||||
if len(origins) > 0 {
|
||||
op.PrimaryOrigins = origins
|
||||
} else {
|
||||
op.PrimaryOrigins = "[]"
|
||||
}
|
||||
_, err := this.Save(op)
|
||||
|
||||
// TODO 更新所有使用此反向代理的服务
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// 修改备用源站
|
||||
func (this *ReverseProxyDAO) UpdateReverseProxyBackupOrigins(reverseProxyId int64, origins []byte) error {
|
||||
if reverseProxyId <= 0 {
|
||||
return errors.New("invalid reverseProxyId")
|
||||
}
|
||||
op := NewReverseProxyOperator()
|
||||
op.Id = reverseProxyId
|
||||
if len(origins) > 0 {
|
||||
op.BackupOrigins = origins
|
||||
} else {
|
||||
op.BackupOrigins = "[]"
|
||||
}
|
||||
_, err := this.Save(op)
|
||||
|
||||
// TODO 更新所有使用此反向代理的服务
|
||||
|
||||
return err
|
||||
}
|
||||
14
internal/db/models/reverse_proxy_dao_test.go
Normal file
14
internal/db/models/reverse_proxy_dao_test.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestReverseProxyDAO_ComposeReverseProxyConfig(t *testing.T) {
|
||||
config, err := SharedReverseProxyDAO.ComposeReverseProxyConfig(1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Log(config)
|
||||
}
|
||||
32
internal/db/models/reverse_proxy_model.go
Normal file
32
internal/db/models/reverse_proxy_model.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package models
|
||||
|
||||
// 反向代理配置
|
||||
type ReverseProxy struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
TemplateId uint32 `field:"templateId"` // 模版ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
Scheduling string `field:"scheduling"` // 调度算法
|
||||
PrimaryOrigins string `field:"primaryOrigins"` // 主要源站
|
||||
BackupOrigins string `field:"backupOrigins"` // 备用源站
|
||||
State uint8 `field:"state"` // 状态
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
}
|
||||
|
||||
type ReverseProxyOperator struct {
|
||||
Id interface{} // ID
|
||||
AdminId interface{} // 管理员ID
|
||||
UserId interface{} // 用户ID
|
||||
TemplateId interface{} // 模版ID
|
||||
IsOn interface{} // 是否启用
|
||||
Scheduling interface{} // 调度算法
|
||||
PrimaryOrigins interface{} // 主要源站
|
||||
BackupOrigins interface{} // 备用源站
|
||||
State interface{} // 状态
|
||||
CreatedAt interface{} // 创建时间
|
||||
}
|
||||
|
||||
func NewReverseProxyOperator() *ReverseProxyOperator {
|
||||
return &ReverseProxyOperator{}
|
||||
}
|
||||
1
internal/db/models/reverse_proxy_model_ext.go
Normal file
1
internal/db/models/reverse_proxy_model_ext.go
Normal file
@@ -0,0 +1 @@
|
||||
package models
|
||||
@@ -1,6 +1,7 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
@@ -59,8 +60,16 @@ func (this *ServerDAO) FindEnabledServer(id int64) (*Server, error) {
|
||||
return result.(*Server), err
|
||||
}
|
||||
|
||||
// 查找服务类型
|
||||
func (this *ServerDAO) FindEnabledServerType(serverId int64) (string, error) {
|
||||
return this.Query().
|
||||
Pk(serverId).
|
||||
Result("type").
|
||||
FindStringCol("")
|
||||
}
|
||||
|
||||
// 创建服务
|
||||
func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serverconfigs.ServerType, name string, description string, clusterId int64, configJSON string, includeNodesJSON string, excludeNodesJSON string) (serverId int64, err error) {
|
||||
func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serverconfigs.ServerType, name string, description string, serverNamesJSON string, httpJSON string, httpsJSON string, tcpJSON string, tlsJSON string, unixJSON string, udpJSON string, webId int64, reverseProxyId int64, clusterId int64, includeNodesJSON string, excludeNodesJSON string) (serverId int64, err error) {
|
||||
uniqueId, err := this.genUniqueId()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@@ -73,10 +82,32 @@ func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serv
|
||||
op.Name = name
|
||||
op.Type = serverType
|
||||
op.Description = description
|
||||
op.ClusterId = clusterId
|
||||
if len(configJSON) > 0 {
|
||||
op.Config = configJSON
|
||||
|
||||
if len(serverNamesJSON) > 0 {
|
||||
op.ServerNames = serverNamesJSON
|
||||
}
|
||||
if len(httpJSON) > 0 {
|
||||
op.Http = httpJSON
|
||||
}
|
||||
if len(httpsJSON) > 0 {
|
||||
op.Https = httpsJSON
|
||||
}
|
||||
if len(tcpJSON) > 0 {
|
||||
op.Tcp = tcpJSON
|
||||
}
|
||||
if len(tlsJSON) > 0 {
|
||||
op.Tls = tlsJSON
|
||||
}
|
||||
if len(unixJSON) > 0 {
|
||||
op.Unix = unixJSON
|
||||
}
|
||||
if len(udpJSON) > 0 {
|
||||
op.Udp = udpJSON
|
||||
}
|
||||
op.WebId = webId
|
||||
op.ReverseProxyId = reverseProxyId
|
||||
|
||||
op.ClusterId = clusterId
|
||||
if len(includeNodesJSON) > 0 {
|
||||
op.IncludeNodes = includeNodesJSON
|
||||
}
|
||||
@@ -88,7 +119,14 @@ func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serv
|
||||
op.IsOn = 1
|
||||
op.State = ServerStateEnabled
|
||||
_, err = this.Save(op)
|
||||
return types.Int64(op.Id), err
|
||||
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
serverId = types.Int64(op.Id)
|
||||
err = this.RenewServerConfig(serverId)
|
||||
return serverId, err
|
||||
}
|
||||
|
||||
// 修改服务基本信息
|
||||
@@ -111,13 +149,173 @@ func (this *ServerDAO) UpdateServerConfig(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("config", string(config)).
|
||||
Set("version", dbs.SQL("version+1")).
|
||||
Update()
|
||||
return err
|
||||
}
|
||||
|
||||
// 修改HTTP配置
|
||||
func (this *ServerDAO) UpdateServerHTTP(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("http", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改HTTPS配置
|
||||
func (this *ServerDAO) UpdateServerHTTPS(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("https", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改TCP配置
|
||||
func (this *ServerDAO) UpdateServerTCP(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("tcp", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改TLS配置
|
||||
func (this *ServerDAO) UpdateServerTLS(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("tls", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改Unix配置
|
||||
func (this *ServerDAO) UpdateServerUnix(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("unix", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改UDP配置
|
||||
func (this *ServerDAO) UpdateServerUDP(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("udp", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改Web配置
|
||||
func (this *ServerDAO) UpdateServerWeb(serverId int64, webId int64) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("webId", webId).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改ServerNames配置
|
||||
func (this *ServerDAO) UpdateServerNames(serverId int64, config []byte) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
if len(config) == 0 {
|
||||
config = []byte("null")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("serverNames", string(config)).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 修改反向代理配置
|
||||
func (this *ServerDAO) UpdateServerReverseProxy(serverId int64, reverseProxyId int64) error {
|
||||
if serverId <= 0 {
|
||||
return errors.New("serverId should not be smaller than 0")
|
||||
}
|
||||
_, err := this.Query().
|
||||
Pk(serverId).
|
||||
Set("reverseProxyId", reverseProxyId).
|
||||
Update()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.RenewServerConfig(serverId)
|
||||
}
|
||||
|
||||
// 计算所有可用服务数量
|
||||
func (this *ServerDAO) CountAllEnabledServers() (int64, error) {
|
||||
return this.Query().
|
||||
@@ -157,6 +355,153 @@ func (this *ServerDAO) FindAllEnabledServersWithNode(nodeId int64) (result []*Se
|
||||
return
|
||||
}
|
||||
|
||||
// 构造服务的Config
|
||||
func (this *ServerDAO) ComposeServerConfig(serverId int64) (*serverconfigs.ServerConfig, error) {
|
||||
server, err := this.FindEnabledServer(serverId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("server not found")
|
||||
}
|
||||
|
||||
config := &serverconfigs.ServerConfig{}
|
||||
config.Id = serverId
|
||||
config.Type = server.Type
|
||||
config.IsOn = server.IsOn == 1
|
||||
config.Name = server.Name
|
||||
config.Description = server.Description
|
||||
|
||||
// Components
|
||||
// TODO
|
||||
|
||||
// Filters
|
||||
// TODO
|
||||
|
||||
// ServerNames
|
||||
if len(server.ServerNames) > 0 && server.ServerNames != "null" {
|
||||
serverNames := []*serverconfigs.ServerNameConfig{}
|
||||
err = json.Unmarshal([]byte(server.ServerNames), &serverNames)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.ServerNames = serverNames
|
||||
}
|
||||
|
||||
// HTTP
|
||||
if len(server.Http) > 0 && server.Http != "null" {
|
||||
httpConfig := &serverconfigs.HTTPProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Http), httpConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.HTTP = httpConfig
|
||||
}
|
||||
|
||||
// HTTPS
|
||||
if len(server.Https) > 0 && server.Https != "null" {
|
||||
httpsConfig := &serverconfigs.HTTPSProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Https), httpsConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.HTTPS = httpsConfig
|
||||
}
|
||||
|
||||
// TCP
|
||||
if len(server.Tcp) > 0 && server.Tcp != "null" {
|
||||
tcpConfig := &serverconfigs.TCPProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Tcp), tcpConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.TCP = tcpConfig
|
||||
}
|
||||
|
||||
// TLS
|
||||
if len(server.Tls) > 0 && server.Tls != "null" {
|
||||
tlsConfig := &serverconfigs.TLSProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Tls), tlsConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.TLS = tlsConfig
|
||||
}
|
||||
|
||||
// Unix
|
||||
if len(server.Unix) > 0 && server.Unix != "null" {
|
||||
unixConfig := &serverconfigs.UnixProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Unix), unixConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.Unix = unixConfig
|
||||
}
|
||||
|
||||
// UDP
|
||||
if len(server.Udp) > 0 && server.Udp != "null" {
|
||||
udpConfig := &serverconfigs.UDPProtocolConfig{}
|
||||
err = json.Unmarshal([]byte(server.Udp), udpConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
config.UDP = udpConfig
|
||||
}
|
||||
|
||||
// Web
|
||||
if server.WebId > 0 {
|
||||
webConfig, err := SharedHTTPWebDAO.ComposeWebConfig(int64(server.WebId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if webConfig != nil {
|
||||
config.Web = webConfig
|
||||
}
|
||||
}
|
||||
|
||||
// ReverseProxy
|
||||
if server.ReverseProxyId > 0 {
|
||||
reverseProxyConfig, err := SharedReverseProxyDAO.ComposeReverseProxyConfig(int64(server.ReverseProxyId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if reverseProxyConfig != nil {
|
||||
config.ReverseProxy = reverseProxyConfig
|
||||
}
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
||||
|
||||
// 更新服务的Config配置
|
||||
func (this *ServerDAO) RenewServerConfig(serverId int64) error {
|
||||
serverConfig, err := this.ComposeServerConfig(serverId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data, err := serverConfig.AsJSON()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return this.UpdateServerConfig(serverId, data)
|
||||
}
|
||||
|
||||
// 根据条件获取反向代理配置
|
||||
func (this *ServerDAO) FindReverseProxyConfig(serverId int64) (*serverconfigs.ReverseProxyConfig, error) {
|
||||
reverseProxy, err := this.Query().
|
||||
Pk(serverId).
|
||||
Result("reverseProxy").
|
||||
FindStringCol("")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(reverseProxy) == 0 || reverseProxy == "null" {
|
||||
return nil, nil
|
||||
}
|
||||
config := &serverconfigs.ReverseProxyConfig{}
|
||||
err = json.Unmarshal([]byte(reverseProxy), config)
|
||||
return config, err
|
||||
}
|
||||
|
||||
// 生成唯一ID
|
||||
func (this *ServerDAO) genUniqueId() (string, error) {
|
||||
|
||||
@@ -2,4 +2,14 @@ package models
|
||||
|
||||
import (
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/iwind/TeaGo/logs"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestServerDAO_ComposeServerConfig(t *testing.T) {
|
||||
config, err := SharedServerDAO.ComposeServerConfig(1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
logs.PrintAsJSON(config, t)
|
||||
}
|
||||
|
||||
@@ -2,41 +2,59 @@ package models
|
||||
|
||||
// 服务
|
||||
type Server struct {
|
||||
Id uint32 `field:"id"` // ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
UniqueId string `field:"uniqueId"` // 唯一ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
Type string `field:"type"` // 服务类型
|
||||
Name string `field:"name"` // 名称
|
||||
Description string `field:"description"` // 描述
|
||||
GroupIds string `field:"groupIds"` // 分组ID列表
|
||||
Config string `field:"config"` // 服务配置,自动生成
|
||||
ClusterId uint32 `field:"clusterId"` // 集群ID
|
||||
IncludeNodes string `field:"includeNodes"` // 部署条件
|
||||
ExcludeNodes string `field:"excludeNodes"` // 节点排除条件
|
||||
Version uint32 `field:"version"` // 版本号
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
State uint8 `field:"state"` // 状态
|
||||
Id uint32 `field:"id"` // ID
|
||||
IsOn uint8 `field:"isOn"` // 是否启用
|
||||
UniqueId string `field:"uniqueId"` // 唯一ID
|
||||
UserId uint32 `field:"userId"` // 用户ID
|
||||
AdminId uint32 `field:"adminId"` // 管理员ID
|
||||
Type string `field:"type"` // 服务类型
|
||||
Name string `field:"name"` // 名称
|
||||
Description string `field:"description"` // 描述
|
||||
ServerNames string `field:"serverNames"` // 域名列表
|
||||
Http string `field:"http"` // HTTP配置
|
||||
Https string `field:"https"` // HTTPS配置
|
||||
Tcp string `field:"tcp"` // TCP配置
|
||||
Tls string `field:"tls"` // TLS配置
|
||||
Unix string `field:"unix"` // Unix配置
|
||||
Udp string `field:"udp"` // UDP配置
|
||||
WebId uint32 `field:"webId"` // WEB配置
|
||||
ReverseProxyId uint32 `field:"reverseProxyId"` // 反向代理配置
|
||||
GroupIds string `field:"groupIds"` // 分组ID列表
|
||||
Config string `field:"config"` // 服务配置,自动生成
|
||||
ClusterId uint32 `field:"clusterId"` // 集群ID
|
||||
IncludeNodes string `field:"includeNodes"` // 部署条件
|
||||
ExcludeNodes string `field:"excludeNodes"` // 节点排除条件
|
||||
Version uint32 `field:"version"` // 版本号
|
||||
CreatedAt uint32 `field:"createdAt"` // 创建时间
|
||||
State uint8 `field:"state"` // 状态
|
||||
}
|
||||
|
||||
type ServerOperator struct {
|
||||
Id interface{} // ID
|
||||
IsOn interface{} // 是否启用
|
||||
UniqueId interface{} // 唯一ID
|
||||
UserId interface{} // 用户ID
|
||||
AdminId interface{} // 管理员ID
|
||||
Type interface{} // 服务类型
|
||||
Name interface{} // 名称
|
||||
Description interface{} // 描述
|
||||
GroupIds interface{} // 分组ID列表
|
||||
Config interface{} // 服务配置,自动生成
|
||||
ClusterId interface{} // 集群ID
|
||||
IncludeNodes interface{} // 部署条件
|
||||
ExcludeNodes interface{} // 节点排除条件
|
||||
Version interface{} // 版本号
|
||||
CreatedAt interface{} // 创建时间
|
||||
State interface{} // 状态
|
||||
Id interface{} // ID
|
||||
IsOn interface{} // 是否启用
|
||||
UniqueId interface{} // 唯一ID
|
||||
UserId interface{} // 用户ID
|
||||
AdminId interface{} // 管理员ID
|
||||
Type interface{} // 服务类型
|
||||
Name interface{} // 名称
|
||||
Description interface{} // 描述
|
||||
ServerNames interface{} // 域名列表
|
||||
Http interface{} // HTTP配置
|
||||
Https interface{} // HTTPS配置
|
||||
Tcp interface{} // TCP配置
|
||||
Tls interface{} // TLS配置
|
||||
Unix interface{} // Unix配置
|
||||
Udp interface{} // UDP配置
|
||||
WebId interface{} // WEB配置
|
||||
ReverseProxyId interface{} // 反向代理配置
|
||||
GroupIds interface{} // 分组ID列表
|
||||
Config interface{} // 服务配置,自动生成
|
||||
ClusterId interface{} // 集群ID
|
||||
IncludeNodes interface{} // 部署条件
|
||||
ExcludeNodes interface{} // 节点排除条件
|
||||
Version interface{} // 版本号
|
||||
CreatedAt interface{} // 创建时间
|
||||
State interface{} // 状态
|
||||
}
|
||||
|
||||
func NewServerOperator() *ServerOperator {
|
||||
|
||||
66
internal/rpc/services/service_http_web.go
Normal file
66
internal/rpc/services/service_http_web.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
)
|
||||
|
||||
type HTTPWebService struct {
|
||||
}
|
||||
|
||||
// 创建Web配置
|
||||
func (this *HTTPWebService) CreateHTTPWeb(ctx context.Context, req *pb.CreateHTTPWebRequest) (*pb.CreateHTTPWebResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
webId, err := models.SharedHTTPWebDAO.CreateWeb(req.Root)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.CreateHTTPWebResponse{WebId: webId}, nil
|
||||
}
|
||||
|
||||
// 查找Web配置
|
||||
func (this *HTTPWebService) FindEnabledHTTPWeb(ctx context.Context, req *pb.FindEnabledHTTPWebRequest) (*pb.FindEnabledHTTPWebResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
web, err := models.SharedHTTPWebDAO.FindEnabledHTTPWeb(req.WebId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if web == nil {
|
||||
return &pb.FindEnabledHTTPWebResponse{Web: nil}, nil
|
||||
}
|
||||
|
||||
result := &pb.HTTPWeb{}
|
||||
result.Id = int64(web.Id)
|
||||
result.Root = web.Root
|
||||
return &pb.FindEnabledHTTPWebResponse{Web: result}, nil
|
||||
}
|
||||
|
||||
// 修改Web配置
|
||||
func (this *HTTPWebService) UpdateHTTPWeb(ctx context.Context, req *pb.UpdateHTTPWebRequest) (*pb.UpdateHTTPWebResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = models.SharedHTTPWebDAO.UpdateWeb(req.WebId, req.Root)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateHTTPWebResponse{}, nil
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
|
||||
@@ -85,7 +86,7 @@ func (this *OriginServerService) FindEnabledOriginServer(ctx context.Context, re
|
||||
IsOn: origin.IsOn == 1,
|
||||
Name: origin.Name,
|
||||
Addr: &pb.NetworkAddress{
|
||||
Protocol: addr.Protocol,
|
||||
Protocol: addr.Protocol.String(),
|
||||
Host: addr.Host,
|
||||
PortRange: addr.PortRange,
|
||||
},
|
||||
@@ -93,3 +94,23 @@ func (this *OriginServerService) FindEnabledOriginServer(ctx context.Context, re
|
||||
}
|
||||
return &pb.FindEnabledOriginServerResponse{Origin: result}, nil
|
||||
}
|
||||
|
||||
// 查找源站配置
|
||||
func (this *OriginServerService) FindEnabledOriginServerConfig(ctx context.Context, req *pb.FindEnabledOriginServerConfigRequest) (*pb.FindEnabledOriginServerConfigResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
config, err := models.SharedOriginServerDAO.ComposeOriginConfig(req.OriginId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
configData, err := json.Marshal(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.FindEnabledOriginServerConfigResponse{Config: configData}, nil
|
||||
}
|
||||
|
||||
122
internal/rpc/services/service_reverse_proxy.go
Normal file
122
internal/rpc/services/service_reverse_proxy.go
Normal file
@@ -0,0 +1,122 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
)
|
||||
|
||||
type ReverseProxyService struct {
|
||||
}
|
||||
|
||||
// 创建反向代理
|
||||
func (this *ReverseProxyService) CreateReverseProxy(ctx context.Context, req *pb.CreateReverseProxyRequest) (*pb.CreateReverseProxyResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reverseProxyId, err := models.SharedReverseProxyDAO.CreateReverseProxy(req.SchedulingJSON, req.PrimaryOriginsJSON, req.BackupOriginsJSON)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.CreateReverseProxyResponse{ReverseProxyId: reverseProxyId}, nil
|
||||
}
|
||||
|
||||
// 查找反向代理
|
||||
func (this *ReverseProxyService) FindEnabledReverseProxy(ctx context.Context, req *pb.FindEnabledReverseProxyRequest) (*pb.FindEnabledReverseProxyResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reverseProxy, err := models.SharedReverseProxyDAO.FindEnabledReverseProxy(req.ReverseProxyId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if reverseProxy == nil {
|
||||
return &pb.FindEnabledReverseProxyResponse{ReverseProxy: nil}, nil
|
||||
}
|
||||
|
||||
result := &pb.ReverseProxy{
|
||||
Id: int64(reverseProxy.Id),
|
||||
SchedulingJSON: []byte(reverseProxy.Scheduling),
|
||||
PrimaryOriginsJSON: []byte(reverseProxy.PrimaryOrigins),
|
||||
BackupOriginsJSON: []byte(reverseProxy.BackupOrigins),
|
||||
}
|
||||
return &pb.FindEnabledReverseProxyResponse{ReverseProxy: result}, nil
|
||||
}
|
||||
|
||||
// 查找反向代理配置
|
||||
func (this *ReverseProxyService) FindEnabledReverseProxyConfig(ctx context.Context, req *pb.FindEnabledReverseProxyConfigRequest) (*pb.FindEnabledReverseProxyConfigResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
config, err := models.SharedReverseProxyDAO.ComposeReverseProxyConfig(req.ReverseProxyId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
configData, err := json.Marshal(config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.FindEnabledReverseProxyConfigResponse{Config: configData}, nil
|
||||
}
|
||||
|
||||
// 修改反向代理调度算法
|
||||
func (this *ReverseProxyService) UpdateReverseProxyScheduling(ctx context.Context, req *pb.UpdateReverseProxySchedulingRequest) (*pb.UpdateReverseProxySchedulingResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = models.SharedReverseProxyDAO.UpdateReverseProxyScheduling(req.ReverseProxyId, req.SchedulingJSON)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateReverseProxySchedulingResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改主要源站信息
|
||||
func (this *ReverseProxyService) UpdateReverseProxyPrimaryOrigins(ctx context.Context, req *pb.UpdateReverseProxyPrimaryOriginsRequest) (*pb.UpdateReverseProxyPrimaryOriginsResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = models.SharedReverseProxyDAO.UpdateReverseProxyPrimaryOrigins(req.ReverseProxyId, req.OriginsJSON)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateReverseProxyPrimaryOriginsResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改备用源站信息
|
||||
func (this *ReverseProxyService) UpdateReverseProxyBackupOrigins(ctx context.Context, req *pb.UpdateReverseProxyBackupOriginsRequest) (*pb.UpdateReverseProxyBackupOriginsResponse, error) {
|
||||
// 校验请求
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = models.SharedReverseProxyDAO.UpdateReverseProxyBackupOrigins(req.ReverseProxyId, req.OriginsJSON)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateReverseProxyBackupOriginsResponse{}, nil
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
|
||||
@@ -17,7 +18,7 @@ func (this *ServerService) CreateServer(ctx context.Context, req *pb.CreateServe
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.Type, req.Name, req.Description, req.ClusterId, string(req.Config), string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON))
|
||||
serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.Type, req.Name, req.Description, string(req.ServerNamesJON), string(req.HttpJSON), string(req.HttpsJSON), string(req.TcpJSON), string(req.TlsJSON), string(req.UnixJSON), string(req.UdpJSON), req.WebId, req.ReverseProxyId, req.ClusterId, string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -73,8 +74,8 @@ func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.Update
|
||||
return &pb.UpdateServerBasicResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改服务配置
|
||||
func (this *ServerService) UpdateServerConfig(ctx context.Context, req *pb.UpdateServerConfigRequest) (*pb.UpdateServerConfigResponse, error) {
|
||||
// 修改HTTP服务
|
||||
func (this *ServerService) UpdateServerHTTP(ctx context.Context, req *pb.UpdateServerHTTPRequest) (*pb.UpdateServerHTTPResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -84,17 +85,17 @@ func (this *ServerService) UpdateServerConfig(ctx context.Context, req *pb.Updat
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查找Server
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return &pb.UpdateServerConfigResponse{}, nil
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改
|
||||
err = models.SharedServerDAO.UpdateServerConfig(req.ServerId, req.Config)
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerHTTP(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -105,7 +106,287 @@ func (this *ServerService) UpdateServerConfig(ctx context.Context, req *pb.Updat
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerConfigResponse{}, nil
|
||||
return &pb.UpdateServerHTTPResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改HTTPS服务
|
||||
func (this *ServerService) UpdateServerHTTPS(ctx context.Context, req *pb.UpdateServerHTTPSRequest) (*pb.UpdateServerHTTPSResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerHTTPS(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerHTTPSResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改TCP服务
|
||||
func (this *ServerService) UpdateServerTCP(ctx context.Context, req *pb.UpdateServerTCPRequest) (*pb.UpdateServerTCPResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerTCP(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerTCPResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改TLS服务
|
||||
func (this *ServerService) UpdateServerTLS(ctx context.Context, req *pb.UpdateServerTLSRequest) (*pb.UpdateServerTLSResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerTLS(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerTLSResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改Unix服务
|
||||
func (this *ServerService) UpdateServerUnix(ctx context.Context, req *pb.UpdateServerUnixRequest) (*pb.UpdateServerUnixResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerUnix(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerUnixResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改UDP服务
|
||||
func (this *ServerService) UpdateServerUDP(ctx context.Context, req *pb.UpdateServerUDPRequest) (*pb.UpdateServerUDPResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerUDP(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerUDPResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改Web服务
|
||||
func (this *ServerService) UpdateServerWeb(ctx context.Context, req *pb.UpdateServerWebRequest) (*pb.UpdateServerWebResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerWeb(req.ServerId, req.WebId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerWebResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改反向代理服务
|
||||
func (this *ServerService) UpdateServerReverseProxy(ctx context.Context, req *pb.UpdateServerReverseProxyRequest) (*pb.UpdateServerReverseProxyResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerReverseProxy(req.ServerId, req.ReverseProxyId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerReverseProxyResponse{}, nil
|
||||
}
|
||||
|
||||
// 修改域名服务
|
||||
func (this *ServerService) UpdateServerNames(ctx context.Context, req *pb.UpdateServerNamesRequest) (*pb.UpdateServerNamesResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if req.ServerId <= 0 {
|
||||
return nil, errors.New("invalid serverId")
|
||||
}
|
||||
|
||||
// 查询老的节点信息
|
||||
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if server == nil {
|
||||
return nil, errors.New("can not find server")
|
||||
}
|
||||
|
||||
// 修改配置
|
||||
err = models.SharedServerDAO.UpdateServerNames(req.ServerId, req.Config)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 更新新的节点版本
|
||||
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.UpdateServerNamesResponse{}, nil
|
||||
}
|
||||
|
||||
// 计算服务数量
|
||||
@@ -142,9 +423,9 @@ func (this *ServerService) ListEnabledServers(ctx context.Context, req *pb.ListE
|
||||
result = append(result, &pb.Server{
|
||||
Id: int64(server.Id),
|
||||
Type: server.Type,
|
||||
Config: []byte(server.Config),
|
||||
Name: server.Name,
|
||||
Description: server.Description,
|
||||
Config: []byte(server.Config),
|
||||
IncludeNodes: []byte(server.IncludeNodes),
|
||||
ExcludeNodes: []byte(server.ExcludeNodes),
|
||||
CreatedAt: int64(server.CreatedAt),
|
||||
@@ -211,11 +492,20 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn
|
||||
}
|
||||
|
||||
return &pb.FindEnabledServerResponse{Server: &pb.Server{
|
||||
Id: int64(server.Id),
|
||||
Type: server.Type,
|
||||
Name: server.Name,
|
||||
Description: server.Description,
|
||||
Config: []byte(server.Config),
|
||||
Id: int64(server.Id),
|
||||
Type: server.Type,
|
||||
Name: server.Name,
|
||||
Description: server.Description,
|
||||
Config: []byte(server.Config),
|
||||
HttpJSON: []byte(server.Http),
|
||||
HttpsJSON: []byte(server.Https),
|
||||
TcpJSON: []byte(server.Tcp),
|
||||
TlsJSON: []byte(server.Tls),
|
||||
UnixJSON: []byte(server.Unix),
|
||||
UdpJSON: []byte(server.Udp),
|
||||
WebId: int64(server.WebId),
|
||||
ReverseProxyId: int64(server.ReverseProxyId),
|
||||
|
||||
IncludeNodes: []byte(server.IncludeNodes),
|
||||
ExcludeNodes: []byte(server.ExcludeNodes),
|
||||
CreatedAt: int64(server.CreatedAt),
|
||||
@@ -225,3 +515,41 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn
|
||||
},
|
||||
}}, nil
|
||||
}
|
||||
|
||||
//
|
||||
func (this *ServerService) FindEnabledServerType(ctx context.Context, req *pb.FindEnabledServerTypeRequest) (*pb.FindEnabledServerTypeResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
serverType, err := models.SharedServerDAO.FindEnabledServerType(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.FindEnabledServerTypeResponse{Type: serverType}, nil
|
||||
}
|
||||
|
||||
// 查找反向代理设置
|
||||
func (this *ServerService) FindServerReverseProxy(ctx context.Context, req *pb.FindServerReverseProxyRequest) (*pb.FindServerReverseProxyResponse, error) {
|
||||
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reverseProxy, err := models.SharedServerDAO.FindReverseProxyConfig(req.ServerId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if reverseProxy == nil {
|
||||
return &pb.FindServerReverseProxyResponse{Config: nil}, nil
|
||||
}
|
||||
|
||||
configData, err := json.Marshal(reverseProxy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &pb.FindServerReverseProxyResponse{Config: configData}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user