mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 04:04:00 -06:00
32f06c6d9c
* Replace global authz abstraction with one compatible with uid scope * Replace GettableApiReceiver with models.Receiver in receiver_svc * GrafanaIntegrationConfig -> models.Integration * Implement Create/Update methods * Add optimistic concurrency to receiver API * Add scope to ReceiversRead & ReceiversReadSecrets migrates existing permissions to include implicit global scope * Add receiver create, update, delete actions * Check if receiver is used by rules before delete * On receiver name change update in routes and notification settings * Improve errors * Linting * Include read permissions are requirements for create/update/delete * Alias ngalert/models to ngmodels to differentiate from v0alpha1 model * Ensure integration UIDs are valid, unique, and generated if empty * Validate integration settings on create/update * Leverage UidToName to GetReceiver instead of GetReceivers * Remove some unnecessary uses of simplejson * alerting.notifications.receiver -> alerting.notifications.receivers * validator -> provenanceValidator * Only validate the modified receiver stops existing invalid receivers from preventing modification of a valid receiver. * Improve error in Integration.Encrypt * Remove scope from alert.notifications.receivers:create * Add todos for receiver renaming * Use receiverAC precondition checks in k8s api * Linting * Optional optimistic concurrency for delete * make update-workspace * More specific auth checks in k8s authorize.go * Add debug log when delete optimistic concurrency is skipped * Improve error message on authorizer.DecisionDeny * Keep error for non-forbidden errutil errors
60 lines
2.0 KiB
Go
60 lines
2.0 KiB
Go
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
|
|
}
|