mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	重写规则API支持用户操作
This commit is contained in:
		@@ -124,8 +124,9 @@ func (this *HTTPRewriteRuleDAO) ComposeRewriteRule(tx *dbs.Tx, rewriteRuleId int
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CreateRewriteRule 创建规则
 | 
					// CreateRewriteRule 创建规则
 | 
				
			||||||
func (this *HTTPRewriteRuleDAO) CreateRewriteRule(tx *dbs.Tx, pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, withQuery bool, isOn bool, condsJSON []byte) (int64, error) {
 | 
					func (this *HTTPRewriteRuleDAO) CreateRewriteRule(tx *dbs.Tx, userId int64, pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, withQuery bool, isOn bool, condsJSON []byte) (int64, error) {
 | 
				
			||||||
	var op = NewHTTPRewriteRuleOperator()
 | 
						var op = NewHTTPRewriteRuleOperator()
 | 
				
			||||||
 | 
						op.UserId = userId
 | 
				
			||||||
	op.State = HTTPRewriteRuleStateEnabled
 | 
						op.State = HTTPRewriteRuleStateEnabled
 | 
				
			||||||
	op.IsOn = isOn
 | 
						op.IsOn = isOn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -172,6 +173,34 @@ func (this *HTTPRewriteRuleDAO) UpdateRewriteRule(tx *dbs.Tx, rewriteRuleId int6
 | 
				
			|||||||
	return this.NotifyUpdate(tx, rewriteRuleId)
 | 
						return this.NotifyUpdate(tx, rewriteRuleId)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (this *HTTPRewriteRuleDAO) CheckUserRewriteRule(tx *dbs.Tx, userId int64, rewriteRuleId int64) error {
 | 
				
			||||||
 | 
						if rewriteRuleId <= 0 {
 | 
				
			||||||
 | 
							return ErrNotFound
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						exists, err := this.Query(tx).
 | 
				
			||||||
 | 
							Pk(rewriteRuleId).
 | 
				
			||||||
 | 
							Attr("userId", userId).
 | 
				
			||||||
 | 
							Exist()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !exists {
 | 
				
			||||||
 | 
							return ErrNotFound
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithRewriteRuleId(tx, rewriteRuleId)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if webId <= 0 {
 | 
				
			||||||
 | 
							return ErrNotFound
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return SharedHTTPWebDAO.CheckUserWeb(tx, userId, webId)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NotifyUpdate 通知更新
 | 
					// NotifyUpdate 通知更新
 | 
				
			||||||
func (this *HTTPRewriteRuleDAO) NotifyUpdate(tx *dbs.Tx, rewriteRuleId int64) error {
 | 
					func (this *HTTPRewriteRuleDAO) NotifyUpdate(tx *dbs.Tx, rewriteRuleId int64) error {
 | 
				
			||||||
	webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithRewriteRuleId(tx, rewriteRuleId)
 | 
						webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithRewriteRuleId(tx, rewriteRuleId)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,42 @@ package models
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import "github.com/iwind/TeaGo/dbs"
 | 
					import "github.com/iwind/TeaGo/dbs"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						UserField_Id                dbs.FieldName = "id"                // ID
 | 
				
			||||||
 | 
						UserField_IsOn              dbs.FieldName = "isOn"              // 是否启用
 | 
				
			||||||
 | 
						UserField_Username          dbs.FieldName = "username"          // 用户名
 | 
				
			||||||
 | 
						UserField_Password          dbs.FieldName = "password"          // 密码
 | 
				
			||||||
 | 
						UserField_Fullname          dbs.FieldName = "fullname"          // 真实姓名
 | 
				
			||||||
 | 
						UserField_Mobile            dbs.FieldName = "mobile"            // 手机号
 | 
				
			||||||
 | 
						UserField_VerifiedMobile    dbs.FieldName = "verifiedMobile"    // 已验证手机号
 | 
				
			||||||
 | 
						UserField_Tel               dbs.FieldName = "tel"               // 联系电话
 | 
				
			||||||
 | 
						UserField_Remark            dbs.FieldName = "remark"            // 备注
 | 
				
			||||||
 | 
						UserField_Email             dbs.FieldName = "email"             // 邮箱地址
 | 
				
			||||||
 | 
						UserField_VerifiedEmail     dbs.FieldName = "verifiedEmail"     // 激活后的邮箱
 | 
				
			||||||
 | 
						UserField_EmailIsVerified   dbs.FieldName = "emailIsVerified"   // 邮箱是否已验证
 | 
				
			||||||
 | 
						UserField_AvatarFileId      dbs.FieldName = "avatarFileId"      // 头像文件ID
 | 
				
			||||||
 | 
						UserField_CreatedAt         dbs.FieldName = "createdAt"         // 创建时间
 | 
				
			||||||
 | 
						UserField_Day               dbs.FieldName = "day"               // YYYYMMDD
 | 
				
			||||||
 | 
						UserField_UpdatedAt         dbs.FieldName = "updatedAt"         // 修改时间
 | 
				
			||||||
 | 
						UserField_State             dbs.FieldName = "state"             // 状态
 | 
				
			||||||
 | 
						UserField_Source            dbs.FieldName = "source"            // 来源
 | 
				
			||||||
 | 
						UserField_ClusterId         dbs.FieldName = "clusterId"         // 集群ID
 | 
				
			||||||
 | 
						UserField_Features          dbs.FieldName = "features"          // 允许操作的特征
 | 
				
			||||||
 | 
						UserField_RegisteredIP      dbs.FieldName = "registeredIP"      // 注册使用的IP
 | 
				
			||||||
 | 
						UserField_IsRejected        dbs.FieldName = "isRejected"        // 是否已拒绝
 | 
				
			||||||
 | 
						UserField_RejectReason      dbs.FieldName = "rejectReason"      // 拒绝理由
 | 
				
			||||||
 | 
						UserField_IsVerified        dbs.FieldName = "isVerified"        // 是否验证通过
 | 
				
			||||||
 | 
						UserField_RequirePlans      dbs.FieldName = "requirePlans"      // 是否需要购买套餐
 | 
				
			||||||
 | 
						UserField_Modules           dbs.FieldName = "modules"           // 用户模块
 | 
				
			||||||
 | 
						UserField_PriceType         dbs.FieldName = "priceType"         // 计费类型:traffic|bandwidth
 | 
				
			||||||
 | 
						UserField_PricePeriod       dbs.FieldName = "pricePeriod"       // 结算周期
 | 
				
			||||||
 | 
						UserField_ServersEnabled    dbs.FieldName = "serversEnabled"    // 是否禁用所有服务
 | 
				
			||||||
 | 
						UserField_Notification      dbs.FieldName = "notification"      // 通知设置
 | 
				
			||||||
 | 
						UserField_BandwidthAlgo     dbs.FieldName = "bandwidthAlgo"     // 带宽算法
 | 
				
			||||||
 | 
						UserField_BandwidthModifier dbs.FieldName = "bandwidthModifier" // 带宽修正值
 | 
				
			||||||
 | 
						UserField_Lang              dbs.FieldName = "lang"              // 语言代号
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// User 用户
 | 
					// User 用户
 | 
				
			||||||
type User struct {
 | 
					type User struct {
 | 
				
			||||||
	Id                uint32   `field:"id"`                // ID
 | 
						Id                uint32   `field:"id"`                // ID
 | 
				
			||||||
@@ -36,6 +72,7 @@ type User struct {
 | 
				
			|||||||
	Notification      dbs.JSON `field:"notification"`      // 通知设置
 | 
						Notification      dbs.JSON `field:"notification"`      // 通知设置
 | 
				
			||||||
	BandwidthAlgo     string   `field:"bandwidthAlgo"`     // 带宽算法
 | 
						BandwidthAlgo     string   `field:"bandwidthAlgo"`     // 带宽算法
 | 
				
			||||||
	BandwidthModifier float64  `field:"bandwidthModifier"` // 带宽修正值
 | 
						BandwidthModifier float64  `field:"bandwidthModifier"` // 带宽修正值
 | 
				
			||||||
 | 
						Lang              string   `field:"lang"`              // 语言代号
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type UserOperator struct {
 | 
					type UserOperator struct {
 | 
				
			||||||
@@ -71,6 +108,7 @@ type UserOperator struct {
 | 
				
			|||||||
	Notification      any // 通知设置
 | 
						Notification      any // 通知设置
 | 
				
			||||||
	BandwidthAlgo     any // 带宽算法
 | 
						BandwidthAlgo     any // 带宽算法
 | 
				
			||||||
	BandwidthModifier any // 带宽修正值
 | 
						BandwidthModifier any // 带宽修正值
 | 
				
			||||||
 | 
						Lang              any // 语言代号
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewUserOperator() *UserOperator {
 | 
					func NewUserOperator() *UserOperator {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,14 +15,14 @@ type HTTPRewriteRuleService struct {
 | 
				
			|||||||
// CreateHTTPRewriteRule 创建重写规则
 | 
					// CreateHTTPRewriteRule 创建重写规则
 | 
				
			||||||
func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, req *pb.CreateHTTPRewriteRuleRequest) (*pb.CreateHTTPRewriteRuleResponse, error) {
 | 
					func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, req *pb.CreateHTTPRewriteRuleRequest) (*pb.CreateHTTPRewriteRuleResponse, error) {
 | 
				
			||||||
	// 校验请求
 | 
						// 校验请求
 | 
				
			||||||
	_, err := this.ValidateAdmin(ctx)
 | 
						_, userId, err := this.ValidateAdminAndUser(ctx, true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tx = this.NullTx()
 | 
						var tx = this.NullTx()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rewriteRuleId, err := models.SharedHTTPRewriteRuleDAO.CreateRewriteRule(tx, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON)
 | 
						rewriteRuleId, err := models.SharedHTTPRewriteRuleDAO.CreateRewriteRule(tx, userId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -33,12 +33,18 @@ func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, r
 | 
				
			|||||||
// UpdateHTTPRewriteRule 修改重写规则
 | 
					// UpdateHTTPRewriteRule 修改重写规则
 | 
				
			||||||
func (this *HTTPRewriteRuleService) UpdateHTTPRewriteRule(ctx context.Context, req *pb.UpdateHTTPRewriteRuleRequest) (*pb.RPCSuccess, error) {
 | 
					func (this *HTTPRewriteRuleService) UpdateHTTPRewriteRule(ctx context.Context, req *pb.UpdateHTTPRewriteRuleRequest) (*pb.RPCSuccess, error) {
 | 
				
			||||||
	// 校验请求
 | 
						// 校验请求
 | 
				
			||||||
	_, err := this.ValidateAdmin(ctx)
 | 
						_, userId, err := this.ValidateAdminAndUser(ctx, true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var tx = this.NullTx()
 | 
						var tx = this.NullTx()
 | 
				
			||||||
 | 
						if userId > 0 {
 | 
				
			||||||
 | 
							err = models.SharedHTTPRewriteRuleDAO.CheckUserRewriteRule(tx, userId, req.RewriteRuleId)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = models.SharedHTTPRewriteRuleDAO.UpdateRewriteRule(tx, req.RewriteRuleId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON)
 | 
						err = models.SharedHTTPRewriteRuleDAO.UpdateRewriteRule(tx, req.RewriteRuleId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -261,6 +261,7 @@ func (this *UserService) FindEnabledUser(ctx context.Context, req *pb.FindEnable
 | 
				
			|||||||
		IsEnterpriseIdentified: isEnterpriseIdentified,
 | 
							IsEnterpriseIdentified: isEnterpriseIdentified,
 | 
				
			||||||
		BandwidthAlgo:          user.BandwidthAlgo,
 | 
							BandwidthAlgo:          user.BandwidthAlgo,
 | 
				
			||||||
		OtpLogin:               pbOtpAuth,
 | 
							OtpLogin:               pbOtpAuth,
 | 
				
			||||||
 | 
							Lang:                   user.Lang,
 | 
				
			||||||
	}}, nil
 | 
						}}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user