Skip to content

Commit 500d7a4

Browse files
fix(sync): prevent crash on 403 permission errors (#59)
* fix(sync): prevent crash on 403 permission errors * extend permission error handling to projects * remove handling error from projects
1 parent 776cf8f commit 500d7a4

File tree

3 files changed

+38
-10
lines changed

3 files changed

+38
-10
lines changed

pkg/connector/groups.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ import (
1818
resourceSdk "github.com/conductorone/baton-sdk/pkg/types/resource"
1919
"github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap"
2020
"go.uber.org/zap"
21-
"google.golang.org/grpc/codes"
22-
"google.golang.org/grpc/status"
2321
"google.golang.org/protobuf/proto"
2422
)
2523

@@ -131,14 +129,13 @@ func (o *groupBuilder) Grants(ctx context.Context, resource *v2.Resource, pToken
131129
}
132130

133131
if err != nil {
134-
l := ctxzap.Extract(ctx)
135-
l.Warn("Permission denied while listing members for group. Skipping.",
136-
zap.String("group_id", resource.Id.Resource),
137-
)
138-
if status.Code(err) == codes.PermissionDenied || errors.Is(err, client.ErrForbidden) {
139-
return nil, "", nil, nil
132+
isPermissionError, unhandledErr := handlePermissionError(ctx, err, "group", groupId)
133+
if unhandledErr != nil {
134+
return nil, "", outputAnnotations, unhandledErr
135+
}
136+
if isPermissionError {
137+
return nil, "", outputAnnotations, nil
140138
}
141-
return nil, "", outputAnnotations, err
142139
}
143140

144141
for _, user := range users {

pkg/connector/helpers.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package connector
22

33
import (
4+
"context"
5+
"errors"
46
"fmt"
57
"strings"
68

79
"github.com/conductorone/baton-gitlab/pkg/connector/client"
10+
"github.com/grpc-ecosystem/go-grpc-middleware/logging/zap/ctxzap"
11+
"go.uber.org/zap"
12+
"google.golang.org/grpc/codes"
13+
"google.golang.org/grpc/status"
814
)
915

1016
func toGroupResourceId(groupId string) string {
@@ -32,3 +38,20 @@ func parseAccessLevelFromEntitlementID(entitlementID string) (int, error) {
3238
}
3339
return int(levelValue), nil
3440
}
41+
42+
func handlePermissionError(ctx context.Context, err error, resourceType, resourceId string) (bool, error) {
43+
if err == nil {
44+
return false, nil
45+
}
46+
47+
if status.Code(err) == codes.PermissionDenied || errors.Is(err, client.ErrForbidden) {
48+
l := ctxzap.Extract(ctx)
49+
l.Warn(
50+
fmt.Sprintf("Permission denied while listing members for %s. Skipping.", resourceType),
51+
zap.String(fmt.Sprintf("%s_id", resourceType), resourceId),
52+
)
53+
return true, nil
54+
}
55+
56+
return false, err
57+
}

pkg/connector/users.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,15 @@ func (u *userBuilder) listCloudVersion(ctx context.Context, parentResourceID *v2
105105
outputAnnotations.WithRateLimiting(rateLimitDescGroupMembers)
106106
}
107107
if err != nil {
108-
return nil, "", outputAnnotations, err
108+
isPermissionError, unhandledErr := handlePermissionError(ctx, err, "group", groupId)
109+
if unhandledErr != nil {
110+
return nil, "", outputAnnotations, unhandledErr
111+
}
112+
if isPermissionError {
113+
return nil, "", outputAnnotations, nil
114+
}
109115
}
116+
110117
for _, member := range groupMembers {
111118
users = append(users, member)
112119
}
@@ -120,6 +127,7 @@ func (u *userBuilder) listCloudVersion(ctx context.Context, parentResourceID *v2
120127
if err != nil {
121128
return nil, "", outputAnnotations, err
122129
}
130+
123131
for _, member := range projectMembers {
124132
users = append(users, member)
125133
}

0 commit comments

Comments
 (0)