sensitive/run_test.go

92 lines
2.2 KiB
Go

package sensitive
import (
"encoding/json"
"log"
"net/http"
"strings"
"testing"
"unicode/utf8"
)
// Response 返回值
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data any `json:"data"`
}
// PageData 分页数据通用结构体
type PageData struct {
Current int `json:"current"` // 当前页码
Size int `json:"size"` // 每页数量
Total int64 `json:"total"` // 总数
TotalPage int `json:"total_page"` // 总页数
Records any `json:"records"` // 返回数据
}
// Data 模拟返回数据结构体
type Data struct {
Id string `json:"id"`
Name string `json:"name"`
Phone string `json:"phone" sen:"phone,*"` // 使用脱敏标签,规则为手机号,替换占位字符为*
IdNumber string `json:"idNumber" sen:"idNumber,#"` // 使用脱敏标签,规则为身份证号码,替换占位字符为*
Email string `json:"email" sen:"email,*"` // 使用脱敏标签,规则为邮箱,替换占位字符为*
}
// 模拟测试一下
func TestDeal(t *testing.T) {
data := []Data{{
Id: "123",
Name: "张三",
Phone: "13800138000",
IdNumber: "420102199010101010",
Email: "zhangsan@gmail.com",
}, {
Id: "234",
Name: "李四",
Phone: "13800138001",
IdNumber: "420102199010101011",
Email: "lisi@gmail.com",
}}
pageData := PageData{
Current: 1,
Size: 10,
Total: 2,
TotalPage: 1,
Records: &data,
}
response := Response{
Code: http.StatusOK,
Msg: "success",
Data: pageData,
}
bs, _ := json.Marshal(response)
log.Printf("脱敏前的数据: %v", string(bs))
//if err := response.Desensitization(true); err != nil {
// log.Println(err)
//}
//bs, _ = json.Marshal(response)
//log.Printf("假设是管理员,需要跳过处理,脱敏后的数据: %v", string(bs))
AddHandler("email", func(src, p string) string {
// 将@符号后面的替换为*
idx := strings.Index(src, "@")
dst := src[:idx+1] + strings.Repeat(p, utf8.RuneCountInString(src)-idx-1)
return dst
})
if err := Desensitization(response, false); err != nil {
log.Println(err)
}
bs, _ = json.Marshal(response)
log.Printf("脱敏后的数据: %v", string(bs))
}