From dc125c1502fb746a6c303a07c454a159b27aacb7 Mon Sep 17 00:00:00 2001 From: Mark Tareshawty Date: Fri, 31 May 2019 08:51:24 -0400 Subject: [PATCH 1/3] Add missing permissions to InstallationPermissions This adds the remaining GitHub App installation permissions defined in https://developer.github.com/v3/apps/permissions/#metadata-permissions that are related to GitHub App installations. These do not include permissions such as `emails` or `gpg_keys` as these are user permissions. --- github/apps.go | 29 +++++-- github/apps_test.go | 50 ++++++++++-- github/github-accessors.go | 152 +++++++++++++++++++++++++++++++++++++ 3 files changed, 220 insertions(+), 11 deletions(-) diff --git a/github/apps.go b/github/apps.go index 1ad9a9818fb..4ba4c404b01 100644 --- a/github/apps.go +++ b/github/apps.go @@ -36,12 +36,31 @@ type InstallationToken struct { ExpiresAt *time.Time `json:"expires_at,omitempty"` } -// InstallationPermissions lists the permissions for metadata, contents, issues and single file for an installation. +// InstallationPermissions lists the repository and organization permissions for an installation. type InstallationPermissions struct { - Metadata *string `json:"metadata,omitempty"` - Contents *string `json:"contents,omitempty"` - Issues *string `json:"issues,omitempty"` - SingleFile *string `json:"single_file,omitempty"` + Administration *string `json:"administration,omitempty"` + Checks *string `json:"checks,omitempty"` + Contents *string `json:"contents,omitempty"` + ContentReferences *string `json:"content_references,omitempty"` + Deployments *string `json:"deployments,omitempty"` + Issues *string `json:"issues,omitempty"` + Metadata *string `json:"metadata,omitempty"` + Members *string `json:"members,omitempty"` + OrganizationAdministration *string `json:"organization_administration,omitempty"` + OrganizationHooks *string `json:"organization_hooks,omitempty"` + OrganizationPlan *string `json:"organization_plan,omitempty"` + OrganizationPreReceiveHooks *string `json:"organization_pre_receive_hooks,omitempty"` + OrganizationProjects *string `json:"organization_projects,omitempty"` + OrganizationUserBlocking *string `json:"organization_user_blocking,omitempty"` + Pages *string `json:"pages,omitempty"` + PullRequests *string `json:"pull_requests,omitempty"` + RepositoryHooks *string `json:"repository_hooks,omitempty"` + RepositoryProjects *string `json:"repository_projects,omitempty"` + RepositoryPreReceiveHooks *string `json:"repository_pre_receive_hooks,omitempty"` + SingleFile *string `json:"single_file,omitempty"` + Statuses *string `json:"statuses,omitempty"` + TeamDiscussions *string `json:"team_discussions,omitempty"` + VulnerabilityAlerts *string `json:"vulnerability_alerts,omitempty"` } // Installation represents a GitHub Apps installation. diff --git a/github/apps_test.go b/github/apps_test.go index 8456662b7d1..286b403c11c 100644 --- a/github/apps_test.go +++ b/github/apps_test.go @@ -73,10 +73,29 @@ func TestAppsService_ListInstallations(t *testing.T) { "target_id":1, "target_type": "Organization", "permissions": { - "metadata": "read", + "administration": "read", + "checks": "read", "contents": "read", + "content_references": "read", + "deployments": "read", "issues": "write", - "single_file": "write" + "metadata": "read", + "members": "read", + "organization_administration": "write", + "organization_hooks": "write", + "organization_plan": "read", + "organization_pre_receive_hooks": "write", + "organization_projects": "read", + "organization_user_blocking": "write", + "pages": "read", + "pull_requests": "write", + "repository_hooks": "write", + "repository_projects": "read", + "repository_pre_receive_hooks": "read", + "single_file": "write", + "statuses": "write", + "team_discussions": "read", + "vulnerability_alerts": "read" }, "events": [ "push", @@ -104,10 +123,29 @@ func TestAppsService_ListInstallations(t *testing.T) { SingleFileName: String("config.yml"), RepositorySelection: String("selected"), Permissions: &InstallationPermissions{ - Metadata: String("read"), - Contents: String("read"), - Issues: String("write"), - SingleFile: String("write")}, + Administration: String("read"), + Checks: String("read"), + Contents: String("read"), + ContentReferences: String("read"), + Deployments: String("read"), + Issues: String("write"), + Metadata: String("read"), + Members: String("read"), + OrganizationAdministration: String("write"), + OrganizationHooks: String("write"), + OrganizationPlan: String("read"), + OrganizationPreReceiveHooks: String("write"), + OrganizationProjects: String("read"), + OrganizationUserBlocking: String("write"), + Pages: String("read"), + PullRequests: String("write"), + RepositoryHooks: String("write"), + RepositoryProjects: String("read"), + RepositoryPreReceiveHooks: String("read"), + SingleFile: String("write"), + Statuses: String("write"), + TeamDiscussions: String("read"), + VulnerabilityAlerts: String("read")}, Events: []string{"push", "pull_request"}, CreatedAt: &date, UpdatedAt: &date, diff --git a/github/github-accessors.go b/github/github-accessors.go index 9129909aee0..20c82978150 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -3604,6 +3604,30 @@ func (i *InstallationEvent) GetSender() *User { return i.Sender } +// GetAdministration returns the Administration field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetAdministration() string { + if i == nil || i.Administration == nil { + return "" + } + return *i.Administration +} + +// GetChecks returns the Checks field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetChecks() string { + if i == nil || i.Checks == nil { + return "" + } + return *i.Checks +} + +// GetContentReferences returns the ContentReferences field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetContentReferences() string { + if i == nil || i.ContentReferences == nil { + return "" + } + return *i.ContentReferences +} + // GetContents returns the Contents field if it's non-nil, zero value otherwise. func (i *InstallationPermissions) GetContents() string { if i == nil || i.Contents == nil { @@ -3612,6 +3636,14 @@ func (i *InstallationPermissions) GetContents() string { return *i.Contents } +// GetDeployments returns the Deployments field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetDeployments() string { + if i == nil || i.Deployments == nil { + return "" + } + return *i.Deployments +} + // GetIssues returns the Issues field if it's non-nil, zero value otherwise. func (i *InstallationPermissions) GetIssues() string { if i == nil || i.Issues == nil { @@ -3620,6 +3652,14 @@ func (i *InstallationPermissions) GetIssues() string { return *i.Issues } +// GetMembers returns the Members field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetMembers() string { + if i == nil || i.Members == nil { + return "" + } + return *i.Members +} + // GetMetadata returns the Metadata field if it's non-nil, zero value otherwise. func (i *InstallationPermissions) GetMetadata() string { if i == nil || i.Metadata == nil { @@ -3628,6 +3668,94 @@ func (i *InstallationPermissions) GetMetadata() string { return *i.Metadata } +// GetOrganizationAdministration returns the OrganizationAdministration field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationAdministration() string { + if i == nil || i.OrganizationAdministration == nil { + return "" + } + return *i.OrganizationAdministration +} + +// GetOrganizationHooks returns the OrganizationHooks field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationHooks() string { + if i == nil || i.OrganizationHooks == nil { + return "" + } + return *i.OrganizationHooks +} + +// GetOrganizationPlan returns the OrganizationPlan field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationPlan() string { + if i == nil || i.OrganizationPlan == nil { + return "" + } + return *i.OrganizationPlan +} + +// GetOrganizationPreReceiveHooks returns the OrganizationPreReceiveHooks field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationPreReceiveHooks() string { + if i == nil || i.OrganizationPreReceiveHooks == nil { + return "" + } + return *i.OrganizationPreReceiveHooks +} + +// GetOrganizationProjects returns the OrganizationProjects field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationProjects() string { + if i == nil || i.OrganizationProjects == nil { + return "" + } + return *i.OrganizationProjects +} + +// GetOrganizationUserBlocking returns the OrganizationUserBlocking field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetOrganizationUserBlocking() string { + if i == nil || i.OrganizationUserBlocking == nil { + return "" + } + return *i.OrganizationUserBlocking +} + +// GetPages returns the Pages field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetPages() string { + if i == nil || i.Pages == nil { + return "" + } + return *i.Pages +} + +// GetPullRequests returns the PullRequests field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetPullRequests() string { + if i == nil || i.PullRequests == nil { + return "" + } + return *i.PullRequests +} + +// GetRepositoryHooks returns the RepositoryHooks field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetRepositoryHooks() string { + if i == nil || i.RepositoryHooks == nil { + return "" + } + return *i.RepositoryHooks +} + +// GetRepositoryPreReceiveHooks returns the RepositoryPreReceiveHooks field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetRepositoryPreReceiveHooks() string { + if i == nil || i.RepositoryPreReceiveHooks == nil { + return "" + } + return *i.RepositoryPreReceiveHooks +} + +// GetRepositoryProjects returns the RepositoryProjects field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetRepositoryProjects() string { + if i == nil || i.RepositoryProjects == nil { + return "" + } + return *i.RepositoryProjects +} + // GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise. func (i *InstallationPermissions) GetSingleFile() string { if i == nil || i.SingleFile == nil { @@ -3636,6 +3764,30 @@ func (i *InstallationPermissions) GetSingleFile() string { return *i.SingleFile } +// GetStatuses returns the Statuses field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetStatuses() string { + if i == nil || i.Statuses == nil { + return "" + } + return *i.Statuses +} + +// GetTeamDiscussions returns the TeamDiscussions field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetTeamDiscussions() string { + if i == nil || i.TeamDiscussions == nil { + return "" + } + return *i.TeamDiscussions +} + +// GetVulnerabilityAlerts returns the VulnerabilityAlerts field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetVulnerabilityAlerts() string { + if i == nil || i.VulnerabilityAlerts == nil { + return "" + } + return *i.VulnerabilityAlerts +} + // GetAction returns the Action field if it's non-nil, zero value otherwise. func (i *InstallationRepositoriesEvent) GetAction() string { if i == nil || i.Action == nil { From a8d3df256cd539b723943af1740a67447c601179 Mon Sep 17 00:00:00 2001 From: Mark Tareshawty Date: Fri, 31 May 2019 11:27:08 -0400 Subject: [PATCH 2/3] Add links to show source of App permission names --- github/apps.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/github/apps.go b/github/apps.go index 4ba4c404b01..c7402657114 100644 --- a/github/apps.go +++ b/github/apps.go @@ -37,6 +37,10 @@ type InstallationToken struct { } // InstallationPermissions lists the repository and organization permissions for an installation. +// +// Permission names taken from: +// https://developer.github.com/v3/apps/permissions/ +// https://developer.github.com/enterprise/v3/apps/permissions/ type InstallationPermissions struct { Administration *string `json:"administration,omitempty"` Checks *string `json:"checks,omitempty"` From d2e7e74eb90b7fcaae13058dc28fb789f9839f69 Mon Sep 17 00:00:00 2001 From: Mark Tareshawty Date: Tue, 18 Jun 2019 16:58:04 -0700 Subject: [PATCH 3/3] Add packages permission --- github/apps.go | 1 + github/apps_test.go | 2 ++ github/github-accessors.go | 8 ++++++++ 3 files changed, 11 insertions(+) diff --git a/github/apps.go b/github/apps.go index c7402657114..47a39aa4e12 100644 --- a/github/apps.go +++ b/github/apps.go @@ -56,6 +56,7 @@ type InstallationPermissions struct { OrganizationPreReceiveHooks *string `json:"organization_pre_receive_hooks,omitempty"` OrganizationProjects *string `json:"organization_projects,omitempty"` OrganizationUserBlocking *string `json:"organization_user_blocking,omitempty"` + Packages *string `json:"packages,omitempty"` Pages *string `json:"pages,omitempty"` PullRequests *string `json:"pull_requests,omitempty"` RepositoryHooks *string `json:"repository_hooks,omitempty"` diff --git a/github/apps_test.go b/github/apps_test.go index 286b403c11c..8d5b27d38ce 100644 --- a/github/apps_test.go +++ b/github/apps_test.go @@ -87,6 +87,7 @@ func TestAppsService_ListInstallations(t *testing.T) { "organization_pre_receive_hooks": "write", "organization_projects": "read", "organization_user_blocking": "write", + "packages": "read", "pages": "read", "pull_requests": "write", "repository_hooks": "write", @@ -137,6 +138,7 @@ func TestAppsService_ListInstallations(t *testing.T) { OrganizationPreReceiveHooks: String("write"), OrganizationProjects: String("read"), OrganizationUserBlocking: String("write"), + Packages: String("read"), Pages: String("read"), PullRequests: String("write"), RepositoryHooks: String("write"), diff --git a/github/github-accessors.go b/github/github-accessors.go index 20c82978150..8f6988fa746 100644 --- a/github/github-accessors.go +++ b/github/github-accessors.go @@ -3716,6 +3716,14 @@ func (i *InstallationPermissions) GetOrganizationUserBlocking() string { return *i.OrganizationUserBlocking } +// GetPackages returns the Packages field if it's non-nil, zero value otherwise. +func (i *InstallationPermissions) GetPackages() string { + if i == nil || i.Packages == nil { + return "" + } + return *i.Packages +} + // GetPages returns the Pages field if it's non-nil, zero value otherwise. func (i *InstallationPermissions) GetPages() string { if i == nil || i.Pages == nil {