github.com/google/go-github/v71@v71.0.0/github/orgs_codesecurity_configurations.go (about) 1 // Copyright 2024 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "fmt" 11 "net/http" 12 ) 13 14 // DependencyGraphAutosubmitActionOptions represents the options for the DependencyGraphAutosubmitAction. 15 type DependencyGraphAutosubmitActionOptions struct { 16 LabeledRunners *bool `json:"labeled_runners,omitempty"` 17 } 18 19 // CodeSecurityConfiguration represents a code security configuration. 20 type CodeSecurityConfiguration struct { 21 ID *int64 `json:"id,omitempty"` 22 TargetType *string `json:"target_type,omitempty"` 23 Name *string `json:"name"` 24 Description *string `json:"description,omitempty"` 25 AdvancedSecurity *string `json:"advanced_security,omitempty"` 26 DependencyGraph *string `json:"dependency_graph,omitempty"` 27 DependencyGraphAutosubmitAction *string `json:"dependency_graph_autosubmit_action,omitempty"` 28 DependencyGraphAutosubmitActionOptions *DependencyGraphAutosubmitActionOptions `json:"dependency_graph_autosubmit_action_options,omitempty"` 29 DependabotAlerts *string `json:"dependabot_alerts,omitempty"` 30 DependabotSecurityUpdates *string `json:"dependabot_security_updates,omitempty"` 31 CodeScanningDefaultSetup *string `json:"code_scanning_default_setup,omitempty"` 32 SecretScanning *string `json:"secret_scanning,omitempty"` 33 SecretScanningPushProtection *string `json:"secret_scanning_push_protection,omitempty"` 34 SecretScanningValidityChecks *string `json:"secret_scanning_validity_checks,omitempty"` 35 SecretScanningNonProviderPatterns *string `json:"secret_scanning_non_provider_patterns,omitempty"` 36 PrivateVulnerabilityReporting *string `json:"private_vulnerability_reporting,omitempty"` 37 Enforcement *string `json:"enforcement,omitempty"` 38 URL *string `json:"url,omitempty"` 39 HTMLURL *string `json:"html_url,omitempty"` 40 CreatedAt *Timestamp `json:"created_at,omitempty"` 41 UpdatedAt *Timestamp `json:"updated_at,omitempty"` 42 } 43 44 // CodeSecurityConfigurationWithDefaultForNewRepos represents a code security configuration with default for new repos param. 45 type CodeSecurityConfigurationWithDefaultForNewRepos struct { 46 Configuration *CodeSecurityConfiguration `json:"configuration"` 47 DefaultForNewRepos *string `json:"default_for_new_repos"` 48 } 49 50 // RepositoryCodeSecurityConfiguration represents a code security configuration for a repository. 51 type RepositoryCodeSecurityConfiguration struct { 52 State *string `json:"state,omitempty"` 53 Configuration *CodeSecurityConfiguration `json:"configuration,omitempty"` 54 } 55 56 // GetCodeSecurityConfigurations gets code security configurations for an organization. 57 // 58 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#get-code-security-configurations-for-an-organization 59 // 60 //meta:operation GET /orgs/{org}/code-security/configurations 61 func (s *OrganizationsService) GetCodeSecurityConfigurations(ctx context.Context, org string) ([]*CodeSecurityConfiguration, *Response, error) { 62 u := fmt.Sprintf("orgs/%v/code-security/configurations", org) 63 64 req, err := s.client.NewRequest("GET", u, nil) 65 if err != nil { 66 return nil, nil, err 67 } 68 69 var configurations []*CodeSecurityConfiguration 70 resp, err := s.client.Do(ctx, req, &configurations) 71 if err != nil { 72 return nil, resp, err 73 } 74 return configurations, resp, nil 75 } 76 77 // CreateCodeSecurityConfiguration creates a code security configuration for an organization. 78 // 79 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#create-a-code-security-configuration 80 // 81 //meta:operation POST /orgs/{org}/code-security/configurations 82 func (s *OrganizationsService) CreateCodeSecurityConfiguration(ctx context.Context, org string, c *CodeSecurityConfiguration) (*CodeSecurityConfiguration, *Response, error) { 83 u := fmt.Sprintf("orgs/%v/code-security/configurations", org) 84 85 req, err := s.client.NewRequest("POST", u, c) 86 if err != nil { 87 return nil, nil, err 88 } 89 90 var configuration *CodeSecurityConfiguration 91 resp, err := s.client.Do(ctx, req, &configuration) 92 if err != nil { 93 return nil, resp, err 94 } 95 return configuration, resp, nil 96 } 97 98 // GetDefaultCodeSecurityConfigurations gets default code security configurations for an organization. 99 // 100 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#get-default-code-security-configurations 101 // 102 //meta:operation GET /orgs/{org}/code-security/configurations/defaults 103 func (s *OrganizationsService) GetDefaultCodeSecurityConfigurations(ctx context.Context, org string) ([]*CodeSecurityConfiguration, *Response, error) { 104 u := fmt.Sprintf("orgs/%v/code-security/configurations/defaults", org) 105 106 req, err := s.client.NewRequest("GET", u, nil) 107 if err != nil { 108 return nil, nil, err 109 } 110 111 var configurations []*CodeSecurityConfiguration 112 resp, err := s.client.Do(ctx, req, &configurations) 113 if err != nil { 114 return nil, resp, err 115 } 116 return configurations, resp, nil 117 } 118 119 // DetachCodeSecurityConfigurationsFromRepositories detaches code security configuration from an organization's repositories. 120 // 121 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#detach-configurations-from-repositories 122 // 123 //meta:operation DELETE /orgs/{org}/code-security/configurations/detach 124 func (s *OrganizationsService) DetachCodeSecurityConfigurationsFromRepositories(ctx context.Context, org string, repoIDs []int64) (*Response, error) { 125 u := fmt.Sprintf("orgs/%v/code-security/configurations/detach", org) 126 type selectedRepoIDs struct { 127 SelectedIDs []int64 `json:"selected_repository_ids"` 128 } 129 req, err := s.client.NewRequest("DELETE", u, selectedRepoIDs{SelectedIDs: repoIDs}) 130 if err != nil { 131 return nil, err 132 } 133 resp, err := s.client.Do(ctx, req, nil) 134 if err != nil { 135 return resp, err 136 } 137 return resp, nil 138 } 139 140 // GetCodeSecurityConfiguration gets a code security configuration available in an organization. 141 // 142 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#get-a-code-security-configuration 143 // 144 //meta:operation GET /orgs/{org}/code-security/configurations/{configuration_id} 145 func (s *OrganizationsService) GetCodeSecurityConfiguration(ctx context.Context, org string, id int64) (*CodeSecurityConfiguration, *Response, error) { 146 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v", org, id) 147 148 req, err := s.client.NewRequest("GET", u, nil) 149 if err != nil { 150 return nil, nil, err 151 } 152 153 var configuration *CodeSecurityConfiguration 154 resp, err := s.client.Do(ctx, req, &configuration) 155 if err != nil { 156 return nil, resp, err 157 } 158 return configuration, resp, nil 159 } 160 161 // UpdateCodeSecurityConfiguration updates a code security configuration for an organization. 162 // 163 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#update-a-code-security-configuration 164 // 165 //meta:operation PATCH /orgs/{org}/code-security/configurations/{configuration_id} 166 func (s *OrganizationsService) UpdateCodeSecurityConfiguration(ctx context.Context, org string, id int64, c *CodeSecurityConfiguration) (*CodeSecurityConfiguration, *Response, error) { 167 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v", org, id) 168 169 req, err := s.client.NewRequest("PATCH", u, c) 170 if err != nil { 171 return nil, nil, err 172 } 173 174 var configuration *CodeSecurityConfiguration 175 resp, err := s.client.Do(ctx, req, &configuration) 176 if err != nil { 177 return nil, resp, err 178 } 179 return configuration, resp, nil 180 } 181 182 // DeleteCodeSecurityConfiguration deletes a code security configuration for an organization. 183 // 184 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#delete-a-code-security-configuration 185 // 186 //meta:operation DELETE /orgs/{org}/code-security/configurations/{configuration_id} 187 func (s *OrganizationsService) DeleteCodeSecurityConfiguration(ctx context.Context, org string, id int64) (*Response, error) { 188 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v", org, id) 189 190 req, err := s.client.NewRequest("DELETE", u, nil) 191 if err != nil { 192 return nil, err 193 } 194 resp, err := s.client.Do(ctx, req, nil) 195 if err != nil { 196 return resp, err 197 } 198 return resp, nil 199 } 200 201 // AttachCodeSecurityConfigurationsToRepositories attaches code security configurations to repositories for an organization. 202 // 203 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#attach-a-configuration-to-repositories 204 // 205 //meta:operation POST /orgs/{org}/code-security/configurations/{configuration_id}/attach 206 func (s *OrganizationsService) AttachCodeSecurityConfigurationsToRepositories(ctx context.Context, org string, id int64, scope string, repoIDs []int64) (*Response, error) { 207 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v/attach", org, id) 208 type selectedRepoIDs struct { 209 Scope string `json:"scope"` 210 SelectedIDs []int64 `json:"selected_repository_ids,omitempty"` 211 } 212 req, err := s.client.NewRequest("POST", u, selectedRepoIDs{Scope: scope, SelectedIDs: repoIDs}) 213 if err != nil { 214 return nil, err 215 } 216 resp, err := s.client.Do(ctx, req, nil) 217 if err != nil && resp.StatusCode != http.StatusAccepted { // StatusAccepted(202) is the expected status code as job is queued for processing 218 return resp, err 219 } 220 return resp, nil 221 } 222 223 // SetDefaultCodeSecurityConfiguration sets a code security configuration as the default for an organization. 224 // 225 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#set-a-code-security-configuration-as-a-default-for-an-organization 226 // 227 //meta:operation PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults 228 func (s *OrganizationsService) SetDefaultCodeSecurityConfiguration(ctx context.Context, org string, id int64, newReposParam string) (*CodeSecurityConfigurationWithDefaultForNewRepos, *Response, error) { 229 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v/defaults", org, id) 230 type configParam struct { 231 DefaultForNewRepos string `json:"default_for_new_repos"` 232 } 233 req, err := s.client.NewRequest("PUT", u, configParam{DefaultForNewRepos: newReposParam}) 234 if err != nil { 235 return nil, nil, err 236 } 237 var c *CodeSecurityConfigurationWithDefaultForNewRepos 238 resp, err := s.client.Do(ctx, req, &c) 239 if err != nil { 240 return nil, resp, err 241 } 242 return c, resp, nil 243 } 244 245 // GetRepositoriesForCodeSecurityConfiguration gets repositories associated with a code security configuration. 246 // 247 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#get-repositories-associated-with-a-code-security-configuration 248 // 249 //meta:operation GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories 250 func (s *OrganizationsService) GetRepositoriesForCodeSecurityConfiguration(ctx context.Context, org string, id int64) ([]*Repository, *Response, error) { 251 u := fmt.Sprintf("orgs/%v/code-security/configurations/%v/repositories", org, id) 252 253 req, err := s.client.NewRequest("GET", u, nil) 254 if err != nil { 255 return nil, nil, err 256 } 257 258 var repositories []*Repository 259 resp, err := s.client.Do(ctx, req, &repositories) 260 if err != nil { 261 return nil, resp, err 262 } 263 return repositories, resp, nil 264 } 265 266 // GetCodeSecurityConfigurationForRepository gets code security configuration that manages a repository's code security settings. 267 // 268 // GitHub API docs: https://docs.github.com/rest/code-security/configurations#get-the-code-security-configuration-associated-with-a-repository 269 // 270 //meta:operation GET /repos/{owner}/{repo}/code-security-configuration 271 func (s *OrganizationsService) GetCodeSecurityConfigurationForRepository(ctx context.Context, org, repo string) (*RepositoryCodeSecurityConfiguration, *Response, error) { 272 u := fmt.Sprintf("repos/%v/%v/code-security-configuration", org, repo) 273 274 req, err := s.client.NewRequest("GET", u, nil) 275 if err != nil { 276 return nil, nil, err 277 } 278 var repoConfig *RepositoryCodeSecurityConfiguration 279 resp, err := s.client.Do(ctx, req, &repoConfig) 280 if err != nil { 281 return nil, resp, err 282 } 283 return repoConfig, resp, nil 284 }