Skip to content

Commit

Permalink
fix(kv): use urm filter to search endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
kelwang committed Oct 24, 2019
1 parent 81283b1 commit 4615a01
Show file tree
Hide file tree
Showing 5 changed files with 203 additions and 6 deletions.
11 changes: 10 additions & 1 deletion http/notification_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,16 @@ func (h *NotificationEndpointHandler) handleGetNotificationEndpoint(w http.Respo
}

func decodeNotificationEndpointFilter(ctx context.Context, r *http.Request) (*influxdb.NotificationEndpointFilter, *influxdb.FindOptions, error) {
f := &influxdb.NotificationEndpointFilter{}
auth, err := pctx.GetAuthorizer(ctx)
if err != nil {
return nil, nil, err
}
f := &influxdb.NotificationEndpointFilter{
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: auth.GetUserID(),
ResourceType: influxdb.NotificationEndpointResourceType,
},
}

opts, err := decodeFindOptions(ctx, r)
if err != nil {
Expand Down
1 change: 1 addition & 0 deletions http/notification_endpoint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ func TestService_handleGetNotificationEndpoints(t *testing.T) {
}
}
r.URL.RawQuery = qp.Encode()
r = r.WithContext(pcontext.SetAuthorizer(r.Context(), &influxdb.Session{UserID: user1ID}))

w := httptest.NewRecorder()

Expand Down
24 changes: 20 additions & 4 deletions kv/notification_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,19 @@ func (s *Service) FindNotificationEndpoints(ctx context.Context, filter influxdb

func (s *Service) findNotificationEndpoints(ctx context.Context, tx Tx, filter influxdb.NotificationEndpointFilter, opt ...influxdb.FindOptions) ([]influxdb.NotificationEndpoint, int, error) {
edps := make([]influxdb.NotificationEndpoint, 0)
m, err := s.findUserResourceMappings(ctx, tx, filter.UserResourceMappingFilter)
if err != nil {
return nil, 0, err
}

if len(m) == 0 {
return edps, 0, nil
}

idMap := make(map[influxdb.ID]bool)
for _, item := range m {
idMap[item.ResourceID] = true
}

if filter.Org != nil {
o, err := s.findOrganizationByName(ctx, tx, *filter.Org)
Expand All @@ -410,8 +423,8 @@ func (s *Service) findNotificationEndpoints(ctx context.Context, tx Tx, filter i
limit = opt[0].Limit
descending = opt[0].Descending
}
filterFn := filterNotificationEndpointsFn(filter)
err := s.forEachNotificationEndpoint(ctx, tx, descending, func(edp influxdb.NotificationEndpoint) bool {
filterFn := filterNotificationEndpointsFn(idMap, filter)
err = s.forEachNotificationEndpoint(ctx, tx, descending, func(edp influxdb.NotificationEndpoint) bool {
if filterFn(edp) {
if count >= offset {
edps = append(edps, edp)
Expand Down Expand Up @@ -468,7 +481,7 @@ func (s *Service) forEachNotificationEndpoint(ctx context.Context, tx Tx, descen
return nil
}

func filterNotificationEndpointsFn(filter influxdb.NotificationEndpointFilter) func(edp influxdb.NotificationEndpoint) bool {
func filterNotificationEndpointsFn(idMap map[influxdb.ID]bool, filter influxdb.NotificationEndpointFilter) func(edp influxdb.NotificationEndpoint) bool {
return func(edp influxdb.NotificationEndpoint) bool {
if filter.ID != nil {
if edp.GetID() != *filter.ID {
Expand All @@ -481,7 +494,10 @@ func filterNotificationEndpointsFn(filter influxdb.NotificationEndpointFilter) f
return false
}
}
return true
if idMap == nil {
return true
}
return idMap[edp.GetID()]
}
}

Expand Down
1 change: 1 addition & 0 deletions notification_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ type NotificationEndpointFilter struct {
ID *ID
OrgID *ID
Org *string
UserResourceMappingFilter
}

// QueryParams Converts NotificationEndpointFilter fields to url query params.
Expand Down
172 changes: 171 additions & 1 deletion testing/notification_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -483,6 +483,20 @@ func FindNotificationEndpoints(
{
name: "find all notification endpoints",
fields: NotificationEndpointFields{
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -515,7 +529,12 @@ func FindNotificationEndpoints(
},
},
args: args{
filter: influxdb.NotificationEndpointFilter{},
filter: influxdb.NotificationEndpointFilter{
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
},
wants: wants{
notificationEndpoints: []influxdb.NotificationEndpoint{
Expand Down Expand Up @@ -563,6 +582,26 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(fourID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -599,6 +638,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
OrgID: idPtr(MustIDBase16(oneID)),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
ResourceType: influxdb.NotificationEndpointResourceType,
UserID: MustIDBase16(sixID),
},
},
},
wants: wants{
Expand Down Expand Up @@ -629,6 +672,20 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -666,6 +723,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
Org: strPtr("org4"),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
},
wants: wants{
Expand Down Expand Up @@ -707,6 +768,20 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -744,6 +819,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
Org: strPtr("org4"),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
opts: influxdb.FindOptions{
Limit: 2,
Expand Down Expand Up @@ -788,6 +867,27 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},

{
ResourceID: MustIDBase16(fourID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -825,6 +925,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
Org: strPtr("org4"),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
opts: influxdb.FindOptions{
Offset: 1,
Expand Down Expand Up @@ -869,6 +973,26 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(fourID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -906,6 +1030,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
ID: idPtr(MustIDBase16(fourID)),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
},
wants: wants{
Expand Down Expand Up @@ -936,6 +1064,26 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(threeID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -972,6 +1120,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
OrgID: idPtr(MustIDBase16(oneID)),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
},
wants: wants{
Expand All @@ -991,6 +1143,20 @@ func FindNotificationEndpoints(
Name: "org4",
},
},
UserResourceMappings: []*influxdb.UserResourceMapping{
{
ResourceID: MustIDBase16(oneID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
{
ResourceID: MustIDBase16(twoID),
UserID: MustIDBase16(sixID),
UserType: influxdb.Member,
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
NotificationEndpoints: []influxdb.NotificationEndpoint{
&endpoint.Slack{
Base: endpoint.Base{
Expand Down Expand Up @@ -1027,6 +1193,10 @@ func FindNotificationEndpoints(
args: args{
filter: influxdb.NotificationEndpointFilter{
ID: idPtr(MustIDBase16(fiveID)),
UserResourceMappingFilter: influxdb.UserResourceMappingFilter{
UserID: MustIDBase16(sixID),
ResourceType: influxdb.NotificationEndpointResourceType,
},
},
},
wants: wants{},
Expand Down

0 comments on commit 4615a01

Please sign in to comment.