Skip to content

保护性填充

保护性填充用于批量修改设置的值,targetSettings 为目标设置,newSettings 为新设置,均为结构体指针。

该函数通常用于将用户从前端传入的设置应用到程序中,为了确保安全性,如果目标设置结构体中字段的 Tag 中有 protected:"true",则不会被修改。

go
func ProtectedFill(targetSettings interface{}, newSettings interface{})

警告

ProtectedFill 并不会对设置的值进行转义,因此您需要确保传入的字符串是安全的,可以使用 safety_text 等验证规则来避免设置文件被注入。

示例

go
package settings

import (
    "github.com/uozi-tech/cosy"
    "github.com/uozi-tech/cosy/logger"
    "github.com/uozi-tech/cosy/settings"
    "github.com/gin-gonic/gin"
    "net/http"
)

func UpdateSettings(c *gin.Context) {
    var json struct {
        Server struct {
            Host       string `json:"host" binding:"ip"`
            Port       int    `json:"port"`
            CustomText string `json:"custom_text" binding:"safety_text"`
        } `json:"server"`
    }
    if !cosy.BindAndValid(c, &json) {
        return
    }
    settings.ProtectedFill(&settings.ServerSettings, &json.Server)

    c.JSON(http.StatusOK, settings.ServerSettings)
}