Alerting: Remove method ReceiverService.ListReceivers (#109828)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user