Skip to content

Commit 3dab183

Browse files
zakiskpipelines-as-code[bot]
authored andcommitted
refact: Refactor IsAllowed func in Bitbucket Data Center
IsAllowed func of Bitbucket Data Center provider now using jenkins-x/go-scm for API calling. Signed-off-by: Zaki Shaikh <[email protected]>
1 parent 26f65c3 commit 3dab183

File tree

4 files changed

+36
-48
lines changed

4 files changed

+36
-48
lines changed

pkg/provider/bitbucketdatacenter/acl.go

Lines changed: 6 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@ import (
44
"context"
55
"encoding/json"
66
"fmt"
7-
"strconv"
87
"strings"
98

109
bbv1 "github.com/gfleury/go-bitbucket-v1"
11-
"github.com/mitchellh/mapstructure"
1210
"github.com/openshift-pipelines/pipelines-as-code/pkg/acl"
1311
"github.com/openshift-pipelines/pipelines-as-code/pkg/params/info"
1412
)
@@ -53,6 +51,8 @@ func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, e
5351
if nextPage > 0 {
5452
localVarOptionals["start"] = int(nextPage)
5553
}
54+
// will replace this API call with jenkins-x/go-scm after my PR on go-scm is merged
55+
// https://github.com/jenkins-x/go-scm/pull/494
5656
return v.Client.DefaultApi.GetActivities(v.projectKey, event.Repository, v.pullRequestNumber, localVarOptionals)
5757
})
5858
if err != nil {
@@ -94,66 +94,27 @@ func (v *Provider) checkOkToTestCommentFromApprovedMember(ctx context.Context, e
9494
return false, nil
9595
}
9696

97-
func (v *Provider) checkMemberShipResults(results []any, event *info.Event) (bool, error) {
98-
accountintid, err := strconv.Atoi(event.AccountID)
99-
if err != nil {
100-
return false, err
101-
}
102-
for _, row := range results {
103-
user := &bbv1.UserPermission{}
104-
err := mapstructure.Decode(row, user)
105-
if err != nil {
106-
return false, err
107-
}
108-
109-
if user.User.ID == accountintid {
110-
return true, nil
111-
}
112-
}
113-
return false, nil
114-
}
115-
11697
func (v *Provider) checkMemberShip(ctx context.Context, event *info.Event) (bool, error) {
11798
// Get permissions from project
118-
allValues, err := paginate(func(nextPage int) (*bbv1.APIResponse, error) {
119-
localVarOptionals := map[string]any{}
120-
if nextPage > 0 {
121-
localVarOptionals["start"] = int(nextPage)
122-
}
123-
return v.Client.DefaultApi.GetUsersWithAnyPermission_23(v.projectKey, localVarOptionals)
124-
})
125-
if err != nil {
126-
return false, err
127-
}
128-
allowed, err := v.checkMemberShipResults(allValues, event)
99+
allowed, _, err := v.ScmClient.Organizations.IsMember(ctx, event.Organization, event.Sender)
129100
if err != nil {
130101
return false, err
131102
}
132103
if allowed {
133104
return true, nil
134105
}
135106

107+
orgAndRepo := fmt.Sprintf("%s/%s", event.Organization, event.Repository)
136108
// Get permissions from repo
137-
allValues, err = paginate(func(nextPage int) (*bbv1.APIResponse, error) {
138-
localVarOptionals := map[string]any{}
139-
if nextPage > 0 {
140-
localVarOptionals["start"] = int(nextPage)
141-
}
142-
return v.Client.DefaultApi.GetUsersWithAnyPermission_24(v.projectKey, event.Repository, localVarOptionals)
143-
})
144-
if err != nil {
145-
return false, err
146-
}
147-
148-
allowed, err = v.checkMemberShipResults(allValues, event)
109+
allowed, _, err = v.ScmClient.Repositories.IsCollaborator(ctx, orgAndRepo, event.Sender)
149110
if err != nil {
150111
return false, err
151112
}
152113
if allowed {
153114
return true, nil
154115
}
155116

156-
// Check if sender (which in bitbucket-datacenter mean the accountID) is inside the Owner file
117+
// Check if sender is inside the Owner file
157118
// in the 'main' branch Silently ignore error, which should be fine it
158119
// probably means the OWNERS file is not created. If we had another error
159120
// (ie: like API) we probably would have hit it already.

pkg/provider/bitbucketdatacenter/acl_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func TestIsAllowed(t *testing.T) {
3333
type fields struct {
3434
projectMembers []*bbv1.UserPermission
3535
repoMembers []*bbv1.UserPermission
36+
projGroups []*bbv1test.ProjGroup
3637
activities []*bbv1.Activity
3738
filescontents map[string]string
3839
defaultBranchLatestCommit string
@@ -52,7 +53,7 @@ func TestIsAllowed(t *testing.T) {
5253
projectMembers: []*bbv1.UserPermission{
5354
{
5455
User: bbv1.User{
55-
ID: ownerAccountID,
56+
Slug: "member",
5657
},
5758
},
5859
},
@@ -70,7 +71,7 @@ func TestIsAllowed(t *testing.T) {
7071
projectMembers: []*bbv1.UserPermission{
7172
{
7273
User: bbv1.User{
73-
ID: ownerAccountID,
74+
Slug: "member",
7475
},
7576
},
7677
},
@@ -79,7 +80,7 @@ func TestIsAllowed(t *testing.T) {
7980
Comment: bbv1.ActivityComment{
8081
Text: "/ok-to-test",
8182
Author: bbv1.User{
82-
ID: ownerAccountID,
83+
Slug: "member",
8384
},
8485
},
8586
},
@@ -207,6 +208,7 @@ func TestIsAllowed(t *testing.T) {
207208
defer tearDown()
208209
bbv1test.MuxProjectMemberShip(t, mux, tt.event, tt.fields.projectMembers)
209210
bbv1test.MuxRepoMemberShip(t, mux, tt.event, tt.fields.repoMembers)
211+
bbv1test.MuxProjectGroupMembership(t, mux, tt.event, tt.fields.projGroups)
210212
bbv1test.MuxPullRequestActivities(t, mux, tt.event, tt.fields.pullRequestNumber, tt.fields.activities)
211213
bbv1test.MuxFiles(t, mux, tt.event, tt.fields.defaultBranchLatestCommit, "", tt.fields.filescontents, false)
212214

pkg/provider/bitbucketdatacenter/test/test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,22 @@ func MuxProjectMemberShip(t *testing.T, mux *http.ServeMux, event *info.Event, u
240240
})
241241
}
242242

243+
func MuxProjectGroupMembership(t *testing.T, mux *http.ServeMux, event *info.Event, groups []*ProjGroup) {
244+
path := fmt.Sprintf("/projects/%s/permissions/groups", event.Organization)
245+
mux.HandleFunc(path, func(rw http.ResponseWriter, _ *http.Request) {
246+
if groups == nil {
247+
fmt.Fprintf(rw, "{\"values\": []}")
248+
}
249+
resp := map[string]any{
250+
"values": groups,
251+
}
252+
b, err := json.Marshal(resp)
253+
assert.NilError(t, err)
254+
255+
fmt.Fprint(rw, string(b))
256+
})
257+
}
258+
243259
func MuxRepoMemberShip(t *testing.T, mux *http.ServeMux, event *info.Event, userperms []*bbv1.UserPermission) {
244260
path := fmt.Sprintf("/projects/%s/repos/%s/permissions/users", event.Organization, event.Repository)
245261
mux.HandleFunc(path, func(rw http.ResponseWriter, _ *http.Request) {

pkg/provider/bitbucketdatacenter/test/test_types.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,12 @@ type DiffStats struct {
2222
Pagination
2323
Values []*DiffStat
2424
}
25+
26+
type ProjGroup struct {
27+
Group Group `json:"group"`
28+
Permission string `json:"permission"`
29+
}
30+
31+
type Group struct {
32+
Name string `json:"name"`
33+
}

0 commit comments

Comments
 (0)