github.com/google/go-github/v69@v69.2.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  }