mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	[网站服务]可以审核域名、查看审核结果,用户端可以启用、停用域名
This commit is contained in:
		@@ -9,6 +9,7 @@ import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
 | 
			
		||||
	"github.com/iwind/TeaGo/logs"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ServerService struct {
 | 
			
		||||
@@ -41,7 +42,23 @@ func (this *ServerService) CreateServer(ctx context.Context, req *pb.CreateServe
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.Type, req.Name, req.Description, string(req.ServerNamesJON), string(req.HttpJSON), string(req.HttpsJSON), string(req.TcpJSON), string(req.TlsJSON), string(req.UnixJSON), string(req.UdpJSON), req.WebId, req.ReverseProxyJSON, req.NodeClusterId, string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON), req.GroupIds)
 | 
			
		||||
	// 是否需要审核
 | 
			
		||||
	isAuditing := false
 | 
			
		||||
	serverNamesJSON := req.ServerNamesJON
 | 
			
		||||
	auditingServerNamesJSON := []byte("[]")
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		globalConfig, err := models.SharedSysSettingDAO.ReadGlobalConfig()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if globalConfig != nil && globalConfig.HTTPAll.DomainAuditingIsOn {
 | 
			
		||||
			isAuditing = true
 | 
			
		||||
			serverNamesJSON = []byte("[]")
 | 
			
		||||
			auditingServerNamesJSON = req.ServerNamesJON
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.Type, req.Name, req.Description, serverNamesJSON, isAuditing, auditingServerNamesJSON, string(req.HttpJSON), string(req.HttpsJSON), string(req.TcpJSON), string(req.TlsJSON), string(req.UnixJSON), string(req.UdpJSON), req.WebId, req.ReverseProxyJSON, req.NodeClusterId, string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON), req.GroupIds)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -55,7 +72,7 @@ func (this *ServerService) CreateServer(ctx context.Context, req *pb.CreateServe
 | 
			
		||||
	return &pb.CreateServerResponse{ServerId: serverId}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改服务
 | 
			
		||||
// 修改服务基本信息
 | 
			
		||||
func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.UpdateServerBasicRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
	_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
			
		||||
@@ -109,6 +126,25 @@ func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.Update
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改服务是否启用
 | 
			
		||||
func (this *ServerService) UpdateServerIsOn(ctx context.Context, req *pb.UpdateServerIsOnRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	_, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		err = models.SharedServerDAO.CheckUserServer(req.ServerId, userId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	err = models.SharedServerDAO.UpdateServerIsOn(req.ServerId, req.IsOn)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改HTTP服务
 | 
			
		||||
func (this *ServerService) UpdateServerHTTP(ctx context.Context, req *pb.UpdateServerHTTPRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
@@ -355,22 +391,46 @@ func (this *ServerService) UpdateServerReverseProxy(ctx context.Context, req *pb
 | 
			
		||||
 | 
			
		||||
// 查找服务的域名设置
 | 
			
		||||
func (this *ServerService) FindServerNames(ctx context.Context, req *pb.FindServerNamesRequest) (*pb.FindServerNamesResponse, error) {
 | 
			
		||||
	_, err := this.ValidateAdmin(ctx, 0)
 | 
			
		||||
	_, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	serverNamesJSON, err := models.SharedServerDAO.FindServerNames(req.ServerId)
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		err = models.SharedServerDAO.CheckUserServer(req.ServerId, userId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	serverNamesJSON, isAuditing, auditingServerNamesJSON, auditingResultJSON, err := models.SharedServerDAO.FindServerNames(req.ServerId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &pb.FindServerNamesResponse{ServerNamesJSON: serverNamesJSON}, nil
 | 
			
		||||
 | 
			
		||||
	// 审核结果
 | 
			
		||||
	auditingResult := &pb.ServerNameAuditingResult{}
 | 
			
		||||
	if len(auditingResultJSON) > 0 {
 | 
			
		||||
		err = json.Unmarshal(auditingResultJSON, auditingResult)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		auditingResult.IsOk = true
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &pb.FindServerNamesResponse{
 | 
			
		||||
		ServerNamesJSON:         serverNamesJSON,
 | 
			
		||||
		IsAuditing:              isAuditing,
 | 
			
		||||
		AuditingServerNamesJSON: auditingServerNamesJSON,
 | 
			
		||||
		AuditingResult:          auditingResult,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 修改域名服务
 | 
			
		||||
func (this *ServerService) UpdateServerNames(ctx context.Context, req *pb.UpdateServerNamesRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
	_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
			
		||||
	_, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -379,17 +439,23 @@ func (this *ServerService) UpdateServerNames(ctx context.Context, req *pb.Update
 | 
			
		||||
		return nil, errors.New("invalid serverId")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 查询老的节点信息
 | 
			
		||||
	server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if server == nil {
 | 
			
		||||
		return nil, errors.New("can not find server")
 | 
			
		||||
	// 是否需要审核
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		globalConfig, err := models.SharedSysSettingDAO.ReadGlobalConfig()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if globalConfig != nil && globalConfig.HTTPAll.DomainAuditingIsOn {
 | 
			
		||||
			err = models.SharedServerDAO.UpdateAuditingServerNames(req.ServerId, true, req.ServerNamesJSON)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
			return this.Success()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 修改配置
 | 
			
		||||
	err = models.SharedServerDAO.UpdateServerNames(req.ServerId, req.Config)
 | 
			
		||||
	err = models.SharedServerDAO.UpdateServerNames(req.ServerId, req.ServerNamesJSON)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -397,6 +463,46 @@ func (this *ServerService) UpdateServerNames(ctx context.Context, req *pb.Update
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 审核服务的域名设置
 | 
			
		||||
func (this *ServerService) UpdateServerNamesAuditing(ctx context.Context, req *pb.UpdateServerNamesAuditingRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
	_, err := this.ValidateAdmin(ctx, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if req.AuditingResult == nil {
 | 
			
		||||
		return nil, errors.New("'result' should not be nil")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = models.SharedServerDAO.UpdateServerAuditing(req.ServerId, req.AuditingResult)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 发送消息提醒
 | 
			
		||||
	_, userId, err := models.SharedServerDAO.FindServerAdminIdAndUserId(req.ServerId)
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		if req.AuditingResult.IsOk {
 | 
			
		||||
			err = models.SharedMessageDAO.CreateMessage(0, userId, models.MessageTypeServerNamesAuditingSuccess, models.LevelInfo, "服务域名审核通过", maps.Map{
 | 
			
		||||
				"serverId": req.ServerId,
 | 
			
		||||
			}.AsJSON())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			err = models.SharedMessageDAO.CreateMessage(0, userId, models.MessageTypeServerNamesAuditingFailed, models.LevelError, "服务域名审核失败,原因:"+req.AuditingResult.Reason, maps.Map{
 | 
			
		||||
				"serverId": req.ServerId,
 | 
			
		||||
			}.AsJSON())
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 计算服务数量
 | 
			
		||||
func (this *ServerService) CountAllEnabledServersMatch(ctx context.Context, req *pb.CountAllEnabledServersMatchRequest) (*pb.RPCCountResponse, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
@@ -404,7 +510,7 @@ func (this *ServerService) CountAllEnabledServersMatch(ctx context.Context, req
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	count, err := models.SharedServerDAO.CountAllEnabledServersMatch(req.GroupId, req.Keyword, req.UserId)
 | 
			
		||||
	count, err := models.SharedServerDAO.CountAllEnabledServersMatch(req.GroupId, req.Keyword, req.UserId, req.ClusterId, req.AuditingFlag)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -419,7 +525,7 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	servers, err := models.SharedServerDAO.ListEnabledServersMatch(req.Offset, req.Size, req.GroupId, req.Keyword, req.UserId)
 | 
			
		||||
	servers, err := models.SharedServerDAO.ListEnabledServersMatch(req.Offset, req.Size, req.GroupId, req.Keyword, req.UserId, req.ClusterId, req.AuditingFlag)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -466,24 +572,38 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 审核结果
 | 
			
		||||
		auditingResult := &pb.ServerNameAuditingResult{}
 | 
			
		||||
		if len(server.AuditingResult) > 0 {
 | 
			
		||||
			err = json.Unmarshal([]byte(server.AuditingResult), auditingResult)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			auditingResult.IsOk = true
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		result = append(result, &pb.Server{
 | 
			
		||||
			Id:              int64(server.Id),
 | 
			
		||||
			IsOn:            server.IsOn == 1,
 | 
			
		||||
			Type:            server.Type,
 | 
			
		||||
			Config:          []byte(server.Config),
 | 
			
		||||
			Name:            server.Name,
 | 
			
		||||
			Description:     server.Description,
 | 
			
		||||
			HttpJSON:        []byte(server.Http),
 | 
			
		||||
			HttpsJSON:       []byte(server.Https),
 | 
			
		||||
			TcpJSON:         []byte(server.Tcp),
 | 
			
		||||
			TlsJSON:         []byte(server.Tls),
 | 
			
		||||
			UnixJSON:        []byte(server.Unix),
 | 
			
		||||
			UdpJSON:         []byte(server.Udp),
 | 
			
		||||
			IncludeNodes:    []byte(server.IncludeNodes),
 | 
			
		||||
			ExcludeNodes:    []byte(server.ExcludeNodes),
 | 
			
		||||
			ServerNamesJSON: []byte(server.ServerNames),
 | 
			
		||||
			CreatedAt:       int64(server.CreatedAt),
 | 
			
		||||
			DnsName:         server.DnsName,
 | 
			
		||||
			Id:                      int64(server.Id),
 | 
			
		||||
			IsOn:                    server.IsOn == 1,
 | 
			
		||||
			Type:                    server.Type,
 | 
			
		||||
			Config:                  []byte(server.Config),
 | 
			
		||||
			Name:                    server.Name,
 | 
			
		||||
			Description:             server.Description,
 | 
			
		||||
			HttpJSON:                []byte(server.Http),
 | 
			
		||||
			HttpsJSON:               []byte(server.Https),
 | 
			
		||||
			TcpJSON:                 []byte(server.Tcp),
 | 
			
		||||
			TlsJSON:                 []byte(server.Tls),
 | 
			
		||||
			UnixJSON:                []byte(server.Unix),
 | 
			
		||||
			UdpJSON:                 []byte(server.Udp),
 | 
			
		||||
			IncludeNodes:            []byte(server.IncludeNodes),
 | 
			
		||||
			ExcludeNodes:            []byte(server.ExcludeNodes),
 | 
			
		||||
			ServerNamesJSON:         []byte(server.ServerNames),
 | 
			
		||||
			IsAuditing:              server.IsAuditing == 1,
 | 
			
		||||
			AuditingServerNamesJSON: []byte(server.AuditingServerNames),
 | 
			
		||||
			AuditingResult:          auditingResult,
 | 
			
		||||
			CreatedAt:               int64(server.CreatedAt),
 | 
			
		||||
			DnsName:                 server.DnsName,
 | 
			
		||||
			NodeCluster: &pb.NodeCluster{
 | 
			
		||||
				Id:   int64(server.ClusterId),
 | 
			
		||||
				Name: clusterName,
 | 
			
		||||
@@ -497,13 +617,20 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 禁用某服务
 | 
			
		||||
func (this *ServerService) DisableServer(ctx context.Context, req *pb.DisableServerRequest) (*pb.DisableServerResponse, error) {
 | 
			
		||||
func (this *ServerService) DeleteServer(ctx context.Context, req *pb.DeleteServerRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
	_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
			
		||||
	_, userId, err := this.ValidateAdminAndUser(ctx, 0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if userId > 0 {
 | 
			
		||||
		err = models.SharedServerDAO.CheckUserServer(req.ServerId, userId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 查找服务
 | 
			
		||||
	server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -525,7 +652,7 @@ func (this *ServerService) DisableServer(ctx context.Context, req *pb.DisableSer
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &pb.DisableServerResponse{}, nil
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 查找单个服务
 | 
			
		||||
@@ -848,7 +975,7 @@ func (this *ServerService) FindAllEnabledServersDNSWithClusterId(ctx context.Con
 | 
			
		||||
// 查找单个服务的DNS信息
 | 
			
		||||
func (this *ServerService) FindEnabledServerDNS(ctx context.Context, req *pb.FindEnabledServerDNSRequest) (*pb.FindEnabledServerDNSResponse, error) {
 | 
			
		||||
	// 校验请求
 | 
			
		||||
	_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
 | 
			
		||||
	_, _, err := this.ValidateAdminAndUser(ctx, 0, 0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -932,3 +1059,16 @@ func (this *ServerService) notifyServerDNSChanged(serverId int64) error {
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 检查服务是否属于某个用户
 | 
			
		||||
func (this *ServerService) CheckUserServer(ctx context.Context, req *pb.CheckUserServerRequest) (*pb.RPCSuccess, error) {
 | 
			
		||||
	userId, err := this.ValidateUser(ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	err = models.SharedServerDAO.CheckUserServer(req.ServerId, userId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return this.Success()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user