diff --git a/internal/db/models/origin_dao.go b/internal/db/models/origin_dao.go index 1f59d89f..b536740c 100644 --- a/internal/db/models/origin_dao.go +++ b/internal/db/models/origin_dao.go @@ -5,6 +5,7 @@ import ( "errors" "github.com/TeaOSLab/EdgeAPI/internal/utils" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" _ "github.com/go-sql-driver/mysql" @@ -91,7 +92,8 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx, adminId int64, userId int64, name string, - addrJSON string, + addrJSON []byte, + ossConfig *ossconfigs.OSSConfig, description string, weight int32, isOn bool, connTimeout *shared.TimeDuration, @@ -141,7 +143,18 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx, op.MaxIdleConns = 0 } - op.Addr = addrJSON + if len(addrJSON) > 0 { + op.Addr = addrJSON + } + + if ossConfig != nil { + ossConfigJSON, err := json.Marshal(ossConfig) + if err != nil { + return 0, err + } + op.Oss = ossConfigJSON + } + op.Description = description if weight < 0 { weight = 0 @@ -182,7 +195,8 @@ func (this *OriginDAO) CreateOrigin(tx *dbs.Tx, func (this *OriginDAO) UpdateOrigin(tx *dbs.Tx, originId int64, name string, - addrJSON string, + addrJSON []byte, + ossConfig *ossconfigs.OSSConfig, description string, weight int32, isOn bool, @@ -201,7 +215,17 @@ func (this *OriginDAO) UpdateOrigin(tx *dbs.Tx, var op = NewOriginOperator() op.Id = originId op.Name = name + op.Addr = addrJSON + + if ossConfig != nil { + ossConfigJSON, err := json.Marshal(ossConfig) + if err != nil { + return err + } + op.Oss = ossConfigJSON + } + op.Description = description if weight < 0 { weight = 0 @@ -369,6 +393,7 @@ func (this *OriginDAO) ComposeOriginConfig(tx *dbs.Tx, originId int64, dataMap * FollowPort: origin.FollowPort, } + // addr if IsNotNull(origin.Addr) { var addr = &serverconfigs.NetworkAddressConfig{} err = json.Unmarshal(origin.Addr, addr) @@ -378,6 +403,16 @@ func (this *OriginDAO) ComposeOriginConfig(tx *dbs.Tx, originId int64, dataMap * config.Addr = addr } + // oss + if IsNotNull(origin.Oss) { + var ossConfig = ossconfigs.NewOSSConfig() + err = json.Unmarshal(origin.Oss, ossConfig) + if err != nil { + return nil, err + } + config.OSS = ossConfig + } + if IsNotNull(origin.ConnTimeout) { var connTimeout = &shared.TimeDuration{} err = json.Unmarshal(origin.ConnTimeout, &connTimeout) diff --git a/internal/db/models/origin_model.go b/internal/db/models/origin_model.go index e4f88738..795380bf 100644 --- a/internal/db/models/origin_model.go +++ b/internal/db/models/origin_model.go @@ -11,6 +11,7 @@ type Origin struct { Name string `field:"name"` // 名称 Version uint32 `field:"version"` // 版本 Addr dbs.JSON `field:"addr"` // 地址 + Oss dbs.JSON `field:"oss"` // OSS配置 Description string `field:"description"` // 描述 Code string `field:"code"` // 代号 Weight uint32 `field:"weight"` // 权重 @@ -34,33 +35,34 @@ type Origin struct { } type OriginOperator struct { - Id interface{} // ID - AdminId interface{} // 管理员ID - UserId interface{} // 用户ID - IsOn interface{} // 是否启用 - Name interface{} // 名称 - Version interface{} // 版本 - Addr interface{} // 地址 - Description interface{} // 描述 - Code interface{} // 代号 - Weight interface{} // 权重 - ConnTimeout interface{} // 连接超时 - ReadTimeout interface{} // 读超时 - IdleTimeout interface{} // 空闲连接超时 - MaxFails interface{} // 最多失败次数 - MaxConns interface{} // 最大并发连接数 - MaxIdleConns interface{} // 最多空闲连接数 - HttpRequestURI interface{} // 转发后的请求URI - HttpRequestHeader interface{} // 请求Header配置 - HttpResponseHeader interface{} // 响应Header配置 - Host interface{} // 自定义主机名 - HealthCheck interface{} // 健康检查设置 - Cert interface{} // 证书设置 - Ftp interface{} // FTP相关设置 - CreatedAt interface{} // 创建时间 - Domains interface{} // 所属域名 - FollowPort interface{} // 端口跟随 - State interface{} // 状态 + Id any // ID + AdminId any // 管理员ID + UserId any // 用户ID + IsOn any // 是否启用 + Name any // 名称 + Version any // 版本 + Addr any // 地址 + Oss any // OSS配置 + Description any // 描述 + Code any // 代号 + Weight any // 权重 + ConnTimeout any // 连接超时 + ReadTimeout any // 读超时 + IdleTimeout any // 空闲连接超时 + MaxFails any // 最多失败次数 + MaxConns any // 最大并发连接数 + MaxIdleConns any // 最多空闲连接数 + HttpRequestURI any // 转发后的请求URI + HttpRequestHeader any // 请求Header配置 + HttpResponseHeader any // 响应Header配置 + Host any // 自定义主机名 + HealthCheck any // 健康检查设置 + Cert any // 证书设置 + Ftp any // FTP相关设置 + CreatedAt any // 创建时间 + Domains any // 所属域名 + FollowPort any // 端口跟随 + State any // 状态 } func NewOriginOperator() *OriginOperator { diff --git a/internal/rpc/services/service_origin.go b/internal/rpc/services/service_origin.go index 4a679747..e7a3d13b 100644 --- a/internal/rpc/services/service_origin.go +++ b/internal/rpc/services/service_origin.go @@ -6,6 +6,7 @@ import ( "errors" "github.com/TeaOSLab/EdgeAPI/internal/db/models" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/ossconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs" "github.com/iwind/TeaGo/maps" @@ -23,15 +24,26 @@ func (this *OriginService) CreateOrigin(ctx context.Context, req *pb.CreateOrigi return nil, err } + // 源站地址设置 if req.Addr == nil { return nil, errors.New("'addr' can not be nil") } - addrMap := maps.Map{ + var addrMap = maps.Map{ "protocol": req.Addr.Protocol, "portRange": req.Addr.PortRange, "host": req.Addr.Host, } + // 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 + } + } + var tx = this.NullTx() // 校验参数 @@ -72,7 +84,7 @@ func (this *OriginService) CreateOrigin(ctx context.Context, req *pb.CreateOrigi } } - originId, err := models.SharedOriginDAO.CreateOrigin(tx, adminId, userId, req.Name, string(addrMap.AsJSON()), req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort) + 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) if err != nil { return nil, err } @@ -95,6 +107,8 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi return nil, err } } + + // 源站地址设置 if req.Addr == nil { return nil, errors.New("'addr' can not be nil") } @@ -104,6 +118,16 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi "host": req.Addr.Host, } + // 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 + } + } + // 校验参数 var connTimeout = &shared.TimeDuration{} if len(req.ConnTimeoutJSON) > 0 { @@ -142,7 +166,7 @@ func (this *OriginService) UpdateOrigin(ctx context.Context, req *pb.UpdateOrigi } } - err = models.SharedOriginDAO.UpdateOrigin(tx, req.OriginId, req.Name, string(addrMap.AsJSON()), req.Description, req.Weight, req.IsOn, connTimeout, readTimeout, idleTimeout, req.MaxConns, req.MaxIdleConns, certRef, req.Domains, req.Host, req.FollowPort) + 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) if err != nil { return nil, err }