mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			202 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package models
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"github.com/TeaOSLab/EdgeAPI/internal/errors"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
 | 
						|
	_ "github.com/go-sql-driver/mysql"
 | 
						|
	"github.com/iwind/TeaGo/Tea"
 | 
						|
	"github.com/iwind/TeaGo/dbs"
 | 
						|
	"github.com/iwind/TeaGo/types"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	HTTPFastcgiStateEnabled  = 1 // 已启用
 | 
						|
	HTTPFastcgiStateDisabled = 0 // 已禁用
 | 
						|
)
 | 
						|
 | 
						|
type HTTPFastcgiDAO dbs.DAO
 | 
						|
 | 
						|
func NewHTTPFastcgiDAO() *HTTPFastcgiDAO {
 | 
						|
	return dbs.NewDAO(&HTTPFastcgiDAO{
 | 
						|
		DAOObject: dbs.DAOObject{
 | 
						|
			DB:     Tea.Env,
 | 
						|
			Table:  "edgeHTTPFastcgis",
 | 
						|
			Model:  new(HTTPFastcgi),
 | 
						|
			PkName: "id",
 | 
						|
		},
 | 
						|
	}).(*HTTPFastcgiDAO)
 | 
						|
}
 | 
						|
 | 
						|
var SharedHTTPFastcgiDAO *HTTPFastcgiDAO
 | 
						|
 | 
						|
func init() {
 | 
						|
	dbs.OnReady(func() {
 | 
						|
		SharedHTTPFastcgiDAO = NewHTTPFastcgiDAO()
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// EnableHTTPFastcgi 启用条目
 | 
						|
func (this *HTTPFastcgiDAO) EnableHTTPFastcgi(tx *dbs.Tx, id int64) error {
 | 
						|
	_, err := this.Query(tx).
 | 
						|
		Pk(id).
 | 
						|
		Set("state", HTTPFastcgiStateEnabled).
 | 
						|
		Update()
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// DisableHTTPFastcgi 禁用条目
 | 
						|
func (this *HTTPFastcgiDAO) DisableHTTPFastcgi(tx *dbs.Tx, id int64) error {
 | 
						|
	_, err := this.Query(tx).
 | 
						|
		Pk(id).
 | 
						|
		Set("state", HTTPFastcgiStateDisabled).
 | 
						|
		Update()
 | 
						|
	return err
 | 
						|
}
 | 
						|
 | 
						|
// FindEnabledHTTPFastcgi 查找启用中的条目
 | 
						|
func (this *HTTPFastcgiDAO) FindEnabledHTTPFastcgi(tx *dbs.Tx, id int64) (*HTTPFastcgi, error) {
 | 
						|
	result, err := this.Query(tx).
 | 
						|
		Pk(id).
 | 
						|
		Attr("state", HTTPFastcgiStateEnabled).
 | 
						|
		Find()
 | 
						|
	if result == nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return result.(*HTTPFastcgi), err
 | 
						|
}
 | 
						|
 | 
						|
// ComposeFastcgiConfig 组合配置
 | 
						|
func (this *HTTPFastcgiDAO) ComposeFastcgiConfig(tx *dbs.Tx, fastcgiId int64) (*serverconfigs.HTTPFastcgiConfig, error) {
 | 
						|
	if fastcgiId <= 0 {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
	fastcgi, err := this.FindEnabledHTTPFastcgi(tx, fastcgiId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if fastcgi == nil {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
	config := &serverconfigs.HTTPFastcgiConfig{}
 | 
						|
	config.Id = int64(fastcgi.Id)
 | 
						|
	config.IsOn = fastcgi.IsOn
 | 
						|
	config.Address = fastcgi.Address
 | 
						|
 | 
						|
	if IsNotNull(fastcgi.Params) {
 | 
						|
		params := []*serverconfigs.HTTPFastcgiParam{}
 | 
						|
		err = json.Unmarshal(fastcgi.Params, ¶ms)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		config.Params = params
 | 
						|
	}
 | 
						|
 | 
						|
	if IsNotNull(fastcgi.ReadTimeout) {
 | 
						|
		duration := &shared.TimeDuration{}
 | 
						|
		err = json.Unmarshal(fastcgi.ReadTimeout, duration)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		config.ReadTimeout = duration
 | 
						|
	}
 | 
						|
 | 
						|
	if IsNotNull(fastcgi.ConnTimeout) {
 | 
						|
		duration := &shared.TimeDuration{}
 | 
						|
		err = json.Unmarshal(fastcgi.ConnTimeout, duration)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		config.ConnTimeout = duration
 | 
						|
	}
 | 
						|
 | 
						|
	if fastcgi.PoolSize > 0 {
 | 
						|
		config.PoolSize = types.Int(fastcgi.PoolSize)
 | 
						|
	}
 | 
						|
	config.PathInfoPattern = fastcgi.PathInfoPattern
 | 
						|
 | 
						|
	return config, nil
 | 
						|
}
 | 
						|
 | 
						|
// CreateFastcgi 创建Fastcgi
 | 
						|
func (this *HTTPFastcgiDAO) CreateFastcgi(tx *dbs.Tx, adminId int64, userId int64, isOn bool, address string, paramsJSON []byte, readTimeoutJSON []byte, connTimeoutJSON []byte, poolSize int32, pathInfoPattern string) (int64, error) {
 | 
						|
	op := NewHTTPFastcgiOperator()
 | 
						|
	op.AdminId = adminId
 | 
						|
	op.UserId = userId
 | 
						|
	op.IsOn = isOn
 | 
						|
	op.Address = address
 | 
						|
	if len(paramsJSON) > 0 {
 | 
						|
		op.Params = paramsJSON
 | 
						|
	}
 | 
						|
	if len(readTimeoutJSON) > 0 {
 | 
						|
		op.ReadTimeout = readTimeoutJSON
 | 
						|
	}
 | 
						|
	if len(connTimeoutJSON) > 0 {
 | 
						|
		op.ConnTimeout = connTimeoutJSON
 | 
						|
	}
 | 
						|
	op.PoolSize = poolSize
 | 
						|
	op.PathInfoPattern = pathInfoPattern
 | 
						|
 | 
						|
	op.State = HTTPFastcgiStateEnabled
 | 
						|
	return this.SaveInt64(tx, op)
 | 
						|
}
 | 
						|
 | 
						|
// UpdateFastcgi 修改Fastcgi
 | 
						|
func (this *HTTPFastcgiDAO) UpdateFastcgi(tx *dbs.Tx, fastcgiId int64, isOn bool, address string, paramsJSON []byte, readTimeoutJSON []byte, connTimeoutJSON []byte, poolSize int32, pathInfoPattern string) error {
 | 
						|
	if fastcgiId <= 0 {
 | 
						|
		return errors.New("invalid 'fastcgiId'")
 | 
						|
	}
 | 
						|
	op := NewHTTPFastcgiOperator()
 | 
						|
	op.Id = fastcgiId
 | 
						|
	op.IsOn = isOn
 | 
						|
	op.Address = address
 | 
						|
	if len(paramsJSON) > 0 {
 | 
						|
		op.Params = paramsJSON
 | 
						|
	}
 | 
						|
	if len(readTimeoutJSON) > 0 {
 | 
						|
		op.ReadTimeout = readTimeoutJSON
 | 
						|
	}
 | 
						|
	if len(connTimeoutJSON) > 0 {
 | 
						|
		op.ConnTimeout = connTimeoutJSON
 | 
						|
	}
 | 
						|
	op.PoolSize = poolSize
 | 
						|
	op.PathInfoPattern = pathInfoPattern
 | 
						|
	err := this.Save(tx, op)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	return this.NotifyUpdate(tx, fastcgiId)
 | 
						|
}
 | 
						|
 | 
						|
// CheckUserFastcgi 检查用户Fastcgi权限
 | 
						|
func (this *HTTPFastcgiDAO) CheckUserFastcgi(tx *dbs.Tx, userId int64, fastcgiId int64) error {
 | 
						|
	if userId <= 0 || fastcgiId <= 0 {
 | 
						|
		return errors.New("permission error")
 | 
						|
	}
 | 
						|
	exists, err := this.Query(tx).
 | 
						|
		Pk(fastcgiId).
 | 
						|
		Attr("userId", userId).
 | 
						|
		State(HTTPFastcgiStateEnabled).
 | 
						|
		Exist()
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	if !exists {
 | 
						|
		return errors.New("permission error")
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// NotifyUpdate 通知更新
 | 
						|
func (this *HTTPFastcgiDAO) NotifyUpdate(tx *dbs.Tx, fastcgiId int64) error {
 | 
						|
	webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithFastcgiId(tx, fastcgiId)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	if webId > 0 {
 | 
						|
		return SharedHTTPWebDAO.NotifyUpdate(tx, webId)
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 |