diff --git a/pkg/services/ngalert/models/receivers.go b/pkg/services/ngalert/models/receivers.go index 5e1a16485ee..044a701c482 100644 --- a/pkg/services/ngalert/models/receivers.go +++ b/pkg/services/ngalert/models/receivers.go @@ -33,14 +33,6 @@ type GetReceiversQuery struct { Decrypt bool } -// ListReceiversQuery represents a query for listing receiver groups. -type ListReceiversQuery struct { - OrgID int64 - Names []string - Limit int - Offset int -} - // ReceiverMetadata contains metadata about a receiver's usage in routes and rules. type ReceiverMetadata struct { InUseByRules []AlertRuleKey diff --git a/pkg/services/ngalert/notifier/receiver_svc.go b/pkg/services/ngalert/notifier/receiver_svc.go index 0638bd617f2..4fb76c6f26d 100644 --- a/pkg/services/ngalert/notifier/receiver_svc.go +++ b/pkg/services/ngalert/notifier/receiver_svc.go @@ -241,74 +241,6 @@ func (rs *ReceiverService) GetReceivers(ctx context.Context, q models.GetReceive return limitOffset(filtered, q.Offset, q.Limit), nil } -// ListReceivers returns a list of receivers a user has access to. -// Receivers can be filtered by name. -// This offers an looser permissions compared to GetReceivers. When a user doesn't have read access it will check for list access instead of returning an empty list. -// If the users has list access, all receiver settings will be removed from the response. This option is for backwards compatibility with the v1/receivers endpoint -// and should be removed when FGAC is fully implemented. -func (rs *ReceiverService) ListReceivers(ctx context.Context, q models.ListReceiversQuery, user identity.Requester) ([]*models.Receiver, error) { // TODO: Remove this method with FGAC. - ctx, span := rs.tracer.Start(ctx, "alerting.receivers.list", trace.WithAttributes( - attribute.Int64("query_org_id", q.OrgID), - attribute.StringSlice("query_names", q.Names), - attribute.Int("query_limit", q.Limit), - attribute.Int("query_offset", q.Offset), - )) - defer span.End() - - listAccess, err := rs.authz.HasList(ctx, user) - if err != nil { - return nil, err - } - - uids := make([]string, 0, len(q.Names)) - for _, name := range q.Names { - uids = append(uids, legacy_storage.NameToUid(name)) - } - - revision, err := rs.cfgStore.Get(ctx, q.OrgID) - if err != nil { - return nil, err - } - postables := revision.GetReceivers(uids) - - span.AddEvent("Loaded receivers", trace.WithAttributes( - attribute.String("concurrency_token", revision.ConcurrencyToken), - attribute.Int("count", len(postables)), - )) - - storedProvenances, err := rs.provisioningStore.GetProvenances(ctx, q.OrgID, (&definitions.EmbeddedContactPoint{}).ResourceType()) - if err != nil { - return nil, err - } - receivers, err := legacy_storage.PostableApiReceiversToReceivers(postables, storedProvenances) - if err != nil { - return nil, err - } - - if !listAccess { - var err error - receivers, err = rs.authz.FilterRead(ctx, user, receivers...) - if err != nil { - return nil, err - } - - span.AddEvent("Applied access control filter", trace.WithAttributes( - attribute.Int("count", len(receivers)), - )) - } - - // Remove settings. - for _, r := range receivers { - for _, integration := range r.Integrations { - integration.Settings = nil - integration.SecureSettings = nil - integration.DisableResolveMessage = false - } - } - - return limitOffset(receivers, q.Offset, q.Limit), nil -} - // DeleteReceiver deletes a receiver by uid. // UID field currently does not exist, we assume the uid is a particular hashed value of the receiver name. func (rs *ReceiverService) DeleteReceiver(ctx context.Context, uid string, callerProvenance definitions.Provenance, version string, orgID int64, user identity.Requester) error { diff --git a/pkg/services/ngalert/tests/fakes/receivers.go b/pkg/services/ngalert/tests/fakes/receivers.go deleted file mode 100644 index 4be1e44c892..00000000000 --- a/pkg/services/ngalert/tests/fakes/receivers.go +++ /dev/null @@ -1,59 +0,0 @@ -package fakes - -import ( - "context" - - "github.com/grafana/grafana/pkg/apimachinery/identity" - "github.com/grafana/grafana/pkg/services/ngalert/models" -) - -type ReceiverServiceMethodCall struct { - Method string - Args []interface{} -} - -type FakeReceiverService struct { - MethodCalls []ReceiverServiceMethodCall - GetReceiverFn func(ctx context.Context, q models.GetReceiverQuery, u identity.Requester) (*models.Receiver, error) - ListReceiversFn func(ctx context.Context, q models.ListReceiversQuery, u identity.Requester) ([]*models.Receiver, error) -} - -func NewFakeReceiverService() *FakeReceiverService { - return &FakeReceiverService{ - GetReceiverFn: defaultReceiverFn, - ListReceiversFn: defaultReceiversFn, - } -} - -func (f *FakeReceiverService) GetReceiver(ctx context.Context, q models.GetReceiverQuery, u identity.Requester) (*models.Receiver, error) { - f.MethodCalls = append(f.MethodCalls, ReceiverServiceMethodCall{Method: "GetReceiver", Args: []interface{}{ctx, q}}) - return f.GetReceiverFn(ctx, q, u) -} - -func (f *FakeReceiverService) ListReceivers(ctx context.Context, q models.ListReceiversQuery, u identity.Requester) ([]*models.Receiver, error) { - f.MethodCalls = append(f.MethodCalls, ReceiverServiceMethodCall{Method: "ListReceivers", Args: []interface{}{ctx, q}}) - return f.ListReceiversFn(ctx, q, u) -} - -func (f *FakeReceiverService) PopMethodCall() ReceiverServiceMethodCall { - if len(f.MethodCalls) == 0 { - return ReceiverServiceMethodCall{} - } - call := f.MethodCalls[len(f.MethodCalls)-1] - f.MethodCalls = f.MethodCalls[:len(f.MethodCalls)-1] - return call -} - -func (f *FakeReceiverService) Reset() { - f.MethodCalls = nil - f.GetReceiverFn = defaultReceiverFn - f.ListReceiversFn = defaultReceiversFn -} - -func defaultReceiverFn(ctx context.Context, q models.GetReceiverQuery, u identity.Requester) (*models.Receiver, error) { - return nil, nil -} - -func defaultReceiversFn(ctx context.Context, q models.ListReceiversQuery, u identity.Requester) ([]*models.Receiver, error) { - return nil, nil -}