Files
waf-platform/EdgeAPI/internal/rpc/services/service_script_plus.go
2026-02-04 20:27:13 +08:00

234 lines
5.7 KiB
Go

// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
//go:build plus
// +build plus
package services
import (
"context"
"encoding/json"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
// ScriptService 脚本相关服务
type ScriptService struct {
BaseService
}
// CreateScript 添加脚本
func (this *ScriptService) CreateScript(ctx context.Context, req *pb.CreateScriptRequest) (*pb.CreateScriptResponse, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
var tx = this.NullTx()
scriptId, err := models.SharedScriptDAO.CreateScript(tx, userId, req.Name, req.Filename, req.Code)
if err != nil {
return nil, err
}
return &pb.CreateScriptResponse{ScriptId: scriptId}, nil
}
// DeleteScript 删除脚本
func (this *ScriptService) DeleteScript(ctx context.Context, req *pb.DeleteScriptRequest) (*pb.RPCSuccess, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
var tx = this.NullTx()
if userId > 0 {
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
if err != nil {
return nil, err
}
}
err = models.SharedScriptDAO.DisableScript(tx, req.ScriptId)
if err != nil {
return nil, err
}
return this.Success()
}
// CountAllEnabledScripts 计算脚本数量
func (this *ScriptService) CountAllEnabledScripts(ctx context.Context, req *pb.CountAllEnabledScriptsRequest) (*pb.RPCCountResponse, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
if userId > 0 {
req.UserId = userId
}
var tx = this.NullTx()
count, err := models.SharedScriptDAO.CountAllEnabledScripts(tx, userId)
if err != nil {
return nil, err
}
return this.SuccessCount(count)
}
// ListEnabledScripts 列出单页脚本
func (this *ScriptService) ListEnabledScripts(ctx context.Context, req *pb.ListEnabledScriptsRequest) (*pb.ListEnabledScriptsResponse, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
if userId > 0 {
req.UserId = userId
}
var tx = this.NullTx()
scripts, err := models.SharedScriptDAO.ListEnabledScripts(tx, req.UserId, req.Offset, req.Size)
if err != nil {
return nil, err
}
var pbScripts = []*pb.Script{}
for _, script := range scripts {
pbScripts = append(pbScripts, &pb.Script{
Id: int64(script.Id),
UserId: int64(script.UserId),
IsOn: script.IsOn,
Name: script.Name,
Filename: script.Filename,
Code: script.Code,
UpdatedAt: int64(script.UpdatedAt),
})
}
return &pb.ListEnabledScriptsResponse{Scripts: pbScripts}, nil
}
// PublishScripts 发布脚本
func (this *ScriptService) PublishScripts(ctx context.Context, req *pb.PublishScriptsRequest) (*pb.RPCSuccess, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
if userId > 0 {
req.UserId = userId
}
var tx = this.NullTx()
err = models.SharedScriptHistoryDAO.PublishScripts(tx, userId)
if err != nil {
return nil, err
}
return this.Success()
}
// CheckScriptUpdates 检查脚本是否需要有更新
func (this *ScriptService) CheckScriptUpdates(ctx context.Context, req *pb.CheckScriptUpdatesRequest) (*pb.CheckScriptUpdatesResponse, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
if userId > 0 {
req.UserId = userId
}
var tx = this.NullTx()
hasUpdates, version, err := models.SharedScriptHistoryDAO.CheckScriptsUpdates(tx, userId)
if err != nil {
return nil, err
}
return &pb.CheckScriptUpdatesResponse{
HasUpdates: hasUpdates,
Version: version,
}, nil
}
// FindEnabledScript 查找单个脚本
func (this *ScriptService) FindEnabledScript(ctx context.Context, req *pb.FindEnabledScriptRequest) (*pb.FindEnabledScriptResponse, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
var tx = this.NullTx()
if userId > 0 {
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
if err != nil {
return nil, err
}
}
script, err := models.SharedScriptDAO.FindEnabledScript(tx, req.ScriptId)
if err != nil {
return nil, err
}
if script == nil {
return &pb.FindEnabledScriptResponse{
Script: nil,
}, nil
}
return &pb.FindEnabledScriptResponse{
Script: &pb.Script{
Id: int64(script.Id),
UserId: int64(script.UserId),
IsOn: script.IsOn,
Name: script.Name,
Filename: script.Filename,
Code: script.Code,
},
}, nil
}
// UpdateScript 修改脚本
func (this *ScriptService) UpdateScript(ctx context.Context, req *pb.UpdateScriptRequest) (*pb.RPCSuccess, error) {
_, userId, err := this.ValidateAdminAndUser(ctx, true)
if err != nil {
return nil, err
}
var tx = this.NullTx()
if userId > 0 {
err = models.SharedScriptDAO.CheckUserScript(tx, userId, req.ScriptId)
if err != nil {
return nil, err
}
}
err = models.SharedScriptDAO.UpdateScript(tx, req.ScriptId, req.Name, req.Filename, req.Code, req.IsOn)
if err != nil {
return nil, err
}
return this.Success()
}
// ComposeScriptConfigs 组合脚本配置
func (this *ScriptService) ComposeScriptConfigs(ctx context.Context, req *pb.ComposeScriptConfigsRequest) (*pb.ComposeScriptConfigsResponse, error) {
_, err := this.ValidateNode(ctx)
if err != nil {
return nil, err
}
var tx = this.NullTx()
configs, err := models.SharedScriptHistoryDAO.ComposeScriptConfigs(tx, 0, nil)
if err != nil {
return nil, err
}
configsJSON, err := json.Marshal(configs)
if err != nil {
return nil, err
}
return &pb.ComposeScriptConfigsResponse{
ScriptConfigsJSON: configsJSON,
}, nil
}