Files
SamWaf/api/waf_ssl.go
T
2024-10-10 14:13:46 +08:00

122 lines
3.3 KiB
Go

package api
import (
"SamWaf/enums"
"SamWaf/global"
"SamWaf/model"
"SamWaf/model/common/response"
"SamWaf/model/request"
"SamWaf/model/spec"
"SamWaf/utils/zlog"
"errors"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
type WafSslConfigApi struct{}
// AddSslConfigApi 添加SSL证书
func (s *WafSslConfigApi) AddSslConfigApi(c *gin.Context) {
var req request.SslConfigAddReq
err := c.ShouldBindJSON(&req)
if err == nil {
err = wafSslConfigService.AddApi(req)
if err == nil {
response.OkWithMessage("添加成功", c)
} else {
response.FailWithMessage("添加失败:"+err.Error(), c)
}
return
} else {
response.FailWithMessage("解析失败", c)
}
}
// GetSslConfigDetailApi 获取SSL证书详情
func (s *WafSslConfigApi) GetSslConfigDetailApi(c *gin.Context) {
var req request.SslConfigDetailReq
err := c.ShouldBind(&req)
if err == nil {
bean := wafSslConfigService.GetDetailApi(req)
response.OkWithDetailed(bean, "获取成功", c)
} else {
response.FailWithMessage("解析失败", c)
}
}
// GetSslConfigListApi 获取SSL证书列表
func (s *WafSslConfigApi) GetSslConfigListApi(c *gin.Context) {
var req request.SslConfigSearchReq
err := c.ShouldBindJSON(&req)
if err == nil {
sslList, total, _ := wafSslConfigService.GetListApi(req)
response.OkWithDetailed(response.PageResult{
List: sslList,
Total: total,
PageIndex: req.PageIndex,
PageSize: req.PageSize,
}, "获取成功", c)
} else {
response.FailWithMessage("解析失败", c)
}
}
// DelSslConfigApi 删除SSL证书
func (s *WafSslConfigApi) DelSslConfigApi(c *gin.Context) {
var req request.SslConfigDeleteReq
err := c.ShouldBind(&req)
if err == nil {
err = wafSslConfigService.DelApi(req)
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
response.FailWithMessage("请检测参数", c)
} else if err != nil {
response.FailWithMessage("发生错误", c)
} else {
response.OkWithMessage("删除成功", c)
}
} else {
response.FailWithMessage("解析失败", c)
}
}
// ModifySslConfigApi 编辑SSL证书
func (s *WafSslConfigApi) ModifySslConfigApi(c *gin.Context) {
var req request.SslConfigEditReq
err := c.ShouldBindJSON(&req)
if err == nil {
oldSslBean := wafSslConfigService.GetDetailInner(req.Id)
err = wafSslConfigService.ModifyApi(req)
if err != nil {
response.FailWithMessage("编辑发生错误", c)
} else {
newSslBean := wafSslConfigService.GetDetailInner(req.Id)
if oldSslBean.SerialNo != newSslBean.SerialNo {
s.NotifySslUpdate(oldSslBean, newSslBean)
}
response.OkWithMessage("编辑成功", c)
}
} else {
response.FailWithMessage("解析失败", c)
}
}
// NotifySslUpdate 通知到SSL引擎使其配置实时生效
func (s *WafSslConfigApi) NotifySslUpdate(oldConfig model.SslConfig, newConfig model.SslConfig) {
innerLogName := "NotifySslUpdate"
for _, hosts := range wafHostService.GetHostBySSLConfigId(oldConfig.Id) {
//1.更新主机信息 2.发送主机通知
err := wafHostService.UpdateSSLInfo(newConfig.CertContent, newConfig.KeyContent, hosts.Code)
if err != nil {
zlog.Error(innerLogName, "ssl host update:", err.Error())
continue
}
var chanInfo = spec.ChanCommonHost{
HostCode: hosts.Code,
Type: enums.ChanTypeSSL,
Content: hosts,
OldContent: hosts,
}
global.GWAF_CHAN_MSG <- chanInfo
}
}