Files
EdgeAPI/internal/rpc/services/nameservers/service_ns_key.go

171 lines
4.6 KiB
Go
Raw Normal View History

2021-07-25 09:43:57 +08:00
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package nameservers
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/nameservers"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/services"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
// NSKeyService NS密钥相关服务
type NSKeyService struct {
services.BaseService
}
// CreateNSKey 创建密钥
func (this *NSKeyService) CreateNSKey(ctx context.Context, req *pb.CreateNSKeyRequest) (*pb.CreateNSKeyResponse, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
keyId, err := nameservers.SharedNSKeyDAO.CreateKey(tx, req.NsDomainId, req.NsZoneId, req.Name, req.Algo, req.Secret, req.SecretType)
if err != nil {
return nil, err
}
return &pb.CreateNSKeyResponse{NsKeyId: keyId}, nil
}
// UpdateNSKey 修改密钥
func (this *NSKeyService) UpdateNSKey(ctx context.Context, req *pb.UpdateNSKeyRequest) (*pb.RPCSuccess, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
err = nameservers.SharedNSKeyDAO.UpdateKey(tx, req.NsKeyId, req.Name, req.Algo, req.Secret, req.SecretType, req.IsOn)
if err != nil {
return nil, err
}
return this.Success()
}
// DeleteNSKey 删除密钥
func (this *NSKeyService) DeleteNSKey(ctx context.Context, req *pb.DeleteNSKeyRequest) (*pb.RPCSuccess, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
err = nameservers.SharedNSKeyDAO.DisableNSKey(tx, req.NsKeyId)
if err != nil {
return nil, err
}
return this.Success()
}
// FindEnabledNSKey 查找单个密钥
func (this *NSKeyService) FindEnabledNSKey(ctx context.Context, req *pb.FindEnabledNSKeyRequest) (*pb.FindEnabledNSKeyResponse, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
key, err := nameservers.SharedNSKeyDAO.FindEnabledNSKey(tx, req.NsKeyId)
if err != nil {
return nil, err
}
if key == nil {
return &pb.FindEnabledNSKeyResponse{NsKey: nil}, nil
}
return &pb.FindEnabledNSKeyResponse{
NsKey: &pb.NSKey{
Id: int64(key.Id),
2022-03-22 21:45:07 +08:00
IsOn: key.IsOn,
2021-07-25 09:43:57 +08:00
Name: key.Name,
Algo: key.Algo,
Secret: key.Secret,
SecretType: key.SecretType,
},
}, nil
}
// CountAllEnabledNSKeys 计算密钥数量
func (this *NSKeyService) CountAllEnabledNSKeys(ctx context.Context, req *pb.CountAllEnabledNSKeysRequest) (*pb.RPCCountResponse, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
count, err := nameservers.SharedNSKeyDAO.CountEnabledKeys(tx, req.NsDomainId, req.NsZoneId)
if err != nil {
return nil, err
}
return this.SuccessCount(count)
}
// ListEnabledNSKeys 列出单页密钥
func (this *NSKeyService) ListEnabledNSKeys(ctx context.Context, req *pb.ListEnabledNSKeysRequest) (*pb.ListEnabledNSKeysResponse, error) {
2022-07-22 14:35:17 +08:00
_, err := this.ValidateAdmin(ctx)
2021-07-25 09:43:57 +08:00
if err != nil {
return nil, err
}
var tx = this.NullTx()
keys, err := nameservers.SharedNSKeyDAO.ListEnabledKeys(tx, req.NsDomainId, req.NsZoneId, req.Offset, req.Size)
if err != nil {
return nil, err
}
var pbKeys = []*pb.NSKey{}
for _, key := range keys {
pbKeys = append(pbKeys, &pb.NSKey{
Id: int64(key.Id),
2022-03-22 21:45:07 +08:00
IsOn: key.IsOn,
2021-07-25 09:43:57 +08:00
Name: key.Name,
Algo: key.Algo,
Secret: key.Secret,
SecretType: key.SecretType,
})
}
return &pb.ListEnabledNSKeysResponse{NsKeys: pbKeys}, nil
}
2021-07-25 15:08:17 +08:00
// ListNSKeysAfterVersion 根据版本列出一组密钥
func (this *NSKeyService) ListNSKeysAfterVersion(ctx context.Context, req *pb.ListNSKeysAfterVersionRequest) (*pb.ListNSKeysAfterVersionResponse, error) {
_, err := this.ValidateNSNode(ctx)
if err != nil {
return nil, err
}
var tx = this.NullTx()
if req.Size <= 0 {
req.Size = 2000
}
keys, err := nameservers.SharedNSKeyDAO.ListKeysAfterVersion(tx, req.Version, req.Size)
if err != nil {
return nil, err
}
var pbKeys = []*pb.NSKey{}
for _, key := range keys {
var pbDomain *pb.NSDomain
var pbZone *pb.NSZone
if key.DomainId > 0 {
pbDomain = &pb.NSDomain{Id: int64(key.DomainId)}
}
if key.ZoneId > 0 {
pbZone = &pb.NSZone{Id: int64(key.ZoneId)}
}
pbKeys = append(pbKeys, &pb.NSKey{
Id: int64(key.Id),
2022-03-22 21:45:07 +08:00
IsOn: key.IsOn,
2021-07-25 15:08:17 +08:00
Name: "",
Algo: key.Algo,
Secret: key.Secret,
SecretType: key.SecretType,
IsDeleted: key.State == nameservers.NSKeyStateDisabled,
Version: int64(key.Version),
NsDomain: pbDomain,
NsZone: pbZone,
})
}
return &pb.ListNSKeysAfterVersionResponse{NsKeys: pbKeys}, nil
}