1 Star 0 Fork 0

wx-rdc / secloud-sdk-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
kms.go 7.41 KB
一键复制 编辑 原始数据 按行查看 历史
chenyuteng 提交于 2023-06-14 16:12 . Feature: KMS
package secloud
import (
"context"
"errors"
"github.com/antihax/optional"
)
type KmsService struct {
Base *BaseService
}
func NewKmsService() *KmsService {
return &KmsService{
Base: BaseSvc,
}
}
type GenerateWorkingKeyOpts struct {
GenerateAlgo optional.String `json:"generateAlgo"`
GenerateType optional.String `json:"generateType"`
KeyType optional.String `json:"keyType"`
EpkName optional.String `json:"epkName"`
Count optional.Int `json:"count"`
}
type DistributeKeysOpts struct {
GenerateType optional.String `json:"generateType"`
InvokeCount optional.Int `json:"invokeCount"`
}
type UpdateSecretOpts struct {
KeyId optional.String `json:"keyId"`
KeyType optional.String `json:"keyType"`
EpkName optional.String `json:"epkName"`
}
type ArchiveKeyOpts struct {
KeyId optional.String `json:"keyId"`
ArchiveReason optional.String `json:"archiveReason"`
}
type DestroyKeyOpts struct {
KeyId optional.String `json:"keyId"`
}
type ImportKeyOpts struct {
Mode optional.String `json:"mode"`
Secret optional.String `json:"secret"`
KeyId optional.String `json:"keyId"`
}
type DestroyHandleOpts struct {
Handle optional.String `json:"handle"`
}
func (ks *KmsService) GenerateWorkingKey(ctx context.Context, opts *GenerateWorkingKeyOpts) (*GenerateWorkingKeyRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if opts.GenerateType.Value() == "EPK" && !opts.EpkName.IsSet() {
return nil, errors.New("使用epk类型时必须指定epkName!")
}
if opts.GenerateType.Value() == "IPK" && !opts.KeyType.IsSet() {
return nil, errors.New("使用ipk类型时必须指定keyType!")
}
var ret GenerateWorkingKeyResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"generateAlgo": opts.GenerateAlgo.Value(),
"generateType": opts.GenerateType.Value(),
"keyType": opts.KeyType.Value(),
"epkName": opts.EpkName.Value(),
"count": opts.Count.Value(),
}).
SetResult(&ret).
Post("/kms/generate")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) DistributeKeys(ctx context.Context, opts *DistributeKeysOpts) (*DistributeKeysRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.GenerateType.IsSet() {
return nil, errors.New("生成类型不得为空!")
}
if !opts.InvokeCount.IsSet() {
return nil, errors.New("领用数量不得小于1!")
}
var ret DistributeKeysResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"generateType": opts.GenerateType.Value(),
"invokeCount": opts.InvokeCount.Value(),
}).
SetResult(&ret).
Post("/kms/distributeKeys")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) UpdateSecret(ctx context.Context, opts *UpdateSecretOpts) (*UpdateSecretRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.KeyId.IsSet() {
return nil, errors.New("keyId不能为空!")
}
var ret UpdateSecretResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"keyId": opts.KeyId.Value(),
"keyType": opts.KeyType.Value(),
"epkName": opts.EpkName.Value(),
}).
SetResult(&ret).
Post("/kms/updateSecret")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) ArchiveKey(ctx context.Context, opts *ArchiveKeyOpts) (*ArchiveKeyRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.KeyId.IsSet() {
return nil, errors.New("keyId不能为空!")
}
var ret ArchiveKeyResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"keyId": opts.KeyId.Value(),
"archiveReason": opts.ArchiveReason.Value(),
}).
SetResult(&ret).
Post("/kms/archiveKey")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) DestroyKey(ctx context.Context, opts *DestroyKeyOpts) (*DestroyKeyRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.KeyId.IsSet() {
return nil, errors.New("keyId不能为空!")
}
var ret DestroyKeyResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"keyId": opts.KeyId.Value(),
}).
SetResult(&ret).
Post("/kms/destroyKey")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) Backup(ctx context.Context) (*BackupRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
var ret BackupResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetResult(&ret).
Post("/kms/backup")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) Recover(ctx context.Context) (*RecoverRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
var ret RecoverResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetResult(&ret).
Post("/kms/recover")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) ImportKey(ctx context.Context, opts *ImportKeyOpts) (*ImportKeyRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.Mode.IsSet() {
return nil, errors.New("导入模式不能为空!")
}
if !opts.KeyId.IsSet() && !opts.Secret.IsSet() {
return nil, errors.New("keyId和secret不能同时为空!")
}
var ret ImportKeyResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"mode": opts.Mode.Value(),
"keyId": opts.KeyId.Value(),
"secret": opts.Secret.Value(),
}).
SetResult(&ret).
Post("/kms/importKey")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
func (ks *KmsService) DestroyHandle(ctx context.Context, opts *DestroyHandleOpts) (*DestroyHandleRespData, error) {
if ctx.Value(ContextAccessToken) == nil {
return nil, errors.New("token为空!")
}
if !opts.Handle.IsSet() {
return nil, errors.New("句柄不能为空!")
}
var ret DestroyHandleResp
_, err := ks.Base.C.R().
SetHeader("Authorization", "Bearer "+ctx.Value(ContextAccessToken).(string)).
SetBody(map[string]interface{}{
"handle": opts.Handle.Value(),
}).
SetResult(&ret).
Post("/kms/destroyHandle")
if err != nil {
return nil, err
}
if ret.Code != 200 {
return nil, errors.New(ret.Msg)
}
return ret.Data, nil
}
Go
1
https://gitee.com/wx-rdc/secloud-sdk-go.git
git@gitee.com:wx-rdc/secloud-sdk-go.git
wx-rdc
secloud-sdk-go
secloud-sdk-go
v0.4.0

搜索帮助