• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mindersec / minder / 14831306943

05 May 2025 07:29AM UTC coverage: 56.912% (+0.006%) from 56.906%
14831306943

Pull #5621

github

web-flow
Merge 9a09bd468 into 416b6047a
Pull Request #5621: build(deps): bump github.com/open-policy-agent/opa from 1.2.0 to 1.4.2

18369 of 32276 relevant lines covered (56.91%)

36.98 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/internal/controlplane/handlers_entity_instances.go
1
// SPDX-FileCopyrightText: Copyright 2024 The Minder Authors
2
// SPDX-License-Identifier: Apache-2.0
3

4
package controlplane
5

6
import (
7
        "context"
8
        "database/sql"
9
        "errors"
10
        "fmt"
11

12
        "github.com/google/uuid"
13
        "google.golang.org/grpc/codes"
14

15
        "github.com/mindersec/minder/internal/engine/engcontext"
16
        "github.com/mindersec/minder/internal/logger"
17
        "github.com/mindersec/minder/internal/util"
18
        pb "github.com/mindersec/minder/pkg/api/protobuf/go/minder/v1"
19
)
20

21
// ListEntities returns a list of entity instances for a given project and provider
22
func (s *Server) ListEntities(
23
        ctx context.Context,
24
        in *pb.ListEntitiesRequest,
25
) (*pb.ListEntitiesResponse, error) {
×
26
        entityCtx := engcontext.EntityFromContext(ctx)
×
27
        projectID := entityCtx.Project.ID
×
28
        providerName := entityCtx.Provider.Name
×
29

×
30
        logger.BusinessRecord(ctx).Provider = providerName
×
31
        logger.BusinessRecord(ctx).Project = projectID
×
32

×
33
        // Get provider ID from name
×
34
        provider, err := s.providerStore.GetByName(ctx, projectID, providerName)
×
35
        if err != nil {
×
36
                if errors.Is(err, sql.ErrNoRows) {
×
37
                        return nil, util.UserVisibleError(codes.NotFound, "provider not found")
×
38
                }
×
39
                return nil, fmt.Errorf("error getting provider: %w", err)
×
40
        }
41

42
        // Get entity type from request
43
        entityType := in.GetEntityType()
×
44
        if entityType == pb.Entity_ENTITY_UNSPECIFIED {
×
45
                return nil, util.UserVisibleError(codes.InvalidArgument, "entity type must be specified")
×
46
        }
×
47

48
        // Get limit from request
49
        limit := in.GetCursor().GetSize()
×
50
        if limit == 0 {
×
51
                limit = 20 // Default limit
×
52
        }
×
53

54
        // Get cursor from request
55
        cursor := in.GetCursor().GetCursor()
×
56

×
57
        // Call service to get entities
×
58
        outentities, nextCursor, err := s.entityService.ListEntities(
×
59
                ctx,
×
60
                projectID,
×
61
                provider.ID,
×
62
                entityType,
×
63
                cursor,
×
64
                int64(limit),
×
65
        )
×
66
        if err != nil {
×
67
                return nil, err
×
68
        }
×
69

70
        // Create response
71
        resp := &pb.ListEntitiesResponse{
×
72
                Results: outentities,
×
73
                Page: &pb.CursorPage{
×
74
                        Next: &pb.Cursor{
×
75
                                Cursor: nextCursor,
×
76
                                Size:   limit,
×
77
                        },
×
78
                },
×
79
        }
×
80

×
81
        return resp, nil
×
82
}
83

84
// GetEntityById returns an entity instance for a given entity ID
85
func (s *Server) GetEntityById(
86
        ctx context.Context,
87
        in *pb.GetEntityByIdRequest,
88
) (*pb.GetEntityByIdResponse, error) {
×
89
        // Parse entity ID
×
90
        entityID, err := uuid.Parse(in.GetId())
×
91
        if err != nil {
×
92
                return nil, util.UserVisibleError(codes.InvalidArgument, "invalid entity ID")
×
93
        }
×
94

95
        projectID := GetProjectID(ctx)
×
96

×
97
        // Call service to get entity
×
98
        entity, err := s.entityService.GetEntityByID(ctx, entityID, projectID)
×
99
        if err != nil {
×
100
                return nil, err
×
101
        }
×
102

103
        // Telemetry logging
104
        logger.BusinessRecord(ctx).Project = projectID
×
105
        logger.BusinessRecord(ctx).Entity = entityID
×
106

×
107
        return &pb.GetEntityByIdResponse{
×
108
                Entity: entity,
×
109
        }, nil
×
110
}
111

112
// GetEntityByName returns an entity instance for a given entity name
113
func (s *Server) GetEntityByName(
114
        ctx context.Context,
115
        in *pb.GetEntityByNameRequest,
116
) (*pb.GetEntityByNameResponse, error) {
×
117
        entityCtx := engcontext.EntityFromContext(ctx)
×
118
        projectID := entityCtx.Project.ID
×
119
        providerName := entityCtx.Provider.Name
×
120

×
121
        // Get provider ID from name
×
122
        provider, err := s.providerStore.GetByName(ctx, projectID, providerName)
×
123
        if err != nil {
×
124
                if errors.Is(err, sql.ErrNoRows) {
×
125
                        return nil, util.UserVisibleError(codes.NotFound, "provider not found")
×
126
                }
×
127
                return nil, fmt.Errorf("error getting provider: %w", err)
×
128
        }
129

130
        // Get entity type from request
131
        entityType := in.GetEntityType()
×
132
        if entityType == pb.Entity_ENTITY_UNSPECIFIED {
×
133
                return nil, util.UserVisibleError(codes.InvalidArgument, "entity type must be specified")
×
134
        }
×
135

136
        // Call service to get entity
137
        entity, err := s.entityService.GetEntityByName(
×
138
                ctx,
×
139
                in.GetName(),
×
140
                projectID,
×
141
                provider.ID,
×
142
                entityType,
×
143
        )
×
144
        if err != nil {
×
145
                return nil, err
×
146
        }
×
147

148
        // Telemetry logging
149
        logger.BusinessRecord(ctx).Provider = providerName
×
150
        logger.BusinessRecord(ctx).Project = projectID
×
151

×
152
        return &pb.GetEntityByNameResponse{
×
153
                Entity: entity,
×
154
        }, nil
×
155
}
156

157
// DeleteEntityById deletes an entity instance for a given entity ID
158
func (s *Server) DeleteEntityById(
159
        ctx context.Context,
160
        in *pb.DeleteEntityByIdRequest,
161
) (*pb.DeleteEntityByIdResponse, error) {
×
162
        // Parse entity ID
×
163
        entityID, err := uuid.Parse(in.GetId())
×
164
        if err != nil {
×
165
                return nil, util.UserVisibleError(codes.InvalidArgument, "invalid entity ID")
×
166
        }
×
167

168
        projectID := GetProjectID(ctx)
×
169

×
170
        // Call service to delete entity
×
171
        err = s.entityService.DeleteEntityByID(ctx, entityID, projectID)
×
172
        if err != nil {
×
173
                return nil, err
×
174
        }
×
175

176
        // Telemetry logging
177
        logger.BusinessRecord(ctx).Project = projectID
×
178
        logger.BusinessRecord(ctx).Entity = entityID
×
179

×
180
        return &pb.DeleteEntityByIdResponse{
×
181
                Id: in.GetId(),
×
182
        }, nil
×
183
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc