mirror of
https://github.com/TeaOSLab/EdgeAPI.git
synced 2025-11-03 15:00:27 +08:00
203 lines
4.9 KiB
Go
203 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) {
|
|
var 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'")
|
|
}
|
|
var 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
|
|
}
|