mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	实现重写规则管理
This commit is contained in:
		@@ -70,6 +70,7 @@ func (this *APINode) listenRPC() error {
 | 
				
			|||||||
	pb.RegisterHTTPFirewallPolicyServiceServer(rpcServer, &services.HTTPFirewallPolicyService{})
 | 
						pb.RegisterHTTPFirewallPolicyServiceServer(rpcServer, &services.HTTPFirewallPolicyService{})
 | 
				
			||||||
	pb.RegisterHTTPLocationServiceServer(rpcServer, &services.HTTPLocationService{})
 | 
						pb.RegisterHTTPLocationServiceServer(rpcServer, &services.HTTPLocationService{})
 | 
				
			||||||
	pb.RegisterHTTPWebsocketServiceServer(rpcServer, &services.HTTPWebsocketService{})
 | 
						pb.RegisterHTTPWebsocketServiceServer(rpcServer, &services.HTTPWebsocketService{})
 | 
				
			||||||
 | 
						pb.RegisterHTTPRewriteRuleServiceServer(rpcServer, &services.HTTPRewriteRuleService{})
 | 
				
			||||||
	err = rpcServer.Serve(listener)
 | 
						err = rpcServer.Serve(listener)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return errors.New("[API]start rpc failed: " + err.Error())
 | 
							return errors.New("[API]start rpc failed: " + err.Error())
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										116
									
								
								internal/db/models/http_rewrite_rule_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								internal/db/models/http_rewrite_rule_dao.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					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 (
 | 
				
			||||||
 | 
						HTTPRewriteRuleStateEnabled  = 1 // 已启用
 | 
				
			||||||
 | 
						HTTPRewriteRuleStateDisabled = 0 // 已禁用
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type HTTPRewriteRuleDAO dbs.DAO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewHTTPRewriteRuleDAO() *HTTPRewriteRuleDAO {
 | 
				
			||||||
 | 
						return dbs.NewDAO(&HTTPRewriteRuleDAO{
 | 
				
			||||||
 | 
							DAOObject: dbs.DAOObject{
 | 
				
			||||||
 | 
								DB:     Tea.Env,
 | 
				
			||||||
 | 
								Table:  "edgeHTTPRewriteRules",
 | 
				
			||||||
 | 
								Model:  new(HTTPRewriteRule),
 | 
				
			||||||
 | 
								PkName: "id",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}).(*HTTPRewriteRuleDAO)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var SharedHTTPRewriteRuleDAO = NewHTTPRewriteRuleDAO()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 启用条目
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) EnableHTTPRewriteRule(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", HTTPRewriteRuleStateEnabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 禁用条目
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) DisableHTTPRewriteRule(id int64) error {
 | 
				
			||||||
 | 
						_, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Set("state", HTTPRewriteRuleStateDisabled).
 | 
				
			||||||
 | 
							Update()
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找启用中的条目
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) FindEnabledHTTPRewriteRule(id int64) (*HTTPRewriteRule, error) {
 | 
				
			||||||
 | 
						result, err := this.Query().
 | 
				
			||||||
 | 
							Pk(id).
 | 
				
			||||||
 | 
							Attr("state", HTTPRewriteRuleStateEnabled).
 | 
				
			||||||
 | 
							Find()
 | 
				
			||||||
 | 
						if result == nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return result.(*HTTPRewriteRule), err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 构造配置
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) ComposeRewriteRule(rewriteRuleId int64) (*serverconfigs.HTTPRewriteRule, error) {
 | 
				
			||||||
 | 
						rule, err := this.FindEnabledHTTPRewriteRule(rewriteRuleId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if rule == nil {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config := &serverconfigs.HTTPRewriteRule{}
 | 
				
			||||||
 | 
						config.Id = int64(rule.Id)
 | 
				
			||||||
 | 
						config.IsOn = rule.IsOn == 1
 | 
				
			||||||
 | 
						config.Pattern = rule.Pattern
 | 
				
			||||||
 | 
						config.Replace = rule.Replace
 | 
				
			||||||
 | 
						config.Mode = rule.Mode
 | 
				
			||||||
 | 
						config.RedirectStatus = types.Int(rule.RedirectStatus)
 | 
				
			||||||
 | 
						config.ProxyHost = rule.ProxyHost
 | 
				
			||||||
 | 
						config.IsBreak = rule.IsBreak == 1
 | 
				
			||||||
 | 
						return config, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建规则
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) CreateRewriteRule(pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, isOn bool) (int64, error) {
 | 
				
			||||||
 | 
						op := NewHTTPRewriteRuleOperator()
 | 
				
			||||||
 | 
						op.State = HTTPRewriteRuleStateEnabled
 | 
				
			||||||
 | 
						op.IsOn = isOn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						op.Pattern = pattern
 | 
				
			||||||
 | 
						op.Replace = replace
 | 
				
			||||||
 | 
						op.Mode = mode
 | 
				
			||||||
 | 
						op.RedirectStatus = redirectStatus
 | 
				
			||||||
 | 
						op.IsBreak = isBreak
 | 
				
			||||||
 | 
						op.ProxyHost = proxyHost
 | 
				
			||||||
 | 
						_, err := this.Save(op)
 | 
				
			||||||
 | 
						return types.Int64(op.Id), err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改规则
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) UpdateRewriteRule(rewriteRuleId int64, pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, isOn bool) error {
 | 
				
			||||||
 | 
						if rewriteRuleId <= 0 {
 | 
				
			||||||
 | 
							return errors.New("invalid rewriteRuleId")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						op := NewHTTPRewriteRuleOperator()
 | 
				
			||||||
 | 
						op.Id = rewriteRuleId
 | 
				
			||||||
 | 
						op.IsOn = isOn
 | 
				
			||||||
 | 
						op.Pattern = pattern
 | 
				
			||||||
 | 
						op.Replace = replace
 | 
				
			||||||
 | 
						op.Mode = mode
 | 
				
			||||||
 | 
						op.RedirectStatus = redirectStatus
 | 
				
			||||||
 | 
						op.IsBreak = isBreak
 | 
				
			||||||
 | 
						op.ProxyHost = proxyHost
 | 
				
			||||||
 | 
						_, err := this.Save(op)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								internal/db/models/http_rewrite_rule_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								internal/db/models/http_rewrite_rule_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						_ "github.com/go-sql-driver/mysql"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
							
								
								
									
										38
									
								
								internal/db/models/http_rewrite_rule_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								internal/db/models/http_rewrite_rule_model.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 重写规则
 | 
				
			||||||
 | 
					type HTTPRewriteRule 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"`           // 是否启用
 | 
				
			||||||
 | 
						State          uint8  `field:"state"`          // 状态
 | 
				
			||||||
 | 
						CreatedAt      uint64 `field:"createdAt"`      // 创建时间
 | 
				
			||||||
 | 
						Pattern        string `field:"pattern"`        // 匹配规则
 | 
				
			||||||
 | 
						Replace        string `field:"replace"`        // 跳转后的地址
 | 
				
			||||||
 | 
						Mode           string `field:"mode"`           // 替换模式
 | 
				
			||||||
 | 
						RedirectStatus uint32 `field:"redirectStatus"` // 跳转的状态码
 | 
				
			||||||
 | 
						ProxyHost      string `field:"proxyHost"`      // 代理的主机名
 | 
				
			||||||
 | 
						IsBreak        uint8  `field:"isBreak"`        // 是否终止解析
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type HTTPRewriteRuleOperator struct {
 | 
				
			||||||
 | 
						Id             interface{} // ID
 | 
				
			||||||
 | 
						AdminId        interface{} // 管理员ID
 | 
				
			||||||
 | 
						UserId         interface{} // 用户ID
 | 
				
			||||||
 | 
						TemplateId     interface{} // 模版ID
 | 
				
			||||||
 | 
						IsOn           interface{} // 是否启用
 | 
				
			||||||
 | 
						State          interface{} // 状态
 | 
				
			||||||
 | 
						CreatedAt      interface{} // 创建时间
 | 
				
			||||||
 | 
						Pattern        interface{} // 匹配规则
 | 
				
			||||||
 | 
						Replace        interface{} // 跳转后的地址
 | 
				
			||||||
 | 
						Mode           interface{} // 替换模式
 | 
				
			||||||
 | 
						RedirectStatus interface{} // 跳转的状态码
 | 
				
			||||||
 | 
						ProxyHost      interface{} // 代理的主机名
 | 
				
			||||||
 | 
						IsBreak        interface{} // 是否终止解析
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewHTTPRewriteRuleOperator() *HTTPRewriteRuleOperator {
 | 
				
			||||||
 | 
						return &HTTPRewriteRuleOperator{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								internal/db/models/http_rewrite_rule_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/http_rewrite_rule_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					package models
 | 
				
			||||||
@@ -279,6 +279,25 @@ func (this *HTTPWebDAO) ComposeWebConfig(webId int64) (*serverconfigs.HTTPWebCon
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 重写规则
 | 
				
			||||||
 | 
						if IsNotNull(web.RewriteRules) {
 | 
				
			||||||
 | 
							refs := []*serverconfigs.HTTPRewriteRef{}
 | 
				
			||||||
 | 
							err = json.Unmarshal([]byte(web.RewriteRules), &refs)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for _, ref := range refs {
 | 
				
			||||||
 | 
								rewriteRule, err := SharedHTTPRewriteRuleDAO.ComposeRewriteRule(ref.RewriteRuleId)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return nil, err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if rewriteRule != nil {
 | 
				
			||||||
 | 
									config.RewriteRefs = append(config.RewriteRefs, ref)
 | 
				
			||||||
 | 
									config.RewriteRules = append(config.RewriteRules, rewriteRule)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return config, nil
 | 
						return config, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -461,3 +480,15 @@ func (this *HTTPWebDAO) UpdateWebsocket(webId int64, websocketJSON []byte) error
 | 
				
			|||||||
	_, err := this.Save(op)
 | 
						_, err := this.Save(op)
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改重写规则设置
 | 
				
			||||||
 | 
					func (this *HTTPWebDAO) UpdateWebRewriteRules(webId int64, rewriteRulesJSON []byte) error {
 | 
				
			||||||
 | 
						if webId <= 0 {
 | 
				
			||||||
 | 
							return errors.New("invalid webId")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						op := NewHTTPWebOperator()
 | 
				
			||||||
 | 
						op.Id = webId
 | 
				
			||||||
 | 
						op.RewriteRules = JSONBytes(rewriteRulesJSON)
 | 
				
			||||||
 | 
						_, err := this.Save(op)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,8 +16,8 @@ type HTTPWeb struct {
 | 
				
			|||||||
	RedirectToHttps    string `field:"redirectToHttps"`    // 跳转到HTTPS设置
 | 
						RedirectToHttps    string `field:"redirectToHttps"`    // 跳转到HTTPS设置
 | 
				
			||||||
	Indexes            string `field:"indexes"`            // 首页文件列表
 | 
						Indexes            string `field:"indexes"`            // 首页文件列表
 | 
				
			||||||
	MaxRequestBodySize string `field:"maxRequestBodySize"` // 最大允许的请求内容尺寸
 | 
						MaxRequestBodySize string `field:"maxRequestBodySize"` // 最大允许的请求内容尺寸
 | 
				
			||||||
	RequestHeader      string `field:"requestHeader"`      // Request Header策略ID
 | 
						RequestHeader      string `field:"requestHeader"`      // 请求Header配置
 | 
				
			||||||
	ResponseHeader     string `field:"responseHeader"`     // Response Header策略
 | 
						ResponseHeader     string `field:"responseHeader"`     // 响应Header配置
 | 
				
			||||||
	AccessLog          string `field:"accessLog"`          // 访问日志配置
 | 
						AccessLog          string `field:"accessLog"`          // 访问日志配置
 | 
				
			||||||
	Stat               string `field:"stat"`               // 统计配置
 | 
						Stat               string `field:"stat"`               // 统计配置
 | 
				
			||||||
	Gzip               string `field:"gzip"`               // Gzip配置
 | 
						Gzip               string `field:"gzip"`               // Gzip配置
 | 
				
			||||||
@@ -25,6 +25,7 @@ type HTTPWeb struct {
 | 
				
			|||||||
	Firewall           string `field:"firewall"`           // 防火墙设置
 | 
						Firewall           string `field:"firewall"`           // 防火墙设置
 | 
				
			||||||
	Locations          string `field:"locations"`          // 路径规则配置
 | 
						Locations          string `field:"locations"`          // 路径规则配置
 | 
				
			||||||
	Websocket          string `field:"websocket"`          // Websocket设置
 | 
						Websocket          string `field:"websocket"`          // Websocket设置
 | 
				
			||||||
 | 
						RewriteRules       string `field:"rewriteRules"`       // 重写规则配置
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type HTTPWebOperator struct {
 | 
					type HTTPWebOperator struct {
 | 
				
			||||||
@@ -42,8 +43,8 @@ type HTTPWebOperator struct {
 | 
				
			|||||||
	RedirectToHttps    interface{} // 跳转到HTTPS设置
 | 
						RedirectToHttps    interface{} // 跳转到HTTPS设置
 | 
				
			||||||
	Indexes            interface{} // 首页文件列表
 | 
						Indexes            interface{} // 首页文件列表
 | 
				
			||||||
	MaxRequestBodySize interface{} // 最大允许的请求内容尺寸
 | 
						MaxRequestBodySize interface{} // 最大允许的请求内容尺寸
 | 
				
			||||||
	RequestHeader      interface{} // Request Header策略ID
 | 
						RequestHeader      interface{} // 请求Header配置
 | 
				
			||||||
	ResponseHeader     interface{} // Response Header策略
 | 
						ResponseHeader     interface{} // 响应Header配置
 | 
				
			||||||
	AccessLog          interface{} // 访问日志配置
 | 
						AccessLog          interface{} // 访问日志配置
 | 
				
			||||||
	Stat               interface{} // 统计配置
 | 
						Stat               interface{} // 统计配置
 | 
				
			||||||
	Gzip               interface{} // Gzip配置
 | 
						Gzip               interface{} // Gzip配置
 | 
				
			||||||
@@ -51,6 +52,7 @@ type HTTPWebOperator struct {
 | 
				
			|||||||
	Firewall           interface{} // 防火墙设置
 | 
						Firewall           interface{} // 防火墙设置
 | 
				
			||||||
	Locations          interface{} // 路径规则配置
 | 
						Locations          interface{} // 路径规则配置
 | 
				
			||||||
	Websocket          interface{} // Websocket设置
 | 
						Websocket          interface{} // Websocket设置
 | 
				
			||||||
 | 
						RewriteRules       interface{} // 重写规则配置
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewHTTPWebOperator() *HTTPWebOperator {
 | 
					func NewHTTPWebOperator() *HTTPWebOperator {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -210,9 +210,9 @@ func (this *NodeDAO) ListEnabledNodesMatch(offset int64, size int64, clusterId i
 | 
				
			|||||||
	case configutils.BoolStateAll:
 | 
						case configutils.BoolStateAll:
 | 
				
			||||||
		// 所有
 | 
							// 所有
 | 
				
			||||||
	case configutils.BoolStateYes:
 | 
						case configutils.BoolStateYes:
 | 
				
			||||||
		query.Where("JSON_EXTRACT(status, '$.isActive') AND JSON_EXTRACT(status, '$.updatedAt')-UNIX_TIMESTAMP()<=60")
 | 
							query.Where("JSON_EXTRACT(status, '$.isActive') AND UNIX_TIMESTAMP()-JSON_EXTRACT(status, '$.updatedAt')<=60")
 | 
				
			||||||
	case configutils.BoolStateNo:
 | 
						case configutils.BoolStateNo:
 | 
				
			||||||
		query.Where("(status IS NULL OR NOT JSON_EXTRACT(status, '$.isActive') OR JSON_EXTRACT(status, '$.updatedAt')-UNIX_TIMESTAMP()>60)")
 | 
							query.Where("(status IS NULL OR NOT JSON_EXTRACT(status, '$.isActive') OR UNIX_TIMESTAMP()-JSON_EXTRACT(status, '$.updatedAt')>60)")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = query.FindAll()
 | 
						_, err = query.FindAll()
 | 
				
			||||||
@@ -300,9 +300,9 @@ func (this *NodeDAO) CountAllEnabledNodesMatch(clusterId int64, installState con
 | 
				
			|||||||
	case configutils.BoolStateAll:
 | 
						case configutils.BoolStateAll:
 | 
				
			||||||
		// 所有
 | 
							// 所有
 | 
				
			||||||
	case configutils.BoolStateYes:
 | 
						case configutils.BoolStateYes:
 | 
				
			||||||
		query.Where("JSON_EXTRACT(status, '$.isActive') AND JSON_EXTRACT(status, '$.updatedAt')-UNIX_TIMESTAMP()<=60")
 | 
							query.Where("JSON_EXTRACT(status, '$.isActive') AND UNIX_TIMESTAMP()-JSON_EXTRACT(status, '$.updatedAt')<=60")
 | 
				
			||||||
	case configutils.BoolStateNo:
 | 
						case configutils.BoolStateNo:
 | 
				
			||||||
		query.Where("(status IS NULL OR NOT JSON_EXTRACT(status, '$.isActive') OR JSON_EXTRACT(status, '$.updatedAt')-UNIX_TIMESTAMP()>60)")
 | 
							query.Where("(status IS NULL OR NOT JSON_EXTRACT(status, '$.isActive') OR UNIX_TIMESTAMP()-JSON_EXTRACT(status, '$.updatedAt')>60)")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return query.Count()
 | 
						return query.Count()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -140,7 +140,7 @@ func (this *ServerDAO) CreateServer(adminId int64, userId int64, serverType serv
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 修改服务基本信息
 | 
					// 修改服务基本信息
 | 
				
			||||||
func (this *ServerDAO) UpdateServerBasic(serverId int64, name string, description string, clusterId int64) error {
 | 
					func (this *ServerDAO) UpdateServerBasic(serverId int64, name string, description string, clusterId int64, isOn bool) error {
 | 
				
			||||||
	if serverId <= 0 {
 | 
						if serverId <= 0 {
 | 
				
			||||||
		return errors.New("serverId should not be smaller than 0")
 | 
							return errors.New("serverId should not be smaller than 0")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -149,11 +149,17 @@ func (this *ServerDAO) UpdateServerBasic(serverId int64, name string, descriptio
 | 
				
			|||||||
	op.Name = name
 | 
						op.Name = name
 | 
				
			||||||
	op.Description = description
 | 
						op.Description = description
 | 
				
			||||||
	op.ClusterId = clusterId
 | 
						op.ClusterId = clusterId
 | 
				
			||||||
 | 
						op.IsOn = isOn
 | 
				
			||||||
	_, err := this.Save(op)
 | 
						_, err := this.Save(op)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = this.RenewServerConfig(serverId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return this.createEvent()
 | 
						return this.createEvent()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -208,6 +214,11 @@ func (this *ServerDAO) UpdateServerHTTP(serverId int64, config []byte) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = this.RenewServerConfig(serverId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return this.createEvent()
 | 
						return this.createEvent()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -227,6 +238,11 @@ func (this *ServerDAO) UpdateServerHTTPS(serverId int64, config []byte) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_, err = this.RenewServerConfig(serverId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return this.createEvent()
 | 
						return this.createEvent()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								internal/rpc/services/service_http_rewrite_rule.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								internal/rpc/services/service_http_rewrite_rule.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					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"
 | 
				
			||||||
 | 
						"github.com/iwind/TeaGo/types"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type HTTPRewriteRuleService struct {
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建重写规则
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, req *pb.CreateHTTPRewriteRuleRequest) (*pb.CreateHTTPRewriteRuleResponse, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rewriteRuleId, err := models.SharedHTTPRewriteRuleDAO.CreateRewriteRule(req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.IsOn)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &pb.CreateHTTPRewriteRuleResponse{RewriteRuleId: rewriteRuleId}, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改重写规则
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleService) UpdateHTTPRewriteRule(ctx context.Context, req *pb.UpdateHTTPRewriteRuleRequest) (*pb.RPCUpdateSuccess, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedHTTPRewriteRuleDAO.UpdateRewriteRule(req.RewriteRuleId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.IsOn)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return rpcutils.RPCUpdateSuccess()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -286,3 +286,18 @@ func (this *HTTPWebService) UpdateHTTPWebWebsocket(ctx context.Context, req *pb.
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return rpcutils.RPCUpdateSuccess()
 | 
						return rpcutils.RPCUpdateSuccess()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 更改重写规则设置
 | 
				
			||||||
 | 
					func (this *HTTPWebService) UpdateHTTPWebRewriteRules(ctx context.Context, req *pb.UpdateHTTPWebRewriteRulesRequest) (*pb.RPCUpdateSuccess, error) {
 | 
				
			||||||
 | 
						// 校验请求
 | 
				
			||||||
 | 
						_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = models.SharedHTTPWebDAO.UpdateWebRewriteRules(req.WebId, req.RewriteRulesJSON)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return rpcutils.RPCUpdateSuccess()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.Update
 | 
				
			|||||||
		return nil, errors.New("can not find server")
 | 
							return nil, errors.New("can not find server")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = models.SharedServerDAO.UpdateServerBasic(req.ServerId, req.Name, req.Description, req.ClusterId)
 | 
						err = models.SharedServerDAO.UpdateServerBasic(req.ServerId, req.Name, req.Description, req.ClusterId, req.IsOn)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -446,6 +446,7 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return &pb.FindEnabledServerResponse{Server: &pb.Server{
 | 
						return &pb.FindEnabledServerResponse{Server: &pb.Server{
 | 
				
			||||||
		Id:               int64(server.Id),
 | 
							Id:               int64(server.Id),
 | 
				
			||||||
 | 
							IsOn:             server.IsOn == 1,
 | 
				
			||||||
		Type:             server.Type,
 | 
							Type:             server.Type,
 | 
				
			||||||
		Name:             server.Name,
 | 
							Name:             server.Name,
 | 
				
			||||||
		Description:      server.Description,
 | 
							Description:      server.Description,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user