mirror of
https://github.com/chaitin/SafeLine.git
synced 2026-02-05 08:13:22 +08:00
175 lines
4.5 KiB
Go
175 lines
4.5 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"chaitin.cn/patronus/safeline-2/management/webserver/pkg/fvm"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"gorm.io/gorm"
|
|
|
|
"chaitin.cn/dev/go/errors"
|
|
|
|
"chaitin.cn/patronus/safeline-2/management/webserver/api/response"
|
|
"chaitin.cn/patronus/safeline-2/management/webserver/model"
|
|
"chaitin.cn/patronus/safeline-2/management/webserver/pkg/database"
|
|
)
|
|
|
|
type putSwitchRequest struct {
|
|
IDs []uint `json:"ids"`
|
|
IsEnabled bool `json:"is_enabled"`
|
|
}
|
|
|
|
func PostPolicyRule(ctx *gin.Context) {
|
|
var params model.PolicyRule
|
|
if err := ctx.BindJSON(¶ms); err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.ErrorParamNotOK, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
db := database.GetDB()
|
|
err := db.Transaction(func(tx *gorm.DB) error {
|
|
policyRule := &model.PolicyRule{Action: params.Action, Comment: params.Comment, IsEnabled: params.IsEnabled, Pattern: params.Pattern}
|
|
res := tx.Create(policyRule)
|
|
if res.Error != nil {
|
|
return res.Error
|
|
}
|
|
|
|
if err := fvm.PushFSL(tx); err != nil {
|
|
return errors.New("Rules compile error, please check your params.")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.JSONBody{Err: response.ErrInternalError, Msg: err.Error()}, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
response.Success(ctx, nil)
|
|
}
|
|
|
|
func PutSwitchPolicyRule(ctx *gin.Context) {
|
|
var params putSwitchRequest
|
|
if err := ctx.BindJSON(¶ms); err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.ErrorParamNotOK, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
db := database.GetDB()
|
|
err := db.Transaction(func(tx *gorm.DB) error {
|
|
res := tx.Model(&model.PolicyRule{}).Where(params.IDs).Updates(model.PolicyRule{IsEnabled: params.IsEnabled})
|
|
if res.Error != nil {
|
|
return res.Error
|
|
}
|
|
if res.RowsAffected == 0 {
|
|
return errors.New("Data queried does not exist")
|
|
}
|
|
|
|
if err := fvm.PushFSL(tx); err != nil {
|
|
return errors.New("Rules compile error, please check your params.")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.JSONBody{Err: response.ErrInternalError, Msg: err.Error()}, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
}
|
|
|
|
func PutPolicyRule(ctx *gin.Context) {
|
|
var params model.PolicyRule
|
|
if err := ctx.BindJSON(¶ms); err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.ErrorParamNotOK, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
db := database.GetDB()
|
|
err := db.Transaction(func(tx *gorm.DB) error {
|
|
var policyRule model.PolicyRule
|
|
res := tx.Where(params.ID).First(&policyRule)
|
|
if res.Error != nil {
|
|
return res.Error
|
|
}
|
|
if res.RowsAffected == 0 {
|
|
return errors.New("Data queried does not exist")
|
|
}
|
|
|
|
policyRule.Action = params.Action
|
|
policyRule.Comment = params.Comment
|
|
policyRule.IsEnabled = params.IsEnabled
|
|
policyRule.Pattern = params.Pattern
|
|
tx.Save(&policyRule)
|
|
|
|
if err := fvm.PushFSL(tx); err != nil {
|
|
return errors.New("Rules compile error, please check your params.")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.JSONBody{Err: response.ErrInternalError, Msg: err.Error()}, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
response.Success(ctx, nil)
|
|
}
|
|
|
|
func DeletePolicyRule(ctx *gin.Context) {
|
|
var params idsRequest
|
|
if err := ctx.BindJSON(¶ms); err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.ErrorParamNotOK, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
db := database.GetDB()
|
|
err := db.Transaction(func(tx *gorm.DB) error {
|
|
res := tx.Where(params.IDs).Delete(&model.PolicyRule{})
|
|
if res.Error != nil {
|
|
return res.Error
|
|
}
|
|
if res.RowsAffected == 0 {
|
|
return errors.New("Data queried does not exist")
|
|
}
|
|
|
|
if err := fvm.PushFSL(tx); err != nil {
|
|
return errors.New("Rules compile error, please check your params.")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.JSONBody{Err: response.ErrInternalError, Msg: err.Error()}, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
response.Success(ctx, nil)
|
|
}
|
|
|
|
func GetPolicyRule(ctx *gin.Context) {
|
|
var params pageRequest
|
|
if err := ctx.BindQuery(¶ms); err != nil {
|
|
logger.Error(err)
|
|
response.Error(ctx, response.ErrorParamNotOK, http.StatusInternalServerError)
|
|
return
|
|
}
|
|
|
|
db := database.GetDB()
|
|
var policyRuleList []model.PolicyRule
|
|
db.Limit(params.PageSize).Offset(params.PageSize * (params.Page - 1)).Order("id desc").Find(&policyRuleList)
|
|
|
|
var total int64
|
|
db.Model(&model.PolicyRule{}).Count(&total)
|
|
|
|
response.Success(ctx, gin.H{"data": policyRuleList, "total": total})
|
|
}
|