1 Star 1 Fork 29

go-course / cmdb-g7

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
app.go 3.01 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Yu 提交于 2022-05-28 15:07 . 补充secret模块
package secret
import (
"encoding/base64"
"fmt"
"net/http"
"strings"
"time"
"gitee.com/go-course/cmdb-g7/conf"
"github.com/go-playground/validator/v10"
"github.com/infraboard/mcube/crypto/cbc"
request "github.com/infraboard/mcube/http/request"
"github.com/rs/xid"
)
const (
AppName = "secret"
)
var (
validate = validator.New()
)
func NewDefaultSecret() *Secret {
return &Secret{
Data: &CreateSecretRequest{
RequestRate: 5,
},
}
}
func NewSecretSet() *SecretSet {
return &SecretSet{
Items: []*Secret{},
}
}
func (s *SecretSet) Add(item *Secret) {
s.Items = append(s.Items, item)
}
func NewSecret(req *CreateSecretRequest) (*Secret, error) {
if err := req.Validate(); err != nil {
return nil, err
}
return &Secret{
Id: xid.New().String(),
CreateAt: time.Now().UnixMilli(),
Data: req,
}, nil
}
func NewCreateSecretRequest() *CreateSecretRequest {
return &CreateSecretRequest{
RequestRate: 5,
}
}
func (req *CreateSecretRequest) Validate() error {
if len(req.AllowRegions) == 0 {
return fmt.Errorf("required less one allow_regions")
}
return validate.Struct(req)
}
func NewQuerySecretRequestFromHTTP(r *http.Request) *QuerySecretRequest {
qs := r.URL.Query()
return &QuerySecretRequest{
Page: request.NewPageRequestFromHTTP(r),
Keywords: qs.Get("keywords"),
}
}
func NewQuerySecretRequest() *QuerySecretRequest {
return &QuerySecretRequest{
Page: request.NewDefaultPageRequest(),
Keywords: "",
}
}
func NewDescribeSecretRequest(id string) *DescribeSecretRequest {
return &DescribeSecretRequest{
Id: id,
}
}
func NewDeleteSecretRequestWithID(id string) *DeleteSecretRequest {
return &DeleteSecretRequest{
Id: id,
}
}
func (s *CreateSecretRequest) AllowRegionString() string {
return strings.Join(s.AllowRegions, ",")
}
func (s *CreateSecretRequest) LoadAllowRegionFromString(regions string) {
if regions != "" {
s.AllowRegions = strings.Split(regions, ",")
}
}
func (s *CreateSecretRequest) EncryptAPISecret(key string) error {
// 判断文本是否已经加密
if strings.HasPrefix(s.ApiSecret, conf.CIPHER_TEXT_PREFIX) {
return fmt.Errorf("text has ciphered")
}
cipherText, err := cbc.Encrypt([]byte(s.ApiSecret), []byte(key))
if err != nil {
return err
}
base64Str := base64.StdEncoding.EncodeToString(cipherText)
s.ApiSecret = fmt.Sprintf("%s%s", conf.CIPHER_TEXT_PREFIX, base64Str)
return nil
}
func (s *CreateSecretRequest) DecryptAPISecret(key string) error {
// 判断文本是否已经是明文
if !strings.HasPrefix(s.ApiSecret, conf.CIPHER_TEXT_PREFIX) {
return fmt.Errorf("text is plan text")
}
base64CipherText := strings.TrimPrefix(s.ApiSecret, conf.CIPHER_TEXT_PREFIX)
cipherText, err := base64.StdEncoding.DecodeString(base64CipherText)
if err != nil {
return err
}
planText, err := cbc.Decrypt([]byte(cipherText), []byte(key))
if err != nil {
return err
}
s.ApiSecret = string(planText)
return nil
}
// 敏感数据脱敏
func (s *CreateSecretRequest) Desense() {
if s.ApiSecret != "" {
s.ApiSecret = "******"
}
}
1
https://gitee.com/go-course/cmdb-g7.git
git@gitee.com:go-course/cmdb-g7.git
go-course
cmdb-g7
cmdb-g7
eccb8114820a

搜索帮助