From ff1a5bdce9e183dce8f07ac2bc73439c55060f40 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 20 Dec 2023 15:08:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8B=A5=E5=B9=B2API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/models/http_firewall_policy_dao.go | 14 ++++++++ internal/db/models/ip_list_dao.go | 13 +++++++ internal/db/models/plan_model.go | 3 ++ .../services/service_http_firewall_policy.go | 26 ++++++++++++++ internal/rpc/services/service_ip_item.go | 35 +++++++++++++++++++ internal/rpc/services/service_ip_list.go | 26 ++++++++++++++ internal/rpc/services/service_server.go | 3 ++ internal/rpc/services/users/service_user.go | 29 ++------------- .../rpc/services/users/service_user_ext.go | 25 +++++++++++++ 9 files changed, 147 insertions(+), 27 deletions(-) diff --git a/internal/db/models/http_firewall_policy_dao.go b/internal/db/models/http_firewall_policy_dao.go index 6ba395d4..3648619e 100644 --- a/internal/db/models/http_firewall_policy_dao.go +++ b/internal/db/models/http_firewall_policy_dao.go @@ -444,6 +444,7 @@ func (this *HTTPFirewallPolicyDAO) ComposeFirewallPolicy(tx *dbs.Tx, policyId in var config = &firewallconfigs.HTTPFirewallPolicy{} config.Id = int64(policy.Id) + config.ServerId = int64(policy.ServerId) config.IsOn = policy.IsOn config.Name = policy.Name config.Description = policy.Description @@ -667,6 +668,19 @@ func (this *HTTPFirewallPolicyDAO) FindFirewallPolicyIdsWithServerId(tx *dbs.Tx, return result, nil } +// FindServerIdWithFirewallPolicyId 根据策略查找网站ID +func (this *HTTPFirewallPolicyDAO) FindServerIdWithFirewallPolicyId(tx *dbs.Tx, policyId int64) (serverId int64, err error) { + if policyId <= 0 { + return + } + + serverId, err = this.Query(tx). + Pk(policyId). + Result("serverId"). + FindInt64Col(0) + return +} + // NotifyUpdate 通知更新 func (this *HTTPFirewallPolicyDAO) NotifyUpdate(tx *dbs.Tx, policyId int64) error { webIds, err := SharedHTTPWebDAO.FindAllWebIdsWithHTTPFirewallPolicyId(tx, policyId) diff --git a/internal/db/models/ip_list_dao.go b/internal/db/models/ip_list_dao.go index 41e19638..6a0677ba 100644 --- a/internal/db/models/ip_list_dao.go +++ b/internal/db/models/ip_list_dao.go @@ -339,3 +339,16 @@ func (this *IPListDAO) NotifyUpdate(tx *dbs.Tx, listId int64, taskType NodeTaskT return nil } + +// FindServerIdWithListId 查找IP名单对应的网站ID +func (this *IPListDAO) FindServerIdWithListId(tx *dbs.Tx, listId int64) (serverId int64, err error) { + if listId <= 0 { + return + } + + serverId, err = this.Query(tx). + Pk(listId). + Result("serverId"). + FindInt64Col(0) + return +} diff --git a/internal/db/models/plan_model.go b/internal/db/models/plan_model.go index 4f4a7c7d..8114183c 100644 --- a/internal/db/models/plan_model.go +++ b/internal/db/models/plan_model.go @@ -9,6 +9,7 @@ const ( PlanField_ClusterId dbs.FieldName = "clusterId" // 集群ID PlanField_TrafficLimit dbs.FieldName = "trafficLimit" // 流量限制 PlanField_Features dbs.FieldName = "features" // 允许的功能 + PlanField_HasFullFeatures dbs.FieldName = "hasFullFeatures" // 是否有完整的功能 PlanField_TrafficPrice dbs.FieldName = "trafficPrice" // 流量价格设定 PlanField_BandwidthPrice dbs.FieldName = "bandwidthPrice" // 带宽价格 PlanField_MonthlyPrice dbs.FieldName = "monthlyPrice" // 月付 @@ -34,6 +35,7 @@ type Plan struct { ClusterId uint32 `field:"clusterId"` // 集群ID TrafficLimit dbs.JSON `field:"trafficLimit"` // 流量限制 Features dbs.JSON `field:"features"` // 允许的功能 + HasFullFeatures bool `field:"hasFullFeatures"` // 是否有完整的功能 TrafficPrice dbs.JSON `field:"trafficPrice"` // 流量价格设定 BandwidthPrice dbs.JSON `field:"bandwidthPrice"` // 带宽价格 MonthlyPrice float64 `field:"monthlyPrice"` // 月付 @@ -58,6 +60,7 @@ type PlanOperator struct { ClusterId any // 集群ID TrafficLimit any // 流量限制 Features any // 允许的功能 + HasFullFeatures any // 是否有完整的功能 TrafficPrice any // 流量价格设定 BandwidthPrice any // 带宽价格 MonthlyPrice any // 月付 diff --git a/internal/rpc/services/service_http_firewall_policy.go b/internal/rpc/services/service_http_firewall_policy.go index 798cb540..0aa014bd 100644 --- a/internal/rpc/services/service_http_firewall_policy.go +++ b/internal/rpc/services/service_http_firewall_policy.go @@ -862,3 +862,29 @@ func (this *HTTPFirewallPolicyService) CheckHTTPFirewallPolicyIPStatus(ctx conte RegionProvince: nil, }, nil } + +// FindServerIdWithHTTPFirewallPolicyId 获取防火墙对应的网站ID +func (this *HTTPFirewallPolicyService) FindServerIdWithHTTPFirewallPolicyId(ctx context.Context, req *pb.FindServerIdWithHTTPFirewallPolicyIdRequest) (*pb.FindServerIdWithHTTPFirewallPolicyIdResponse, error) { + _, userId, err := this.ValidateAdminAndUser(ctx, true) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + serverId, err := models.SharedHTTPFirewallPolicyDAO.FindServerIdWithFirewallPolicyId(tx, req.HttpFirewallPolicyId) + if err != nil { + return nil, err + } + + // check user + if serverId > 0 && userId > 0 { + err = models.SharedServerDAO.CheckUserServer(tx, userId, serverId) + if err != nil { + return nil, err + } + } + + return &pb.FindServerIdWithHTTPFirewallPolicyIdResponse{ + ServerId: serverId, + }, nil +} diff --git a/internal/rpc/services/service_ip_item.go b/internal/rpc/services/service_ip_item.go index e4a7a6bd..48fe82fd 100644 --- a/internal/rpc/services/service_ip_item.go +++ b/internal/rpc/services/service_ip_item.go @@ -782,3 +782,38 @@ func (this *IPItemService) UpdateIPItemsRead(ctx context.Context, req *pb.Update } return this.Success() } + +// FindServerIdWithIPItemId 查找IP对应的名单所属网站ID +func (this *IPItemService) FindServerIdWithIPItemId(ctx context.Context, req *pb.FindServerIdWithIPItemIdRequest) (*pb.FindServerIdWithIPItemIdResponse, error) { + _, userId, err := this.ValidateAdminAndUser(ctx, true) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + listId, err := models.SharedIPItemDAO.FindItemListId(tx, req.IpItemId) + if err != nil { + return nil, err + } + + if listId > 0 { + var serverId int64 + serverId, err = models.SharedIPListDAO.FindServerIdWithListId(tx, listId) + if err != nil { + return nil, err + } + + if serverId > 0 { + // check user + if userId > 0 { + err = models.SharedServerDAO.CheckUserServer(tx, userId, serverId) + if err != nil { + return nil, err + } + } + return &pb.FindServerIdWithIPItemIdResponse{ServerId: serverId}, nil + } + } + + return &pb.FindServerIdWithIPItemIdResponse{ServerId: 0}, nil +} diff --git a/internal/rpc/services/service_ip_list.go b/internal/rpc/services/service_ip_list.go index cf5c0eab..7f5d2283 100644 --- a/internal/rpc/services/service_ip_list.go +++ b/internal/rpc/services/service_ip_list.go @@ -224,3 +224,29 @@ func (this *IPListService) FindEnabledIPListContainsIP(ctx context.Context, req } return &pb.FindEnabledIPListContainsIPResponse{IpLists: pbLists}, nil } + +// FindServerIdWithIPListId 查找IP名单对应的网站ID +func (this *IPListService) FindServerIdWithIPListId(ctx context.Context, req *pb.FindServerIdWithIPListIdRequest) (*pb.FindServerIdWithIPListIdResponse, error) { + _, userId, err := this.ValidateAdminAndUser(ctx, true) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + serverId, err := models.SharedIPListDAO.FindServerIdWithListId(tx, req.IpListId) + if err != nil { + return nil, err + } + + // check user + if serverId > 0 && userId > 0 { + err = models.SharedServerDAO.CheckUserServer(tx, userId, serverId) + if err != nil { + return nil, err + } + } + + return &pb.FindServerIdWithIPListIdResponse{ + ServerId: serverId, + }, nil +} diff --git a/internal/rpc/services/service_server.go b/internal/rpc/services/service_server.go index 629a08d6..1a73e9ce 100644 --- a/internal/rpc/services/service_server.go +++ b/internal/rpc/services/service_server.go @@ -2890,6 +2890,7 @@ func (this *ServerService) FindServerUserPlan(ctx context.Context, req *pb.FindS User: nil, Plan: &pb.Plan{ Id: int64(plan.Id), + IsOn: plan.IsOn, Name: plan.Name, PriceType: plan.PriceType, TrafficPriceJSON: plan.TrafficPrice, @@ -2897,6 +2898,8 @@ func (this *ServerService) FindServerUserPlan(ctx context.Context, req *pb.FindS TotalServers: types.Int32(plan.TotalServers), TotalServerNames: types.Int32(plan.TotalServerNames), TotalServerNamesPerServer: types.Int32(plan.TotalServerNamesPerServer), + HasFullFeatures: plan.HasFullFeatures, + FeaturesJSON: plan.Features, }, }, }, nil diff --git a/internal/rpc/services/users/service_user.go b/internal/rpc/services/users/service_user.go index 80d8cdde..797eb139 100644 --- a/internal/rpc/services/users/service_user.go +++ b/internal/rpc/services/users/service_user.go @@ -618,31 +618,6 @@ func (this *UserService) UpdateAllUsersFeatures(ctx context.Context, req *pb.Upd return this.Success() } -// FindUserFeatures 获取用户所有的功能列表 -func (this *UserService) FindUserFeatures(ctx context.Context, req *pb.FindUserFeaturesRequest) (*pb.FindUserFeaturesResponse, error) { - _, userId, err := this.ValidateAdminAndUser(ctx, false) - if err != nil { - return nil, err - } - if userId > 0 { - req.UserId = userId - } - - var tx = this.NullTx() - - features, err := models.SharedUserDAO.FindUserFeatures(tx, req.UserId) - if err != nil { - return nil, err - } - - result := []*pb.UserFeature{} - for _, feature := range features { - result = append(result, feature.ToPB()) - } - - return &pb.FindUserFeaturesResponse{Features: result}, nil -} - // FindAllUserFeatureDefinitions 获取所有的功能定义 func (this *UserService) FindAllUserFeatureDefinitions(ctx context.Context, req *pb.FindAllUserFeatureDefinitionsRequest) (*pb.FindAllUserFeatureDefinitionsResponse, error) { _, err := this.ValidateAdmin(ctx) @@ -650,8 +625,8 @@ func (this *UserService) FindAllUserFeatureDefinitions(ctx context.Context, req return nil, err } - features := userconfigs.FindAllUserFeatures() - result := []*pb.UserFeature{} + var features = userconfigs.FindAllUserFeatures() + var result = []*pb.UserFeature{} for _, feature := range features { result = append(result, feature.ToPB()) } diff --git a/internal/rpc/services/users/service_user_ext.go b/internal/rpc/services/users/service_user_ext.go index 697291ae..a0a2a2b4 100644 --- a/internal/rpc/services/users/service_user_ext.go +++ b/internal/rpc/services/users/service_user_ext.go @@ -89,3 +89,28 @@ func (this *UserService) RegisterUser(ctx context.Context, req *pb.RegisterUserR RequireEmailVerification: requireEmailVerification, }, nil } + +// FindUserFeatures 获取用户所有的功能列表 +func (this *UserService) FindUserFeatures(ctx context.Context, req *pb.FindUserFeaturesRequest) (*pb.FindUserFeaturesResponse, error) { + _, userId, err := this.ValidateAdminAndUser(ctx, false) + if err != nil { + return nil, err + } + if userId > 0 { + req.UserId = userId + } + + var tx = this.NullTx() + + features, err := models.SharedUserDAO.FindUserFeatures(tx, req.UserId) + if err != nil { + return nil, err + } + + result := []*pb.UserFeature{} + for _, feature := range features { + result = append(result, feature.ToPB()) + } + + return &pb.FindUserFeaturesResponse{Features: result}, nil +}