代码拉取完成,页面将自动刷新
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 = "******"
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。