diff --git a/api/waf_onekeymod.go b/api/waf_onekeymod.go index 94baedc..ad8ed58 100644 --- a/api/waf_onekeymod.go +++ b/api/waf_onekeymod.go @@ -70,3 +70,17 @@ func (w *WafOneKeyModApi) DoOneKeyModifyApi(c *gin.Context) { response.FailWithMessage("修改失败", c) } } +func (w *WafOneKeyModApi) RestoreApi(c *gin.Context) { + var req request.WafOneKeyModRestoreReq + err := c.ShouldBind(&req) + if err == nil { + err = wafonekey.RestoreOneKeyMod(req.Id) + if err != nil { + response.FailWithMessage("还原失败 "+err.Error(), c) + } else { + response.OkWithMessage("还原成功 请重启在宝塔面板上进行Nginx重启", c) + } + } else { + response.FailWithMessage("解析失败", c) + } +} diff --git a/model/onekeymod.go b/model/onekeymod.go index fc64a64..d3deade 100644 --- a/model/onekeymod.go +++ b/model/onekeymod.go @@ -12,5 +12,6 @@ type OneKeyMod struct { FilePath string `json:"file_path"` //文件路径 BeforeContent string `json:"before_content"` //修改前内容 AfterContent string `json:"after_content"` //修改后内容 + IsRestore int `json:"is_restore"` //是否还原 Remarks string `json:"remarks"` //备注 } diff --git a/model/request/waf_onekeymod_del_req.go b/model/request/waf_onekeymod_del_req.go deleted file mode 100644 index 9c5718f..0000000 --- a/model/request/waf_onekeymod_del_req.go +++ /dev/null @@ -1,5 +0,0 @@ -package request - -type WafOneKeyModDelReq struct { - Id string `json:"id" form:"id"` -} diff --git a/model/request/waf_onekeymod_detail.go b/model/request/waf_onekeymod_detail.go deleted file mode 100644 index 0d2fafa..0000000 --- a/model/request/waf_onekeymod_detail.go +++ /dev/null @@ -1,5 +0,0 @@ -package request - -type WafOneKeyModDetailReq struct { - Id string `json:"id" form:"id"` -} diff --git a/model/request/waf_onekeymod_do_req.go b/model/request/waf_onekeymod_do_req.go deleted file mode 100644 index 90773f6..0000000 --- a/model/request/waf_onekeymod_do_req.go +++ /dev/null @@ -1,5 +0,0 @@ -package request - -type WafDoOneKeyModReq struct { - FilePath string `json:"file_path"` //文件所在路径 -} diff --git a/model/request/waf_onekeymod_req.go b/model/request/waf_onekeymod_req.go new file mode 100644 index 0000000..436823c --- /dev/null +++ b/model/request/waf_onekeymod_req.go @@ -0,0 +1,20 @@ +package request + +import "SamWaf/model/common/request" + +type WafOneKeyModDelReq struct { + Id string `json:"id" form:"id"` +} + +type WafOneKeyModRestoreReq struct { + Id string `json:"id" form:"id"` +} +type WafOneKeyModDetailReq struct { + Id string `json:"id" form:"id"` +} +type WafOneKeyModSearchReq struct { + request.PageInfo +} +type WafDoOneKeyModReq struct { + FilePath string `json:"file_path"` //文件所在路径 +} diff --git a/model/request/waf_onekeymod_search.go b/model/request/waf_onekeymod_search.go deleted file mode 100644 index b3eab29..0000000 --- a/model/request/waf_onekeymod_search.go +++ /dev/null @@ -1,7 +0,0 @@ -package request - -import "SamWaf/model/common/request" - -type WafOneKeyModSearchReq struct { - request.PageInfo -} diff --git a/router/waf_router.go b/router/waf_router.go index 4ace7ba..3810ae6 100644 --- a/router/waf_router.go +++ b/router/waf_router.go @@ -15,4 +15,5 @@ func (receiver *OneKeyModRouter) InitOneKeyModRouter(group *gin.RouterGroup) { router.GET("/samwaf/wafhost/onekeymod/detail", api.GetDetailApi) router.POST("/samwaf/wafhost/onekeymod/doModify", api.DoOneKeyModifyApi) router.GET("/samwaf/wafhost/onekeymod/del", api.DelApi) + router.GET("/samwaf/wafhost/onekeymod/restore", api.RestoreApi) } diff --git a/wafonekey/wafonekey.go b/wafonekey/wafonekey.go index 4848f14..7db50a4 100644 --- a/wafonekey/wafonekey.go +++ b/wafonekey/wafonekey.go @@ -66,6 +66,7 @@ func OneKeyModifyBt(btSavePath string) (error, string) { FilePath: filePath, BeforeContent: string(beforeContent), AfterContent: string(afterContent), + IsRestore: 0, Remarks: "", }) successCnt++ @@ -112,3 +113,26 @@ func replaceListenPorts(filePath string) error { return nil } + +// 读取 model.OneKeyMod 表中 IsRestore 为 0 的记录,并还原文件 +func RestoreOneKeyMod(id string) error { + var oneKeyMod model.OneKeyMod + err := global.GWAF_LOCAL_LOG_DB.Where("id = ?", id).First(&oneKeyMod).Error + if err != nil { + return err + } + if oneKeyMod.IsRestore == 1 { + return errors.New("该记录已还原") + } + //还原文件 + err = ioutil.WriteFile(oneKeyMod.FilePath, []byte(oneKeyMod.BeforeContent), 0644) + if err != nil { + return err + } + //更新 IsRestore 为 1 + global.GWAF_LOCAL_LOG_DB.Model(&model.OneKeyMod{}).Where("id = ?", id).Update("is_restore", 1) + if err != nil { + return err + } + return nil +}