2020-09-15 14:44:11 +08:00
|
|
|
|
package models
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2020-09-17 10:16:00 +08:00
|
|
|
|
"encoding/json"
|
2020-09-15 14:44:11 +08:00
|
|
|
|
"errors"
|
2024-07-27 14:15:25 +08:00
|
|
|
|
|
2022-05-04 20:32:34 +08:00
|
|
|
|
teaconst "github.com/TeaOSLab/EdgeAPI/internal/const"
|
2021-11-11 14:16:42 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeAPI/internal/utils"
|
2020-09-15 14:44:11 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
2020-10-06 21:02:15 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs"
|
2020-09-23 18:43:42 +08:00
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
2020-09-15 14:44:11 +08:00
|
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
|
|
|
|
"github.com/iwind/TeaGo/Tea"
|
|
|
|
|
|
"github.com/iwind/TeaGo/dbs"
|
2020-10-20 20:18:06 +08:00
|
|
|
|
"github.com/iwind/TeaGo/lists"
|
2021-01-17 16:48:00 +08:00
|
|
|
|
"github.com/iwind/TeaGo/maps"
|
2020-09-15 14:44:11 +08:00
|
|
|
|
"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)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-10-13 20:05:13 +08:00
|
|
|
|
var SharedHTTPWebDAO *HTTPWebDAO
|
|
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
dbs.OnReady(func() {
|
|
|
|
|
|
SharedHTTPWebDAO = NewHTTPWebDAO()
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
2020-09-15 14:44:11 +08:00
|
|
|
|
|
2020-09-26 08:06:40 +08:00
|
|
|
|
func (this *HTTPWebDAO) Init() {
|
2021-01-17 16:48:00 +08:00
|
|
|
|
_ = this.DAOObject.Init()
|
2020-09-26 08:06:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// EnableHTTPWeb 启用条目
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) EnableHTTPWeb(tx *dbs.Tx, id int64) error {
|
|
|
|
|
|
_, err := this.Query(tx).
|
2020-09-15 14:44:11 +08:00
|
|
|
|
Pk(id).
|
|
|
|
|
|
Set("state", HTTPWebStateEnabled).
|
|
|
|
|
|
Update()
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// DisableHTTPWeb 禁用条目
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) DisableHTTPWeb(tx *dbs.Tx, id int64) error {
|
|
|
|
|
|
_, err := this.Query(tx).
|
2020-09-15 14:44:11 +08:00
|
|
|
|
Pk(id).
|
|
|
|
|
|
Set("state", HTTPWebStateDisabled).
|
|
|
|
|
|
Update()
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledHTTPWeb 查找启用中的条目
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledHTTPWeb(tx *dbs.Tx, id int64) (*HTTPWeb, error) {
|
|
|
|
|
|
result, err := this.Query(tx).
|
2020-09-15 14:44:11 +08:00
|
|
|
|
Pk(id).
|
|
|
|
|
|
Attr("state", HTTPWebStateEnabled).
|
|
|
|
|
|
Find()
|
|
|
|
|
|
if result == nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return result.(*HTTPWeb), err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// ComposeWebConfig 组合配置
|
2023-03-18 22:18:13 +08:00
|
|
|
|
func (this *HTTPWebDAO) ComposeWebConfig(tx *dbs.Tx, webId int64, isLocationOrGroup bool, forNode bool, dataMap *shared.DataMap, cacheMap *utils.CacheMap) (*serverconfigs.HTTPWebConfig, error) {
|
2021-08-22 11:35:33 +08:00
|
|
|
|
if cacheMap == nil {
|
2021-11-11 14:16:42 +08:00
|
|
|
|
cacheMap = utils.NewCacheMap()
|
2021-08-22 11:35:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
var cacheKey = this.Table + ":config:" + types.String(webId)
|
2021-11-11 14:16:42 +08:00
|
|
|
|
var cache, _ = cacheMap.Get(cacheKey)
|
2021-08-22 11:35:33 +08:00
|
|
|
|
if cache != nil {
|
|
|
|
|
|
return cache.(*serverconfigs.HTTPWebConfig), nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-01-01 23:31:30 +08:00
|
|
|
|
web, err := SharedHTTPWebDAO.FindEnabledHTTPWeb(tx, webId)
|
2020-09-15 14:44:11 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if web == nil {
|
|
|
|
|
|
return nil, nil
|
|
|
|
|
|
}
|
2020-09-20 16:28:07 +08:00
|
|
|
|
|
2022-03-26 22:04:16 +08:00
|
|
|
|
var config = &serverconfigs.HTTPWebConfig{}
|
2020-09-16 09:09:21 +08:00
|
|
|
|
config.Id = webId
|
2022-03-22 21:45:07 +08:00
|
|
|
|
config.IsOn = web.IsOn
|
2020-09-26 11:21:43 +08:00
|
|
|
|
|
|
|
|
|
|
// root
|
|
|
|
|
|
if IsNotNull(web.Root) {
|
2023-08-10 11:27:05 +08:00
|
|
|
|
var rootConfig = serverconfigs.NewHTTPRootConfig()
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Root, rootConfig)
|
2020-09-26 11:21:43 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, rootConfig.IsPrior, rootConfig.IsOn) {
|
|
|
|
|
|
config.Root = rootConfig
|
|
|
|
|
|
}
|
2020-09-26 11:21:43 +08:00
|
|
|
|
}
|
2020-09-16 09:09:21 +08:00
|
|
|
|
|
2021-09-29 19:32:25 +08:00
|
|
|
|
// compression
|
|
|
|
|
|
if IsNotNull(web.Compression) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var compressionConfig = &serverconfigs.HTTPCompressionConfig{}
|
|
|
|
|
|
err = json.Unmarshal(web.Compression, compressionConfig)
|
2020-09-20 16:28:07 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, compressionConfig.IsPrior, compressionConfig.IsOn) {
|
|
|
|
|
|
config.Compression = compressionConfig
|
|
|
|
|
|
|
|
|
|
|
|
// gzip
|
|
|
|
|
|
if compressionConfig.GzipRef != nil && compressionConfig.GzipRef.Id > 0 {
|
|
|
|
|
|
gzipConfig, err := SharedHTTPGzipDAO.ComposeGzipConfig(tx, compressionConfig.GzipRef.Id)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
compressionConfig.Gzip = gzipConfig
|
2021-09-29 19:32:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// brotli
|
|
|
|
|
|
if compressionConfig.BrotliRef != nil && compressionConfig.BrotliRef.Id > 0 {
|
|
|
|
|
|
brotliConfig, err := SharedHTTPBrotliPolicyDAO.ComposeBrotliConfig(tx, compressionConfig.BrotliRef.Id)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
compressionConfig.Brotli = brotliConfig
|
2021-09-29 19:32:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// deflate
|
|
|
|
|
|
if compressionConfig.DeflateRef != nil && compressionConfig.DeflateRef.Id > 0 {
|
|
|
|
|
|
deflateConfig, err := SharedHTTPDeflatePolicyDAO.ComposeDeflateConfig(tx, compressionConfig.DeflateRef.Id)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
compressionConfig.Deflate = deflateConfig
|
2021-09-29 19:32:25 +08:00
|
|
|
|
}
|
2020-09-16 09:09:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-07-11 19:46:00 +08:00
|
|
|
|
// Optimization
|
|
|
|
|
|
if IsNotNull(web.Optimization) {
|
|
|
|
|
|
var optimizationConfig = serverconfigs.NewHTTPPageOptimizationConfig()
|
|
|
|
|
|
err = json.Unmarshal(web.Optimization, optimizationConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, optimizationConfig.IsPrior, true) {
|
|
|
|
|
|
config.Optimization = optimizationConfig
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-16 20:29:18 +08:00
|
|
|
|
// charset
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if IsNotNull(web.Charset) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var charsetConfig = &serverconfigs.HTTPCharsetConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Charset, charsetConfig)
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, charsetConfig.IsPrior, charsetConfig.IsOn) {
|
|
|
|
|
|
config.Charset = charsetConfig
|
|
|
|
|
|
}
|
2020-09-23 18:43:42 +08:00
|
|
|
|
}
|
2020-09-16 20:29:18 +08:00
|
|
|
|
|
|
|
|
|
|
// headers
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if IsNotNull(web.RequestHeader) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var ref = &shared.HTTPHeaderPolicyRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.RequestHeader, ref)
|
2020-09-16 20:29:18 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, ref.IsPrior, ref.IsOn) {
|
|
|
|
|
|
config.RequestHeaderPolicyRef = ref
|
2020-09-23 18:43:42 +08:00
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if ref.HeaderPolicyId > 0 {
|
|
|
|
|
|
headerPolicy, err := SharedHTTPHeaderPolicyDAO.ComposeHeaderPolicyConfig(tx, ref.HeaderPolicyId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if headerPolicy != nil {
|
|
|
|
|
|
config.RequestHeaderPolicy = headerPolicy
|
|
|
|
|
|
}
|
2020-09-23 18:43:42 +08:00
|
|
|
|
}
|
2020-09-16 20:29:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if IsNotNull(web.ResponseHeader) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var ref = &shared.HTTPHeaderPolicyRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.ResponseHeader, ref)
|
2020-09-16 20:29:18 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, ref.IsPrior, ref.IsOn) {
|
|
|
|
|
|
config.ResponseHeaderPolicyRef = ref
|
2020-09-23 18:43:42 +08:00
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if ref.HeaderPolicyId > 0 {
|
|
|
|
|
|
headerPolicy, err := SharedHTTPHeaderPolicyDAO.ComposeHeaderPolicyConfig(tx, ref.HeaderPolicyId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if headerPolicy != nil {
|
|
|
|
|
|
config.ResponseHeaderPolicy = headerPolicy
|
|
|
|
|
|
}
|
2020-09-23 18:43:42 +08:00
|
|
|
|
}
|
2020-09-16 20:29:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-09-16 09:09:21 +08:00
|
|
|
|
|
2020-09-17 10:16:00 +08:00
|
|
|
|
// shutdown
|
|
|
|
|
|
if IsNotNull(web.Shutdown) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var shutdownConfig = &serverconfigs.HTTPShutdownConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Shutdown, shutdownConfig)
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, shutdownConfig.IsPrior, shutdownConfig.IsOn) {
|
|
|
|
|
|
config.Shutdown = shutdownConfig
|
|
|
|
|
|
}
|
2020-09-17 10:16:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// pages
|
2024-05-03 09:35:32 +08:00
|
|
|
|
config.EnableGlobalPages = web.EnableGlobalPages
|
|
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// TODO 检查forNode参数
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if IsNotNull(web.Pages) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var pages = []*serverconfigs.HTTPPageConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Pages, &pages)
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
for index, page := range pages {
|
2021-08-22 11:35:33 +08:00
|
|
|
|
pageConfig, err := SharedHTTPPageDAO.ComposePageConfig(tx, page.Id, cacheMap)
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
pages[index] = pageConfig
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(pages) > 0 {
|
|
|
|
|
|
config.Pages = pages
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-20 11:56:30 +08:00
|
|
|
|
// 访问日志
|
|
|
|
|
|
if IsNotNull(web.AccessLog) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var accessLogConfig = &serverconfigs.HTTPAccessLogRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.AccessLog, accessLogConfig)
|
2020-09-20 11:56:30 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, accessLogConfig.IsPrior, accessLogConfig.IsOn) {
|
|
|
|
|
|
config.AccessLogRef = accessLogConfig
|
|
|
|
|
|
}
|
2020-09-20 11:56:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-20 14:48:41 +08:00
|
|
|
|
// 统计配置
|
|
|
|
|
|
if IsNotNull(web.Stat) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var statRef = &serverconfigs.HTTPStatRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Stat, statRef)
|
2020-09-20 16:28:07 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, statRef.IsPrior, statRef.IsOn) {
|
|
|
|
|
|
config.StatRef = statRef
|
|
|
|
|
|
}
|
2020-09-20 16:28:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 缓存配置
|
|
|
|
|
|
if IsNotNull(web.Cache) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var cacheConfig = &serverconfigs.HTTPCacheConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Cache, &cacheConfig)
|
2020-09-20 14:48:41 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
|
|
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, cacheConfig.IsPrior, cacheConfig.IsOn) {
|
|
|
|
|
|
config.Cache = cacheConfig
|
|
|
|
|
|
}
|
2020-12-17 17:36:20 +08:00
|
|
|
|
|
|
|
|
|
|
// 暂不支持自定义缓存策略设置,因为同一个集群下的服务需要集中管理
|
2020-09-20 14:48:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-20 20:12:47 +08:00
|
|
|
|
// 防火墙配置
|
|
|
|
|
|
if IsNotNull(web.Firewall) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var firewallRef = &firewallconfigs.HTTPFirewallRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Firewall, firewallRef)
|
2020-09-20 20:12:47 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, firewallRef.IsPrior, firewallRef.IsOn) {
|
|
|
|
|
|
config.FirewallRef = firewallRef
|
2020-10-08 15:08:08 +08:00
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// 自定义防火墙设置
|
|
|
|
|
|
if firewallRef.FirewallPolicyId > 0 {
|
2023-08-13 10:51:52 +08:00
|
|
|
|
firewallPolicy, err := SharedHTTPFirewallPolicyDAO.ComposeFirewallPolicy(tx, firewallRef.FirewallPolicyId, forNode, cacheMap)
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if firewallPolicy == nil {
|
|
|
|
|
|
config.FirewallRef = nil
|
|
|
|
|
|
} else {
|
|
|
|
|
|
config.FirewallPolicy = firewallPolicy
|
|
|
|
|
|
}
|
2021-01-03 20:18:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2020-09-20 20:12:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-13 14:30:30 +08:00
|
|
|
|
// 路由规则
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// TODO 检查forNode参数
|
2020-09-21 19:51:56 +08:00
|
|
|
|
if IsNotNull(web.Locations) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var refs = []*serverconfigs.HTTPLocationRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Locations, &refs)
|
2020-09-21 19:51:56 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(refs) > 0 {
|
|
|
|
|
|
config.LocationRefs = refs
|
|
|
|
|
|
|
2023-03-18 22:18:13 +08:00
|
|
|
|
locations, err := SharedHTTPLocationDAO.ConvertLocationRefs(tx, refs, forNode, dataMap, cacheMap)
|
2020-09-21 19:51:56 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
config.Locations = locations
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-23 18:43:42 +08:00
|
|
|
|
// 跳转
|
|
|
|
|
|
if IsNotNull(web.RedirectToHttps) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var redirectToHTTPSConfig = &serverconfigs.HTTPRedirectToHTTPSConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.RedirectToHttps, redirectToHTTPSConfig)
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, redirectToHTTPSConfig.IsPrior, redirectToHTTPSConfig.IsOn) {
|
|
|
|
|
|
config.RedirectToHttps = redirectToHTTPSConfig
|
|
|
|
|
|
}
|
2020-09-23 18:43:42 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-26 19:54:15 +08:00
|
|
|
|
// Websocket
|
|
|
|
|
|
if IsNotNull(web.Websocket) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var ref = &serverconfigs.HTTPWebsocketRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Websocket, ref)
|
2020-09-26 19:54:15 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, ref.IsPrior, ref.IsOn) {
|
|
|
|
|
|
config.WebsocketRef = ref
|
|
|
|
|
|
if ref.WebsocketId > 0 {
|
|
|
|
|
|
websocketConfig, err := SharedHTTPWebsocketDAO.ComposeWebsocketConfig(tx, ref.WebsocketId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if websocketConfig != nil {
|
|
|
|
|
|
config.Websocket = websocketConfig
|
|
|
|
|
|
}
|
2020-09-26 19:54:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-09-28 16:25:39 +08:00
|
|
|
|
// 重写规则
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// TODO 检查forNode参数
|
2020-09-28 16:25:39 +08:00
|
|
|
|
if IsNotNull(web.RewriteRules) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var refs = []*serverconfigs.HTTPRewriteRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.RewriteRules, &refs)
|
2020-09-28 16:25:39 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
for _, ref := range refs {
|
2021-08-22 11:35:33 +08:00
|
|
|
|
rewriteRule, err := SharedHTTPRewriteRuleDAO.ComposeRewriteRule(tx, ref.RewriteRuleId, cacheMap)
|
2020-09-28 16:25:39 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if rewriteRule != nil {
|
|
|
|
|
|
config.RewriteRefs = append(config.RewriteRefs, ref)
|
|
|
|
|
|
config.RewriteRules = append(config.RewriteRules, rewriteRule)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-01-10 17:34:35 +08:00
|
|
|
|
// 主机跳转
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// TODO 检查forNode参数
|
2021-01-10 17:34:35 +08:00
|
|
|
|
if IsNotNull(web.HostRedirects) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var redirects = []*serverconfigs.HTTPHostRedirectConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.HostRedirects, &redirects)
|
2021-01-10 17:34:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
config.HostRedirects = redirects
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// Fastcgi
|
|
|
|
|
|
if IsNotNull(web.Fastcgi) {
|
2023-03-18 19:52:42 +08:00
|
|
|
|
var ref = &serverconfigs.HTTPFastcgiRef{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Fastcgi, ref)
|
2021-05-10 21:13:32 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, ref.IsPrior, ref.IsOn) {
|
|
|
|
|
|
config.FastcgiRef = ref
|
|
|
|
|
|
|
|
|
|
|
|
if len(ref.FastcgiIds) > 0 {
|
|
|
|
|
|
list := []*serverconfigs.HTTPFastcgiConfig{}
|
|
|
|
|
|
for _, fastcgiId := range ref.FastcgiIds {
|
|
|
|
|
|
fastcgiConfig, err := SharedHTTPFastcgiDAO.ComposeFastcgiConfig(tx, fastcgiId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if fastcgiConfig != nil {
|
|
|
|
|
|
list = append(list, fastcgiConfig)
|
|
|
|
|
|
}
|
2021-05-10 21:13:32 +08:00
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
config.FastcgiList = list
|
2021-05-10 21:13:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-17 21:17:53 +08:00
|
|
|
|
// 认证
|
|
|
|
|
|
if IsNotNull(web.Auth) {
|
2022-09-23 09:28:19 +08:00
|
|
|
|
var authConfig = &serverconfigs.HTTPAuthConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Auth, authConfig)
|
2021-06-17 21:17:53 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, authConfig.IsPrior, authConfig.IsOn) {
|
|
|
|
|
|
var newRefs []*serverconfigs.HTTPAuthPolicyRef
|
|
|
|
|
|
for _, ref := range authConfig.PolicyRefs {
|
|
|
|
|
|
policyConfig, err := SharedHTTPAuthPolicyDAO.ComposePolicyConfig(tx, ref.AuthPolicyId, cacheMap)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if policyConfig != nil {
|
|
|
|
|
|
ref.AuthPolicy = policyConfig
|
|
|
|
|
|
newRefs = append(newRefs, ref)
|
|
|
|
|
|
authConfig.PolicyRefs = newRefs
|
|
|
|
|
|
}
|
2021-06-17 21:17:53 +08:00
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
config.Auth = authConfig
|
2021-06-17 21:17:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-01 16:24:56 +08:00
|
|
|
|
// WebP
|
|
|
|
|
|
if IsNotNull(web.Webp) {
|
|
|
|
|
|
var webpConfig = &serverconfigs.WebPImageConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.Webp, webpConfig)
|
2021-10-01 16:24:56 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, webpConfig.IsPrior, webpConfig.IsOn) {
|
|
|
|
|
|
config.WebP = webpConfig
|
|
|
|
|
|
}
|
2021-10-01 16:24:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-06 11:40:29 +08:00
|
|
|
|
// RemoteAddr
|
|
|
|
|
|
if IsNotNull(web.RemoteAddr) {
|
|
|
|
|
|
var remoteAddrConfig = &serverconfigs.HTTPRemoteAddrConfig{}
|
2022-03-22 19:30:30 +08:00
|
|
|
|
err = json.Unmarshal(web.RemoteAddr, remoteAddrConfig)
|
2021-10-06 11:40:29 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, remoteAddrConfig.IsPrior, remoteAddrConfig.IsOn) {
|
|
|
|
|
|
config.RemoteAddr = remoteAddrConfig
|
|
|
|
|
|
}
|
2021-10-06 11:40:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-24 12:00:38 +08:00
|
|
|
|
// mergeSlashes
|
|
|
|
|
|
config.MergeSlashes = web.MergeSlashes == 1
|
|
|
|
|
|
|
2021-12-12 11:46:23 +08:00
|
|
|
|
// 请求限制
|
|
|
|
|
|
if len(web.RequestLimit) > 0 {
|
|
|
|
|
|
var requestLimitConfig = &serverconfigs.HTTPRequestLimitConfig{}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
err = json.Unmarshal(web.RequestLimit, requestLimitConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, requestLimitConfig.IsPrior, requestLimitConfig.IsOn) {
|
2021-12-12 11:46:23 +08:00
|
|
|
|
config.RequestLimit = requestLimitConfig
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-12-31 15:21:27 +08:00
|
|
|
|
// 请求脚本
|
2023-03-18 19:52:42 +08:00
|
|
|
|
// TODO 检查forNode设置
|
2021-12-31 15:21:27 +08:00
|
|
|
|
if len(web.RequestScripts) > 0 {
|
|
|
|
|
|
var requestScriptsConfig = &serverconfigs.HTTPRequestScriptsConfig{}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
err = json.Unmarshal(web.RequestScripts, requestScriptsConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
2021-12-31 15:21:27 +08:00
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
config.RequestScripts = requestScriptsConfig
|
2021-12-31 15:21:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-04 20:32:34 +08:00
|
|
|
|
// UAM
|
|
|
|
|
|
if teaconst.IsPlus && IsNotNull(web.Uam) {
|
|
|
|
|
|
var uamConfig = &serverconfigs.UAMConfig{}
|
|
|
|
|
|
err = json.Unmarshal(web.Uam, uamConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, uamConfig.IsPrior, uamConfig.IsOn) {
|
|
|
|
|
|
config.UAM = uamConfig
|
|
|
|
|
|
}
|
2022-05-04 20:32:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-09 12:10:58 +08:00
|
|
|
|
// CC
|
|
|
|
|
|
if teaconst.IsPlus && IsNotNull(web.Cc) {
|
2023-03-26 12:41:01 +08:00
|
|
|
|
var ccConfig = serverconfigs.DefaultHTTPCCConfig()
|
2023-03-09 12:10:58 +08:00
|
|
|
|
err = json.Unmarshal(web.Cc, ccConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, ccConfig.IsPrior, ccConfig.IsOn) {
|
|
|
|
|
|
config.CC = ccConfig
|
2023-08-01 19:50:01 +08:00
|
|
|
|
|
|
|
|
|
|
if forNode {
|
|
|
|
|
|
for index, threshold := range ccConfig.Thresholds {
|
|
|
|
|
|
if index < len(serverconfigs.DefaultHTTPCCThresholds) {
|
|
|
|
|
|
threshold.MergeIfEmpty(serverconfigs.DefaultHTTPCCThresholds[index])
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
}
|
2023-03-09 12:10:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-09-22 16:33:46 +08:00
|
|
|
|
// Referers
|
|
|
|
|
|
if IsNotNull(web.Referers) {
|
2023-05-02 17:11:22 +08:00
|
|
|
|
var referersConfig = serverconfigs.NewReferersConfig()
|
2022-09-22 16:33:46 +08:00
|
|
|
|
err = json.Unmarshal(web.Referers, referersConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, referersConfig.IsPrior, referersConfig.IsOn) {
|
|
|
|
|
|
config.Referers = referersConfig
|
|
|
|
|
|
}
|
2022-09-22 16:33:46 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-12-30 20:49:20 +08:00
|
|
|
|
// User-Agent
|
|
|
|
|
|
if IsNotNull(web.UserAgent) {
|
|
|
|
|
|
var userAgentConfig = serverconfigs.NewUserAgentConfig()
|
|
|
|
|
|
err = json.Unmarshal(web.UserAgent, userAgentConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, userAgentConfig.IsPrior, userAgentConfig.IsOn) {
|
|
|
|
|
|
config.UserAgent = userAgentConfig
|
|
|
|
|
|
}
|
2022-12-30 20:49:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-01-14 20:36:47 +08:00
|
|
|
|
// hls
|
|
|
|
|
|
if IsNotNull(web.Hls) {
|
|
|
|
|
|
var hlsConfig = &serverconfigs.HLSConfig{}
|
|
|
|
|
|
err = json.Unmarshal(web.Hls, hlsConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if this.shouldCompose(isLocationOrGroup, forNode, hlsConfig.IsPrior, true) {
|
|
|
|
|
|
config.HLS = hlsConfig
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-11-11 14:16:42 +08:00
|
|
|
|
if cacheMap != nil {
|
|
|
|
|
|
cacheMap.Put(cacheKey, config)
|
|
|
|
|
|
}
|
2021-08-22 11:35:33 +08:00
|
|
|
|
|
2020-09-15 14:44:11 +08:00
|
|
|
|
return config, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// CreateWeb 创建Web配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) CreateWeb(tx *dbs.Tx, adminId int64, userId int64, rootJSON []byte) (int64, error) {
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-15 14:44:11 +08:00
|
|
|
|
op.State = HTTPWebStateEnabled
|
2020-12-18 21:18:53 +08:00
|
|
|
|
op.AdminId = adminId
|
|
|
|
|
|
op.UserId = userId
|
|
|
|
|
|
if len(rootJSON) > 0 {
|
|
|
|
|
|
op.Root = JSONBytes(rootJSON)
|
|
|
|
|
|
}
|
2023-06-23 17:05:52 +08:00
|
|
|
|
|
|
|
|
|
|
// 设置默认的remote-addr
|
|
|
|
|
|
// set default remote-addr config
|
|
|
|
|
|
var remoteAddrConfig = &serverconfigs.HTTPRemoteAddrConfig{
|
|
|
|
|
|
IsOn: true,
|
|
|
|
|
|
Value: "${rawRemoteAddr}",
|
2023-09-07 18:03:28 +08:00
|
|
|
|
Type: serverconfigs.HTTPRemoteAddrTypeDefault,
|
2023-06-23 17:05:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
remoteAddrConfigJSON, err := json.Marshal(remoteAddrConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return 0, err
|
|
|
|
|
|
}
|
|
|
|
|
|
op.RemoteAddr = remoteAddrConfigJSON
|
|
|
|
|
|
|
|
|
|
|
|
err = this.Save(tx, op)
|
2020-09-15 14:44:11 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return 0, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return types.Int64(op.Id), nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWeb 修改Web配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWeb(tx *dbs.Tx, webId int64, rootJSON []byte) error {
|
2020-09-15 14:44:11 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-15 14:44:11 +08:00
|
|
|
|
op.Id = webId
|
2020-09-26 19:54:15 +08:00
|
|
|
|
op.Root = JSONBytes(rootJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-16 09:09:21 +08:00
|
|
|
|
}
|
2020-09-15 14:44:11 +08:00
|
|
|
|
|
2021-09-29 19:32:25 +08:00
|
|
|
|
// UpdateWebCompression 修改压缩配置
|
2023-07-11 19:46:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebCompression(tx *dbs.Tx, webId int64, compressionConfig *serverconfigs.HTTPCompressionConfig) error {
|
2020-09-16 09:09:21 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2023-07-11 19:46:00 +08:00
|
|
|
|
|
|
|
|
|
|
compressionJSON, err := json.Marshal(compressionConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-16 09:09:21 +08:00
|
|
|
|
op.Id = webId
|
2023-07-11 19:46:00 +08:00
|
|
|
|
op.Compression = compressionJSON
|
|
|
|
|
|
err = this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// UpdateWebOptimization 修改页面优化配置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebOptimization(tx *dbs.Tx, webId int64, optimizationConfig *serverconfigs.HTTPPageOptimizationConfig) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
optimizationJSON, err := json.Marshal(optimizationConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var op = NewHTTPWebOperator()
|
|
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Optimization = optimizationJSON
|
|
|
|
|
|
err = this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-16 09:09:21 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-01 16:24:56 +08:00
|
|
|
|
// UpdateWebWebP 修改WebP配置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebWebP(tx *dbs.Tx, webId int64, webpConfig []byte) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2021-10-01 16:24:56 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Webp = JSONBytes(webpConfig)
|
|
|
|
|
|
err := this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-06 11:40:29 +08:00
|
|
|
|
// UpdateWebRemoteAddr 修改RemoteAddr配置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRemoteAddr(tx *dbs.Tx, webId int64, remoteAddrConfig []byte) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
|
|
|
|
|
var op = NewHTTPWebOperator()
|
|
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.RemoteAddr = remoteAddrConfig
|
|
|
|
|
|
err := this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebCharset 修改字符编码
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebCharset(tx *dbs.Tx, webId int64, charsetJSON []byte) error {
|
2020-09-16 20:29:18 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-16 20:29:18 +08:00
|
|
|
|
op.Id = webId
|
2020-09-26 19:54:15 +08:00
|
|
|
|
op.Charset = JSONBytes(charsetJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-16 20:29:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebRequestHeaderPolicy 更改请求Header策略
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRequestHeaderPolicy(tx *dbs.Tx, webId int64, headerPolicyJSON []byte) error {
|
2020-09-16 20:29:18 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-16 20:29:18 +08:00
|
|
|
|
op.Id = webId
|
2020-09-23 18:43:42 +08:00
|
|
|
|
op.RequestHeader = JSONBytes(headerPolicyJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-16 20:29:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebResponseHeaderPolicy 更改响应Header策略
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebResponseHeaderPolicy(tx *dbs.Tx, webId int64, headerPolicyJSON []byte) error {
|
2020-09-16 20:29:18 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-16 20:29:18 +08:00
|
|
|
|
op.Id = webId
|
2020-09-23 18:43:42 +08:00
|
|
|
|
op.ResponseHeader = JSONBytes(headerPolicyJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-16 20:29:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebPages 更改特殊页面配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebPages(tx *dbs.Tx, webId int64, pagesJSON []byte) error {
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-17 10:16:00 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Pages = JSONBytes(pagesJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-17 10:16:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-03 09:35:32 +08:00
|
|
|
|
// UpdateGlobalPagesEnabled 设置是否启用系统配置的自定义页面
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateGlobalPagesEnabled(tx *dbs.Tx, webId int64, isEnabled bool) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
|
|
|
|
|
err := this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set(HTTPWebField_EnableGlobalPages, isEnabled).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebShutdown 更改Shutdown配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebShutdown(tx *dbs.Tx, webId int64, shutdownJSON []byte) error {
|
2020-09-17 10:16:00 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-17 10:16:00 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Shutdown = JSONBytes(shutdownJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-17 10:16:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebAccessLogConfig 更改访问日志策略
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebAccessLogConfig(tx *dbs.Tx, webId int64, accessLogJSON []byte) error {
|
2020-09-20 11:56:30 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-20 11:56:30 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.AccessLog = JSONBytes(accessLogJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-20 11:56:30 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebStat 更改统计配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebStat(tx *dbs.Tx, webId int64, statJSON []byte) error {
|
2020-09-20 14:48:41 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-20 14:48:41 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Stat = JSONBytes(statJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-20 14:48:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebCache 更改缓存配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebCache(tx *dbs.Tx, webId int64, cacheJSON []byte) error {
|
2020-09-20 16:28:07 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-20 16:28:07 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Cache = JSONBytes(cacheJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-20 16:28:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebFirewall 更改防火墙配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebFirewall(tx *dbs.Tx, webId int64, firewallJSON []byte) error {
|
2020-09-20 20:12:47 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-20 20:12:47 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Firewall = JSONBytes(firewallJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-20 20:12:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-07-13 14:30:30 +08:00
|
|
|
|
// UpdateWebLocations 更改路由规则配置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebLocations(tx *dbs.Tx, webId int64, locationsJSON []byte) error {
|
2020-09-21 19:51:56 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-21 19:51:56 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Locations = JSONBytes(locationsJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-21 19:51:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebRedirectToHTTPS 更改跳转到HTTPS设置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRedirectToHTTPS(tx *dbs.Tx, webId int64, redirectToHTTPSJSON []byte) error {
|
2020-09-23 18:43:42 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-23 18:43:42 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.RedirectToHttps = JSONBytes(redirectToHTTPSJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-15 14:44:11 +08:00
|
|
|
|
}
|
2020-09-26 19:54:15 +08:00
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebsocket 修改Websocket设置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebsocket(tx *dbs.Tx, webId int64, websocketJSON []byte) error {
|
2020-09-26 19:54:15 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-26 19:54:15 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Websocket = JSONBytes(websocketJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-26 19:54:15 +08:00
|
|
|
|
}
|
2020-09-28 16:25:39 +08:00
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebFastcgi 修改Fastcgi设置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebFastcgi(tx *dbs.Tx, webId int64, fastcgiJSON []byte) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2021-05-10 21:13:32 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Fastcgi = JSONBytes(fastcgiJSON)
|
|
|
|
|
|
err := this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// UpdateWebRewriteRules 修改重写规则设置
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRewriteRules(tx *dbs.Tx, webId int64, rewriteRulesJSON []byte) error {
|
2020-09-28 16:25:39 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2020-09-28 16:25:39 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.RewriteRules = JSONBytes(rewriteRulesJSON)
|
2021-01-01 23:31:30 +08:00
|
|
|
|
err := this.Save(tx, op)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2020-09-28 16:25:39 +08:00
|
|
|
|
}
|
2020-10-02 17:22:32 +08:00
|
|
|
|
|
2021-06-17 21:17:53 +08:00
|
|
|
|
// UpdateWebAuth 修改认证信息
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebAuth(tx *dbs.Tx, webId int64, authJSON []byte) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
2022-07-24 09:56:27 +08:00
|
|
|
|
var op = NewHTTPWebOperator()
|
2021-06-17 21:17:53 +08:00
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.Auth = JSONBytes(authJSON)
|
|
|
|
|
|
err := this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindAllWebIdsWithCachePolicyId 根据缓存策略ID查找所有的WebId
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindAllWebIdsWithCachePolicyId(tx *dbs.Tx, cachePolicyId int64) ([]int64, error) {
|
|
|
|
|
|
ones, err := this.Query(tx).
|
2020-10-02 17:22:32 +08:00
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
2021-01-17 16:48:00 +08:00
|
|
|
|
Where(`JSON_CONTAINS(cache, :jsonQuery, '$.cacheRefs')`).
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"cachePolicyId": cachePolicyId}.AsJSON()).
|
2020-10-06 21:02:15 +08:00
|
|
|
|
FindAll()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
result := []int64{}
|
|
|
|
|
|
for _, one := range ones {
|
|
|
|
|
|
webId := int64(one.(*HTTPWeb).Id)
|
|
|
|
|
|
|
|
|
|
|
|
// 判断是否为Location
|
|
|
|
|
|
for {
|
2021-01-01 23:31:30 +08:00
|
|
|
|
locationId, err := SharedHTTPLocationDAO.FindEnabledLocationIdWithWebId(tx, webId)
|
2020-10-06 21:02:15 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果非Location
|
|
|
|
|
|
if locationId == 0 {
|
2020-10-20 20:18:06 +08:00
|
|
|
|
if !lists.ContainsInt64(result, webId) {
|
2020-10-06 21:02:15 +08:00
|
|
|
|
result = append(result, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 查找包含此Location的Web
|
|
|
|
|
|
// TODO 需要支持嵌套的Location查询
|
2021-01-01 23:31:30 +08:00
|
|
|
|
webId, err = this.FindEnabledWebIdWithLocationId(tx, locationId)
|
2020-10-06 21:02:15 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if webId == 0 {
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindAllWebIdsWithHTTPFirewallPolicyId 根据防火墙策略ID查找所有的WebId
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindAllWebIdsWithHTTPFirewallPolicyId(tx *dbs.Tx, firewallPolicyId int64) ([]int64, error) {
|
|
|
|
|
|
ones, err := this.Query(tx).
|
2020-10-06 21:02:15 +08:00
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
2021-01-17 16:48:00 +08:00
|
|
|
|
Where(`JSON_CONTAINS(firewall, :jsonQuery)`).
|
|
|
|
|
|
Param("jsonQuery", maps.Map{
|
|
|
|
|
|
// 这里不加入isOn的判断,无论是否开启我们都同步
|
|
|
|
|
|
"firewallPolicyId": firewallPolicyId,
|
|
|
|
|
|
}.AsJSON()).
|
2020-10-02 17:22:32 +08:00
|
|
|
|
FindAll()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
result := []int64{}
|
|
|
|
|
|
for _, one := range ones {
|
|
|
|
|
|
webId := int64(one.(*HTTPWeb).Id)
|
|
|
|
|
|
|
|
|
|
|
|
// 判断是否为Location
|
|
|
|
|
|
for {
|
2021-01-01 23:31:30 +08:00
|
|
|
|
locationId, err := SharedHTTPLocationDAO.FindEnabledLocationIdWithWebId(tx, webId)
|
2020-10-02 17:22:32 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果非Location
|
|
|
|
|
|
if locationId == 0 {
|
2020-10-20 20:18:06 +08:00
|
|
|
|
if !lists.ContainsInt64(result, webId) {
|
2020-10-02 17:22:32 +08:00
|
|
|
|
result = append(result, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 查找包含此Location的Web
|
|
|
|
|
|
// TODO 需要支持嵌套的Location查询
|
2021-01-01 23:31:30 +08:00
|
|
|
|
webId, err = this.FindEnabledWebIdWithLocationId(tx, locationId)
|
2020-10-02 17:22:32 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if webId == 0 {
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return result, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithLocationId 查找包含某个Location的Web
|
2021-01-01 23:31:30 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithLocationId(tx *dbs.Tx, locationId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
2020-10-02 17:22:32 +08:00
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
2021-01-17 16:48:00 +08:00
|
|
|
|
Where("JSON_CONTAINS(locations, :jsonQuery)").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"locationId": locationId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithRewriteRuleId 查找包含某个重写规则的Web
|
2021-01-17 16:48:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithRewriteRuleId(tx *dbs.Tx, rewriteRuleId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(rewriteRules, :jsonQuery)").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"rewriteRuleId": rewriteRuleId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithPageId 查找包含某个页面的Web
|
2021-01-17 16:48:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithPageId(tx *dbs.Tx, pageId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(pages, :jsonQuery)").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"id": pageId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithHeaderPolicyId 查找包含某个Header的Web
|
2021-01-17 16:48:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithHeaderPolicyId(tx *dbs.Tx, headerPolicyId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("(JSON_CONTAINS(requestHeader, :jsonQuery) OR JSON_CONTAINS(responseHeader, :jsonQuery))").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"headerPolicyId": headerPolicyId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithGzipId 查找包含某个Gzip配置的Web
|
2021-01-17 16:48:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithGzipId(tx *dbs.Tx, gzipId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
2021-09-29 19:32:25 +08:00
|
|
|
|
Where("JSON_CONTAINS(compression, :jsonQuery, '$.gzipRef')").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"id": gzipId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindEnabledWebIdWithBrotliPolicyId 查找包含某个Brotli配置的Web
|
|
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithBrotliPolicyId(tx *dbs.Tx, brotliPolicyId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(compression, :jsonQuery, '$.brotliRef')").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"id": brotliPolicyId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindEnabledWebIdWithDeflatePolicyId 查找包含某个Deflate配置的Web
|
|
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithDeflatePolicyId(tx *dbs.Tx, deflatePolicyId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(compression, :jsonQuery, '$.deflateRef')").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"id": deflatePolicyId}.AsJSON()).
|
2020-10-02 17:22:32 +08:00
|
|
|
|
FindInt64Col(0)
|
2021-01-19 13:14:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithWebsocketId 查找包含某个Websocket配置的Web
|
2021-01-19 13:14:25 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithWebsocketId(tx *dbs.Tx, websocketId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(websocket, :jsonQuery)").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"websocketId": websocketId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
2020-10-02 17:22:32 +08:00
|
|
|
|
}
|
2021-01-10 17:34:35 +08:00
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindEnabledWebIdWithFastcgiId 查找包含某个Fastcgi配置的Web
|
|
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithFastcgiId(tx *dbs.Tx, fastcgiId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(fastcgi, :jsonQuery)").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"fastcgiIds": fastcgiId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-06-17 21:17:53 +08:00
|
|
|
|
// FindEnabledWebIdWithHTTPAuthPolicyId 查找包含某个认证策略的Web
|
|
|
|
|
|
func (this *HTTPWebDAO) FindEnabledWebIdWithHTTPAuthPolicyId(tx *dbs.Tx, httpAuthPolicyId int64) (webId int64, err error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
State(HTTPWebStateEnabled).
|
|
|
|
|
|
ResultPk().
|
|
|
|
|
|
Where("JSON_CONTAINS(auth, :jsonQuery, '$.policyRefs')").
|
|
|
|
|
|
Param("jsonQuery", maps.Map{"authPolicyId": httpAuthPolicyId}.AsJSON()).
|
|
|
|
|
|
FindInt64Col(0)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindWebServerId 查找使用此Web的Server
|
2021-01-10 17:34:35 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindWebServerId(tx *dbs.Tx, webId int64) (serverId int64, err error) {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return 0, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
serverId, err = SharedServerDAO.FindEnabledServerIdWithWebId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if serverId > 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// web在Location中的情况
|
|
|
|
|
|
locationId, err := SharedHTTPLocationDAO.FindEnabledLocationIdWithWebId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return 0, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if locationId == 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
webId, err = this.FindEnabledWebIdWithLocationId(tx, locationId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 第二轮查找
|
|
|
|
|
|
return this.FindWebServerId(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-10-07 16:47:21 +08:00
|
|
|
|
// FindWebServerGroupId 查找使用此Web的分组ID
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebServerGroupId(tx *dbs.Tx, webId int64) (groupId int64, err error) {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return 0, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
groupId, err = SharedServerGroupDAO.FindEnabledGroupIdWithWebId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if groupId > 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// web在Location中的情况
|
|
|
|
|
|
locationId, err := SharedHTTPLocationDAO.FindEnabledLocationIdWithWebId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return 0, err
|
|
|
|
|
|
}
|
|
|
|
|
|
if locationId == 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
webId, err = this.FindEnabledWebIdWithLocationId(tx, locationId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 第二轮查找
|
|
|
|
|
|
return this.FindWebServerGroupId(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// CheckUserWeb 检查用户权限
|
2021-01-10 17:34:35 +08:00
|
|
|
|
func (this *HTTPWebDAO) CheckUserWeb(tx *dbs.Tx, userId int64, webId int64) error {
|
2022-08-30 11:23:35 +08:00
|
|
|
|
if userId <= 0 || webId <= 0 {
|
|
|
|
|
|
return ErrNotFound
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-01-10 17:34:35 +08:00
|
|
|
|
serverId, err := this.FindWebServerId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
if serverId == 0 {
|
|
|
|
|
|
return ErrNotFound
|
|
|
|
|
|
}
|
2021-01-17 16:48:00 +08:00
|
|
|
|
return SharedServerDAO.CheckUserServer(tx, userId, serverId)
|
2021-01-10 17:34:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// UpdateWebHostRedirects 设置主机跳转
|
2021-01-10 17:34:35 +08:00
|
|
|
|
func (this *HTTPWebDAO) UpdateWebHostRedirects(tx *dbs.Tx, webId int64, hostRedirects []*serverconfigs.HTTPHostRedirectConfig) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid ")
|
|
|
|
|
|
}
|
|
|
|
|
|
if hostRedirects == nil {
|
|
|
|
|
|
hostRedirects = []*serverconfigs.HTTPHostRedirectConfig{}
|
|
|
|
|
|
}
|
|
|
|
|
|
hostRedirectsJSON, err := json.Marshal(hostRedirects)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
_, err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("hostRedirects", hostRedirectsJSON).
|
|
|
|
|
|
Update()
|
2021-01-17 16:48:00 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2021-01-10 17:34:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// FindWebHostRedirects 查找主机跳转
|
2021-01-10 17:34:35 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindWebHostRedirects(tx *dbs.Tx, webId int64) ([]byte, error) {
|
|
|
|
|
|
col, err := this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("hostRedirects").
|
|
|
|
|
|
FindStringCol("")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return []byte(col), nil
|
|
|
|
|
|
}
|
2021-01-17 16:48:00 +08:00
|
|
|
|
|
2021-11-24 12:00:38 +08:00
|
|
|
|
// UpdateWebCommon 修改通用设置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebCommon(tx *dbs.Tx, webId int64, mergeSlashes bool) error {
|
|
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("invalid webId")
|
|
|
|
|
|
}
|
|
|
|
|
|
var op = NewHTTPWebOperator()
|
|
|
|
|
|
op.Id = webId
|
|
|
|
|
|
op.MergeSlashes = mergeSlashes
|
2021-11-24 14:49:51 +08:00
|
|
|
|
err := this.Save(tx, op)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
2021-11-24 12:00:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-12-12 11:46:23 +08:00
|
|
|
|
// UpdateWebRequestLimit 修改服务的请求限制
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRequestLimit(tx *dbs.Tx, webId int64, config *serverconfigs.HTTPRequestLimitConfig) error {
|
|
|
|
|
|
configJSON, err := json.Marshal(config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("requestLimit", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindWebRequestLimit 获取服务的请求限制
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebRequestLimit(tx *dbs.Tx, webId int64) (*serverconfigs.HTTPRequestLimitConfig, error) {
|
|
|
|
|
|
configString, err := this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("requestLimit").
|
|
|
|
|
|
FindStringCol("")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var config = &serverconfigs.HTTPRequestLimitConfig{}
|
|
|
|
|
|
if len(configString) == 0 {
|
|
|
|
|
|
return config, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
err = json.Unmarshal([]byte(configString), config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return config, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-12-31 15:21:27 +08:00
|
|
|
|
// UpdateWebRequestScripts 修改服务的请求脚本设置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRequestScripts(tx *dbs.Tx, webId int64, config *serverconfigs.HTTPRequestScriptsConfig) error {
|
|
|
|
|
|
configJSON, err := json.Marshal(config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("requestScripts", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-12-23 20:56:11 +08:00
|
|
|
|
// UpdateWebRequestScriptsAsPassed 设置请求脚本为审核通过
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebRequestScriptsAsPassed(tx *dbs.Tx, webId int64, codeMD5 string) error {
|
|
|
|
|
|
if webId <= 0 || len(codeMD5) == 0 {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
configString, err := this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("requestScripts").
|
|
|
|
|
|
FindStringCol("")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var config = &serverconfigs.HTTPRequestScriptsConfig{}
|
|
|
|
|
|
if len(configString) == 0 {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
err = json.Unmarshal([]byte(configString), config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var found bool
|
|
|
|
|
|
|
|
|
|
|
|
for _, group := range config.AllGroups() {
|
|
|
|
|
|
for _, script := range group.Scripts {
|
|
|
|
|
|
if script.AuditingCodeMD5 == codeMD5 {
|
|
|
|
|
|
script.Code = script.AuditingCode
|
|
|
|
|
|
script.AuditingCode = ""
|
|
|
|
|
|
script.AuditingCodeMD5 = ""
|
|
|
|
|
|
|
|
|
|
|
|
found = true
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if found {
|
|
|
|
|
|
configJSON, err := json.Marshal(config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("requestScripts", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-12-31 15:21:27 +08:00
|
|
|
|
// FindWebRequestScripts 查找服务的脚本设置
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebRequestScripts(tx *dbs.Tx, webId int64) (*serverconfigs.HTTPRequestScriptsConfig, error) {
|
|
|
|
|
|
configString, err := this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("requestScripts").
|
|
|
|
|
|
FindStringCol("")
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var config = &serverconfigs.HTTPRequestScriptsConfig{}
|
|
|
|
|
|
if len(configString) == 0 {
|
|
|
|
|
|
return config, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
err = json.Unmarshal([]byte(configString), config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
return config, nil
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-05-04 20:32:34 +08:00
|
|
|
|
// UpdateWebUAM 开启UAM
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebUAM(tx *dbs.Tx, webId int64, uamConfig *serverconfigs.UAMConfig) error {
|
|
|
|
|
|
if uamConfig == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
configJSON, err := json.Marshal(uamConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("uam", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindWebUAM 查找服务的UAM配置
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebUAM(tx *dbs.Tx, webId int64) ([]byte, error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("uam").
|
|
|
|
|
|
FindJSONCol()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-03-09 12:10:58 +08:00
|
|
|
|
// UpdateWebCC 开启CC
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebCC(tx *dbs.Tx, webId int64, ccConfig *serverconfigs.HTTPCCConfig) error {
|
|
|
|
|
|
if ccConfig == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
configJSON, err := json.Marshal(ccConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("cc", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindWebCC 查找服务的CC配置
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebCC(tx *dbs.Tx, webId int64) ([]byte, error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("cc").
|
|
|
|
|
|
FindJSONCol()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-09-22 16:33:46 +08:00
|
|
|
|
// UpdateWebReferers 修改防盗链设置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebReferers(tx *dbs.Tx, webId int64, referersConfig *serverconfigs.ReferersConfig) error {
|
|
|
|
|
|
if referersConfig == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
configJSON, err := json.Marshal(referersConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("referers", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-02-24 09:52:47 +08:00
|
|
|
|
// FindWebReferers 查找网站的防盗链配置
|
2022-09-22 16:33:46 +08:00
|
|
|
|
func (this *HTTPWebDAO) FindWebReferers(tx *dbs.Tx, webId int64) ([]byte, error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("referers").
|
|
|
|
|
|
FindJSONCol()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-12-30 20:49:20 +08:00
|
|
|
|
// UpdateWebUserAgent 修改User-Agent设置
|
|
|
|
|
|
func (this *HTTPWebDAO) UpdateWebUserAgent(tx *dbs.Tx, webId int64, userAgentConfig *serverconfigs.UserAgentConfig) error {
|
2024-01-14 20:36:47 +08:00
|
|
|
|
if webId <= 0 {
|
|
|
|
|
|
return errors.New("require 'webId'")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-12-30 20:49:20 +08:00
|
|
|
|
if userAgentConfig == nil {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
configJSON, err := json.Marshal(userAgentConfig)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
err = this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Set("userAgent", configJSON).
|
|
|
|
|
|
UpdateQuickly()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return this.NotifyUpdate(tx, webId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FindWebUserAgent 查找服务User-Agent配置
|
|
|
|
|
|
func (this *HTTPWebDAO) FindWebUserAgent(tx *dbs.Tx, webId int64) ([]byte, error) {
|
|
|
|
|
|
return this.Query(tx).
|
|
|
|
|
|
Pk(webId).
|
|
|
|
|
|
Result("userAgent").
|
|
|
|
|
|
FindJSONCol()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-05-10 21:13:32 +08:00
|
|
|
|
// NotifyUpdate 通知更新
|
2021-01-17 16:48:00 +08:00
|
|
|
|
func (this *HTTPWebDAO) NotifyUpdate(tx *dbs.Tx, webId int64) error {
|
2021-10-07 16:47:21 +08:00
|
|
|
|
// server
|
2021-01-17 16:48:00 +08:00
|
|
|
|
serverId, err := this.FindWebServerId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
2021-10-07 16:47:21 +08:00
|
|
|
|
if serverId > 0 {
|
|
|
|
|
|
return SharedServerDAO.NotifyUpdate(tx, serverId)
|
2021-01-17 16:48:00 +08:00
|
|
|
|
}
|
2021-10-07 16:47:21 +08:00
|
|
|
|
|
|
|
|
|
|
// group
|
|
|
|
|
|
groupId, err := this.FindWebServerGroupId(tx, webId)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
if groupId > 0 {
|
|
|
|
|
|
return SharedServerGroupDAO.NotifyUpdate(tx, groupId)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return nil
|
2021-01-17 16:48:00 +08:00
|
|
|
|
}
|
2023-03-18 19:52:42 +08:00
|
|
|
|
|
|
|
|
|
|
// 检查是否应该组合配置
|
|
|
|
|
|
func (this *HTTPWebDAO) shouldCompose(isLocationOrGroup bool, forNode bool, isPrior bool, isOn bool) bool {
|
|
|
|
|
|
if !forNode {
|
|
|
|
|
|
return true
|
|
|
|
|
|
}
|
|
|
|
|
|
return (!isLocationOrGroup && isOn) || (isLocationOrGroup && isPrior)
|
|
|
|
|
|
}
|