2020-09-13 20:37:28 +08:00
|
|
|
package services
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
2020-09-15 14:44:11 +08:00
|
|
|
"encoding/json"
|
2020-09-13 20:37:28 +08:00
|
|
|
"errors"
|
|
|
|
|
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
2023-06-07 17:25:20 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs"
|
2021-03-25 21:17:59 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
2022-01-16 19:51:54 +08:00
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
|
2020-09-13 20:37:28 +08:00
|
|
|
"github.com/iwind/TeaGo/maps"
|
|
|
|
|
)
|
|
|
|
|
|
2021-09-20 11:54:45 +08:00
|
|
|
// OriginService 源站相关管理
|
2020-09-21 20:21:26 +08:00
|
|
|
type OriginService struct {
|
2020-11-24 17:36:47 +08:00
|
|
|
BaseService
|
2020-09-13 20:37:28 +08:00
|
|
|
}
|
|
|
|
|
|
2021-09-20 11:54:45 +08:00
|
|
|
// CreateOrigin 创建源站
|
2020-09-21 20:21:26 +08:00
|
|
|
func (this *OriginService) CreateOrigin(ctx context.Context, req *pb.CreateOriginRequest) (*pb.CreateOriginResponse, error) {
|
2022-09-17 16:07:37 +08:00
|
|
|
adminId, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-07 17:25:20 +08:00
|
|
|
// 源站地址设置
|
2020-09-13 20:37:28 +08:00
|
|
|
if req.Addr == nil {
|
|
|
|
|
return nil, errors.New("'addr' can not be nil")
|
|
|
|
|
}
|
2023-06-07 17:25:20 +08:00
|
|
|
var addrMap = maps.Map{
|
2020-09-13 20:37:28 +08:00
|
|
|
"protocol": req.Addr.Protocol,
|
|
|
|
|
"portRange": req.Addr.PortRange,
|
|
|
|
|
"host": req.Addr.Host,
|
|
|
|
|
}
|
2021-01-01 23:31:30 +08:00
|
|
|
|
2023-06-07 17:25:20 +08:00
|
|
|
// OSS设置
|
|
|
|
|
var ossConfig *ossconfigs.OSSConfig
|
|
|
|
|
if len(req.OssJSON) > 0 {
|
|
|
|
|
ossConfig = ossconfigs.NewOSSConfig()
|
|
|
|
|
err = json.Unmarshal(req.OssJSON, ossConfig)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-22 15:05:30 +08:00
|
|
|
var tx = this.NullTx()
|
2021-01-01 23:31:30 +08:00
|
|
|
|
2021-03-25 21:17:59 +08:00
|
|
|
// 校验参数
|
|
|
|
|
var connTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.ConnTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.ConnTimeoutJSON, connTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var readTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.ReadTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.ReadTimeoutJSON, readTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var idleTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.IdleTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.IdleTimeoutJSON, idleTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-16 19:51:54 +08:00
|
|
|
// cert
|
|
|
|
|
var certRef *sslconfigs.SSLCertRef
|
|
|
|
|
if len(req.CertRefJSON) > 0 {
|
|
|
|
|
certRef = &sslconfigs.SSLCertRef{}
|
|
|
|
|
err = json.Unmarshal(req.CertRefJSON, certRef)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if certRef.CertId <= 0 {
|
|
|
|
|
certRef = nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 11:44:02 +08:00
|
|
|
originId, err := models.SharedOriginDAO.CreateOrigin(tx, adminId, userId, req.Name, addrMap.AsJSON(), ossConfig, req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort, req.Http2Enabled)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-21 20:21:26 +08:00
|
|
|
return &pb.CreateOriginResponse{OriginId: originId}, nil
|
2020-09-13 20:37:28 +08:00
|
|
|
}
|
|
|
|
|
|
2021-09-20 11:54:45 +08:00
|
|
|
// UpdateOrigin 修改源站
|
2020-11-13 18:22:22 +08:00
|
|
|
func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOriginRequest) (*pb.RPCSuccess, error) {
|
2022-09-17 16:07:37 +08:00
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-29 21:55:57 +08:00
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
2020-12-23 09:52:50 +08:00
|
|
|
if userId > 0 {
|
2022-06-29 21:55:57 +08:00
|
|
|
err = models.SharedOriginDAO.CheckUserOrigin(tx, userId, req.OriginId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2020-12-23 09:52:50 +08:00
|
|
|
}
|
2023-06-07 17:25:20 +08:00
|
|
|
|
|
|
|
|
// 源站地址设置
|
2020-09-13 20:37:28 +08:00
|
|
|
if req.Addr == nil {
|
|
|
|
|
return nil, errors.New("'addr' can not be nil")
|
|
|
|
|
}
|
2022-06-29 21:55:57 +08:00
|
|
|
var addrMap = maps.Map{
|
2020-09-13 20:37:28 +08:00
|
|
|
"protocol": req.Addr.Protocol,
|
|
|
|
|
"portRange": req.Addr.PortRange,
|
|
|
|
|
"host": req.Addr.Host,
|
|
|
|
|
}
|
2021-01-01 23:31:30 +08:00
|
|
|
|
2023-06-07 17:25:20 +08:00
|
|
|
// OSS设置
|
|
|
|
|
var ossConfig *ossconfigs.OSSConfig
|
|
|
|
|
if len(req.OssJSON) > 0 {
|
|
|
|
|
ossConfig = ossconfigs.NewOSSConfig()
|
|
|
|
|
err = json.Unmarshal(req.OssJSON, ossConfig)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-25 21:17:59 +08:00
|
|
|
// 校验参数
|
|
|
|
|
var connTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.ConnTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.ConnTimeoutJSON, connTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var readTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.ReadTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.ReadTimeoutJSON, readTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var idleTimeout = &shared.TimeDuration{}
|
|
|
|
|
if len(req.IdleTimeoutJSON) > 0 {
|
|
|
|
|
err = json.Unmarshal(req.IdleTimeoutJSON, idleTimeout)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-16 19:51:54 +08:00
|
|
|
// cert
|
|
|
|
|
var certRef *sslconfigs.SSLCertRef
|
|
|
|
|
if len(req.CertRefJSON) > 0 {
|
|
|
|
|
certRef = &sslconfigs.SSLCertRef{}
|
|
|
|
|
err = json.Unmarshal(req.CertRefJSON, certRef)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if certRef.CertId <= 0 {
|
|
|
|
|
certRef = nil
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 11:44:02 +08:00
|
|
|
err = models.SharedOriginDAO.UpdateOrigin(tx, req.OriginId, req.Name, addrMap.AsJSON(), ossConfig, req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort, req.Http2Enabled)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2020-11-24 17:36:47 +08:00
|
|
|
return this.Success()
|
2020-09-13 20:37:28 +08:00
|
|
|
}
|
|
|
|
|
|
2021-09-20 11:54:45 +08:00
|
|
|
// FindEnabledOrigin 查找单个源站信息
|
2020-09-21 20:21:26 +08:00
|
|
|
func (this *OriginService) FindEnabledOrigin(ctx context.Context, req *pb.FindEnabledOriginRequest) (*pb.FindEnabledOriginResponse, error) {
|
2022-09-17 16:07:37 +08:00
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-29 21:55:57 +08:00
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
2020-12-23 09:52:50 +08:00
|
|
|
if userId > 0 {
|
2022-06-29 21:55:57 +08:00
|
|
|
err = models.SharedOriginDAO.CheckUserOrigin(tx, userId, req.OriginId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2020-12-23 09:52:50 +08:00
|
|
|
}
|
|
|
|
|
|
2021-01-01 23:31:30 +08:00
|
|
|
origin, err := models.SharedOriginDAO.FindEnabledOrigin(tx, req.OriginId)
|
2020-09-13 20:37:28 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if origin == nil {
|
2020-09-21 20:21:26 +08:00
|
|
|
return &pb.FindEnabledOriginResponse{Origin: nil}, nil
|
2020-09-13 20:37:28 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
addr, err := origin.DecodeAddr()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 11:44:02 +08:00
|
|
|
return &pb.FindEnabledOriginResponse{Origin: &pb.Origin{
|
2020-09-13 20:37:28 +08:00
|
|
|
Id: int64(origin.Id),
|
2022-03-22 21:45:07 +08:00
|
|
|
IsOn: origin.IsOn,
|
2020-09-13 20:37:28 +08:00
|
|
|
Name: origin.Name,
|
|
|
|
|
Addr: &pb.NetworkAddress{
|
2020-09-15 14:44:11 +08:00
|
|
|
Protocol: addr.Protocol.String(),
|
2020-09-13 20:37:28 +08:00
|
|
|
Host: addr.Host,
|
|
|
|
|
PortRange: addr.PortRange,
|
|
|
|
|
},
|
2023-06-23 11:44:02 +08:00
|
|
|
Description: origin.Description,
|
|
|
|
|
Domains: origin.DecodeDomains(),
|
|
|
|
|
FollowPort: origin.FollowPort,
|
|
|
|
|
Http2Enabled: origin.Http2Enabled,
|
|
|
|
|
}}, nil
|
2020-09-13 20:37:28 +08:00
|
|
|
}
|
2020-09-15 14:44:11 +08:00
|
|
|
|
2021-09-20 11:54:45 +08:00
|
|
|
// FindEnabledOriginConfig 查找源站配置
|
2020-09-21 20:21:26 +08:00
|
|
|
func (this *OriginService) FindEnabledOriginConfig(ctx context.Context, req *pb.FindEnabledOriginConfigRequest) (*pb.FindEnabledOriginConfigResponse, error) {
|
2022-09-17 16:07:37 +08:00
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
2020-09-15 14:44:11 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2022-06-29 21:55:57 +08:00
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
2020-12-23 09:52:50 +08:00
|
|
|
if userId > 0 {
|
2022-06-29 21:55:57 +08:00
|
|
|
err = models.SharedOriginDAO.CheckUserOrigin(tx, userId, req.OriginId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
2020-12-23 09:52:50 +08:00
|
|
|
}
|
|
|
|
|
|
2023-03-18 22:18:13 +08:00
|
|
|
config, err := models.SharedOriginDAO.ComposeOriginConfig(tx, req.OriginId, nil, nil)
|
2020-09-15 14:44:11 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
configData, err := json.Marshal(config)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-21 20:21:26 +08:00
|
|
|
return &pb.FindEnabledOriginConfigResponse{OriginJSON: configData}, nil
|
2020-09-15 14:44:11 +08:00
|
|
|
}
|
2024-04-14 16:27:27 +08:00
|
|
|
|
|
|
|
|
// UpdateOriginIsOn 修改源站是否启用
|
|
|
|
|
func (this *OriginService) UpdateOriginIsOn(ctx context.Context, req *pb.UpdateOriginIsOnRequest) (*pb.RPCSuccess, error) {
|
|
|
|
|
_, userId, err := this.ValidateAdminAndUser(ctx, true)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var tx = this.NullTx()
|
|
|
|
|
|
|
|
|
|
if userId > 0 {
|
|
|
|
|
err = models.SharedOriginDAO.CheckUserOrigin(tx, userId, req.OriginId)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
err = models.SharedOriginDAO.UpdateOriginIsOn(tx, req.OriginId, req.IsOn)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return this.Success()
|
|
|
|
|
}
|