From 346185e4bf2108a36852dbc1eef1c0fc7d352559 Mon Sep 17 00:00:00 2001 From: Chris Gavin Date: Tue, 2 Mar 2021 09:51:06 +0000 Subject: [PATCH 1/2] Use a better API to check organization membership. --- internal/push/push.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/push/push.go b/internal/push/push.go index a0bf272..37989d4 100644 --- a/internal/push/push.go +++ b/internal/push/push.go @@ -99,11 +99,11 @@ func (pushService *pushService) createRepository() (*github.Repository, error) { } } - _, response, err = pushService.githubEnterpriseClient.Organizations.GetOrgMembership(pushService.ctx, user.GetLogin(), pushService.destinationRepositoryOwner) - if err != nil && (response == nil || response.StatusCode != http.StatusNotFound) { + _, response, err = pushService.githubEnterpriseClient.Organizations.IsMember(pushService.ctx, user.GetLogin(), pushService.destinationRepositoryOwner) + if err != nil { return nil, errors.Wrap(err, "Failed to check membership of destination organization.") } - if err != nil && githubapiutil.HasAnyScope(response, "site_admin") { + if (response.StatusCode == http.StatusFound || response.StatusCode == http.StatusNotFound) && githubapiutil.HasAnyScope(response, "site_admin") { log.Debugf("No access to destination organization. Switching to impersonation token for %s...", pushService.actionsAdminUser) impersonationToken, _, err := pushService.githubEnterpriseClient.Admin.CreateUserImpersonation(pushService.ctx, pushService.actionsAdminUser, &github.ImpersonateUserOptions{Scopes: []string{minimumRepositoryScope, "workflow"}}) if err != nil { From 37eee5fad4a9b6223fd93d627f9efb1a6cd210c2 Mon Sep 17 00:00:00 2001 From: Chris Gavin Date: Thu, 4 Mar 2021 09:54:57 +0000 Subject: [PATCH 2/2] Fix argument order. --- internal/push/push.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/push/push.go b/internal/push/push.go index 37989d4..f1413f2 100644 --- a/internal/push/push.go +++ b/internal/push/push.go @@ -99,12 +99,12 @@ func (pushService *pushService) createRepository() (*github.Repository, error) { } } - _, response, err = pushService.githubEnterpriseClient.Organizations.IsMember(pushService.ctx, user.GetLogin(), pushService.destinationRepositoryOwner) + _, response, err = pushService.githubEnterpriseClient.Organizations.IsMember(pushService.ctx, pushService.destinationRepositoryOwner, user.GetLogin()) if err != nil { return nil, errors.Wrap(err, "Failed to check membership of destination organization.") } if (response.StatusCode == http.StatusFound || response.StatusCode == http.StatusNotFound) && githubapiutil.HasAnyScope(response, "site_admin") { - log.Debugf("No access to destination organization. Switching to impersonation token for %s...", pushService.actionsAdminUser) + log.Debugf("No access to destination organization (status code %d). Switching to impersonation token for %s...", response.StatusCode, pushService.actionsAdminUser) impersonationToken, _, err := pushService.githubEnterpriseClient.Admin.CreateUserImpersonation(pushService.ctx, pushService.actionsAdminUser, &github.ImpersonateUserOptions{Scopes: []string{minimumRepositoryScope, "workflow"}}) if err != nil { return nil, errors.Wrap(err, "Failed to impersonate Actions admin user.")