mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	
		
			
	
	
		
			125 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package services
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"context"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeAPI/internal/db/models"
							 | 
						||
| 
								 | 
							
									rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// IP条目相关服务
							 | 
						||
| 
								 | 
							
								type IPItemService struct {
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 创建IP
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) CreateIPItem(ctx context.Context, req *pb.CreateIPItemRequest) (*pb.CreateIPItemResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									itemId, err := models.SharedIPItemDAO.CreateIPItem(req.IpListId, req.IpFrom, req.IpTo, req.ExpiredAt, req.Reason)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.CreateIPItemResponse{IpItemId: itemId}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 修改IP
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) UpdateIPItem(ctx context.Context, req *pb.UpdateIPItemRequest) (*pb.RPCUpdateSuccess, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									err = models.SharedIPItemDAO.UpdateIPItem(req.IpItemId, req.IpFrom, req.IpTo, req.ExpiredAt, req.Reason)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return rpcutils.RPCUpdateSuccess()
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 删除IP
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) DeleteIPItem(ctx context.Context, req *pb.DeleteIPItemRequest) (*pb.RPCDeleteSuccess, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									err = models.SharedIPItemDAO.DisableIPItem(req.IpItemId)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return rpcutils.RPCDeleteSuccess()
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 计算IP数量
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) CountIPItemsWithListId(ctx context.Context, req *pb.CountIPItemsWithListIdRequest) (*pb.CountIPItemsWithListIdResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									count, err := models.SharedIPItemDAO.CountIPItemsWithListId(req.IpListId)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.CountIPItemsWithListIdResponse{Count: count}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 列出单页的IP
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) ListIPItemsWithListId(ctx context.Context, req *pb.ListIPItemsWithListIdRequest) (*pb.ListIPItemsWithListIdResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									items, err := models.SharedIPItemDAO.ListIPItemsWithListId(req.IpListId, req.Offset, req.Size)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									result := []*pb.IPItem{}
							 | 
						||
| 
								 | 
							
									for _, item := range items {
							 | 
						||
| 
								 | 
							
										result = append(result, &pb.IPItem{
							 | 
						||
| 
								 | 
							
											Id:        int64(item.Id),
							 | 
						||
| 
								 | 
							
											IpFrom:    item.IpFrom,
							 | 
						||
| 
								 | 
							
											IpTo:      item.IpTo,
							 | 
						||
| 
								 | 
							
											Version:   int64(item.Version),
							 | 
						||
| 
								 | 
							
											ExpiredAt: int64(item.ExpiredAt),
							 | 
						||
| 
								 | 
							
											Reason:    item.Reason,
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return &pb.ListIPItemsWithListIdResponse{IpItems: result}, nil
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 查找单个IP
							 | 
						||
| 
								 | 
							
								func (this *IPItemService) FindEnabledIPItem(ctx context.Context, req *pb.FindEnabledIPItemRequest) (*pb.FindEnabledIPItemResponse, error) {
							 | 
						||
| 
								 | 
							
									// 校验请求
							 | 
						||
| 
								 | 
							
									_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									item, err := models.SharedIPItemDAO.FindEnabledIPItem(req.IpItemId)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return nil, err
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if item == nil {
							 | 
						||
| 
								 | 
							
										return &pb.FindEnabledIPItemResponse{IpItem: nil}, nil
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &pb.FindEnabledIPItemResponse{IpItem: &pb.IPItem{
							 | 
						||
| 
								 | 
							
										Id:        int64(item.Id),
							 | 
						||
| 
								 | 
							
										IpFrom:    item.IpFrom,
							 | 
						||
| 
								 | 
							
										IpTo:      item.IpTo,
							 | 
						||
| 
								 | 
							
										Version:   int64(item.Version),
							 | 
						||
| 
								 | 
							
										ExpiredAt: int64(item.ExpiredAt),
							 | 
						||
| 
								 | 
							
										Reason:    item.Reason,
							 | 
						||
| 
								 | 
							
									}}, nil
							 | 
						||
| 
								 | 
							
								}
							 |