mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			147 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			147 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package services
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"context"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAPI/internal/db/models"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAPI/internal/dnsproviders"
							 | 
						||
| 
								 | 
							
									rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// DNS服务商相关服务
							 | 
						||
| 
								 | 
							
								type DNSProviderService struct {
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 创建服务商
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) CreateDNSProvider(ctx context.Context, req *pb.CreateDNSProviderRequest) (*pb.CreateDNSProviderResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									providerId, err := models.SharedDNSProviderDAO.CreateDNSProvider(req.Type, req.Name, req.ApiParamsJSON, req.RoutesJSON)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return &pb.CreateDNSProviderResponse{DnsProviderId: providerId}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 修改服务商
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) UpdateDNSProvider(ctx context.Context, req *pb.UpdateDNSProviderRequest) (*pb.RPCUpdateSuccess, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									err = models.SharedDNSProviderDAO.UpdateDNSProvider(req.DnsProviderId, req.Name, req.ApiParamsJSON, req.RoutesJSON)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return rpcutils.RPCUpdateSuccess()
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 计算服务商数量
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) CountAllEnabledDNSProviders(ctx context.Context, req *pb.CountAllEnabledDNSProvidersRequest) (*pb.CountAllEnabledDNSProvidersResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									count, err := models.SharedDNSProviderDAO.CountAllEnabledDNSProviders()
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.CountAllEnabledDNSProvidersResponse{Count: count}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 列出单页服务商信息
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) ListEnabledDNSProviders(ctx context.Context, req *pb.ListEnabledDNSProvidersRequest) (*pb.ListEnabledDNSProvidersResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									providers, err := models.SharedDNSProviderDAO.ListEnabledDNSProviders(req.Offset, req.Size)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									result := []*pb.DNSProvider{}
							 | 
						||
| 
								 | 
							
									for _, provider := range providers {
							 | 
						||
| 
								 | 
							
										result = append(result, &pb.DNSProvider{
							 | 
						||
| 
								 | 
							
											Id:            int64(provider.Id),
							 | 
						||
| 
								 | 
							
											Name:          provider.Name,
							 | 
						||
| 
								 | 
							
											Type:          provider.Type,
							 | 
						||
| 
								 | 
							
											TypeName:      dnsproviders.FindProviderTypeName(provider.Type),
							 | 
						||
| 
								 | 
							
											ApiParamsJSON: []byte(provider.ApiParams),
							 | 
						||
| 
								 | 
							
											RoutesJSON:    []byte(provider.Routes),
							 | 
						||
| 
								 | 
							
											DataUpdatedAt: int64(provider.DataUpdatedAt),
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.ListEnabledDNSProvidersResponse{DnsProviders: result}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 删除服务商
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) DeleteDNSProvider(ctx context.Context, req *pb.DeleteDNSProviderRequest) (*pb.RPCDeleteSuccess, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									err = models.SharedDNSProviderDAO.DisableDNSProvider(req.DnsProviderId)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return rpcutils.RPCDeleteSuccess()
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 查找单个服务商
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) FindEnabledDNSProvider(ctx context.Context, req *pb.FindEnabledDNSProviderRequest) (*pb.FindEnabledDNSProviderResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									provider, err := models.SharedDNSProviderDAO.FindEnabledDNSProvider(req.DnsProviderId)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if provider == nil {
							 | 
						||
| 
								 | 
							
										return &pb.FindEnabledDNSProviderResponse{DnsProvider: nil}, nil
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return &pb.FindEnabledDNSProviderResponse{DnsProvider: &pb.DNSProvider{
							 | 
						||
| 
								 | 
							
										Id:            int64(provider.Id),
							 | 
						||
| 
								 | 
							
										Name:          provider.Name,
							 | 
						||
| 
								 | 
							
										Type:          provider.Type,
							 | 
						||
| 
								 | 
							
										TypeName:      dnsproviders.FindProviderTypeName(provider.Type),
							 | 
						||
| 
								 | 
							
										ApiParamsJSON: []byte(provider.ApiParams),
							 | 
						||
| 
								 | 
							
										RoutesJSON:    []byte(provider.Routes),
							 | 
						||
| 
								 | 
							
										DataUpdatedAt: int64(provider.DataUpdatedAt),
							 | 
						||
| 
								 | 
							
									}}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 取得所有服务商类型
							 | 
						||
| 
								 | 
							
								func (this *DNSProviderService) FindAllDNSProviderTypes(ctx context.Context, req *pb.FindAllDNSProviderTypesRequest) (*pb.FindAllDNSProviderTypesResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									result := []*pb.DNSProviderType{}
							 | 
						||
| 
								 | 
							
									for _, t := range dnsproviders.AllProviderTypes {
							 | 
						||
| 
								 | 
							
										result = append(result, &pb.DNSProviderType{
							 | 
						||
| 
								 | 
							
											Name: t.GetString("name"),
							 | 
						||
| 
								 | 
							
											Code: t.GetString("code"),
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.FindAllDNSProviderTypesResponse{ProviderTypes: result}, nil
							 | 
						||
| 
								 | 
							
								}
							 |