From 074e070fe0f58fb17510f5c254c8fdd3a1c4a5ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Sun, 12 May 2024 18:06:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E7=BD=91=E7=AB=99=E6=97=B6?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E4=B9=9F=E4=BC=9A=E6=A3=80=E6=9F=A5=E6=BA=90?= =?UTF-8?q?=E7=AB=99=E6=98=AF=E5=90=A6=E6=9C=89=E5=8C=B9=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/server_dao.go | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/internal/db/models/server_dao.go b/internal/db/models/server_dao.go index 78897e42..d7d56891 100644 --- a/internal/db/models/server_dao.go +++ b/internal/db/models/server_dao.go @@ -818,8 +818,15 @@ func (this *ServerDAO) CountAllEnabledServersMatch(tx *dbs.Tx, groupId int64, ke Param("serverId", keyword). Param("keyword", dbutils.QuoteLike(keyword)) } else { - query.Where("(name LIKE :keyword OR serverNames LIKE :keyword)"). - Param("keyword", dbutils.QuoteLike(keyword)) + if regexp.MustCompile(`^[a-z0-9.-]+$`).MatchString(keyword) { + // 可以搜索源站 + query.Where("(name LIKE :keyword OR serverNames LIKE :keyword OR JSON_EXTRACT(reverseProxy, '$.reverseProxyId') IN (SELECT reverseProxyId FROM " + SharedOriginDAO.Table + " WHERE reverseProxyId > 0 AND JSON_EXTRACT(addr, '$.host')=:fullKeyword))") + query.Param("keyword", dbutils.QuoteLike(keyword)) + query.Param("fullKeyword", keyword) + } else { + query.Where("(name LIKE :keyword OR serverNames LIKE :keyword)"). + Param("keyword", dbutils.QuoteLike(keyword)) + } } } if userId > 0 { @@ -861,7 +868,7 @@ func (this *ServerDAO) CountAllEnabledServersMatch(tx *dbs.Tx, groupId int64, ke // // groupId 分组ID,如果为-1,则搜索没有分组的服务 func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size int64, groupId int64, keyword string, userId int64, clusterId int64, auditingFlag int32, protocolFamilies []string, order string) (result []*Server, err error) { - query := this.Query(tx). + var query = this.Query(tx). State(ServerStateEnabled). Offset(offset). Limit(size). @@ -880,8 +887,15 @@ func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size in Param("serverId", keyword). Param("keyword", dbutils.QuoteLike(keyword)) } else { - query.Where("(name LIKE :keyword OR serverNames LIKE :keyword)"). - Param("keyword", dbutils.QuoteLike(keyword)) + if regexp.MustCompile(`^[a-z0-9.-]+$`).MatchString(keyword) { + // 可以搜索源站 + query.Where("(name LIKE :keyword OR serverNames LIKE :keyword OR JSON_EXTRACT(reverseProxy, '$.reverseProxyId') IN (SELECT reverseProxyId FROM " + SharedOriginDAO.Table + " WHERE reverseProxyId > 0 AND JSON_EXTRACT(addr, '$.host')=:fullKeyword))") + query.Param("keyword", dbutils.QuoteLike(keyword)) + query.Param("fullKeyword", keyword) + } else { + query.Where("(name LIKE :keyword OR serverNames LIKE :keyword)"). + Param("keyword", dbutils.QuoteLike(keyword)) + } } } if userId > 0 {